minerender 2.1.0-alpha.4 → 2.1.0-alpha.6

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, MOUSE, TOUCH, WebGLRenderer, EventDispatcher, Raycaster, Intersection, CanvasTexture, BufferGeometry as BufferGeometry$1, InterleavedBufferAttribute, TrianglesDrawModes, Line, Points } from 'three';
2
+ import { Vector3, PixelFormat, BoxGeometry, Material, Mesh, Euler, Vector2, BufferAttribute, Float32BufferAttribute, BufferGeometry, Object3D, Box3, InstancedMesh, PerspectiveCamera, OrthographicCamera, Matrix4, Scene, Object3DEventMap, Texture, Camera, MOUSE, TOUCH, WebGLRenderer, EventDispatcher, Raycaster, Intersection, CanvasTexture, 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';
@@ -7,8 +7,6 @@ import { Buffer as Buffer$1 } from 'buffer';
7
7
  import { NBT } from 'prismarine-nbt';
8
8
  import { ZipReader } from '@zip.js/zip.js';
9
9
  import { AsyncLoadingCache, SimpleCache } from '@inventivetalent/loading-cache';
10
- import { BufferGeometry } from 'three/src/core/BufferGeometry';
11
- import { Material as Material$1 } from 'three/src/materials/Material';
12
10
  import Stats from 'stats.js';
13
11
  import { EffectComposer } from 'postprocessing';
14
12
  import { LocalStorage } from 'node-persist';
@@ -63,7 +61,7 @@ declare function createCanvas(width: number, height: number): CompatCanvas;
63
61
  declare abstract class PersistentCache<B = unknown> {
64
62
  readonly backing: B;
65
63
  /** Bump to invalidate every persisted entry. */
66
- static readonly VERSION = 1;
64
+ static readonly VERSION = 2;
67
65
  static open(name: string): PersistentCache;
68
66
  protected constructor(backing: B);
69
67
  abstract get<T>(key: string): Promise<T>;
@@ -432,7 +430,7 @@ interface Transformable {
432
430
  declare function isTransformable(obj: any): obj is Transformable;
433
431
 
434
432
  declare const changeEvent: {
435
- type: string;
433
+ type: "change";
436
434
  };
437
435
  type Maybe<T> = T | undefined;
438
436
  declare function md5(str: string): string;
@@ -624,6 +622,7 @@ declare class AssetLoader {
624
622
  static addSource(key: string, source: AssetSource, override?: boolean): void;
625
623
  static removeSource(key: string): Maybe<AssetSource>;
626
624
  static getAll<T extends MinecraftAsset>(key: AssetKey, parser: AssetParser | string): Promise<T[]>;
625
+ /** Returns the first defined result in source-priority order, without merging assets. */
627
626
  static get<T extends MinecraftAsset>(key: AssetKey, parser: AssetParser | string): Promise<Maybe<T>>;
628
627
  }
629
628
 
@@ -887,7 +886,9 @@ interface MineRenderSceneOptions {
887
886
  }
888
887
  declare function isMineRenderScene(obj: any): obj is MineRenderScene;
889
888
 
890
- declare class SceneObject extends Object3D implements Disposable, Instanceable, Transformable {
889
+ declare class SceneObject extends Object3D<Object3DEventMap & {
890
+ change: {};
891
+ }> implements Disposable, Instanceable, Transformable {
891
892
  readonly isSceneObject: true;
892
893
  static readonly DEFAULT_OPTIONS: SceneObjectOptions;
893
894
  readonly options: SceneObjectOptions;
@@ -913,9 +914,9 @@ declare class SceneObject extends Object3D implements Disposable, Instanceable,
913
914
  */
914
915
  toggleGroupVisibility(name: string, visible?: boolean): boolean;
915
916
  protected addOrReplaceMesh(mesh: Mesh, parent: Object3D, name?: string): void;
916
- protected createAndAddMesh(name?: string, group?: Object3D, geometry?: BufferGeometry, material?: Material$1 | Material$1[], offsetAxis?: Axis, offset?: number): Mesh;
917
- protected createMesh(name?: string, geometry?: BufferGeometry, material?: Material$1 | Material$1[], offsetAxis?: Axis, offset?: number): Mesh;
918
- protected createInstancedMesh(name: Maybe<string>, geometry: BufferGeometry, material: Material$1 | Material$1[], count: number): InstancedMesh;
917
+ protected createAndAddMesh(name?: string, group?: Object3D, geometry?: BufferGeometry, material?: Material | Material[], offsetAxis?: Axis, offset?: number): Mesh;
918
+ protected createMesh(name?: string, geometry?: BufferGeometry, material?: Material | Material[], offsetAxis?: Axis, offset?: number): Mesh;
919
+ protected createInstancedMesh(name: Maybe<string>, geometry: BufferGeometry, material: Material | Material[], count: number): InstancedMesh;
919
920
  /**
920
921
  * Get a mesh by its name
921
922
  */
@@ -1320,7 +1321,7 @@ declare class Renderer implements Disposable {
1320
1321
  protected _scene: MineRenderScene;
1321
1322
  protected _camera: Camera;
1322
1323
  protected _renderer: WebGLRenderer;
1323
- protected _composer: EffectComposer;
1324
+ protected _composer?: EffectComposer;
1324
1325
  protected _controls?: OrbitControls;
1325
1326
  protected _stats?: Stats;
1326
1327
  protected _dirty: boolean;
@@ -1336,7 +1337,7 @@ declare class Renderer implements Disposable {
1336
1337
  protected createScene(): MineRenderScene;
1337
1338
  protected createCamera(): Camera;
1338
1339
  protected createRenderer(): WebGLRenderer;
1339
- protected createComposer(): EffectComposer;
1340
+ protected createComposer(): Maybe<EffectComposer>;
1340
1341
  protected createControls(): Maybe<OrbitControls>;
1341
1342
  init(): void;
1342
1343
  get element(): Maybe<HTMLElement>;
@@ -1345,7 +1346,7 @@ declare class Renderer implements Disposable {
1345
1346
  * Redraws when the dispatcher emits the selected event. Registering the same pair twice has no effect.
1346
1347
  * The renderer removes its listener on disposal; the caller retains ownership of the dispatcher.
1347
1348
  */
1348
- registerEventDispatcher(dispatcher: EventDispatcher, changeEvent?: string): void;
1349
+ registerEventDispatcher(dispatcher: EventDispatcher<any>, changeEvent?: string): void;
1349
1350
  resize(width: number, height: number): void;
1350
1351
  get dirty(): boolean;
1351
1352
  set dirty(dirty: boolean);
@@ -1365,7 +1366,7 @@ declare class Renderer implements Disposable {
1365
1366
  get scene(): MineRenderScene;
1366
1367
  get camera(): Camera;
1367
1368
  get renderer(): WebGLRenderer;
1368
- get composer(): EffectComposer;
1369
+ get composer(): Maybe<EffectComposer>;
1369
1370
  /** Renderer-owned controls, or undefined when disabled at construction or after disposal. */
1370
1371
  get controls(): Maybe<OrbitControls>;
1371
1372
  }
@@ -1422,7 +1423,7 @@ declare class SceneInspector {
1422
1423
  private selectedObject?;
1423
1424
  constructor(renderer: Renderer);
1424
1425
  protected init(): void;
1425
- findMeshChildren(from: Object3D, out?: Mesh[]): Mesh<three.BufferGeometry, three.Material | three.Material[]>[];
1426
+ findMeshChildren(from: Object3D, out?: Mesh[]): Mesh<three.BufferGeometry<three.NormalBufferAttributes>, three.Material | three.Material[], three.Object3DEventMap>[];
1426
1427
  onClick(event: any): void;
1427
1428
  appendTo(el: HTMLElement): void;
1428
1429
  protected handleRaycasterObjects(intersections: Intersection[]): void;
@@ -1524,12 +1525,12 @@ declare class Textures {
1524
1525
  static getImage(key: TextureKey): Texture;
1525
1526
  }
1526
1527
 
1527
- declare function mergeBufferGeometries(geometries: BufferGeometry$1[], useGroups?: boolean): BufferGeometry$1;
1528
+ declare function mergeBufferGeometries(geometries: BufferGeometry[], useGroups?: boolean): BufferGeometry;
1528
1529
  declare function mergeBufferAttributes(attributes: BufferAttribute[]): BufferAttribute;
1529
1530
  declare function interleaveAttributes(attributes: BufferAttribute[]): InterleavedBufferAttribute;
1530
- declare function estimateBytesUsed(geometry: BufferGeometry$1): number;
1531
- declare function mergeVertices(geometry: BufferGeometry$1, tolerance?: number): BufferGeometry$1;
1532
- declare function toTrianglesDrawMode(geometry: BufferGeometry$1, drawMode: TrianglesDrawModes): BufferGeometry$1;
1531
+ declare function estimateBytesUsed(geometry: BufferGeometry): number;
1532
+ declare function mergeVertices(geometry: BufferGeometry, tolerance?: number): BufferGeometry;
1533
+ declare function toTrianglesDrawMode(geometry: BufferGeometry, drawMode: TrianglesDrawModes): BufferGeometry;
1533
1534
  declare function computeMorphedAttributes(object: Mesh | Line | Points): object;
1534
1535
 
1535
1536
  interface BlockInfo {
@@ -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, MOUSE, TOUCH, WebGLRenderer, EventDispatcher, Raycaster, Intersection, CanvasTexture, BufferGeometry as BufferGeometry$1, InterleavedBufferAttribute, TrianglesDrawModes, Line, Points } from 'three';
2
+ import { Vector3, PixelFormat, BoxGeometry, Material, Mesh, Euler, Vector2, BufferAttribute, Float32BufferAttribute, BufferGeometry, Object3D, Box3, InstancedMesh, PerspectiveCamera, OrthographicCamera, Matrix4, Scene, Object3DEventMap, Texture, Camera, MOUSE, TOUCH, WebGLRenderer, EventDispatcher, Raycaster, Intersection, CanvasTexture, 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';
@@ -7,8 +7,6 @@ import { Buffer as Buffer$1 } from 'buffer';
7
7
  import { NBT } from 'prismarine-nbt';
8
8
  import { ZipReader } from '@zip.js/zip.js';
9
9
  import { AsyncLoadingCache, SimpleCache } from '@inventivetalent/loading-cache';
10
- import { BufferGeometry } from 'three/src/core/BufferGeometry';
11
- import { Material as Material$1 } from 'three/src/materials/Material';
12
10
  import Stats from 'stats.js';
13
11
  import { EffectComposer } from 'postprocessing';
14
12
  import { LocalStorage } from 'node-persist';
@@ -63,7 +61,7 @@ declare function createCanvas(width: number, height: number): CompatCanvas;
63
61
  declare abstract class PersistentCache<B = unknown> {
64
62
  readonly backing: B;
65
63
  /** Bump to invalidate every persisted entry. */
66
- static readonly VERSION = 1;
64
+ static readonly VERSION = 2;
67
65
  static open(name: string): PersistentCache;
68
66
  protected constructor(backing: B);
69
67
  abstract get<T>(key: string): Promise<T>;
@@ -432,7 +430,7 @@ interface Transformable {
432
430
  declare function isTransformable(obj: any): obj is Transformable;
433
431
 
434
432
  declare const changeEvent: {
435
- type: string;
433
+ type: "change";
436
434
  };
437
435
  type Maybe<T> = T | undefined;
438
436
  declare function md5(str: string): string;
@@ -624,6 +622,7 @@ declare class AssetLoader {
624
622
  static addSource(key: string, source: AssetSource, override?: boolean): void;
625
623
  static removeSource(key: string): Maybe<AssetSource>;
626
624
  static getAll<T extends MinecraftAsset>(key: AssetKey, parser: AssetParser | string): Promise<T[]>;
625
+ /** Returns the first defined result in source-priority order, without merging assets. */
627
626
  static get<T extends MinecraftAsset>(key: AssetKey, parser: AssetParser | string): Promise<Maybe<T>>;
628
627
  }
629
628
 
@@ -887,7 +886,9 @@ interface MineRenderSceneOptions {
887
886
  }
888
887
  declare function isMineRenderScene(obj: any): obj is MineRenderScene;
889
888
 
890
- declare class SceneObject extends Object3D implements Disposable, Instanceable, Transformable {
889
+ declare class SceneObject extends Object3D<Object3DEventMap & {
890
+ change: {};
891
+ }> implements Disposable, Instanceable, Transformable {
891
892
  readonly isSceneObject: true;
892
893
  static readonly DEFAULT_OPTIONS: SceneObjectOptions;
893
894
  readonly options: SceneObjectOptions;
@@ -913,9 +914,9 @@ declare class SceneObject extends Object3D implements Disposable, Instanceable,
913
914
  */
914
915
  toggleGroupVisibility(name: string, visible?: boolean): boolean;
915
916
  protected addOrReplaceMesh(mesh: Mesh, parent: Object3D, name?: string): void;
916
- protected createAndAddMesh(name?: string, group?: Object3D, geometry?: BufferGeometry, material?: Material$1 | Material$1[], offsetAxis?: Axis, offset?: number): Mesh;
917
- protected createMesh(name?: string, geometry?: BufferGeometry, material?: Material$1 | Material$1[], offsetAxis?: Axis, offset?: number): Mesh;
918
- protected createInstancedMesh(name: Maybe<string>, geometry: BufferGeometry, material: Material$1 | Material$1[], count: number): InstancedMesh;
917
+ protected createAndAddMesh(name?: string, group?: Object3D, geometry?: BufferGeometry, material?: Material | Material[], offsetAxis?: Axis, offset?: number): Mesh;
918
+ protected createMesh(name?: string, geometry?: BufferGeometry, material?: Material | Material[], offsetAxis?: Axis, offset?: number): Mesh;
919
+ protected createInstancedMesh(name: Maybe<string>, geometry: BufferGeometry, material: Material | Material[], count: number): InstancedMesh;
919
920
  /**
920
921
  * Get a mesh by its name
921
922
  */
@@ -1320,7 +1321,7 @@ declare class Renderer implements Disposable {
1320
1321
  protected _scene: MineRenderScene;
1321
1322
  protected _camera: Camera;
1322
1323
  protected _renderer: WebGLRenderer;
1323
- protected _composer: EffectComposer;
1324
+ protected _composer?: EffectComposer;
1324
1325
  protected _controls?: OrbitControls;
1325
1326
  protected _stats?: Stats;
1326
1327
  protected _dirty: boolean;
@@ -1336,7 +1337,7 @@ declare class Renderer implements Disposable {
1336
1337
  protected createScene(): MineRenderScene;
1337
1338
  protected createCamera(): Camera;
1338
1339
  protected createRenderer(): WebGLRenderer;
1339
- protected createComposer(): EffectComposer;
1340
+ protected createComposer(): Maybe<EffectComposer>;
1340
1341
  protected createControls(): Maybe<OrbitControls>;
1341
1342
  init(): void;
1342
1343
  get element(): Maybe<HTMLElement>;
@@ -1345,7 +1346,7 @@ declare class Renderer implements Disposable {
1345
1346
  * Redraws when the dispatcher emits the selected event. Registering the same pair twice has no effect.
1346
1347
  * The renderer removes its listener on disposal; the caller retains ownership of the dispatcher.
1347
1348
  */
1348
- registerEventDispatcher(dispatcher: EventDispatcher, changeEvent?: string): void;
1349
+ registerEventDispatcher(dispatcher: EventDispatcher<any>, changeEvent?: string): void;
1349
1350
  resize(width: number, height: number): void;
1350
1351
  get dirty(): boolean;
1351
1352
  set dirty(dirty: boolean);
@@ -1365,7 +1366,7 @@ declare class Renderer implements Disposable {
1365
1366
  get scene(): MineRenderScene;
1366
1367
  get camera(): Camera;
1367
1368
  get renderer(): WebGLRenderer;
1368
- get composer(): EffectComposer;
1369
+ get composer(): Maybe<EffectComposer>;
1369
1370
  /** Renderer-owned controls, or undefined when disabled at construction or after disposal. */
1370
1371
  get controls(): Maybe<OrbitControls>;
1371
1372
  }
@@ -1422,7 +1423,7 @@ declare class SceneInspector {
1422
1423
  private selectedObject?;
1423
1424
  constructor(renderer: Renderer);
1424
1425
  protected init(): void;
1425
- findMeshChildren(from: Object3D, out?: Mesh[]): Mesh<three.BufferGeometry, three.Material | three.Material[]>[];
1426
+ findMeshChildren(from: Object3D, out?: Mesh[]): Mesh<three.BufferGeometry<three.NormalBufferAttributes>, three.Material | three.Material[], three.Object3DEventMap>[];
1426
1427
  onClick(event: any): void;
1427
1428
  appendTo(el: HTMLElement): void;
1428
1429
  protected handleRaycasterObjects(intersections: Intersection[]): void;
@@ -1524,12 +1525,12 @@ declare class Textures {
1524
1525
  static getImage(key: TextureKey): Texture;
1525
1526
  }
1526
1527
 
1527
- declare function mergeBufferGeometries(geometries: BufferGeometry$1[], useGroups?: boolean): BufferGeometry$1;
1528
+ declare function mergeBufferGeometries(geometries: BufferGeometry[], useGroups?: boolean): BufferGeometry;
1528
1529
  declare function mergeBufferAttributes(attributes: BufferAttribute[]): BufferAttribute;
1529
1530
  declare function interleaveAttributes(attributes: BufferAttribute[]): InterleavedBufferAttribute;
1530
- declare function estimateBytesUsed(geometry: BufferGeometry$1): number;
1531
- declare function mergeVertices(geometry: BufferGeometry$1, tolerance?: number): BufferGeometry$1;
1532
- declare function toTrianglesDrawMode(geometry: BufferGeometry$1, drawMode: TrianglesDrawModes): BufferGeometry$1;
1531
+ declare function estimateBytesUsed(geometry: BufferGeometry): number;
1532
+ declare function mergeVertices(geometry: BufferGeometry, tolerance?: number): BufferGeometry;
1533
+ declare function toTrianglesDrawMode(geometry: BufferGeometry, drawMode: TrianglesDrawModes): BufferGeometry;
1533
1534
  declare function computeMorphedAttributes(object: Mesh | Line | Points): object;
1534
1535
 
1535
1536
  interface BlockInfo {
@@ -90,7 +90,7 @@ var require_dist = __commonJS({
90
90
  return false;
91
91
  };
92
92
  var PROTECTED_KEYS = ["__proto__"];
93
- var merge11 = function() {
93
+ var merge10 = function() {
94
94
  var objects = [];
95
95
  for (var _i = 0; _i < arguments.length; _i++) {
96
96
  objects[_i] = arguments[_i];
@@ -101,9 +101,9 @@ var require_dist = __commonJS({
101
101
  return;
102
102
  }
103
103
  if (Array.isArray(result[key]) && Array.isArray(current[key])) {
104
- result[key] = merge11.options.mergeArrays ? Array.from(new Set(result[key].concat(current[key]))) : current[key];
104
+ result[key] = merge10.options.mergeArrays ? Array.from(new Set(result[key].concat(current[key]))) : current[key];
105
105
  } else if (isObject(result[key]) && isObject(current[key])) {
106
- result[key] = merge11(result[key], current[key]);
106
+ result[key] = merge10(result[key], current[key]);
107
107
  } else {
108
108
  result[key] = current[key];
109
109
  }
@@ -114,18 +114,18 @@ var require_dist = __commonJS({
114
114
  var defaultOptions = {
115
115
  mergeArrays: true
116
116
  };
117
- merge11.options = defaultOptions;
118
- merge11.withOptions = function(options) {
117
+ merge10.options = defaultOptions;
118
+ merge10.withOptions = function(options) {
119
119
  var objects = [];
120
120
  for (var _i = 1; _i < arguments.length; _i++) {
121
121
  objects[_i - 1] = arguments[_i];
122
122
  }
123
- merge11.options = __assign({ mergeArrays: true }, options);
124
- var result = merge11.apply(void 0, __spreadArray([], __read(objects), false));
125
- merge11.options = defaultOptions;
123
+ merge10.options = __assign({ mergeArrays: true }, options);
124
+ var result = merge10.apply(void 0, __spreadArray([], __read(objects), false));
125
+ merge10.options = defaultOptions;
126
126
  return result;
127
127
  };
128
- exports2.default = merge11;
128
+ exports2.default = merge10;
129
129
  }
130
130
  });
131
131
 
@@ -319,7 +319,7 @@ var _PersistentCache = class _PersistentCache {
319
319
  }
320
320
  };
321
321
  /** Bump to invalidate every persisted entry. */
322
- _PersistentCache.VERSION = 1;
322
+ _PersistentCache.VERSION = 2;
323
323
  var PersistentCache = _PersistentCache;
324
324
 
325
325
  // src/env/node/NodeCache.ts
@@ -594,6 +594,7 @@ var import_three5 = require("three");
594
594
 
595
595
  // src/texture/TextureLoader.ts
596
596
  var import_three4 = require("three");
597
+ var THREE = __toESM(require("three"));
597
598
 
598
599
  // src/canvas/CanvasCompat.ts
599
600
  function createImage(width, height) {
@@ -982,6 +983,7 @@ var TextureLoader = class {
982
983
  }
983
984
  static loadInBackground(src, format = import_three4.RGBAFormat, rotation = 0) {
984
985
  const texture = this.createTexture();
986
+ texture.colorSpace = THREE.SRGBColorSpace;
985
987
  const image = ImageLoader.loadElement(src);
986
988
  image.onload = function() {
987
989
  texture.needsUpdate = true;
@@ -993,6 +995,7 @@ var TextureLoader = class {
993
995
  }
994
996
  static load(src, format = import_three4.RGBAFormat, rotation = 0) {
995
997
  const texture = new import_three4.Texture();
998
+ texture.colorSpace = THREE.SRGBColorSpace;
996
999
  ImageLoader.getData(src).then((image) => {
997
1000
  texture.needsUpdate = true;
998
1001
  texture.image = image;
@@ -1004,11 +1007,11 @@ var TextureLoader = class {
1004
1007
  };
1005
1008
 
1006
1009
  // src/texture/Textures.ts
1007
- var THREE = __toESM(require("three"));
1010
+ var THREE2 = __toESM(require("three"));
1008
1011
  var Textures = class _Textures {
1009
1012
  static initTextureProps(texture) {
1010
- texture.magFilter = THREE.NearestFilter;
1011
- texture.minFilter = THREE.NearestFilter;
1013
+ texture.magFilter = THREE2.NearestFilter;
1014
+ texture.minFilter = THREE2.NearestFilter;
1012
1015
  texture.anisotropy = 0;
1013
1016
  return texture;
1014
1017
  }
@@ -1019,7 +1022,9 @@ var Textures = class _Textures {
1019
1022
  return new import_three5.Texture();
1020
1023
  }
1021
1024
  static createCanvasTexture(canvas) {
1022
- return this.initTextureProps(new import_three5.CanvasTexture(canvas));
1025
+ const texture = new import_three5.CanvasTexture(canvas);
1026
+ texture.colorSpace = THREE2.SRGBColorSpace;
1027
+ return this.initTextureProps(texture);
1023
1028
  }
1024
1029
  static getImage(key) {
1025
1030
  const keyStr = serializeTextureKey(key);
@@ -1136,6 +1141,9 @@ var _Materials = class _Materials {
1136
1141
  gl_FragColor = vec4(lift + color.rgb * light2, 1.0);
1137
1142
 
1138
1143
  }
1144
+
1145
+ #include <tonemapping_fragment>
1146
+ #include <colorspace_fragment>
1139
1147
  }
1140
1148
  `;
1141
1149
  try {
@@ -1766,7 +1774,6 @@ var ArchiveAssetSource = class _ArchiveAssetSource extends AssetSource {
1766
1774
  };
1767
1775
 
1768
1776
  // src/assets/AssetLoader.ts
1769
- var import_ts_deepmerge3 = __toESM(require_dist());
1770
1777
  var p5 = prefix("AssetLoader");
1771
1778
  var _AssetLoader = class _AssetLoader {
1772
1779
  static addSource(key, source, override = true) {
@@ -1790,7 +1797,6 @@ var _AssetLoader = class _AssetLoader {
1790
1797
  return void 0;
1791
1798
  }
1792
1799
  static async getAll(key, parser) {
1793
- console.log(this._SOURCES);
1794
1800
  let promises = [];
1795
1801
  for (const source of this._SOURCES) {
1796
1802
  promises.push(source.source.get(key, parser));
@@ -1799,24 +1805,16 @@ var _AssetLoader = class _AssetLoader {
1799
1805
  return results.filter((r) => r != void 0);
1800
1806
  });
1801
1807
  }
1808
+ /** Returns the first defined result in source-priority order, without merging assets. */
1802
1809
  static async get(key, parser) {
1803
- console.log(this._SOURCES);
1804
- let promises = [];
1805
- for (const source of this._SOURCES) {
1806
- promises.push(source.source.get(key, parser));
1807
- }
1808
- return Promise.all(promises).then((results) => {
1809
- const fallback = results[results.length - 1];
1810
- for (const result of results) {
1811
- if (result) {
1812
- if (fallback) {
1813
- return (0, import_ts_deepmerge3.default)({}, fallback, result);
1814
- }
1815
- return result;
1816
- }
1810
+ const sources = [...this._SOURCES];
1811
+ for (const source of sources) {
1812
+ const result = await source.source.get(key, parser);
1813
+ if (result !== void 0) {
1814
+ return result;
1817
1815
  }
1818
- return void 0;
1819
- });
1816
+ }
1817
+ return void 0;
1820
1818
  }
1821
1819
  };
1822
1820
  _AssetLoader.ROOT = DEFAULT_ROOT;
@@ -2640,7 +2638,7 @@ var MineRenderError = class _MineRenderError extends Error {
2640
2638
  };
2641
2639
 
2642
2640
  // src/renderer/SceneObject.ts
2643
- var import_ts_deepmerge4 = __toESM(require_dist());
2641
+ var import_ts_deepmerge3 = __toESM(require_dist());
2644
2642
  var p7 = prefix("SceneObject");
2645
2643
  var _SceneObject = class _SceneObject extends import_three9.Object3D {
2646
2644
  constructor(options) {
@@ -2649,7 +2647,7 @@ var _SceneObject = class _SceneObject extends import_three9.Object3D {
2649
2647
  this.materialCallbacks = {};
2650
2648
  this._isInstanced = false;
2651
2649
  this._instanceCounter = 0;
2652
- this.options = (0, import_ts_deepmerge4.default)({}, _SceneObject.DEFAULT_OPTIONS, options ?? {});
2650
+ this.options = (0, import_ts_deepmerge3.default)({}, _SceneObject.DEFAULT_OPTIONS, options ?? {});
2653
2651
  console.log("SceneObject options", this.options);
2654
2652
  }
2655
2653
  set scene(scene) {
@@ -2999,7 +2997,7 @@ var _SceneObject = class _SceneObject extends import_three9.Object3D {
2999
2997
  }
3000
2998
  //</editor-fold>
3001
2999
  };
3002
- _SceneObject.DEFAULT_OPTIONS = (0, import_ts_deepmerge4.default)({}, {
3000
+ _SceneObject.DEFAULT_OPTIONS = (0, import_ts_deepmerge3.default)({}, {
3003
3001
  instanceMeshes: true,
3004
3002
  maxInstanceCount: 50,
3005
3003
  mergeMeshes: true,
@@ -3011,16 +3009,16 @@ function isSceneObject(obj) {
3011
3009
  }
3012
3010
 
3013
3011
  // src/entity/scene/EntityObject.ts
3014
- var import_ts_deepmerge5 = __toESM(require_dist());
3012
+ var import_ts_deepmerge4 = __toESM(require_dist());
3015
3013
  var import_three11 = require("three");
3016
- var THREE2 = __toESM(require("three"));
3014
+ var THREE3 = __toESM(require("three"));
3017
3015
  var EntityObject = class extends SceneObject {
3018
3016
  constructor(entity, options) {
3019
3017
  super();
3020
3018
  this.entity = entity;
3021
3019
  this.isEntityObject = true;
3022
3020
  this.meshesCreated = false;
3023
- this.options = (0, import_ts_deepmerge5.default)({}, SceneObject.DEFAULT_OPTIONS, options ?? {});
3021
+ this.options = (0, import_ts_deepmerge4.default)({}, SceneObject.DEFAULT_OPTIONS, options ?? {});
3024
3022
  }
3025
3023
  async init() {
3026
3024
  this.createMeshes();
@@ -3058,8 +3056,8 @@ var EntityObject = class extends SceneObject {
3058
3056
  const l = cube.maxZ - cube.minZ;
3059
3057
  const uv = texture.toUvArray(w, h, l);
3060
3058
  const cubeGeo = this._getBoxGeometryForDimensionsAndUv(w, h, l, uv).clone();
3061
- cubeGeo.applyMatrix4(new THREE2.Matrix4().makeTranslation(w / 2, h / 2, l / 2));
3062
- cubeGeo.applyMatrix4(new THREE2.Matrix4().makeTranslation(cube.minX, cube.minY, cube.minZ));
3059
+ cubeGeo.applyMatrix4(new THREE3.Matrix4().makeTranslation(w / 2, h / 2, l / 2));
3060
+ cubeGeo.applyMatrix4(new THREE3.Matrix4().makeTranslation(cube.minX, cube.minY, cube.minZ));
3063
3061
  applyModelPartRotation(part, cubeGeo);
3064
3062
  const mesh = this.createMesh(partName, cubeGeo, mat);
3065
3063
  partAnchor.add(mesh);
@@ -3089,7 +3087,7 @@ var EntityObject = class extends SceneObject {
3089
3087
  }
3090
3088
  }
3091
3089
  };
3092
- EntityObject.DEFAULT_OPTIONS = (0, import_ts_deepmerge5.default)({}, SceneObject.DEFAULT_OPTIONS, {});
3090
+ EntityObject.DEFAULT_OPTIONS = (0, import_ts_deepmerge4.default)({}, SceneObject.DEFAULT_OPTIONS, {});
3093
3091
  function isEntityObject(obj) {
3094
3092
  return obj.isEntityObject;
3095
3093
  }
@@ -4081,7 +4079,7 @@ function computeMorphedAttributes(object) {
4081
4079
  }
4082
4080
 
4083
4081
  // src/model/scene/ModelObject.ts
4084
- var import_ts_deepmerge6 = __toESM(require_dist());
4082
+ var import_ts_deepmerge5 = __toESM(require_dist());
4085
4083
  var p10 = prefix("ModelObject");
4086
4084
  var _ModelObject = class _ModelObject extends SceneObject {
4087
4085
  constructor(originalModel, options) {
@@ -4089,7 +4087,7 @@ var _ModelObject = class _ModelObject extends SceneObject {
4089
4087
  this.originalModel = originalModel;
4090
4088
  this.isModelObject = true;
4091
4089
  this.meshesCreated = false;
4092
- this.options = (0, import_ts_deepmerge6.default)({}, _ModelObject.DEFAULT_OPTIONS, options ?? {});
4090
+ this.options = (0, import_ts_deepmerge5.default)({}, _ModelObject.DEFAULT_OPTIONS, options ?? {});
4093
4091
  console.log("ModelObject options", this.options);
4094
4092
  }
4095
4093
  async init() {
@@ -4189,14 +4187,14 @@ var _ModelObject = class _ModelObject extends SceneObject {
4189
4187
  }
4190
4188
  }
4191
4189
  };
4192
- _ModelObject.DEFAULT_OPTIONS = (0, import_ts_deepmerge6.default)({}, SceneObject.DEFAULT_OPTIONS, {});
4190
+ _ModelObject.DEFAULT_OPTIONS = (0, import_ts_deepmerge5.default)({}, SceneObject.DEFAULT_OPTIONS, {});
4193
4191
  var ModelObject = _ModelObject;
4194
4192
  function isModelObject(obj) {
4195
4193
  return obj.isModelObject;
4196
4194
  }
4197
4195
 
4198
4196
  // src/model/block/scene/BlockObject.ts
4199
- var import_ts_deepmerge7 = __toESM(require_dist());
4197
+ var import_ts_deepmerge6 = __toESM(require_dist());
4200
4198
  var import_three16 = require("three");
4201
4199
  var p11 = prefix("BlockObject");
4202
4200
  var _BlockObject = class _BlockObject extends SceneObject {
@@ -4212,7 +4210,7 @@ var _BlockObject = class _BlockObject extends SceneObject {
4212
4210
  this._instanceModel = [];
4213
4211
  this._variants = [];
4214
4212
  this._models = [];
4215
- this.options = (0, import_ts_deepmerge7.default)({}, _BlockObject.DEFAULT_OPTIONS, options ?? {});
4213
+ this.options = (0, import_ts_deepmerge6.default)({}, _BlockObject.DEFAULT_OPTIONS, options ?? {});
4216
4214
  }
4217
4215
  async init() {
4218
4216
  if (this.options.applyDefaultState) {
@@ -4501,7 +4499,7 @@ var _BlockObject = class _BlockObject extends SceneObject {
4501
4499
  //TODO: should override rotation + scale methods
4502
4500
  //TODO
4503
4501
  };
4504
- _BlockObject.DEFAULT_OPTIONS = (0, import_ts_deepmerge7.default)({}, ModelObject.DEFAULT_OPTIONS, {
4502
+ _BlockObject.DEFAULT_OPTIONS = (0, import_ts_deepmerge6.default)({}, ModelObject.DEFAULT_OPTIONS, {
4505
4503
  applyDefaultState: true
4506
4504
  });
4507
4505
  var BlockObject = _BlockObject;
@@ -4552,7 +4550,7 @@ var StructureParser = class {
4552
4550
 
4553
4551
  // src/renderer/MineRenderScene.ts
4554
4552
  var import_three17 = require("three");
4555
- var import_ts_deepmerge9 = __toESM(require_dist());
4553
+ var import_ts_deepmerge8 = __toESM(require_dist());
4556
4554
 
4557
4555
  // src/skin/SkinPart.ts
4558
4556
  var SkinPart = /* @__PURE__ */ ((SkinPart2) => {
@@ -5283,7 +5281,7 @@ var slimSkinGeometries = {
5283
5281
  };
5284
5282
 
5285
5283
  // src/skin/scene/SkinObject.ts
5286
- var import_ts_deepmerge8 = __toESM(require_dist());
5284
+ var import_ts_deepmerge7 = __toESM(require_dist());
5287
5285
  var SkinObject = class extends SceneObject {
5288
5286
  constructor(options) {
5289
5287
  super();
@@ -5291,7 +5289,7 @@ var SkinObject = class extends SceneObject {
5291
5289
  this.legacy = false;
5292
5290
  this.skinTextureWidth = 64;
5293
5291
  this.skinTextureHeight = 64;
5294
- this.options = (0, import_ts_deepmerge8.default)({}, SceneObject.DEFAULT_OPTIONS, options ?? {});
5292
+ this.options = (0, import_ts_deepmerge7.default)({}, SceneObject.DEFAULT_OPTIONS, options ?? {});
5295
5293
  }
5296
5294
  async init() {
5297
5295
  this.createMeshes();
@@ -5409,7 +5407,7 @@ var _MineRenderScene = class _MineRenderScene extends import_three17.Scene {
5409
5407
  this.dirty = true;
5410
5408
  }
5411
5409
  };
5412
- this.options = (0, import_ts_deepmerge9.default)({}, _MineRenderScene.DEFAULT_OPTIONS, options ?? {});
5410
+ this.options = (0, import_ts_deepmerge8.default)({}, _MineRenderScene.DEFAULT_OPTIONS, options ?? {});
5413
5411
  }
5414
5412
  add(...objects) {
5415
5413
  for (const object of objects) {
@@ -5506,7 +5504,7 @@ var _MineRenderScene = class _MineRenderScene extends import_three17.Scene {
5506
5504
  return this.addSceneObject(entity, () => new EntityObject(entity, options), options, parent);
5507
5505
  }
5508
5506
  };
5509
- _MineRenderScene.DEFAULT_OPTIONS = (0, import_ts_deepmerge9.default)({}, {});
5507
+ _MineRenderScene.DEFAULT_OPTIONS = (0, import_ts_deepmerge8.default)({}, {});
5510
5508
  var MineRenderScene = _MineRenderScene;
5511
5509
  function isMineRenderScene(obj) {
5512
5510
  return obj.isMineRenderScene;
@@ -5514,7 +5512,7 @@ function isMineRenderScene(obj) {
5514
5512
 
5515
5513
  // src/renderer/Renderer.ts
5516
5514
  var import_three19 = require("three");
5517
- var import_ts_deepmerge10 = __toESM(require_dist());
5515
+ var import_ts_deepmerge9 = __toESM(require_dist());
5518
5516
  var import_stats = __toESM(require("stats.js"));
5519
5517
  var import_postprocessing = require("postprocessing");
5520
5518
 
@@ -6171,7 +6169,7 @@ var _Renderer = class _Renderer {
6171
6169
  this._changeListener = () => {
6172
6170
  this._dirty = true;
6173
6171
  };
6174
- this.options = (0, import_ts_deepmerge10.default)({}, _Renderer.DEFAULT_OPTIONS, options ?? {});
6172
+ this.options = (0, import_ts_deepmerge9.default)({}, _Renderer.DEFAULT_OPTIONS, options ?? {});
6175
6173
  this._animationLoop = this.animate.bind(this);
6176
6174
  this._frameInterval = this.options.render.fpsLimit > 0 ? 1e3 / this.options.render.fpsLimit : void 0;
6177
6175
  this._scene = this.createScene();
@@ -6220,13 +6218,13 @@ var _Renderer = class _Renderer {
6220
6218
  renderer.setClearColor(0, 0);
6221
6219
  renderer.shadowMap.enabled = true;
6222
6220
  renderer.shadowMap.type = import_three19.PCFSoftShadowMap;
6223
- renderer.outputEncoding = import_three19.LinearEncoding;
6221
+ renderer.outputColorSpace = import_three19.SRGBColorSpace;
6224
6222
  renderer.setSize(this.viewWidth, this.viewHeight);
6225
6223
  return renderer;
6226
6224
  }
6227
6225
  createComposer() {
6226
+ if (!this.options.composer.enabled) return void 0;
6228
6227
  const composer = new import_postprocessing.EffectComposer(this.renderer);
6229
- if (!this.options.composer.enabled) return composer;
6230
6228
  composer.setSize(this.viewWidth, this.viewHeight);
6231
6229
  composer.addPass(new import_postprocessing.RenderPass(this.scene, this.camera));
6232
6230
  return composer;
@@ -6324,6 +6322,7 @@ var _Renderer = class _Renderer {
6324
6322
  dispatcher.addEventListener(changeEvent2, this._changeListener);
6325
6323
  }
6326
6324
  resize(width, height) {
6325
+ var _a;
6327
6326
  if (this._disposed) return;
6328
6327
  if (isPerspectiveCamera(this.camera)) {
6329
6328
  this.camera.aspect = width / height;
@@ -6336,7 +6335,7 @@ var _Renderer = class _Renderer {
6336
6335
  this.camera.updateProjectionMatrix();
6337
6336
  }
6338
6337
  this.renderer.setSize(width, height);
6339
- this.composer.setSize(width, height);
6338
+ (_a = this.composer) == null ? void 0 : _a.setSize(width, height);
6340
6339
  this._dirty = true;
6341
6340
  }
6342
6341
  //<editor-fold desc="RENDER">
@@ -6363,7 +6362,7 @@ var _Renderer = class _Renderer {
6363
6362
  * controls must be managed by their owners.
6364
6363
  */
6365
6364
  dispose() {
6366
- var _a;
6365
+ var _a, _b;
6367
6366
  if (this._disposed) return;
6368
6367
  this.stop();
6369
6368
  this._disposed = true;
@@ -6396,7 +6395,7 @@ var _Renderer = class _Renderer {
6396
6395
  }
6397
6396
  }
6398
6397
  this._debugHelpers.length = 0;
6399
- this.composer.dispose();
6398
+ (_b = this.composer) == null ? void 0 : _b.dispose();
6400
6399
  this.renderer.dispose();
6401
6400
  this.renderer.forceContextLoss();
6402
6401
  }
@@ -6417,7 +6416,7 @@ var _Renderer = class _Renderer {
6417
6416
  if (this._stats) {
6418
6417
  this._stats.begin();
6419
6418
  }
6420
- if (this.options.composer.enabled) {
6419
+ if (this.options.composer.enabled && this.composer) {
6421
6420
  this.composer.render();
6422
6421
  } else {
6423
6422
  this.renderer.render(this.scene, this.camera);
@@ -6461,7 +6460,7 @@ var _Renderer = class _Renderer {
6461
6460
  }
6462
6461
  ///
6463
6462
  };
6464
- _Renderer.DEFAULT_OPTIONS = (0, import_ts_deepmerge10.default)({}, {
6463
+ _Renderer.DEFAULT_OPTIONS = (0, import_ts_deepmerge9.default)({}, {
6465
6464
  camera: {
6466
6465
  type: "perspective",
6467
6466
  near: 1,