minerender 2.1.0-alpha.1 → 2.1.0-alpha.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
  import * as three from 'three';
2
- import { Vector3, PixelFormat, BoxGeometry, Material, Mesh, Euler, Vector2, BufferAttribute, Float32BufferAttribute, Object3D, Box3, InstancedMesh, PerspectiveCamera, OrthographicCamera, Matrix4, Scene, Texture, Camera, WebGLRenderer, EventDispatcher, Raycaster, Intersection, CanvasTexture, BufferGeometry as BufferGeometry$1, InterleavedBufferAttribute, TrianglesDrawModes, Line, Points, MOUSE, TOUCH } from 'three';
2
+ import { Vector3, PixelFormat, BoxGeometry, Material, Mesh, Euler, Vector2, BufferAttribute, Float32BufferAttribute, Object3D, Box3, InstancedMesh, PerspectiveCamera, OrthographicCamera, Matrix4, Scene, Texture, Camera, MOUSE, TOUCH, WebGLRenderer, EventDispatcher, Raycaster, Intersection, CanvasTexture, BufferGeometry as BufferGeometry$1, InterleavedBufferAttribute, TrianglesDrawModes, Line, Points } from 'three';
3
3
  import * as nodeCanvas from 'canvas';
4
4
  import { ImageData as ImageData$1, CanvasRenderingContext2D } from 'canvas';
5
5
  import { AxiosResponse, AxiosRequestConfig } from 'axios';
@@ -870,9 +870,12 @@ declare class MineRenderScene extends Scene {
870
870
  readonly stats: SceneStats;
871
871
  protected readonly instanceManager: InstanceManager;
872
872
  dirty: boolean;
873
+ private readonly observedObjects;
874
+ private readonly onObjectChange;
873
875
  constructor(options?: DeepPartial<MineRenderSceneOptions>);
874
- add(...object: any[]): this;
875
- remove(...object: any[]): this;
876
+ add(...objects: Object3D[]): this;
877
+ remove(...objects: Object3D[]): this;
878
+ private updateObjectRegistration;
876
879
  initAndAdd(...object: SceneObject[]): Promise<this>;
877
880
  addSceneObject<A extends BasicMinecraftAsset, T extends SceneObject, O extends SceneObjectOptions>(asset: A, objectSupplier: () => T | Promise<T>, _options?: Partial<O>, parent?: Object3D): Promise<T | InstanceReference<T>>;
878
881
  addModel(model: Model, options?: Partial<ModelObjectOptions>, parent?: Object3D): Promise<ModelObject | InstanceReference<ModelObject>>;
@@ -1233,7 +1236,84 @@ declare class GuiObject extends SceneObject {
1233
1236
  interface GuiObjectOptions extends SceneObjectOptions {
1234
1237
  }
1235
1238
 
1236
- declare class Renderer {
1239
+ declare class OrbitControls {
1240
+ constructor(object: Camera, domElement?: HTMLElement);
1241
+
1242
+ object: Camera;
1243
+ domElement: HTMLElement | HTMLDocument;
1244
+
1245
+ // API
1246
+ enabled: boolean;
1247
+ target: Vector3;
1248
+
1249
+ // deprecated
1250
+ center: Vector3;
1251
+
1252
+ minDistance: number;
1253
+ maxDistance: number;
1254
+
1255
+ minZoom: number;
1256
+ maxZoom: number;
1257
+
1258
+ minPolarAngle: number;
1259
+ maxPolarAngle: number;
1260
+
1261
+ minAzimuthAngle: number;
1262
+ maxAzimuthAngle: number;
1263
+
1264
+ enableDamping: boolean;
1265
+ dampingFactor: number;
1266
+
1267
+ enableZoom: boolean;
1268
+ zoomSpeed: number;
1269
+
1270
+ enableRotate: boolean;
1271
+ rotateSpeed: number;
1272
+
1273
+ enablePan: boolean;
1274
+ panSpeed: number;
1275
+ screenSpacePanning: boolean;
1276
+ keyPanSpeed: number;
1277
+
1278
+ autoRotate: boolean;
1279
+ autoRotateSpeed: number;
1280
+
1281
+ enableKeys: boolean;
1282
+ keys: { LEFT: string; UP: string; RIGHT: string; BOTTOM: string };
1283
+ mouseButtons: { LEFT: MOUSE; MIDDLE: MOUSE; RIGHT: MOUSE };
1284
+ touches: { ONE: TOUCH; TWO: TOUCH };
1285
+
1286
+ update(): boolean;
1287
+
1288
+ listenToKeyEvents(domElement: HTMLElement): void;
1289
+
1290
+ saveState(): void;
1291
+
1292
+ reset(): void;
1293
+
1294
+ dispose(): void;
1295
+
1296
+ getPolarAngle(): number;
1297
+
1298
+ getAzimuthalAngle(): number;
1299
+
1300
+ getDistance(): number;
1301
+
1302
+ // EventDispatcher mixins
1303
+ addEventListener(type: string, listener: (event: any) => void): void;
1304
+
1305
+ hasEventListener(type: string, listener: (event: any) => void): boolean;
1306
+
1307
+ removeEventListener(type: string, listener: (event: any) => void): void;
1308
+
1309
+ dispatchEvent(event: { type: string; target: any }): void;
1310
+ }
1311
+
1312
+ declare class MapControls extends OrbitControls {
1313
+ constructor(object: Camera, domElement?: HTMLElement);
1314
+ }
1315
+
1316
+ declare class Renderer implements Disposable {
1237
1317
  static readonly DEFAULT_OPTIONS: RendererOptions;
1238
1318
  readonly options: RendererOptions;
1239
1319
  protected _element?: HTMLElement;
@@ -1241,23 +1321,29 @@ declare class Renderer {
1241
1321
  protected _camera: Camera;
1242
1322
  protected _renderer: WebGLRenderer;
1243
1323
  protected _composer: EffectComposer;
1324
+ protected _controls?: OrbitControls;
1244
1325
  protected _stats?: Stats;
1245
1326
  protected _dirty: boolean;
1246
1327
  protected _animationLoop: any;
1247
- protected _fpsTimer: any;
1248
- protected _animationTimer?: NodeJS.Timeout;
1249
- protected _animationFrame?: number;
1328
+ protected _frameInterval?: number;
1250
1329
  protected _resizeListener?: () => void;
1330
+ private _nextFrameTime?;
1331
+ private _disposed;
1332
+ private readonly _debugHelpers;
1333
+ private readonly _eventDispatchers;
1334
+ private readonly _changeListener;
1251
1335
  constructor(options?: DeepPartial<RendererOptions>);
1252
1336
  protected createScene(): MineRenderScene;
1253
1337
  protected createCamera(): Camera;
1254
1338
  protected createRenderer(): WebGLRenderer;
1255
1339
  protected createComposer(): EffectComposer;
1340
+ protected createControls(): Maybe<OrbitControls>;
1256
1341
  init(): void;
1257
1342
  get element(): Maybe<HTMLElement>;
1258
1343
  appendTo(element: HTMLElement): void;
1259
1344
  /**
1260
- * Register an EventDispatcher which may update the scene or renderer in order to redraw the scene
1345
+ * Redraws when the dispatcher emits the selected event. Registering the same pair twice has no effect.
1346
+ * The renderer removes its listener on disposal; the caller retains ownership of the dispatcher.
1261
1347
  */
1262
1348
  registerEventDispatcher(dispatcher: EventDispatcher, changeEvent?: string): void;
1263
1349
  resize(width: number, height: number): void;
@@ -1265,6 +1351,12 @@ declare class Renderer {
1265
1351
  set dirty(dirty: boolean);
1266
1352
  start(): void;
1267
1353
  stop(): void;
1354
+ /**
1355
+ * Stops rendering and releases owned resources. Repeated calls have no effect, and a disposed
1356
+ * renderer cannot be restarted. Scene objects are detached; shared assets and caller-owned
1357
+ * controls must be managed by their owners.
1358
+ */
1359
+ dispose(): void;
1268
1360
  private animate;
1269
1361
  toImage(): string;
1270
1362
  protected get attachedToBody(): boolean;
@@ -1274,11 +1366,14 @@ declare class Renderer {
1274
1366
  get camera(): Camera;
1275
1367
  get renderer(): WebGLRenderer;
1276
1368
  get composer(): EffectComposer;
1369
+ /** Renderer-owned controls, or undefined when disabled at construction or after disposal. */
1370
+ get controls(): Maybe<OrbitControls>;
1277
1371
  }
1278
1372
  interface RendererOptions {
1279
1373
  camera: CameraOptions;
1280
1374
  render: RenderOptions;
1281
1375
  composer: ComposerOptions;
1376
+ controls?: ControlsOptions;
1282
1377
  debug: DebugOptions;
1283
1378
  }
1284
1379
  interface CameraOptions {
@@ -1299,6 +1394,7 @@ interface CameraOptions {
1299
1394
  lookingAt: Vector3 | TripleArray;
1300
1395
  }
1301
1396
  interface RenderOptions {
1397
+ /** Maximum draw rate (60 by default); zero or a negative value disables the limit. */
1302
1398
  fpsLimit: number;
1303
1399
  stats: boolean;
1304
1400
  antialias: boolean;
@@ -1309,6 +1405,9 @@ interface RenderOptions {
1309
1405
  interface ComposerOptions {
1310
1406
  enabled: boolean;
1311
1407
  }
1408
+ interface ControlsOptions {
1409
+ enabled: boolean;
1410
+ }
1312
1411
  interface DebugOptions {
1313
1412
  grid: boolean;
1314
1413
  axes: boolean;
@@ -1433,83 +1532,6 @@ declare function mergeVertices(geometry: BufferGeometry$1, tolerance?: number):
1433
1532
  declare function toTrianglesDrawMode(geometry: BufferGeometry$1, drawMode: TrianglesDrawModes): BufferGeometry$1;
1434
1533
  declare function computeMorphedAttributes(object: Mesh | Line | Points): object;
1435
1534
 
1436
- declare class OrbitControls {
1437
- constructor(object: Camera, domElement?: HTMLElement);
1438
-
1439
- object: Camera;
1440
- domElement: HTMLElement | HTMLDocument;
1441
-
1442
- // API
1443
- enabled: boolean;
1444
- target: Vector3;
1445
-
1446
- // deprecated
1447
- center: Vector3;
1448
-
1449
- minDistance: number;
1450
- maxDistance: number;
1451
-
1452
- minZoom: number;
1453
- maxZoom: number;
1454
-
1455
- minPolarAngle: number;
1456
- maxPolarAngle: number;
1457
-
1458
- minAzimuthAngle: number;
1459
- maxAzimuthAngle: number;
1460
-
1461
- enableDamping: boolean;
1462
- dampingFactor: number;
1463
-
1464
- enableZoom: boolean;
1465
- zoomSpeed: number;
1466
-
1467
- enableRotate: boolean;
1468
- rotateSpeed: number;
1469
-
1470
- enablePan: boolean;
1471
- panSpeed: number;
1472
- screenSpacePanning: boolean;
1473
- keyPanSpeed: number;
1474
-
1475
- autoRotate: boolean;
1476
- autoRotateSpeed: number;
1477
-
1478
- enableKeys: boolean;
1479
- keys: { LEFT: string; UP: string; RIGHT: string; BOTTOM: string };
1480
- mouseButtons: { LEFT: MOUSE; MIDDLE: MOUSE; RIGHT: MOUSE };
1481
- touches: { ONE: TOUCH; TWO: TOUCH };
1482
-
1483
- update(): boolean;
1484
-
1485
- listenToKeyEvents(domElement: HTMLElement): void;
1486
-
1487
- saveState(): void;
1488
-
1489
- reset(): void;
1490
-
1491
- dispose(): void;
1492
-
1493
- getPolarAngle(): number;
1494
-
1495
- getAzimuthalAngle(): number;
1496
-
1497
- getDistance(): number;
1498
-
1499
- // EventDispatcher mixins
1500
- addEventListener(type: string, listener: (event: any) => void): void;
1501
-
1502
- hasEventListener(type: string, listener: (event: any) => void): boolean;
1503
-
1504
- removeEventListener(type: string, listener: (event: any) => void): void;
1505
-
1506
- dispatchEvent(event: { type: string; target: any }): void;
1507
- }
1508
-
1509
- declare class MapControls extends OrbitControls {
1510
- constructor(object: Camera, domElement?: HTMLElement);
1511
- }
1512
-
1513
1535
  interface BlockInfo {
1514
1536
  block: Block;
1515
1537
  object: BlockObject;
@@ -1604,4 +1626,4 @@ declare class NodeCache extends PersistentCache<LocalStorage> {
1604
1626
  forEach<T>(callback: (v: T, k: string) => void): Promise<void>;
1605
1627
  }
1606
1628
 
1607
- export { AXES, type AnimationFrame, type AnimationMeta, type AnimatorFunction, ArchiveAssetSource, type ArchiveEntry, type ArchiveProxy, AssetKey, AssetLoader, AssetParser, AssetSource, type AssetType, Assets, Axis, BUILTIN_ENTITY, BUILTIN_GENERATED, BasicAssetKey, type BasicMinecraftAsset, BatchedExecutor, type BedrockBone, type BedrockCube, type BedrockEntityDescription, type BedrockEntityFile, type BedrockGeometry, type BedrockGeometryFile, type Block, BlockEntityModels, type BlockInfo, type BlockModel, type BlockModelTextures, BlockObject, type BlockObjectOptions, type BlockState, type BlockStateMultipart, type BlockStateProperties, type BlockStateProperty, type BlockStatePropertyDefaults, type BlockStatePropertyValue, type BlockStateVariant, type BlockStateVariants, BlockStates, type BoxGeometryKey, BrowserArchiveProxy, CUBE_FACES, type CacheKey, Caching, type CameraOptions, CanvasImage, Chunk, type CompatCanvas, type CompatImage, type ComposerOptions, type Cube, CubeFace, CubeFaceIndex, DEFAULT_ELEMENTS, DEFAULT_NAMESPACE, DEFAULT_ROOT, DEFAULT_UV, DISPLAY_POSITIONS, type DebugOptions, type DeepPartial, DefaultBlockStates, DisplayPosition, type Disposable, type DoubleArray, type ElementFace, type ElementRotation, Entities, type EntityModel, EntityModels, EntityObject, type EntityObjectOptions, Env, type EnvProvider, type ExtractableImageData, type FromTo, Geometries, GuiLight, GuiObject, type GuiObjectOptions, HostedAssetSource, type IModelTextures, ITEM_GENERATED, type ImageInfo, ImageLoader, type ImageSizeInfo, InstanceManager, InstanceReference, type Instanceable, type ItemModel, type ItemModelTextures, type ListAsset, MapControls, type MaterialKey, Materials, type Maybe, type MeshKey, Meshes, MineRenderError, MineRenderScene, type MineRenderSceneOptions, MineRenderWorld, type MinecraftAsset, MinecraftCubeTexture, MinecraftFaceUV, type MinecraftTextureMeta, type Model, type ModelDisplay, type ModelElement, type ModelFaces, ModelGenerator, ModelMerger, ModelObject, type ModelObjectOptions, type ModelPart, ModelTextures, Models, type MultiBlockBlock, type MultiBlockStructure, type MultipartCondition, type NBTAsset, NBTHelper, NodeCache, NodeEnv, OrbitControls, PersistentCache, type QuadArray, type RawImageKey, type RenderOptions, Renderer, type RendererOptions, Requests, type ResponseParser, SKIN_PARTS, SceneInspector, SceneObject, type SceneObjectOptions, SceneStats, SceneStatsDisplay, SchematicParser, type Serializable, type SkinGeometries, SkinObject, type SkinObjectOptions, SkinPart, type SkinTextureCoordinates, Skins, type StructureNBT, StructureParser, type TextureAsset, TextureAtlas, type TextureKey, TextureLoader, Textures, Ticker, type TickerFunction, TintColors, type Transformable, type TripleArray, UVMapper, WrappedImage, addBox3WireframeToObject, addWireframeToMesh, addWireframeToObject, applyElementRotation, applyGenericRotation, applyModelPartRotation, axisToVec3, base64decode, base64encode, captureException, changeEvent, clampRotationDegrees, classicSkinGeometries, classicSkinTextureCoordinates, computeMorphedAttributes, createCanvas, createImage, estimateBytesUsed, interleaveAttributes, isAssetKey, isBasicAssetKey, isBlockObject, isDisposable, isDoubleArray, isEntityObject, isInstanceManager, isInstanceReference, isInstanceable, isInstancedMesh, isMesh, isMineRenderScene, isModelObject, isObject3D, isOrthographicCamera, isPerspectiveCamera, isQuadArray, isSceneObject, isTransformable, isTripleArray, isVector3, md5, mergeBufferAttributes, mergeBufferGeometries, mergeVertices, prefix, registerNodeEnv, serializeBoxGeometryKey, serializeImageKey, serializeMaterialKey, serializeMeshKey, serializeTextureKey, sha1, sha256, sha512, shutdown, sleep, slimSkinGeometries, slimSkinTextureCoordinates, timingEnd, timingStart, toDegrees, toRadians, toTrianglesDrawMode };
1629
+ export { AXES, type AnimationFrame, type AnimationMeta, type AnimatorFunction, ArchiveAssetSource, type ArchiveEntry, type ArchiveProxy, AssetKey, AssetLoader, AssetParser, AssetSource, type AssetType, Assets, Axis, BUILTIN_ENTITY, BUILTIN_GENERATED, BasicAssetKey, type BasicMinecraftAsset, BatchedExecutor, type BedrockBone, type BedrockCube, type BedrockEntityDescription, type BedrockEntityFile, type BedrockGeometry, type BedrockGeometryFile, type Block, BlockEntityModels, type BlockInfo, type BlockModel, type BlockModelTextures, BlockObject, type BlockObjectOptions, type BlockState, type BlockStateMultipart, type BlockStateProperties, type BlockStateProperty, type BlockStatePropertyDefaults, type BlockStatePropertyValue, type BlockStateVariant, type BlockStateVariants, BlockStates, type BoxGeometryKey, BrowserArchiveProxy, CUBE_FACES, type CacheKey, Caching, type CameraOptions, CanvasImage, Chunk, type CompatCanvas, type CompatImage, type ComposerOptions, type ControlsOptions, type Cube, CubeFace, CubeFaceIndex, DEFAULT_ELEMENTS, DEFAULT_NAMESPACE, DEFAULT_ROOT, DEFAULT_UV, DISPLAY_POSITIONS, type DebugOptions, type DeepPartial, DefaultBlockStates, DisplayPosition, type Disposable, type DoubleArray, type ElementFace, type ElementRotation, Entities, type EntityModel, EntityModels, EntityObject, type EntityObjectOptions, Env, type EnvProvider, type ExtractableImageData, type FromTo, Geometries, GuiLight, GuiObject, type GuiObjectOptions, HostedAssetSource, type IModelTextures, ITEM_GENERATED, type ImageInfo, ImageLoader, type ImageSizeInfo, InstanceManager, InstanceReference, type Instanceable, type ItemModel, type ItemModelTextures, type ListAsset, MapControls, type MaterialKey, Materials, type Maybe, type MeshKey, Meshes, MineRenderError, MineRenderScene, type MineRenderSceneOptions, MineRenderWorld, type MinecraftAsset, MinecraftCubeTexture, MinecraftFaceUV, type MinecraftTextureMeta, type Model, type ModelDisplay, type ModelElement, type ModelFaces, ModelGenerator, ModelMerger, ModelObject, type ModelObjectOptions, type ModelPart, ModelTextures, Models, type MultiBlockBlock, type MultiBlockStructure, type MultipartCondition, type NBTAsset, NBTHelper, NodeCache, NodeEnv, OrbitControls, PersistentCache, type QuadArray, type RawImageKey, type RenderOptions, Renderer, type RendererOptions, Requests, type ResponseParser, SKIN_PARTS, SceneInspector, SceneObject, type SceneObjectOptions, SceneStats, SceneStatsDisplay, SchematicParser, type Serializable, type SkinGeometries, SkinObject, type SkinObjectOptions, SkinPart, type SkinTextureCoordinates, Skins, type StructureNBT, StructureParser, type TextureAsset, TextureAtlas, type TextureKey, TextureLoader, Textures, Ticker, type TickerFunction, TintColors, type Transformable, type TripleArray, UVMapper, WrappedImage, addBox3WireframeToObject, addWireframeToMesh, addWireframeToObject, applyElementRotation, applyGenericRotation, applyModelPartRotation, axisToVec3, base64decode, base64encode, captureException, changeEvent, clampRotationDegrees, classicSkinGeometries, classicSkinTextureCoordinates, computeMorphedAttributes, createCanvas, createImage, estimateBytesUsed, interleaveAttributes, isAssetKey, isBasicAssetKey, isBlockObject, isDisposable, isDoubleArray, isEntityObject, isInstanceManager, isInstanceReference, isInstanceable, isInstancedMesh, isMesh, isMineRenderScene, isModelObject, isObject3D, isOrthographicCamera, isPerspectiveCamera, isQuadArray, isSceneObject, isTransformable, isTripleArray, isVector3, md5, mergeBufferAttributes, mergeBufferGeometries, mergeVertices, prefix, registerNodeEnv, serializeBoxGeometryKey, serializeImageKey, serializeMaterialKey, serializeMeshKey, serializeTextureKey, sha1, sha256, sha512, shutdown, sleep, slimSkinGeometries, slimSkinTextureCoordinates, timingEnd, timingStart, toDegrees, toRadians, toTrianglesDrawMode };
@@ -1,5 +1,5 @@
1
1
  import * as three from 'three';
2
- import { Vector3, PixelFormat, BoxGeometry, Material, Mesh, Euler, Vector2, BufferAttribute, Float32BufferAttribute, Object3D, Box3, InstancedMesh, PerspectiveCamera, OrthographicCamera, Matrix4, Scene, Texture, Camera, WebGLRenderer, EventDispatcher, Raycaster, Intersection, CanvasTexture, BufferGeometry as BufferGeometry$1, InterleavedBufferAttribute, TrianglesDrawModes, Line, Points, MOUSE, TOUCH } from 'three';
2
+ import { Vector3, PixelFormat, BoxGeometry, Material, Mesh, Euler, Vector2, BufferAttribute, Float32BufferAttribute, Object3D, Box3, InstancedMesh, PerspectiveCamera, OrthographicCamera, Matrix4, Scene, Texture, Camera, MOUSE, TOUCH, WebGLRenderer, EventDispatcher, Raycaster, Intersection, CanvasTexture, BufferGeometry as BufferGeometry$1, InterleavedBufferAttribute, TrianglesDrawModes, Line, Points } from 'three';
3
3
  import * as nodeCanvas from 'canvas';
4
4
  import { ImageData as ImageData$1, CanvasRenderingContext2D } from 'canvas';
5
5
  import { AxiosResponse, AxiosRequestConfig } from 'axios';
@@ -870,9 +870,12 @@ declare class MineRenderScene extends Scene {
870
870
  readonly stats: SceneStats;
871
871
  protected readonly instanceManager: InstanceManager;
872
872
  dirty: boolean;
873
+ private readonly observedObjects;
874
+ private readonly onObjectChange;
873
875
  constructor(options?: DeepPartial<MineRenderSceneOptions>);
874
- add(...object: any[]): this;
875
- remove(...object: any[]): this;
876
+ add(...objects: Object3D[]): this;
877
+ remove(...objects: Object3D[]): this;
878
+ private updateObjectRegistration;
876
879
  initAndAdd(...object: SceneObject[]): Promise<this>;
877
880
  addSceneObject<A extends BasicMinecraftAsset, T extends SceneObject, O extends SceneObjectOptions>(asset: A, objectSupplier: () => T | Promise<T>, _options?: Partial<O>, parent?: Object3D): Promise<T | InstanceReference<T>>;
878
881
  addModel(model: Model, options?: Partial<ModelObjectOptions>, parent?: Object3D): Promise<ModelObject | InstanceReference<ModelObject>>;
@@ -1233,7 +1236,84 @@ declare class GuiObject extends SceneObject {
1233
1236
  interface GuiObjectOptions extends SceneObjectOptions {
1234
1237
  }
1235
1238
 
1236
- declare class Renderer {
1239
+ declare class OrbitControls {
1240
+ constructor(object: Camera, domElement?: HTMLElement);
1241
+
1242
+ object: Camera;
1243
+ domElement: HTMLElement | HTMLDocument;
1244
+
1245
+ // API
1246
+ enabled: boolean;
1247
+ target: Vector3;
1248
+
1249
+ // deprecated
1250
+ center: Vector3;
1251
+
1252
+ minDistance: number;
1253
+ maxDistance: number;
1254
+
1255
+ minZoom: number;
1256
+ maxZoom: number;
1257
+
1258
+ minPolarAngle: number;
1259
+ maxPolarAngle: number;
1260
+
1261
+ minAzimuthAngle: number;
1262
+ maxAzimuthAngle: number;
1263
+
1264
+ enableDamping: boolean;
1265
+ dampingFactor: number;
1266
+
1267
+ enableZoom: boolean;
1268
+ zoomSpeed: number;
1269
+
1270
+ enableRotate: boolean;
1271
+ rotateSpeed: number;
1272
+
1273
+ enablePan: boolean;
1274
+ panSpeed: number;
1275
+ screenSpacePanning: boolean;
1276
+ keyPanSpeed: number;
1277
+
1278
+ autoRotate: boolean;
1279
+ autoRotateSpeed: number;
1280
+
1281
+ enableKeys: boolean;
1282
+ keys: { LEFT: string; UP: string; RIGHT: string; BOTTOM: string };
1283
+ mouseButtons: { LEFT: MOUSE; MIDDLE: MOUSE; RIGHT: MOUSE };
1284
+ touches: { ONE: TOUCH; TWO: TOUCH };
1285
+
1286
+ update(): boolean;
1287
+
1288
+ listenToKeyEvents(domElement: HTMLElement): void;
1289
+
1290
+ saveState(): void;
1291
+
1292
+ reset(): void;
1293
+
1294
+ dispose(): void;
1295
+
1296
+ getPolarAngle(): number;
1297
+
1298
+ getAzimuthalAngle(): number;
1299
+
1300
+ getDistance(): number;
1301
+
1302
+ // EventDispatcher mixins
1303
+ addEventListener(type: string, listener: (event: any) => void): void;
1304
+
1305
+ hasEventListener(type: string, listener: (event: any) => void): boolean;
1306
+
1307
+ removeEventListener(type: string, listener: (event: any) => void): void;
1308
+
1309
+ dispatchEvent(event: { type: string; target: any }): void;
1310
+ }
1311
+
1312
+ declare class MapControls extends OrbitControls {
1313
+ constructor(object: Camera, domElement?: HTMLElement);
1314
+ }
1315
+
1316
+ declare class Renderer implements Disposable {
1237
1317
  static readonly DEFAULT_OPTIONS: RendererOptions;
1238
1318
  readonly options: RendererOptions;
1239
1319
  protected _element?: HTMLElement;
@@ -1241,23 +1321,29 @@ declare class Renderer {
1241
1321
  protected _camera: Camera;
1242
1322
  protected _renderer: WebGLRenderer;
1243
1323
  protected _composer: EffectComposer;
1324
+ protected _controls?: OrbitControls;
1244
1325
  protected _stats?: Stats;
1245
1326
  protected _dirty: boolean;
1246
1327
  protected _animationLoop: any;
1247
- protected _fpsTimer: any;
1248
- protected _animationTimer?: NodeJS.Timeout;
1249
- protected _animationFrame?: number;
1328
+ protected _frameInterval?: number;
1250
1329
  protected _resizeListener?: () => void;
1330
+ private _nextFrameTime?;
1331
+ private _disposed;
1332
+ private readonly _debugHelpers;
1333
+ private readonly _eventDispatchers;
1334
+ private readonly _changeListener;
1251
1335
  constructor(options?: DeepPartial<RendererOptions>);
1252
1336
  protected createScene(): MineRenderScene;
1253
1337
  protected createCamera(): Camera;
1254
1338
  protected createRenderer(): WebGLRenderer;
1255
1339
  protected createComposer(): EffectComposer;
1340
+ protected createControls(): Maybe<OrbitControls>;
1256
1341
  init(): void;
1257
1342
  get element(): Maybe<HTMLElement>;
1258
1343
  appendTo(element: HTMLElement): void;
1259
1344
  /**
1260
- * Register an EventDispatcher which may update the scene or renderer in order to redraw the scene
1345
+ * Redraws when the dispatcher emits the selected event. Registering the same pair twice has no effect.
1346
+ * The renderer removes its listener on disposal; the caller retains ownership of the dispatcher.
1261
1347
  */
1262
1348
  registerEventDispatcher(dispatcher: EventDispatcher, changeEvent?: string): void;
1263
1349
  resize(width: number, height: number): void;
@@ -1265,6 +1351,12 @@ declare class Renderer {
1265
1351
  set dirty(dirty: boolean);
1266
1352
  start(): void;
1267
1353
  stop(): void;
1354
+ /**
1355
+ * Stops rendering and releases owned resources. Repeated calls have no effect, and a disposed
1356
+ * renderer cannot be restarted. Scene objects are detached; shared assets and caller-owned
1357
+ * controls must be managed by their owners.
1358
+ */
1359
+ dispose(): void;
1268
1360
  private animate;
1269
1361
  toImage(): string;
1270
1362
  protected get attachedToBody(): boolean;
@@ -1274,11 +1366,14 @@ declare class Renderer {
1274
1366
  get camera(): Camera;
1275
1367
  get renderer(): WebGLRenderer;
1276
1368
  get composer(): EffectComposer;
1369
+ /** Renderer-owned controls, or undefined when disabled at construction or after disposal. */
1370
+ get controls(): Maybe<OrbitControls>;
1277
1371
  }
1278
1372
  interface RendererOptions {
1279
1373
  camera: CameraOptions;
1280
1374
  render: RenderOptions;
1281
1375
  composer: ComposerOptions;
1376
+ controls?: ControlsOptions;
1282
1377
  debug: DebugOptions;
1283
1378
  }
1284
1379
  interface CameraOptions {
@@ -1299,6 +1394,7 @@ interface CameraOptions {
1299
1394
  lookingAt: Vector3 | TripleArray;
1300
1395
  }
1301
1396
  interface RenderOptions {
1397
+ /** Maximum draw rate (60 by default); zero or a negative value disables the limit. */
1302
1398
  fpsLimit: number;
1303
1399
  stats: boolean;
1304
1400
  antialias: boolean;
@@ -1309,6 +1405,9 @@ interface RenderOptions {
1309
1405
  interface ComposerOptions {
1310
1406
  enabled: boolean;
1311
1407
  }
1408
+ interface ControlsOptions {
1409
+ enabled: boolean;
1410
+ }
1312
1411
  interface DebugOptions {
1313
1412
  grid: boolean;
1314
1413
  axes: boolean;
@@ -1433,83 +1532,6 @@ declare function mergeVertices(geometry: BufferGeometry$1, tolerance?: number):
1433
1532
  declare function toTrianglesDrawMode(geometry: BufferGeometry$1, drawMode: TrianglesDrawModes): BufferGeometry$1;
1434
1533
  declare function computeMorphedAttributes(object: Mesh | Line | Points): object;
1435
1534
 
1436
- declare class OrbitControls {
1437
- constructor(object: Camera, domElement?: HTMLElement);
1438
-
1439
- object: Camera;
1440
- domElement: HTMLElement | HTMLDocument;
1441
-
1442
- // API
1443
- enabled: boolean;
1444
- target: Vector3;
1445
-
1446
- // deprecated
1447
- center: Vector3;
1448
-
1449
- minDistance: number;
1450
- maxDistance: number;
1451
-
1452
- minZoom: number;
1453
- maxZoom: number;
1454
-
1455
- minPolarAngle: number;
1456
- maxPolarAngle: number;
1457
-
1458
- minAzimuthAngle: number;
1459
- maxAzimuthAngle: number;
1460
-
1461
- enableDamping: boolean;
1462
- dampingFactor: number;
1463
-
1464
- enableZoom: boolean;
1465
- zoomSpeed: number;
1466
-
1467
- enableRotate: boolean;
1468
- rotateSpeed: number;
1469
-
1470
- enablePan: boolean;
1471
- panSpeed: number;
1472
- screenSpacePanning: boolean;
1473
- keyPanSpeed: number;
1474
-
1475
- autoRotate: boolean;
1476
- autoRotateSpeed: number;
1477
-
1478
- enableKeys: boolean;
1479
- keys: { LEFT: string; UP: string; RIGHT: string; BOTTOM: string };
1480
- mouseButtons: { LEFT: MOUSE; MIDDLE: MOUSE; RIGHT: MOUSE };
1481
- touches: { ONE: TOUCH; TWO: TOUCH };
1482
-
1483
- update(): boolean;
1484
-
1485
- listenToKeyEvents(domElement: HTMLElement): void;
1486
-
1487
- saveState(): void;
1488
-
1489
- reset(): void;
1490
-
1491
- dispose(): void;
1492
-
1493
- getPolarAngle(): number;
1494
-
1495
- getAzimuthalAngle(): number;
1496
-
1497
- getDistance(): number;
1498
-
1499
- // EventDispatcher mixins
1500
- addEventListener(type: string, listener: (event: any) => void): void;
1501
-
1502
- hasEventListener(type: string, listener: (event: any) => void): boolean;
1503
-
1504
- removeEventListener(type: string, listener: (event: any) => void): void;
1505
-
1506
- dispatchEvent(event: { type: string; target: any }): void;
1507
- }
1508
-
1509
- declare class MapControls extends OrbitControls {
1510
- constructor(object: Camera, domElement?: HTMLElement);
1511
- }
1512
-
1513
1535
  interface BlockInfo {
1514
1536
  block: Block;
1515
1537
  object: BlockObject;
@@ -1604,4 +1626,4 @@ declare class NodeCache extends PersistentCache<LocalStorage> {
1604
1626
  forEach<T>(callback: (v: T, k: string) => void): Promise<void>;
1605
1627
  }
1606
1628
 
1607
- export { AXES, type AnimationFrame, type AnimationMeta, type AnimatorFunction, ArchiveAssetSource, type ArchiveEntry, type ArchiveProxy, AssetKey, AssetLoader, AssetParser, AssetSource, type AssetType, Assets, Axis, BUILTIN_ENTITY, BUILTIN_GENERATED, BasicAssetKey, type BasicMinecraftAsset, BatchedExecutor, type BedrockBone, type BedrockCube, type BedrockEntityDescription, type BedrockEntityFile, type BedrockGeometry, type BedrockGeometryFile, type Block, BlockEntityModels, type BlockInfo, type BlockModel, type BlockModelTextures, BlockObject, type BlockObjectOptions, type BlockState, type BlockStateMultipart, type BlockStateProperties, type BlockStateProperty, type BlockStatePropertyDefaults, type BlockStatePropertyValue, type BlockStateVariant, type BlockStateVariants, BlockStates, type BoxGeometryKey, BrowserArchiveProxy, CUBE_FACES, type CacheKey, Caching, type CameraOptions, CanvasImage, Chunk, type CompatCanvas, type CompatImage, type ComposerOptions, type Cube, CubeFace, CubeFaceIndex, DEFAULT_ELEMENTS, DEFAULT_NAMESPACE, DEFAULT_ROOT, DEFAULT_UV, DISPLAY_POSITIONS, type DebugOptions, type DeepPartial, DefaultBlockStates, DisplayPosition, type Disposable, type DoubleArray, type ElementFace, type ElementRotation, Entities, type EntityModel, EntityModels, EntityObject, type EntityObjectOptions, Env, type EnvProvider, type ExtractableImageData, type FromTo, Geometries, GuiLight, GuiObject, type GuiObjectOptions, HostedAssetSource, type IModelTextures, ITEM_GENERATED, type ImageInfo, ImageLoader, type ImageSizeInfo, InstanceManager, InstanceReference, type Instanceable, type ItemModel, type ItemModelTextures, type ListAsset, MapControls, type MaterialKey, Materials, type Maybe, type MeshKey, Meshes, MineRenderError, MineRenderScene, type MineRenderSceneOptions, MineRenderWorld, type MinecraftAsset, MinecraftCubeTexture, MinecraftFaceUV, type MinecraftTextureMeta, type Model, type ModelDisplay, type ModelElement, type ModelFaces, ModelGenerator, ModelMerger, ModelObject, type ModelObjectOptions, type ModelPart, ModelTextures, Models, type MultiBlockBlock, type MultiBlockStructure, type MultipartCondition, type NBTAsset, NBTHelper, NodeCache, NodeEnv, OrbitControls, PersistentCache, type QuadArray, type RawImageKey, type RenderOptions, Renderer, type RendererOptions, Requests, type ResponseParser, SKIN_PARTS, SceneInspector, SceneObject, type SceneObjectOptions, SceneStats, SceneStatsDisplay, SchematicParser, type Serializable, type SkinGeometries, SkinObject, type SkinObjectOptions, SkinPart, type SkinTextureCoordinates, Skins, type StructureNBT, StructureParser, type TextureAsset, TextureAtlas, type TextureKey, TextureLoader, Textures, Ticker, type TickerFunction, TintColors, type Transformable, type TripleArray, UVMapper, WrappedImage, addBox3WireframeToObject, addWireframeToMesh, addWireframeToObject, applyElementRotation, applyGenericRotation, applyModelPartRotation, axisToVec3, base64decode, base64encode, captureException, changeEvent, clampRotationDegrees, classicSkinGeometries, classicSkinTextureCoordinates, computeMorphedAttributes, createCanvas, createImage, estimateBytesUsed, interleaveAttributes, isAssetKey, isBasicAssetKey, isBlockObject, isDisposable, isDoubleArray, isEntityObject, isInstanceManager, isInstanceReference, isInstanceable, isInstancedMesh, isMesh, isMineRenderScene, isModelObject, isObject3D, isOrthographicCamera, isPerspectiveCamera, isQuadArray, isSceneObject, isTransformable, isTripleArray, isVector3, md5, mergeBufferAttributes, mergeBufferGeometries, mergeVertices, prefix, registerNodeEnv, serializeBoxGeometryKey, serializeImageKey, serializeMaterialKey, serializeMeshKey, serializeTextureKey, sha1, sha256, sha512, shutdown, sleep, slimSkinGeometries, slimSkinTextureCoordinates, timingEnd, timingStart, toDegrees, toRadians, toTrianglesDrawMode };
1629
+ export { AXES, type AnimationFrame, type AnimationMeta, type AnimatorFunction, ArchiveAssetSource, type ArchiveEntry, type ArchiveProxy, AssetKey, AssetLoader, AssetParser, AssetSource, type AssetType, Assets, Axis, BUILTIN_ENTITY, BUILTIN_GENERATED, BasicAssetKey, type BasicMinecraftAsset, BatchedExecutor, type BedrockBone, type BedrockCube, type BedrockEntityDescription, type BedrockEntityFile, type BedrockGeometry, type BedrockGeometryFile, type Block, BlockEntityModels, type BlockInfo, type BlockModel, type BlockModelTextures, BlockObject, type BlockObjectOptions, type BlockState, type BlockStateMultipart, type BlockStateProperties, type BlockStateProperty, type BlockStatePropertyDefaults, type BlockStatePropertyValue, type BlockStateVariant, type BlockStateVariants, BlockStates, type BoxGeometryKey, BrowserArchiveProxy, CUBE_FACES, type CacheKey, Caching, type CameraOptions, CanvasImage, Chunk, type CompatCanvas, type CompatImage, type ComposerOptions, type ControlsOptions, type Cube, CubeFace, CubeFaceIndex, DEFAULT_ELEMENTS, DEFAULT_NAMESPACE, DEFAULT_ROOT, DEFAULT_UV, DISPLAY_POSITIONS, type DebugOptions, type DeepPartial, DefaultBlockStates, DisplayPosition, type Disposable, type DoubleArray, type ElementFace, type ElementRotation, Entities, type EntityModel, EntityModels, EntityObject, type EntityObjectOptions, Env, type EnvProvider, type ExtractableImageData, type FromTo, Geometries, GuiLight, GuiObject, type GuiObjectOptions, HostedAssetSource, type IModelTextures, ITEM_GENERATED, type ImageInfo, ImageLoader, type ImageSizeInfo, InstanceManager, InstanceReference, type Instanceable, type ItemModel, type ItemModelTextures, type ListAsset, MapControls, type MaterialKey, Materials, type Maybe, type MeshKey, Meshes, MineRenderError, MineRenderScene, type MineRenderSceneOptions, MineRenderWorld, type MinecraftAsset, MinecraftCubeTexture, MinecraftFaceUV, type MinecraftTextureMeta, type Model, type ModelDisplay, type ModelElement, type ModelFaces, ModelGenerator, ModelMerger, ModelObject, type ModelObjectOptions, type ModelPart, ModelTextures, Models, type MultiBlockBlock, type MultiBlockStructure, type MultipartCondition, type NBTAsset, NBTHelper, NodeCache, NodeEnv, OrbitControls, PersistentCache, type QuadArray, type RawImageKey, type RenderOptions, Renderer, type RendererOptions, Requests, type ResponseParser, SKIN_PARTS, SceneInspector, SceneObject, type SceneObjectOptions, SceneStats, SceneStatsDisplay, SchematicParser, type Serializable, type SkinGeometries, SkinObject, type SkinObjectOptions, SkinPart, type SkinTextureCoordinates, Skins, type StructureNBT, StructureParser, type TextureAsset, TextureAtlas, type TextureKey, TextureLoader, Textures, Ticker, type TickerFunction, TintColors, type Transformable, type TripleArray, UVMapper, WrappedImage, addBox3WireframeToObject, addWireframeToMesh, addWireframeToObject, applyElementRotation, applyGenericRotation, applyModelPartRotation, axisToVec3, base64decode, base64encode, captureException, changeEvent, clampRotationDegrees, classicSkinGeometries, classicSkinTextureCoordinates, computeMorphedAttributes, createCanvas, createImage, estimateBytesUsed, interleaveAttributes, isAssetKey, isBasicAssetKey, isBlockObject, isDisposable, isDoubleArray, isEntityObject, isInstanceManager, isInstanceReference, isInstanceable, isInstancedMesh, isMesh, isMineRenderScene, isModelObject, isObject3D, isOrthographicCamera, isPerspectiveCamera, isQuadArray, isSceneObject, isTransformable, isTripleArray, isVector3, md5, mergeBufferAttributes, mergeBufferGeometries, mergeVertices, prefix, registerNodeEnv, serializeBoxGeometryKey, serializeImageKey, serializeMaterialKey, serializeMeshKey, serializeTextureKey, sha1, sha256, sha512, shutdown, sleep, slimSkinGeometries, slimSkinTextureCoordinates, timingEnd, timingStart, toDegrees, toRadians, toTrianglesDrawMode };