minerender 2.1.0-alpha.0 → 2.1.0-alpha.10
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.
- package/README.md +1 -1
- package/dist/browser/index.d.mts +187 -137
- package/dist/browser/index.d.ts +187 -137
- package/dist/browser/index.js +1378 -1130
- package/dist/browser/index.js.map +1 -1
- package/dist/browser/index.mjs +1392 -1144
- package/dist/browser/index.mjs.map +1 -1
- package/dist/bundle.js +7531 -8873
- package/dist/bundle.js.map +1 -1
- package/dist/node/index.d.mts +186 -136
- package/dist/node/index.d.ts +186 -136
- package/dist/node/index.js +1598 -1280
- package/dist/node/index.js.map +1 -1
- package/dist/node/index.mjs +1550 -1233
- package/dist/node/index.mjs.map +1 -1
- package/package.json +11 -13
- package/.worktrees/jobqu-review/LICENSE +0 -21
- package/.worktrees/jobqu-review/README.md +0 -176
- package/.worktrees/v2-asset-sources/LICENSE +0 -21
- package/.worktrees/v2-asset-sources/README.md +0 -30
- package/.worktrees/v2-asset-sources/examples/script-tag/README.md +0 -13
- package/.worktrees/v2-asset-sources/examples/vite/README.md +0 -13
- package/.worktrees/v2-asset-sources/packages/minerender/LICENSE +0 -21
- package/.worktrees/v2-asset-sources/packages/minerender/README.md +0 -24
- package/.worktrees/v2-brightness/LICENSE +0 -21
- package/.worktrees/v2-brightness/README.md +0 -30
- package/.worktrees/v2-brightness/examples/script-tag/README.md +0 -13
- package/.worktrees/v2-brightness/examples/vite/README.md +0 -13
- package/.worktrees/v2-brightness/packages/minerender/LICENSE +0 -21
- package/.worktrees/v2-brightness/packages/minerender/README.md +0 -24
- package/.worktrees/v2-cache-recovery/LICENSE +0 -21
- package/.worktrees/v2-cache-recovery/README.md +0 -30
- package/.worktrees/v2-cache-recovery/examples/script-tag/README.md +0 -13
- package/.worktrees/v2-cache-recovery/examples/vite/README.md +0 -13
- package/.worktrees/v2-cache-recovery/packages/minerender/LICENSE +0 -21
- package/.worktrees/v2-cache-recovery/packages/minerender/README.md +0 -24
- package/.worktrees/v2-ci-stack/LICENSE +0 -21
- package/.worktrees/v2-ci-stack/README.md +0 -109
- package/.worktrees/v2-ci-stack/examples/script-tag/README.md +0 -15
- package/.worktrees/v2-ci-stack/examples/vite/README.md +0 -15
- package/.worktrees/v2-ci-stack/packages/minerender/LICENSE +0 -21
- package/.worktrees/v2-ci-stack/packages/minerender/README.md +0 -11
- package/.worktrees/v2-ci-typescript/LICENSE +0 -21
- package/.worktrees/v2-ci-typescript/README.md +0 -11
- package/.worktrees/v2-controls/LICENSE +0 -21
- package/.worktrees/v2-controls/README.md +0 -30
- package/.worktrees/v2-controls/examples/script-tag/README.md +0 -13
- package/.worktrees/v2-controls/examples/vite/README.md +0 -13
- package/.worktrees/v2-controls/packages/minerender/LICENSE +0 -21
- package/.worktrees/v2-controls/packages/minerender/README.md +0 -24
- package/.worktrees/v2-dependencies/LICENSE +0 -21
- package/.worktrees/v2-dependencies/README.md +0 -30
- package/.worktrees/v2-dependencies/examples/script-tag/README.md +0 -13
- package/.worktrees/v2-dependencies/examples/vite/README.md +0 -13
- package/.worktrees/v2-dependencies/packages/minerender/LICENSE +0 -21
- package/.worktrees/v2-dependencies/packages/minerender/README.md +0 -24
- package/.worktrees/v2-frame-limit/LICENSE +0 -21
- package/.worktrees/v2-frame-limit/README.md +0 -30
- package/.worktrees/v2-frame-limit/examples/script-tag/README.md +0 -13
- package/.worktrees/v2-frame-limit/examples/vite/README.md +0 -13
- package/.worktrees/v2-frame-limit/packages/minerender/LICENSE +0 -21
- package/.worktrees/v2-frame-limit/packages/minerender/README.md +0 -24
- package/.worktrees/v2-images/LICENSE +0 -21
- package/.worktrees/v2-images/README.md +0 -30
- package/.worktrees/v2-images/examples/script-tag/README.md +0 -13
- package/.worktrees/v2-images/examples/vite/README.md +0 -13
- package/.worktrees/v2-images/packages/minerender/LICENSE +0 -21
- package/.worktrees/v2-images/packages/minerender/README.md +0 -24
- package/.worktrees/v2-lifecycle/LICENSE +0 -21
- package/.worktrees/v2-lifecycle/README.md +0 -30
- package/.worktrees/v2-lifecycle/examples/script-tag/README.md +0 -13
- package/.worktrees/v2-lifecycle/examples/vite/README.md +0 -13
- package/.worktrees/v2-lifecycle/packages/minerender/LICENSE +0 -21
- package/.worktrees/v2-lifecycle/packages/minerender/README.md +0 -24
- package/.worktrees/v2-main-conflicts/LICENSE +0 -21
- package/.worktrees/v2-main-conflicts/README.md +0 -11
- package/.worktrees/v2-monorepo/LICENSE +0 -21
- package/.worktrees/v2-monorepo/README.md +0 -30
- package/.worktrees/v2-monorepo/examples/script-tag/README.md +0 -13
- package/.worktrees/v2-monorepo/examples/vite/README.md +0 -13
- package/.worktrees/v2-monorepo/packages/minerender/LICENSE +0 -21
- package/.worktrees/v2-monorepo/packages/minerender/README.md +0 -24
- package/.worktrees/v2-requests/LICENSE +0 -21
- package/.worktrees/v2-requests/README.md +0 -30
- package/.worktrees/v2-requests/examples/script-tag/README.md +0 -13
- package/.worktrees/v2-requests/examples/vite/README.md +0 -13
- package/.worktrees/v2-requests/packages/minerender/LICENSE +0 -21
- package/.worktrees/v2-requests/packages/minerender/README.md +0 -26
- package/.worktrees/v2-source-errors/LICENSE +0 -21
- package/.worktrees/v2-source-errors/README.md +0 -30
- package/.worktrees/v2-source-errors/examples/script-tag/README.md +0 -13
- package/.worktrees/v2-source-errors/examples/vite/README.md +0 -13
- package/.worktrees/v2-source-errors/packages/minerender/LICENSE +0 -21
- package/.worktrees/v2-source-errors/packages/minerender/README.md +0 -26
package/dist/browser/index.js
CHANGED
|
@@ -28,18 +28,10 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
28
28
|
mod
|
|
29
29
|
));
|
|
30
30
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
31
|
-
var __decorateClass = (decorators, target, key, kind) => {
|
|
32
|
-
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
|
|
33
|
-
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
34
|
-
if (decorator = decorators[i])
|
|
35
|
-
result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
|
36
|
-
if (kind && result) __defProp(target, key, result);
|
|
37
|
-
return result;
|
|
38
|
-
};
|
|
39
31
|
|
|
40
|
-
// node_modules/ts-deepmerge/dist/index.js
|
|
32
|
+
// ../../node_modules/ts-deepmerge/dist/index.js
|
|
41
33
|
var require_dist = __commonJS({
|
|
42
|
-
"node_modules/ts-deepmerge/dist/index.js"(exports) {
|
|
34
|
+
"../../node_modules/ts-deepmerge/dist/index.js"(exports) {
|
|
43
35
|
"use strict";
|
|
44
36
|
var __assign = exports && exports.__assign || function() {
|
|
45
37
|
__assign = Object.assign || function(t) {
|
|
@@ -90,7 +82,7 @@ var require_dist = __commonJS({
|
|
|
90
82
|
return false;
|
|
91
83
|
};
|
|
92
84
|
var PROTECTED_KEYS = ["__proto__"];
|
|
93
|
-
var
|
|
85
|
+
var merge10 = function() {
|
|
94
86
|
var objects = [];
|
|
95
87
|
for (var _i = 0; _i < arguments.length; _i++) {
|
|
96
88
|
objects[_i] = arguments[_i];
|
|
@@ -101,9 +93,9 @@ var require_dist = __commonJS({
|
|
|
101
93
|
return;
|
|
102
94
|
}
|
|
103
95
|
if (Array.isArray(result[key]) && Array.isArray(current[key])) {
|
|
104
|
-
result[key] =
|
|
96
|
+
result[key] = merge10.options.mergeArrays ? Array.from(new Set(result[key].concat(current[key]))) : current[key];
|
|
105
97
|
} else if (isObject(result[key]) && isObject(current[key])) {
|
|
106
|
-
result[key] =
|
|
98
|
+
result[key] = merge10(result[key], current[key]);
|
|
107
99
|
} else {
|
|
108
100
|
result[key] = current[key];
|
|
109
101
|
}
|
|
@@ -114,18 +106,18 @@ var require_dist = __commonJS({
|
|
|
114
106
|
var defaultOptions = {
|
|
115
107
|
mergeArrays: true
|
|
116
108
|
};
|
|
117
|
-
|
|
118
|
-
|
|
109
|
+
merge10.options = defaultOptions;
|
|
110
|
+
merge10.withOptions = function(options) {
|
|
119
111
|
var objects = [];
|
|
120
112
|
for (var _i = 1; _i < arguments.length; _i++) {
|
|
121
113
|
objects[_i - 1] = arguments[_i];
|
|
122
114
|
}
|
|
123
|
-
|
|
124
|
-
var result =
|
|
125
|
-
|
|
115
|
+
merge10.options = __assign({ mergeArrays: true }, options);
|
|
116
|
+
var result = merge10.apply(void 0, __spreadArray([], __read(objects), false));
|
|
117
|
+
merge10.options = defaultOptions;
|
|
126
118
|
return result;
|
|
127
119
|
};
|
|
128
|
-
exports.default =
|
|
120
|
+
exports.default = merge10;
|
|
129
121
|
}
|
|
130
122
|
});
|
|
131
123
|
|
|
@@ -192,6 +184,7 @@ __export(index_browser_exports, {
|
|
|
192
184
|
OrbitControls: () => OrbitControls,
|
|
193
185
|
PersistentCache: () => PersistentCache,
|
|
194
186
|
Renderer: () => Renderer,
|
|
187
|
+
RequestError: () => RequestError,
|
|
195
188
|
Requests: () => Requests,
|
|
196
189
|
SKIN_PARTS: () => SKIN_PARTS,
|
|
197
190
|
SceneInspector: () => SceneInspector,
|
|
@@ -308,17 +301,20 @@ var _PersistentCache = class _PersistentCache {
|
|
|
308
301
|
static open(name) {
|
|
309
302
|
return Env.provider.openCache(name, _PersistentCache.VERSION);
|
|
310
303
|
}
|
|
304
|
+
/** Loads a missing entry and stores only non-nullish results. */
|
|
311
305
|
async getOrLoad(key, loader) {
|
|
312
306
|
let v = await this.get(key);
|
|
313
307
|
if (typeof v === "undefined" || v === null) {
|
|
314
308
|
v = await loader(key);
|
|
315
|
-
|
|
309
|
+
if (typeof v !== "undefined" && v !== null) {
|
|
310
|
+
await this.put(key, v);
|
|
311
|
+
}
|
|
316
312
|
}
|
|
317
313
|
return v;
|
|
318
314
|
}
|
|
319
315
|
};
|
|
320
316
|
/** Bump to invalidate every persisted entry. */
|
|
321
|
-
_PersistentCache.VERSION =
|
|
317
|
+
_PersistentCache.VERSION = 2;
|
|
322
318
|
var PersistentCache = _PersistentCache;
|
|
323
319
|
|
|
324
320
|
// src/env/browser/BrowserCache.ts
|
|
@@ -419,7 +415,8 @@ var BrowserEnv = class {
|
|
|
419
415
|
}
|
|
420
416
|
openCache(name, version) {
|
|
421
417
|
return new BrowserCache(import_localforage.default.createInstance({
|
|
422
|
-
|
|
418
|
+
// IndexedDB schema upgrades retain records; each cache generation needs its own database.
|
|
419
|
+
name: name + version,
|
|
423
420
|
version
|
|
424
421
|
}));
|
|
425
422
|
}
|
|
@@ -547,7 +544,10 @@ function serializeMeshKey(key) {
|
|
|
547
544
|
// src/cache/Caching.ts
|
|
548
545
|
var import_loading_cache = require("@inventivetalent/loading-cache");
|
|
549
546
|
var import_time = require("@inventivetalent/time");
|
|
550
|
-
var
|
|
547
|
+
var _Caching = class _Caching {
|
|
548
|
+
static createAssetCache() {
|
|
549
|
+
return import_loading_cache.Caches.builder().expireAfterWrite(import_time.Time.minutes(10)).expireAfterAccess(import_time.Time.minutes(5)).expirationInterval(import_time.Time.seconds(30)).buildAsync();
|
|
550
|
+
}
|
|
551
551
|
/** Every cache above, so clear()/end() can never fall out of sync with the field list again. */
|
|
552
552
|
static get all() {
|
|
553
553
|
return [
|
|
@@ -564,7 +564,10 @@ var Caching = class {
|
|
|
564
564
|
this.rawModelCache,
|
|
565
565
|
this.mergedModelCache,
|
|
566
566
|
this.modelTextureAtlasCache,
|
|
567
|
-
this.blockStateCache
|
|
567
|
+
this.blockStateCache,
|
|
568
|
+
this.listAssetCache,
|
|
569
|
+
this.defaultBlockStatesCache,
|
|
570
|
+
this.entityModelsCache
|
|
568
571
|
];
|
|
569
572
|
}
|
|
570
573
|
static clear() {
|
|
@@ -575,8 +578,8 @@ var Caching = class {
|
|
|
575
578
|
/**
|
|
576
579
|
* Clears every cache and stops its expiry timer.
|
|
577
580
|
*
|
|
578
|
-
*
|
|
579
|
-
*
|
|
581
|
+
* Expiry timers are unref'd in Node, so idle processes can exit without this cleanup.
|
|
582
|
+
* Use {@link shutdown} to also stop requests and the shared Ticker.
|
|
580
583
|
*/
|
|
581
584
|
static end() {
|
|
582
585
|
for (const cache of this.all) {
|
|
@@ -590,20 +593,24 @@ var Caching = class {
|
|
|
590
593
|
};
|
|
591
594
|
}
|
|
592
595
|
};
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
596
|
+
_Caching.rawImageCache = import_loading_cache.Caches.builder().expireAfterWrite(import_time.Time.minutes(10)).expireAfterAccess(import_time.Time.minutes(5)).expirationInterval(import_time.Time.seconds(5)).buildAsync();
|
|
597
|
+
_Caching.imageDataCache = import_loading_cache.Caches.builder().expireAfterWrite(import_time.Time.minutes(10)).expireAfterAccess(import_time.Time.minutes(5)).expirationInterval(import_time.Time.seconds(10)).buildAsync();
|
|
598
|
+
_Caching.canvasImageDataCache = import_loading_cache.Caches.builder().expireAfterWrite(import_time.Time.minutes(10)).expireAfterAccess(import_time.Time.minutes(5)).expirationInterval(import_time.Time.seconds(10)).buildAsync();
|
|
599
|
+
_Caching.wrappedImageCache = import_loading_cache.Caches.builder().expireAfterWrite(import_time.Time.minutes(10)).expireAfterAccess(import_time.Time.minutes(5)).expirationInterval(import_time.Time.seconds(10)).buildAsync();
|
|
600
|
+
_Caching.boxGeometryCache = import_loading_cache.Caches.builder().expireAfterWrite(import_time.Time.minutes(10)).expireAfterAccess(import_time.Time.minutes(5)).expirationInterval(import_time.Time.seconds(20)).build();
|
|
601
|
+
_Caching.textureCache = import_loading_cache.Caches.builder().expireAfterWrite(import_time.Time.minutes(10)).expireAfterAccess(import_time.Time.minutes(5)).expirationInterval(import_time.Time.seconds(30)).build();
|
|
602
|
+
_Caching.materialCache = import_loading_cache.Caches.builder().expireAfterWrite(import_time.Time.minutes(10)).expireAfterAccess(import_time.Time.minutes(5)).expirationInterval(import_time.Time.seconds(30)).build();
|
|
603
|
+
_Caching.boxMeshCache = import_loading_cache.Caches.builder().expireAfterWrite(import_time.Time.minutes(10)).expireAfterAccess(import_time.Time.minutes(5)).expirationInterval(import_time.Time.seconds(30)).build();
|
|
604
|
+
_Caching.textureAssetCache = import_loading_cache.Caches.builder().expireAfterWrite(import_time.Time.minutes(10)).expireAfterAccess(import_time.Time.minutes(5)).expirationInterval(import_time.Time.seconds(30)).buildAsync();
|
|
605
|
+
_Caching.textureMetaCache = import_loading_cache.Caches.builder().expireAfterWrite(import_time.Time.minutes(10)).expireAfterAccess(import_time.Time.minutes(5)).expirationInterval(import_time.Time.seconds(30)).buildAsync();
|
|
606
|
+
_Caching.rawModelCache = import_loading_cache.Caches.builder().expireAfterWrite(import_time.Time.minutes(10)).expireAfterAccess(import_time.Time.minutes(5)).expirationInterval(import_time.Time.seconds(30)).buildAsync();
|
|
607
|
+
_Caching.mergedModelCache = import_loading_cache.Caches.builder().expireAfterWrite(import_time.Time.minutes(10)).expireAfterAccess(import_time.Time.minutes(5)).expirationInterval(import_time.Time.seconds(30)).buildAsync();
|
|
608
|
+
_Caching.modelTextureAtlasCache = import_loading_cache.Caches.builder().expireAfterWrite(import_time.Time.minutes(10)).expireAfterAccess(import_time.Time.minutes(5)).expirationInterval(import_time.Time.seconds(30)).buildAsync();
|
|
609
|
+
_Caching.blockStateCache = import_loading_cache.Caches.builder().expireAfterWrite(import_time.Time.minutes(10)).expireAfterAccess(import_time.Time.minutes(5)).expirationInterval(import_time.Time.seconds(30)).buildAsync();
|
|
610
|
+
_Caching.listAssetCache = _Caching.createAssetCache();
|
|
611
|
+
_Caching.defaultBlockStatesCache = _Caching.createAssetCache();
|
|
612
|
+
_Caching.entityModelsCache = _Caching.createAssetCache();
|
|
613
|
+
var Caching = _Caching;
|
|
607
614
|
|
|
608
615
|
// src/Geometries.ts
|
|
609
616
|
var Geometries = class _Geometries {
|
|
@@ -624,13 +631,14 @@ var Geometries = class _Geometries {
|
|
|
624
631
|
};
|
|
625
632
|
|
|
626
633
|
// src/Materials.ts
|
|
627
|
-
var
|
|
634
|
+
var import_three5 = require("three");
|
|
628
635
|
|
|
629
636
|
// src/texture/Textures.ts
|
|
630
|
-
var
|
|
637
|
+
var import_three4 = require("three");
|
|
631
638
|
|
|
632
639
|
// src/texture/TextureLoader.ts
|
|
633
|
-
var
|
|
640
|
+
var import_three3 = require("three");
|
|
641
|
+
var THREE = __toESM(require("three"));
|
|
634
642
|
|
|
635
643
|
// src/canvas/CanvasCompat.ts
|
|
636
644
|
function createImage(width, height) {
|
|
@@ -641,9 +649,7 @@ function createCanvas(width, height) {
|
|
|
641
649
|
}
|
|
642
650
|
|
|
643
651
|
// src/request/Requests.ts
|
|
644
|
-
var import_axios = __toESM(require("axios"));
|
|
645
652
|
var import_jobqu = require("jobqu");
|
|
646
|
-
var import_time2 = require("@inventivetalent/time");
|
|
647
653
|
|
|
648
654
|
// src/util/log.ts
|
|
649
655
|
var Reset = "\x1B[0m";
|
|
@@ -653,198 +659,170 @@ function prefix(prefix2) {
|
|
|
653
659
|
return `${FgGreen}MR${BgBlack}${prefix2 ?? ""}${Reset}`;
|
|
654
660
|
}
|
|
655
661
|
|
|
656
|
-
// src/
|
|
657
|
-
var
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
this.
|
|
662
|
-
this.
|
|
663
|
-
|
|
664
|
-
submit(task) {
|
|
665
|
-
this.queue.push(task);
|
|
666
|
-
}
|
|
667
|
-
run() {
|
|
668
|
-
for (let i = 0; i < this.batch; i++) {
|
|
669
|
-
this.runNext();
|
|
670
|
-
}
|
|
671
|
-
}
|
|
672
|
-
runNext() {
|
|
673
|
-
let next = this.queue.shift();
|
|
674
|
-
if (next) next();
|
|
662
|
+
// src/request/Requests.ts
|
|
663
|
+
var p = prefix("Requests");
|
|
664
|
+
var RequestError = class extends Error {
|
|
665
|
+
constructor(message, response, cause) {
|
|
666
|
+
super(message);
|
|
667
|
+
this.response = response;
|
|
668
|
+
this.cause = cause;
|
|
669
|
+
this.name = "RequestError";
|
|
675
670
|
}
|
|
676
671
|
};
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
}
|
|
699
|
-
|
|
700
|
-
|
|
672
|
+
async function fetchRequest(config, defaultBaseURL) {
|
|
673
|
+
const { url, baseURL = defaultBaseURL, timeout = 5e3, responseType = "json", signal, ...options } = config;
|
|
674
|
+
const target = baseURL && !/^([a-z][a-z\d+.-]*:|\/\/)/i.test(url) ? `${baseURL.replace(/\/+$/, "")}/${url.replace(/^\/+/, "")}` : url;
|
|
675
|
+
const headers = new Headers(options.headers);
|
|
676
|
+
if (typeof window === "undefined" && !headers.has("User-Agent")) {
|
|
677
|
+
headers.set("User-Agent", "MineRender");
|
|
678
|
+
}
|
|
679
|
+
const attemptSignal = AbortSignal.any([
|
|
680
|
+
...signal ? [signal] : [],
|
|
681
|
+
...timeout === 0 ? [] : [AbortSignal.timeout(timeout)]
|
|
682
|
+
]);
|
|
683
|
+
const request = new Request(target, { ...options, headers, signal: attemptSignal });
|
|
684
|
+
attemptSignal.throwIfAborted();
|
|
685
|
+
try {
|
|
686
|
+
const response = await fetch(request);
|
|
687
|
+
const result = {
|
|
688
|
+
data: void 0,
|
|
689
|
+
status: response.status,
|
|
690
|
+
statusText: response.statusText,
|
|
691
|
+
headers: response.headers,
|
|
692
|
+
url: response.url
|
|
693
|
+
};
|
|
694
|
+
if (!response.ok) {
|
|
695
|
+
await response.body?.cancel().catch(() => {
|
|
696
|
+
});
|
|
697
|
+
throw new RequestError(`Request failed with status ${response.status}`, result);
|
|
698
|
+
}
|
|
699
|
+
const emptyBody = request.method === "HEAD" || response.status === 204 || response.status === 205;
|
|
700
|
+
const data = responseType === "arraybuffer" ? await response.arrayBuffer() : emptyBody || response.body === null ? void 0 : await response.json();
|
|
701
|
+
return { ...result, data };
|
|
702
|
+
} catch (error) {
|
|
703
|
+
attemptSignal.throwIfAborted();
|
|
704
|
+
if (/^https?:/.test(request.url) && request.redirect !== "error" && error instanceof TypeError) {
|
|
705
|
+
throw new RequestError("Network request failed", void 0, error);
|
|
701
706
|
}
|
|
707
|
+
throw error;
|
|
702
708
|
}
|
|
703
|
-
geometry.translate(origin.x, origin.y, origin.z);
|
|
704
|
-
}
|
|
705
|
-
function applyModelPartRotation(modelPart, geometry) {
|
|
706
|
-
const origin = new import_three3.Vector3(modelPart.pivotX, modelPart.pivotY, modelPart.pivotZ);
|
|
707
|
-
geometry.translate(-origin.x, -origin.y, -origin.z);
|
|
708
|
-
geometry.rotateX(toRadians(modelPart.pitch));
|
|
709
|
-
geometry.rotateY(toRadians(modelPart.yaw));
|
|
710
|
-
geometry.rotateZ(toRadians(modelPart.roll));
|
|
711
|
-
geometry.translate(origin.x, origin.y, origin.z);
|
|
712
709
|
}
|
|
713
|
-
function
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
710
|
+
async function abortable(promise, signal) {
|
|
711
|
+
if (!signal) return promise;
|
|
712
|
+
let abort;
|
|
713
|
+
const cancelled = new Promise((_, reject) => {
|
|
714
|
+
abort = () => reject(signal.reason);
|
|
715
|
+
signal.addEventListener("abort", abort, { once: true });
|
|
716
|
+
if (signal.aborted) abort();
|
|
717
|
+
});
|
|
718
|
+
try {
|
|
719
|
+
return await Promise.race([promise, cancelled]);
|
|
720
|
+
} finally {
|
|
721
|
+
signal.removeEventListener("abort", abort);
|
|
724
722
|
}
|
|
725
723
|
}
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
let axes = new import_three3.AxesHelper(1);
|
|
735
|
-
obj.add(axes);
|
|
736
|
-
}
|
|
737
|
-
function addWireframeToObject(obj, color = 16777215, w = 2) {
|
|
738
|
-
let boxGeo = new import_three3.BoxGeometry(16, 16, 16, 1, 1, 1);
|
|
739
|
-
let wireGeo = new import_three3.EdgesGeometry(boxGeo);
|
|
740
|
-
let wireMat = new import_three3.LineBasicMaterial({ color, linewidth: w });
|
|
741
|
-
let wireframe = new import_three3.LineSegments(wireGeo, wireMat);
|
|
742
|
-
obj.add(wireframe);
|
|
743
|
-
let axes = new import_three3.AxesHelper(1);
|
|
744
|
-
obj.add(axes);
|
|
745
|
-
}
|
|
746
|
-
function addWireframeToMesh(geo, mesh, color = 16777215, w = 2) {
|
|
747
|
-
let wireGeo = new import_three3.EdgesGeometry(geo);
|
|
748
|
-
let wireMat = new import_three3.LineBasicMaterial({ color, linewidth: w });
|
|
749
|
-
let wireframe = new import_three3.LineSegments(wireGeo, wireMat);
|
|
750
|
-
mesh.add(wireframe);
|
|
751
|
-
let axes = new import_three3.AxesHelper(1);
|
|
752
|
-
mesh.add(axes);
|
|
753
|
-
}
|
|
754
|
-
|
|
755
|
-
// src/util/performance.ts
|
|
756
|
-
function captureException(e, ...extra) {
|
|
757
|
-
console.error(e, extra);
|
|
758
|
-
}
|
|
759
|
-
function timingStart(marker) {
|
|
760
|
-
console.time(marker);
|
|
761
|
-
}
|
|
762
|
-
function timingEnd(marker) {
|
|
763
|
-
console.timeEnd(marker);
|
|
764
|
-
}
|
|
765
|
-
|
|
766
|
-
// src/util/three.ts
|
|
767
|
-
function isObject3D(obj) {
|
|
768
|
-
return obj.isObject3D;
|
|
769
|
-
}
|
|
770
|
-
function isMesh(obj) {
|
|
771
|
-
return obj.isMesh;
|
|
772
|
-
}
|
|
773
|
-
function isInstancedMesh(obj) {
|
|
774
|
-
return obj.isInstancedMesh;
|
|
775
|
-
}
|
|
776
|
-
function isPerspectiveCamera(obj) {
|
|
777
|
-
return obj.isPerspectiveCamera;
|
|
778
|
-
}
|
|
779
|
-
function isOrthographicCamera(obj) {
|
|
780
|
-
return obj.isOrthographicCamera;
|
|
781
|
-
}
|
|
782
|
-
|
|
783
|
-
// src/request/Requests.ts
|
|
784
|
-
var p = prefix("Requests");
|
|
785
|
-
if (typeof window === "undefined") {
|
|
786
|
-
import_axios.default.defaults.headers["User-Agent"] = "MineRender";
|
|
787
|
-
}
|
|
788
|
-
var _Requests = class _Requests {
|
|
789
|
-
static genericRequest(request) {
|
|
790
|
-
return this.genericQueue.add(request).catch(async (e) => {
|
|
791
|
-
console.debug(p, "generic catch", e.code, e);
|
|
792
|
-
if (this.shouldRetry(e, request)) {
|
|
793
|
-
await sleep(100);
|
|
794
|
-
return this.genericRequest(request);
|
|
795
|
-
}
|
|
796
|
-
throw e;
|
|
797
|
-
});
|
|
798
|
-
}
|
|
799
|
-
static mcAssetRequest(request) {
|
|
800
|
-
return this.mcAssetRequestQueue.add(request).catch((e) => {
|
|
801
|
-
console.debug(p, "mcAssetRequest catch", e.code, e);
|
|
802
|
-
throw e;
|
|
803
|
-
});
|
|
724
|
+
var RequestQueue = class {
|
|
725
|
+
constructor() {
|
|
726
|
+
this.pendingRequests = 0;
|
|
727
|
+
this.stopped = new AbortController();
|
|
728
|
+
this.queue = new import_jobqu.JobQueue(
|
|
729
|
+
(request) => fetchRequest(request, this.baseURL),
|
|
730
|
+
{ interval: 10, maxPerRun: 1, maxActive: 8 }
|
|
731
|
+
);
|
|
804
732
|
}
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
733
|
+
async request(request) {
|
|
734
|
+
this.pendingRequests++;
|
|
735
|
+
const signal = request.signal;
|
|
736
|
+
try {
|
|
737
|
+
for (let retries = 0; ; retries++) {
|
|
738
|
+
signal?.throwIfAborted();
|
|
739
|
+
try {
|
|
740
|
+
return await abortable(this.queue.add(request), signal);
|
|
741
|
+
} catch (error) {
|
|
742
|
+
console.debug(p, "Request failed", error);
|
|
743
|
+
const delay = this.retryDelay(error, request, retries);
|
|
744
|
+
if (delay === void 0) {
|
|
745
|
+
throw error;
|
|
812
746
|
}
|
|
813
|
-
|
|
814
|
-
request["minerenderRetry"] = 3;
|
|
815
|
-
return true;
|
|
747
|
+
await this.waitForRetry(delay, signal);
|
|
816
748
|
}
|
|
817
749
|
}
|
|
750
|
+
} finally {
|
|
751
|
+
if (signal?.aborted) {
|
|
752
|
+
this.queue.remove(request);
|
|
753
|
+
}
|
|
754
|
+
this.pendingRequests--;
|
|
818
755
|
}
|
|
819
|
-
|
|
756
|
+
}
|
|
757
|
+
retryDelay(error, request, retries) {
|
|
758
|
+
if (this.stopped.signal.aborted || retries >= 3 || (request.method ?? "get").toLowerCase() !== "get" || request.signal?.aborted) {
|
|
759
|
+
return void 0;
|
|
760
|
+
}
|
|
761
|
+
if (error instanceof RequestError) {
|
|
762
|
+
const status = error.response?.status;
|
|
763
|
+
if (status !== void 0 && status !== 408 && status !== 429 && !(status >= 500 && status < 600)) return void 0;
|
|
764
|
+
} else if (!(error instanceof DOMException && error.name === "TimeoutError")) {
|
|
765
|
+
return void 0;
|
|
766
|
+
}
|
|
767
|
+
let delay = 100 * 2 ** retries;
|
|
768
|
+
const retryAfter = error instanceof RequestError ? error.response?.headers.get("Retry-After") : void 0;
|
|
769
|
+
if (retryAfter !== void 0 && retryAfter !== null) {
|
|
770
|
+
const seconds = Number(retryAfter);
|
|
771
|
+
if (!retryAfter.trim() || !Number.isFinite(seconds) || seconds < 0) {
|
|
772
|
+
return void 0;
|
|
773
|
+
}
|
|
774
|
+
delay = Math.max(delay, seconds * 1e3);
|
|
775
|
+
}
|
|
776
|
+
return delay;
|
|
777
|
+
}
|
|
778
|
+
async waitForRetry(delay, signal) {
|
|
779
|
+
let timer;
|
|
780
|
+
const waiting = new Promise((resolve) => {
|
|
781
|
+
timer = setTimeout(resolve, delay);
|
|
782
|
+
});
|
|
783
|
+
try {
|
|
784
|
+
await abortable(waiting, AbortSignal.any([this.stopped.signal, ...signal ? [signal] : []]));
|
|
785
|
+
} finally {
|
|
786
|
+
clearTimeout(timer);
|
|
787
|
+
}
|
|
788
|
+
}
|
|
789
|
+
get pendingSize() {
|
|
790
|
+
return this.pendingRequests;
|
|
791
|
+
}
|
|
792
|
+
end() {
|
|
793
|
+
this.queue.end();
|
|
794
|
+
this.stopped.abort(new import_jobqu.JobCancelledError("ended"));
|
|
795
|
+
}
|
|
796
|
+
};
|
|
797
|
+
var Requests = class {
|
|
798
|
+
static genericRequest(request) {
|
|
799
|
+
return this.genericQueue.request(request);
|
|
800
|
+
}
|
|
801
|
+
static mcAssetRequest(request) {
|
|
802
|
+
return this.mcAssetRequestQueue.request(request);
|
|
820
803
|
}
|
|
821
804
|
static setMcAssetRoot(root) {
|
|
822
|
-
this.
|
|
805
|
+
this.mcAssetRequestQueue.baseURL = root;
|
|
823
806
|
}
|
|
807
|
+
/** Counts unsettled calls, including retry delays and requests still running after shutdown. */
|
|
824
808
|
static get queueSizes() {
|
|
825
809
|
return {
|
|
826
|
-
generic: this.genericQueue.
|
|
827
|
-
mcAsset: this.mcAssetRequestQueue.
|
|
810
|
+
generic: this.genericQueue.pendingSize,
|
|
811
|
+
mcAsset: this.mcAssetRequestQueue.pendingSize
|
|
828
812
|
};
|
|
829
813
|
}
|
|
830
814
|
/**
|
|
831
|
-
*
|
|
832
|
-
*
|
|
815
|
+
* Permanently stops both queues and rejects waiting, retrying, and future requests.
|
|
816
|
+
* Requests already running can finish. Idle queues hold no timer, so Node can exit without
|
|
817
|
+
* this cleanup. See {@link shutdown}.
|
|
833
818
|
*/
|
|
834
819
|
static end() {
|
|
835
820
|
this.genericQueue.end();
|
|
836
821
|
this.mcAssetRequestQueue.end();
|
|
837
822
|
}
|
|
838
823
|
};
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
});
|
|
842
|
-
_Requests.mcAssetInstance = import_axios.default.create({
|
|
843
|
-
timeout: 5e3
|
|
844
|
-
});
|
|
845
|
-
_Requests.genericQueue = new import_jobqu.JobQueue((request) => _Requests.axiosInstance.request(request), import_time2.Time.millis(10), 1);
|
|
846
|
-
_Requests.mcAssetRequestQueue = new import_jobqu.JobQueue((request) => _Requests.mcAssetInstance.request(request), import_time2.Time.millis(10), 1);
|
|
847
|
-
var Requests = _Requests;
|
|
824
|
+
Requests.genericQueue = new RequestQueue();
|
|
825
|
+
Requests.mcAssetRequestQueue = new RequestQueue();
|
|
848
826
|
|
|
849
827
|
// src/WrappedImage.ts
|
|
850
828
|
var WrappedImage = class {
|
|
@@ -909,29 +887,41 @@ var ImageLoader = class _ImageLoader {
|
|
|
909
887
|
static async loadAsync(src) {
|
|
910
888
|
return new Promise((resolve, reject) => {
|
|
911
889
|
const image = this._createImage();
|
|
912
|
-
image.src = src;
|
|
913
890
|
image.onload = () => resolve(image);
|
|
914
|
-
image.onerror = (err) => reject(err);
|
|
891
|
+
image.onerror = (err) => reject(err instanceof Error ? err : new Error("Failed to decode image"));
|
|
892
|
+
image.src = src;
|
|
915
893
|
});
|
|
916
894
|
}
|
|
917
895
|
static loadElement(src, onload, onerr) {
|
|
918
896
|
const image = this._createImage();
|
|
919
|
-
image.src = src;
|
|
920
897
|
if (onload)
|
|
921
898
|
image.onload = onload;
|
|
922
899
|
if (onerr)
|
|
923
900
|
image.onerror = onerr;
|
|
901
|
+
image.src = src;
|
|
924
902
|
return image;
|
|
925
903
|
}
|
|
926
904
|
static async loadData(src) {
|
|
927
905
|
console.debug(p2, "loadData", src);
|
|
928
|
-
|
|
906
|
+
const image = await this.loadCanvasData(src);
|
|
907
|
+
return image.data.getImageData(0, 0, image.width, image.height);
|
|
929
908
|
}
|
|
930
909
|
static async loadCanvasData(src) {
|
|
931
|
-
|
|
910
|
+
const keyStr = serializeImageKey({ src });
|
|
911
|
+
const info = this.getInfo(src);
|
|
912
|
+
const cached = Caching.rawImageCache.getIfPresent(keyStr);
|
|
913
|
+
try {
|
|
914
|
+
return await this.infoToCanvasData(await info);
|
|
915
|
+
} catch (err) {
|
|
916
|
+
if (cached && Caching.rawImageCache.getIfPresent(keyStr) === cached) {
|
|
917
|
+
Caching.rawImageCache.invalidate(keyStr);
|
|
918
|
+
}
|
|
919
|
+
throw err;
|
|
920
|
+
}
|
|
932
921
|
}
|
|
933
922
|
static async infoToCanvasData(info) {
|
|
934
|
-
const
|
|
923
|
+
const type = info.type === "jpg" ? "jpeg" : info.type ?? "png";
|
|
924
|
+
const image = await _ImageLoader.loadAsync(`data:image/${type};base64,${info.data.toString("base64")}`);
|
|
935
925
|
const canvas = createCanvas(info.width, info.height);
|
|
936
926
|
const context = canvas.getContext("2d");
|
|
937
927
|
context.drawImage(image, 0, 0);
|
|
@@ -942,11 +932,8 @@ var ImageLoader = class _ImageLoader {
|
|
|
942
932
|
};
|
|
943
933
|
}
|
|
944
934
|
static async infoToData(info) {
|
|
945
|
-
const image = await
|
|
946
|
-
|
|
947
|
-
const context = canvas.getContext("2d");
|
|
948
|
-
context.drawImage(image, 0, 0);
|
|
949
|
-
return context.getImageData(0, 0, canvas.width, canvas.height);
|
|
935
|
+
const image = await this.infoToCanvasData(info);
|
|
936
|
+
return image.data.getImageData(0, 0, image.width, image.height);
|
|
950
937
|
}
|
|
951
938
|
static async getData(src) {
|
|
952
939
|
const keyStr = serializeImageKey({ src });
|
|
@@ -961,38 +948,25 @@ var ImageLoader = class _ImageLoader {
|
|
|
961
948
|
});
|
|
962
949
|
}
|
|
963
950
|
static async processResponse(response) {
|
|
964
|
-
const src = response.
|
|
951
|
+
const src = response.url;
|
|
965
952
|
const data = import_buffer.Buffer.from(response.data);
|
|
966
953
|
const { width, height, type } = Env.provider.imageSize(data);
|
|
954
|
+
if (!width || !height) {
|
|
955
|
+
throw new Error("Invalid or unsupported image dimensions");
|
|
956
|
+
}
|
|
967
957
|
return {
|
|
968
958
|
src,
|
|
969
|
-
width
|
|
970
|
-
height
|
|
959
|
+
width,
|
|
960
|
+
height,
|
|
971
961
|
type,
|
|
972
962
|
data
|
|
973
963
|
};
|
|
974
964
|
}
|
|
975
965
|
static async loadInfo(src) {
|
|
976
|
-
if (src.startsWith("data:image/png;base64")) {
|
|
977
|
-
return this.processResponse({
|
|
978
|
-
config: {
|
|
979
|
-
url: src
|
|
980
|
-
},
|
|
981
|
-
data: import_buffer.Buffer.from(src.substr("data:image/png;base64,".length), "base64")
|
|
982
|
-
});
|
|
983
|
-
}
|
|
984
966
|
return Requests.genericRequest({
|
|
985
967
|
url: src,
|
|
986
968
|
responseType: "arraybuffer"
|
|
987
|
-
}).then(this.processResponse)
|
|
988
|
-
return {
|
|
989
|
-
src,
|
|
990
|
-
width: 0,
|
|
991
|
-
height: 0,
|
|
992
|
-
type: void 0,
|
|
993
|
-
data: import_buffer.Buffer.from([0])
|
|
994
|
-
};
|
|
995
|
-
});
|
|
969
|
+
}).then(this.processResponse);
|
|
996
970
|
}
|
|
997
971
|
static async getInfo(src) {
|
|
998
972
|
const keyStr = serializeImageKey({ src });
|
|
@@ -1014,38 +988,50 @@ var ImageLoader = class _ImageLoader {
|
|
|
1014
988
|
|
|
1015
989
|
// src/texture/TextureLoader.ts
|
|
1016
990
|
var TextureLoader = class {
|
|
991
|
+
/** Reports whether image loading failed, so cached textures can be retried. */
|
|
992
|
+
static hasFailed(texture) {
|
|
993
|
+
return this.failedTextures.has(texture);
|
|
994
|
+
}
|
|
1017
995
|
static createTexture() {
|
|
1018
|
-
return new
|
|
996
|
+
return new import_three3.Texture();
|
|
1019
997
|
}
|
|
1020
|
-
static loadInBackground(src, format =
|
|
998
|
+
static loadInBackground(src, format = import_three3.RGBAFormat, rotation = 0) {
|
|
1021
999
|
const texture = this.createTexture();
|
|
1022
|
-
|
|
1023
|
-
image
|
|
1000
|
+
texture.colorSpace = THREE.SRGBColorSpace;
|
|
1001
|
+
const image = ImageLoader.loadElement(src, () => {
|
|
1024
1002
|
texture.needsUpdate = true;
|
|
1025
|
-
}
|
|
1003
|
+
}, (error) => {
|
|
1004
|
+
this.failedTextures.add(texture);
|
|
1005
|
+
console.warn("Failed to load texture", src, error);
|
|
1006
|
+
});
|
|
1026
1007
|
texture.image = image;
|
|
1027
1008
|
texture.format = format;
|
|
1028
1009
|
texture.rotation = rotation;
|
|
1029
1010
|
return Textures.initTextureProps(texture);
|
|
1030
1011
|
}
|
|
1031
|
-
static load(src, format =
|
|
1032
|
-
const texture = new
|
|
1012
|
+
static load(src, format = import_three3.RGBAFormat, rotation = 0) {
|
|
1013
|
+
const texture = new import_three3.Texture();
|
|
1014
|
+
texture.colorSpace = THREE.SRGBColorSpace;
|
|
1033
1015
|
ImageLoader.getData(src).then((image) => {
|
|
1034
|
-
texture.needsUpdate = true;
|
|
1035
1016
|
texture.image = image;
|
|
1017
|
+
texture.needsUpdate = true;
|
|
1018
|
+
}).catch((error) => {
|
|
1019
|
+
this.failedTextures.add(texture);
|
|
1020
|
+
console.warn("Failed to load texture", src, error);
|
|
1036
1021
|
});
|
|
1037
1022
|
texture.format = format;
|
|
1038
1023
|
texture.rotation = rotation;
|
|
1039
1024
|
return Textures.initTextureProps(texture);
|
|
1040
1025
|
}
|
|
1041
1026
|
};
|
|
1027
|
+
TextureLoader.failedTextures = /* @__PURE__ */ new WeakSet();
|
|
1042
1028
|
|
|
1043
1029
|
// src/texture/Textures.ts
|
|
1044
|
-
var
|
|
1030
|
+
var THREE2 = __toESM(require("three"));
|
|
1045
1031
|
var Textures = class _Textures {
|
|
1046
1032
|
static initTextureProps(texture) {
|
|
1047
|
-
texture.magFilter =
|
|
1048
|
-
texture.minFilter =
|
|
1033
|
+
texture.magFilter = THREE2.NearestFilter;
|
|
1034
|
+
texture.minFilter = THREE2.NearestFilter;
|
|
1049
1035
|
texture.anisotropy = 0;
|
|
1050
1036
|
return texture;
|
|
1051
1037
|
}
|
|
@@ -1053,13 +1039,19 @@ var Textures = class _Textures {
|
|
|
1053
1039
|
return TextureLoader.load(key.src, key.format, key.rotation);
|
|
1054
1040
|
}
|
|
1055
1041
|
static createAsset(key) {
|
|
1056
|
-
return new
|
|
1042
|
+
return new import_three4.Texture();
|
|
1057
1043
|
}
|
|
1058
1044
|
static createCanvasTexture(canvas) {
|
|
1059
|
-
|
|
1045
|
+
const texture = new import_three4.CanvasTexture(canvas);
|
|
1046
|
+
texture.colorSpace = THREE2.SRGBColorSpace;
|
|
1047
|
+
return this.initTextureProps(texture);
|
|
1060
1048
|
}
|
|
1061
1049
|
static getImage(key) {
|
|
1062
1050
|
const keyStr = serializeTextureKey(key);
|
|
1051
|
+
const cached = Caching.textureCache.peek(keyStr);
|
|
1052
|
+
if (cached && TextureLoader.hasFailed(cached)) {
|
|
1053
|
+
Caching.textureCache.invalidate(keyStr);
|
|
1054
|
+
}
|
|
1063
1055
|
return Caching.textureCache.get(keyStr, (k) => {
|
|
1064
1056
|
return _Textures.createImage(key);
|
|
1065
1057
|
});
|
|
@@ -1075,26 +1067,26 @@ var _Materials = class _Materials {
|
|
|
1075
1067
|
}
|
|
1076
1068
|
static createImage(key) {
|
|
1077
1069
|
const transparent = key.transparent || false;
|
|
1078
|
-
return new
|
|
1070
|
+
return new import_three5.MeshBasicMaterial({
|
|
1079
1071
|
map: Textures.getImage(key.texture),
|
|
1080
1072
|
transparent,
|
|
1081
|
-
side: transparent ?
|
|
1073
|
+
side: transparent ? import_three5.DoubleSide : import_three5.FrontSide,
|
|
1082
1074
|
alphaTest: 0.5
|
|
1083
1075
|
});
|
|
1084
1076
|
}
|
|
1085
1077
|
static createBasicCanvasMaterial(canvas, transparent = false, shade = false) {
|
|
1086
1078
|
if (shade) {
|
|
1087
|
-
return new
|
|
1079
|
+
return new import_three5.MeshStandardMaterial({
|
|
1088
1080
|
map: Textures.createCanvasTexture(canvas),
|
|
1089
1081
|
transparent,
|
|
1090
|
-
side: transparent ?
|
|
1082
|
+
side: transparent ? import_three5.DoubleSide : import_three5.FrontSide,
|
|
1091
1083
|
alphaTest: 0.5
|
|
1092
1084
|
});
|
|
1093
1085
|
}
|
|
1094
|
-
return new
|
|
1086
|
+
return new import_three5.MeshBasicMaterial({
|
|
1095
1087
|
map: Textures.createCanvasTexture(canvas),
|
|
1096
1088
|
transparent,
|
|
1097
|
-
side: transparent ?
|
|
1089
|
+
side: transparent ? import_three5.DoubleSide : import_three5.FrontSide,
|
|
1098
1090
|
alphaTest: 0.5
|
|
1099
1091
|
});
|
|
1100
1092
|
}
|
|
@@ -1173,16 +1165,19 @@ var _Materials = class _Materials {
|
|
|
1173
1165
|
gl_FragColor = vec4(lift + color.rgb * light2, 1.0);
|
|
1174
1166
|
|
|
1175
1167
|
}
|
|
1168
|
+
|
|
1169
|
+
#include <tonemapping_fragment>
|
|
1170
|
+
#include <colorspace_fragment>
|
|
1176
1171
|
}
|
|
1177
1172
|
`;
|
|
1178
1173
|
try {
|
|
1179
|
-
return new
|
|
1174
|
+
return new import_three5.ShaderMaterial({
|
|
1180
1175
|
uniforms: {
|
|
1181
1176
|
SHADE: { value: true },
|
|
1182
1177
|
BRIGHTNESS: { value: 1 },
|
|
1183
1178
|
EMISSIVE: { value: false },
|
|
1184
1179
|
base: {
|
|
1185
|
-
value: new
|
|
1180
|
+
value: new import_three5.Color(12698049)
|
|
1186
1181
|
/*TODO*/
|
|
1187
1182
|
},
|
|
1188
1183
|
map: { value: Textures.createCanvasTexture(canvas) }
|
|
@@ -1191,7 +1186,7 @@ var _Materials = class _Materials {
|
|
|
1191
1186
|
fragmentShader: fragShader,
|
|
1192
1187
|
vertexColors: true,
|
|
1193
1188
|
transparent,
|
|
1194
|
-
side: transparent ?
|
|
1189
|
+
side: transparent ? import_three5.DoubleSide : import_three5.FrontSide,
|
|
1195
1190
|
alphaTest: 0.5
|
|
1196
1191
|
});
|
|
1197
1192
|
} catch (e) {
|
|
@@ -1201,6 +1196,10 @@ var _Materials = class _Materials {
|
|
|
1201
1196
|
}
|
|
1202
1197
|
static getImage(key) {
|
|
1203
1198
|
const keyStr = serializeMaterialKey(key);
|
|
1199
|
+
const map = Caching.materialCache.peek(keyStr)?.map;
|
|
1200
|
+
if (map && TextureLoader.hasFailed(map)) {
|
|
1201
|
+
Caching.materialCache.invalidate(keyStr);
|
|
1202
|
+
}
|
|
1204
1203
|
return Caching.materialCache.get(keyStr, (k) => {
|
|
1205
1204
|
return _Materials.createImage(key);
|
|
1206
1205
|
});
|
|
@@ -1225,10 +1224,10 @@ _Materials.MISSING_TEXTURE_SRC = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA
|
|
|
1225
1224
|
var Materials = _Materials;
|
|
1226
1225
|
|
|
1227
1226
|
// src/Meshes.ts
|
|
1228
|
-
var
|
|
1227
|
+
var import_three6 = require("three");
|
|
1229
1228
|
var Meshes = class _Meshes {
|
|
1230
1229
|
static createBox(key) {
|
|
1231
|
-
return new
|
|
1230
|
+
return new import_three6.Mesh(Geometries.getBox(key.geometry), Materials.getImage(key.material));
|
|
1232
1231
|
}
|
|
1233
1232
|
static getBox(key) {
|
|
1234
1233
|
const keyStr = serializeMeshKey(key);
|
|
@@ -1354,9 +1353,6 @@ var ModelMerger = class {
|
|
|
1354
1353
|
}
|
|
1355
1354
|
};
|
|
1356
1355
|
|
|
1357
|
-
// src/assets/Models.ts
|
|
1358
|
-
var import_typescript_memoize = require("typescript-memoize");
|
|
1359
|
-
|
|
1360
1356
|
// src/assets/source/parser/AssetParsers.ts
|
|
1361
1357
|
var AssetParser = /* @__PURE__ */ ((AssetParser2) => {
|
|
1362
1358
|
AssetParser2["MODEL"] = "model";
|
|
@@ -1370,14 +1366,14 @@ var AssetParser = /* @__PURE__ */ ((AssetParser2) => {
|
|
|
1370
1366
|
})(AssetParser || {});
|
|
1371
1367
|
|
|
1372
1368
|
// src/assets/Models.ts
|
|
1373
|
-
var
|
|
1369
|
+
var Models = class _Models {
|
|
1374
1370
|
// opened lazily: touching the store at import time would hit IndexedDB/disk just for loading
|
|
1375
1371
|
// the library, and would require an EnvProvider before any entry has had a chance to register
|
|
1376
1372
|
static get PERSISTENT_CACHE() {
|
|
1377
1373
|
return this._persistentCache ?? (this._persistentCache = PersistentCache.open("minerender-models"));
|
|
1378
1374
|
}
|
|
1379
1375
|
static async getItemList() {
|
|
1380
|
-
|
|
1376
|
+
const key = new AssetKey(
|
|
1381
1377
|
DEFAULT_NAMESPACE,
|
|
1382
1378
|
"_list",
|
|
1383
1379
|
"models",
|
|
@@ -1385,7 +1381,10 @@ var _Models = class _Models {
|
|
|
1385
1381
|
"assets",
|
|
1386
1382
|
".json",
|
|
1387
1383
|
DEFAULT_ROOT
|
|
1388
|
-
)
|
|
1384
|
+
);
|
|
1385
|
+
return Caching.listAssetCache.get(key.serialize(), () => {
|
|
1386
|
+
return AssetLoader.get(key, "list" /* LIST */);
|
|
1387
|
+
}).then((r) => r?.files ?? []);
|
|
1389
1388
|
}
|
|
1390
1389
|
static async loadAndMerge(key) {
|
|
1391
1390
|
const model = await this.getRaw(key);
|
|
@@ -1432,19 +1431,15 @@ var _Models = class _Models {
|
|
|
1432
1431
|
return this.PERSISTENT_CACHE.clear();
|
|
1433
1432
|
}
|
|
1434
1433
|
};
|
|
1435
|
-
__decorateClass([
|
|
1436
|
-
(0, import_typescript_memoize.Memoize)()
|
|
1437
|
-
], _Models, "getItemList", 1);
|
|
1438
|
-
var Models = _Models;
|
|
1439
1434
|
|
|
1440
1435
|
// src/assets/BlockStates.ts
|
|
1441
|
-
var import_typescript_memoize2 = require("typescript-memoize");
|
|
1442
1436
|
var BlockStates = class {
|
|
1443
1437
|
static get PERSISTENT_CACHE() {
|
|
1444
1438
|
return this._persistentCache ?? (this._persistentCache = PersistentCache.open("minerender-blockstates"));
|
|
1445
1439
|
}
|
|
1440
|
+
// BlockState names are hardcoded
|
|
1446
1441
|
static async getList() {
|
|
1447
|
-
|
|
1442
|
+
const key = new AssetKey(
|
|
1448
1443
|
DEFAULT_NAMESPACE,
|
|
1449
1444
|
"_list",
|
|
1450
1445
|
"blockstates",
|
|
@@ -1452,11 +1447,16 @@ var BlockStates = class {
|
|
|
1452
1447
|
"assets",
|
|
1453
1448
|
".json",
|
|
1454
1449
|
DEFAULT_ROOT
|
|
1455
|
-
)
|
|
1450
|
+
);
|
|
1451
|
+
return Caching.listAssetCache.get(key.serialize(), () => {
|
|
1452
|
+
return AssetLoader.get(key, "list" /* LIST */);
|
|
1453
|
+
}).then((r) => r?.files ?? []);
|
|
1456
1454
|
}
|
|
1457
1455
|
static async getDefaultStates() {
|
|
1458
1456
|
const key = AssetKey.parse("blockstates", "minerender:defaultBlockStates");
|
|
1459
|
-
return
|
|
1457
|
+
return Caching.defaultBlockStatesCache.get(key.serialize(), () => {
|
|
1458
|
+
return AssetLoader.get(key, "json" /* JSON */);
|
|
1459
|
+
});
|
|
1460
1460
|
}
|
|
1461
1461
|
static async getDefaultState(key) {
|
|
1462
1462
|
const defaultStates = await this.getDefaultStates();
|
|
@@ -1495,17 +1495,11 @@ var BlockStates = class {
|
|
|
1495
1495
|
await this.PERSISTENT_CACHE.clear();
|
|
1496
1496
|
}
|
|
1497
1497
|
};
|
|
1498
|
-
__decorateClass([
|
|
1499
|
-
(0, import_typescript_memoize2.Memoize)()
|
|
1500
|
-
], BlockStates, "getList", 1);
|
|
1501
|
-
__decorateClass([
|
|
1502
|
-
(0, import_typescript_memoize2.Memoize)()
|
|
1503
|
-
], BlockStates, "getDefaultStates", 1);
|
|
1504
1498
|
var DefaultBlockStates = class {
|
|
1505
1499
|
};
|
|
1506
1500
|
|
|
1507
1501
|
// src/assets/Assets.ts
|
|
1508
|
-
var DEFAULT_ROOT = "https://
|
|
1502
|
+
var DEFAULT_ROOT = "https://assets.mcasset.cloud/1.17.1";
|
|
1509
1503
|
var DEFAULT_NAMESPACE = "minecraft";
|
|
1510
1504
|
var Assets = class {
|
|
1511
1505
|
/**
|
|
@@ -1528,32 +1522,159 @@ var AssetSource = class {
|
|
|
1528
1522
|
}
|
|
1529
1523
|
};
|
|
1530
1524
|
|
|
1531
|
-
// src/
|
|
1532
|
-
var
|
|
1533
|
-
|
|
1534
|
-
|
|
1535
|
-
|
|
1536
|
-
|
|
1525
|
+
// src/util/BatchedExecutor.ts
|
|
1526
|
+
var BatchedExecutor = class {
|
|
1527
|
+
constructor(interval = 1, batch = 30) {
|
|
1528
|
+
this.interval = interval;
|
|
1529
|
+
this.batch = batch;
|
|
1530
|
+
this.queue = [];
|
|
1531
|
+
this.task = setInterval(() => this.run());
|
|
1532
|
+
}
|
|
1533
|
+
submit(task) {
|
|
1534
|
+
this.queue.push(task);
|
|
1535
|
+
}
|
|
1536
|
+
run() {
|
|
1537
|
+
for (let i = 0; i < this.batch; i++) {
|
|
1538
|
+
this.runNext();
|
|
1539
|
+
}
|
|
1540
|
+
}
|
|
1541
|
+
runNext() {
|
|
1542
|
+
let next = this.queue.shift();
|
|
1543
|
+
if (next) next();
|
|
1537
1544
|
}
|
|
1538
1545
|
};
|
|
1539
1546
|
|
|
1540
|
-
// src/
|
|
1541
|
-
var
|
|
1542
|
-
|
|
1543
|
-
|
|
1544
|
-
|
|
1545
|
-
|
|
1546
|
-
|
|
1547
|
-
|
|
1548
|
-
|
|
1549
|
-
|
|
1550
|
-
|
|
1547
|
+
// src/util/model.ts
|
|
1548
|
+
var import_three7 = require("three");
|
|
1549
|
+
function applyElementRotation(rotation, geometry) {
|
|
1550
|
+
const origin = new import_three7.Vector3(rotation.origin[0], rotation.origin[1], rotation.origin[2]);
|
|
1551
|
+
geometry.translate(-origin.x, -origin.y, -origin.z);
|
|
1552
|
+
switch (rotation.axis) {
|
|
1553
|
+
case "X" /* X */:
|
|
1554
|
+
geometry.rotateX(toRadians(rotation.angle));
|
|
1555
|
+
break;
|
|
1556
|
+
case "y" /* Y */:
|
|
1557
|
+
geometry.rotateY(toRadians(rotation.angle));
|
|
1558
|
+
break;
|
|
1559
|
+
case "z" /* Z */:
|
|
1560
|
+
geometry.rotateZ(toRadians(rotation.angle));
|
|
1561
|
+
break;
|
|
1562
|
+
}
|
|
1563
|
+
if (rotation.rescale) {
|
|
1564
|
+
if (Math.abs(rotation.angle) === 22.5) {
|
|
1565
|
+
const s = 1 / Math.cos(0.39269909262657166);
|
|
1566
|
+
geometry.scale(s, 1, s);
|
|
1567
|
+
} else {
|
|
1568
|
+
const s = 1 / Math.cos(0.7853981852531433);
|
|
1569
|
+
geometry.scale(s, 1, s);
|
|
1551
1570
|
}
|
|
1552
|
-
|
|
1553
|
-
|
|
1554
|
-
|
|
1555
|
-
|
|
1556
|
-
|
|
1571
|
+
}
|
|
1572
|
+
geometry.translate(origin.x, origin.y, origin.z);
|
|
1573
|
+
}
|
|
1574
|
+
function applyModelPartRotation(modelPart, geometry) {
|
|
1575
|
+
const origin = new import_three7.Vector3(modelPart.pivotX, modelPart.pivotY, modelPart.pivotZ);
|
|
1576
|
+
geometry.translate(-origin.x, -origin.y, -origin.z);
|
|
1577
|
+
geometry.rotateX(toRadians(modelPart.pitch));
|
|
1578
|
+
geometry.rotateY(toRadians(modelPart.yaw));
|
|
1579
|
+
geometry.rotateZ(toRadians(modelPart.roll));
|
|
1580
|
+
geometry.translate(origin.x, origin.y, origin.z);
|
|
1581
|
+
}
|
|
1582
|
+
function applyGenericRotation(axis, rotation, obj) {
|
|
1583
|
+
switch (axis) {
|
|
1584
|
+
case "X" /* X */:
|
|
1585
|
+
obj.rotateOnAxis(new import_three7.Vector3(1, 0, 0), toRadians(rotation));
|
|
1586
|
+
break;
|
|
1587
|
+
case "y" /* Y */:
|
|
1588
|
+
obj.rotateOnAxis(new import_three7.Vector3(0, 1, 0), toRadians(rotation));
|
|
1589
|
+
break;
|
|
1590
|
+
case "z" /* Z */:
|
|
1591
|
+
obj.rotateOnAxis(new import_three7.Vector3(0, 0, 1), toRadians(rotation));
|
|
1592
|
+
break;
|
|
1593
|
+
}
|
|
1594
|
+
}
|
|
1595
|
+
function addBox3WireframeToObject(box, obj, color = 16777215, w = 2) {
|
|
1596
|
+
let size = new import_three7.Vector3();
|
|
1597
|
+
box.getSize(size);
|
|
1598
|
+
let boxGeo = new import_three7.BoxGeometry(size.x, size.y, size.z, 1, 1, 1);
|
|
1599
|
+
let wireGeo = new import_three7.EdgesGeometry(boxGeo);
|
|
1600
|
+
let wireMat = new import_three7.LineBasicMaterial({ color, linewidth: w });
|
|
1601
|
+
let wireframe = new import_three7.LineSegments(wireGeo, wireMat);
|
|
1602
|
+
obj.add(wireframe);
|
|
1603
|
+
let axes = new import_three7.AxesHelper(1);
|
|
1604
|
+
obj.add(axes);
|
|
1605
|
+
}
|
|
1606
|
+
function addWireframeToObject(obj, color = 16777215, w = 2) {
|
|
1607
|
+
let boxGeo = new import_three7.BoxGeometry(16, 16, 16, 1, 1, 1);
|
|
1608
|
+
let wireGeo = new import_three7.EdgesGeometry(boxGeo);
|
|
1609
|
+
let wireMat = new import_three7.LineBasicMaterial({ color, linewidth: w });
|
|
1610
|
+
let wireframe = new import_three7.LineSegments(wireGeo, wireMat);
|
|
1611
|
+
obj.add(wireframe);
|
|
1612
|
+
let axes = new import_three7.AxesHelper(1);
|
|
1613
|
+
obj.add(axes);
|
|
1614
|
+
}
|
|
1615
|
+
function addWireframeToMesh(geo, mesh, color = 16777215, w = 2) {
|
|
1616
|
+
let wireGeo = new import_three7.EdgesGeometry(geo);
|
|
1617
|
+
let wireMat = new import_three7.LineBasicMaterial({ color, linewidth: w });
|
|
1618
|
+
let wireframe = new import_three7.LineSegments(wireGeo, wireMat);
|
|
1619
|
+
mesh.add(wireframe);
|
|
1620
|
+
let axes = new import_three7.AxesHelper(1);
|
|
1621
|
+
mesh.add(axes);
|
|
1622
|
+
}
|
|
1623
|
+
|
|
1624
|
+
// src/util/performance.ts
|
|
1625
|
+
function captureException(e, ...extra) {
|
|
1626
|
+
console.error(e, extra);
|
|
1627
|
+
}
|
|
1628
|
+
function timingStart(marker) {
|
|
1629
|
+
console.time(marker);
|
|
1630
|
+
}
|
|
1631
|
+
function timingEnd(marker) {
|
|
1632
|
+
console.timeEnd(marker);
|
|
1633
|
+
}
|
|
1634
|
+
|
|
1635
|
+
// src/util/three.ts
|
|
1636
|
+
function isObject3D(obj) {
|
|
1637
|
+
return obj.isObject3D;
|
|
1638
|
+
}
|
|
1639
|
+
function isMesh(obj) {
|
|
1640
|
+
return obj.isMesh;
|
|
1641
|
+
}
|
|
1642
|
+
function isInstancedMesh(obj) {
|
|
1643
|
+
return obj.isInstancedMesh;
|
|
1644
|
+
}
|
|
1645
|
+
function isPerspectiveCamera(obj) {
|
|
1646
|
+
return obj.isPerspectiveCamera;
|
|
1647
|
+
}
|
|
1648
|
+
function isOrthographicCamera(obj) {
|
|
1649
|
+
return obj.isOrthographicCamera;
|
|
1650
|
+
}
|
|
1651
|
+
|
|
1652
|
+
// src/nbt/NBTHelper.ts
|
|
1653
|
+
var NBTHelper = class {
|
|
1654
|
+
static async fromBuffer(buffer) {
|
|
1655
|
+
const prismarineNbt = await import("prismarine-nbt");
|
|
1656
|
+
const { parsed, type, metadata } = await prismarineNbt.parse(buffer);
|
|
1657
|
+
return parsed;
|
|
1658
|
+
}
|
|
1659
|
+
};
|
|
1660
|
+
|
|
1661
|
+
// src/assets/source/HostedAssetSource.ts
|
|
1662
|
+
var import_ts_deepmerge2 = __toESM(require_dist());
|
|
1663
|
+
var p3 = prefix("HostedAssetSource");
|
|
1664
|
+
var DEFAULT_OPTIONS = {
|
|
1665
|
+
retryDefaults: true
|
|
1666
|
+
};
|
|
1667
|
+
var _HostedAssetSource = class _HostedAssetSource extends AssetSource {
|
|
1668
|
+
async loadOrRetryWithDefaults(key, parser) {
|
|
1669
|
+
const direct = await this.load(key, parser);
|
|
1670
|
+
if (typeof direct !== "undefined") {
|
|
1671
|
+
return direct;
|
|
1672
|
+
}
|
|
1673
|
+
if (key.namespace !== DEFAULT_NAMESPACE) {
|
|
1674
|
+
console.info(p3, "Retrying", key, "with default namespace");
|
|
1675
|
+
const namespaceKey = new AssetKey(DEFAULT_NAMESPACE, key.path, key.assetType, key.type, key.rootType, key.extension, key.root);
|
|
1676
|
+
const namespaced = await this.load(namespaceKey, parser);
|
|
1677
|
+
if (typeof namespaced !== "undefined") {
|
|
1557
1678
|
return namespaced;
|
|
1558
1679
|
}
|
|
1559
1680
|
if (typeof key.root !== "undefined" && key.root !== DEFAULT_ROOT || typeof this.root !== "undefined" && this.root !== DEFAULT_ROOT) {
|
|
@@ -1803,7 +1924,6 @@ var ArchiveAssetSource = class _ArchiveAssetSource extends AssetSource {
|
|
|
1803
1924
|
};
|
|
1804
1925
|
|
|
1805
1926
|
// src/assets/AssetLoader.ts
|
|
1806
|
-
var import_ts_deepmerge3 = __toESM(require_dist());
|
|
1807
1927
|
var p5 = prefix("AssetLoader");
|
|
1808
1928
|
var _AssetLoader = class _AssetLoader {
|
|
1809
1929
|
static addSource(key, source, override = true) {
|
|
@@ -1827,7 +1947,6 @@ var _AssetLoader = class _AssetLoader {
|
|
|
1827
1947
|
return void 0;
|
|
1828
1948
|
}
|
|
1829
1949
|
static async getAll(key, parser) {
|
|
1830
|
-
console.log(this._SOURCES);
|
|
1831
1950
|
let promises = [];
|
|
1832
1951
|
for (const source of this._SOURCES) {
|
|
1833
1952
|
promises.push(source.source.get(key, parser));
|
|
@@ -1836,30 +1955,22 @@ var _AssetLoader = class _AssetLoader {
|
|
|
1836
1955
|
return results.filter((r) => r != void 0);
|
|
1837
1956
|
});
|
|
1838
1957
|
}
|
|
1958
|
+
/** Returns the first defined result in source-priority order, without merging assets. */
|
|
1839
1959
|
static async get(key, parser) {
|
|
1840
|
-
|
|
1841
|
-
|
|
1842
|
-
|
|
1843
|
-
|
|
1844
|
-
|
|
1845
|
-
return Promise.all(promises).then((results) => {
|
|
1846
|
-
const fallback = results[results.length - 1];
|
|
1847
|
-
for (const result of results) {
|
|
1848
|
-
if (result) {
|
|
1849
|
-
if (fallback) {
|
|
1850
|
-
return (0, import_ts_deepmerge3.default)({}, fallback, result);
|
|
1851
|
-
}
|
|
1852
|
-
return result;
|
|
1853
|
-
}
|
|
1960
|
+
const sources = [...this._SOURCES];
|
|
1961
|
+
for (const source of sources) {
|
|
1962
|
+
const result = await source.source.get(key, parser);
|
|
1963
|
+
if (result !== void 0) {
|
|
1964
|
+
return result;
|
|
1854
1965
|
}
|
|
1855
|
-
|
|
1856
|
-
|
|
1966
|
+
}
|
|
1967
|
+
return void 0;
|
|
1857
1968
|
}
|
|
1858
1969
|
};
|
|
1859
1970
|
_AssetLoader.ROOT = DEFAULT_ROOT;
|
|
1860
1971
|
_AssetLoader._SOURCES = [];
|
|
1861
|
-
_AssetLoader.addSource("mcassets-fallback", new HostedAssetSource("https://raw.githubusercontent.com/InventivetalentDev/minerender-fallback-assets/master"));
|
|
1862
|
-
_AssetLoader.addSource("mcassets", new HostedAssetSource(DEFAULT_ROOT));
|
|
1972
|
+
_AssetLoader.addSource("mcassets-fallback", new HostedAssetSource("https://raw.githubusercontent.com/InventivetalentDev/minerender-fallback-assets/master", { retryDefaults: false }));
|
|
1973
|
+
_AssetLoader.addSource("mcassets", new HostedAssetSource(DEFAULT_ROOT, { retryDefaults: false }));
|
|
1863
1974
|
var AssetLoader = _AssetLoader;
|
|
1864
1975
|
|
|
1865
1976
|
// src/assets/ModelTextures.ts
|
|
@@ -1868,11 +1979,21 @@ var ModelTextures = class {
|
|
|
1868
1979
|
return this._persistentMetaCache ?? (this._persistentMetaCache = PersistentCache.open("minerender-texturemeta"));
|
|
1869
1980
|
}
|
|
1870
1981
|
static async get(key) {
|
|
1871
|
-
const
|
|
1872
|
-
|
|
1873
|
-
|
|
1982
|
+
const keyStr = key.serialize();
|
|
1983
|
+
const pending = this.preload(key);
|
|
1984
|
+
const cached = Caching.textureAssetCache.getIfPresent(keyStr);
|
|
1985
|
+
try {
|
|
1986
|
+
const asset = await pending;
|
|
1987
|
+
if (asset) {
|
|
1988
|
+
return await ImageLoader.infoToCanvasData(asset);
|
|
1989
|
+
}
|
|
1990
|
+
return void 0;
|
|
1991
|
+
} catch (err) {
|
|
1992
|
+
if (cached && Caching.textureAssetCache.getIfPresent(keyStr) === cached) {
|
|
1993
|
+
Caching.textureAssetCache.invalidate(keyStr);
|
|
1994
|
+
}
|
|
1995
|
+
throw err;
|
|
1874
1996
|
}
|
|
1875
|
-
return void 0;
|
|
1876
1997
|
}
|
|
1877
1998
|
static async preload(key) {
|
|
1878
1999
|
const keyStr = key.serialize();
|
|
@@ -2550,17 +2671,20 @@ function shutdown() {
|
|
|
2550
2671
|
}
|
|
2551
2672
|
|
|
2552
2673
|
// src/assets/Entities.ts
|
|
2553
|
-
var import_typescript_memoize3 = require("typescript-memoize");
|
|
2554
2674
|
var Entities = class {
|
|
2555
2675
|
static async getBlockEntityModels() {
|
|
2556
2676
|
const key = AssetKey.parse("models", "minerender:blockEntityModels");
|
|
2557
2677
|
console.log(key);
|
|
2558
|
-
return
|
|
2678
|
+
return Caching.entityModelsCache.get(key.serialize(), () => {
|
|
2679
|
+
return AssetLoader.get(key, "json" /* JSON */);
|
|
2680
|
+
});
|
|
2559
2681
|
}
|
|
2560
2682
|
static async getEntityModels() {
|
|
2561
2683
|
const key = AssetKey.parse("models", "minerender:entityModels");
|
|
2562
2684
|
console.log(key);
|
|
2563
|
-
return
|
|
2685
|
+
return Caching.entityModelsCache.get(key.serialize(), () => {
|
|
2686
|
+
return AssetLoader.get(key, "json" /* JSON */);
|
|
2687
|
+
});
|
|
2564
2688
|
}
|
|
2565
2689
|
// BlockEntity names are hardcoded
|
|
2566
2690
|
static async getBlockList() {
|
|
@@ -2606,12 +2730,6 @@ var Entities = class {
|
|
|
2606
2730
|
};
|
|
2607
2731
|
}
|
|
2608
2732
|
};
|
|
2609
|
-
__decorateClass([
|
|
2610
|
-
(0, import_typescript_memoize3.Memoize)()
|
|
2611
|
-
], Entities, "getBlockEntityModels", 1);
|
|
2612
|
-
__decorateClass([
|
|
2613
|
-
(0, import_typescript_memoize3.Memoize)()
|
|
2614
|
-
], Entities, "getEntityModels", 1);
|
|
2615
2733
|
var EntityModels = class {
|
|
2616
2734
|
};
|
|
2617
2735
|
var BlockEntityModels = class {
|
|
@@ -2675,7 +2793,7 @@ var MineRenderError = class _MineRenderError extends Error {
|
|
|
2675
2793
|
};
|
|
2676
2794
|
|
|
2677
2795
|
// src/renderer/SceneObject.ts
|
|
2678
|
-
var
|
|
2796
|
+
var import_ts_deepmerge3 = __toESM(require_dist());
|
|
2679
2797
|
var p7 = prefix("SceneObject");
|
|
2680
2798
|
var _SceneObject = class _SceneObject extends import_three9.Object3D {
|
|
2681
2799
|
constructor(options) {
|
|
@@ -2684,7 +2802,7 @@ var _SceneObject = class _SceneObject extends import_three9.Object3D {
|
|
|
2684
2802
|
this.materialCallbacks = {};
|
|
2685
2803
|
this._isInstanced = false;
|
|
2686
2804
|
this._instanceCounter = 0;
|
|
2687
|
-
this.options = (0,
|
|
2805
|
+
this.options = (0, import_ts_deepmerge3.default)({}, _SceneObject.DEFAULT_OPTIONS, options ?? {});
|
|
2688
2806
|
console.log("SceneObject options", this.options);
|
|
2689
2807
|
}
|
|
2690
2808
|
set scene(scene) {
|
|
@@ -3033,7 +3151,7 @@ var _SceneObject = class _SceneObject extends import_three9.Object3D {
|
|
|
3033
3151
|
}
|
|
3034
3152
|
//</editor-fold>
|
|
3035
3153
|
};
|
|
3036
|
-
_SceneObject.DEFAULT_OPTIONS = (0,
|
|
3154
|
+
_SceneObject.DEFAULT_OPTIONS = (0, import_ts_deepmerge3.default)({}, {
|
|
3037
3155
|
instanceMeshes: true,
|
|
3038
3156
|
maxInstanceCount: 50,
|
|
3039
3157
|
mergeMeshes: true,
|
|
@@ -3045,16 +3163,16 @@ function isSceneObject(obj) {
|
|
|
3045
3163
|
}
|
|
3046
3164
|
|
|
3047
3165
|
// src/entity/scene/EntityObject.ts
|
|
3048
|
-
var
|
|
3166
|
+
var import_ts_deepmerge4 = __toESM(require_dist());
|
|
3049
3167
|
var import_three11 = require("three");
|
|
3050
|
-
var
|
|
3168
|
+
var THREE3 = __toESM(require("three"));
|
|
3051
3169
|
var EntityObject = class extends SceneObject {
|
|
3052
3170
|
constructor(entity, options) {
|
|
3053
3171
|
super();
|
|
3054
3172
|
this.entity = entity;
|
|
3055
3173
|
this.isEntityObject = true;
|
|
3056
3174
|
this.meshesCreated = false;
|
|
3057
|
-
this.options = (0,
|
|
3175
|
+
this.options = (0, import_ts_deepmerge4.default)({}, SceneObject.DEFAULT_OPTIONS, options ?? {});
|
|
3058
3176
|
}
|
|
3059
3177
|
async init() {
|
|
3060
3178
|
this.createMeshes();
|
|
@@ -3063,8 +3181,8 @@ var EntityObject = class extends SceneObject {
|
|
|
3063
3181
|
dispose() {
|
|
3064
3182
|
super.dispose();
|
|
3065
3183
|
}
|
|
3066
|
-
|
|
3067
|
-
|
|
3184
|
+
get textureKey() {
|
|
3185
|
+
return new AssetKey(
|
|
3068
3186
|
this.entity.key?.namespace ?? DEFAULT_NAMESPACE,
|
|
3069
3187
|
this.entity.key.path,
|
|
3070
3188
|
//TODO: texture may differ from entity name; most of them are in subdirectories for multiple variants etc.
|
|
@@ -3072,7 +3190,10 @@ var EntityObject = class extends SceneObject {
|
|
|
3072
3190
|
"entity",
|
|
3073
3191
|
"assets",
|
|
3074
3192
|
".png"
|
|
3075
|
-
)
|
|
3193
|
+
);
|
|
3194
|
+
}
|
|
3195
|
+
async loadTextures() {
|
|
3196
|
+
this.imageData = await ModelTextures.get(this.textureKey);
|
|
3076
3197
|
}
|
|
3077
3198
|
//TODO: abstract this, since extracted model data can be used for entities, blocks, players
|
|
3078
3199
|
createMeshes(force = false) {
|
|
@@ -3091,8 +3212,8 @@ var EntityObject = class extends SceneObject {
|
|
|
3091
3212
|
const l = cube.maxZ - cube.minZ;
|
|
3092
3213
|
const uv = texture.toUvArray(w, h, l);
|
|
3093
3214
|
const cubeGeo = this._getBoxGeometryForDimensionsAndUv(w, h, l, uv).clone();
|
|
3094
|
-
cubeGeo.applyMatrix4(new
|
|
3095
|
-
cubeGeo.applyMatrix4(new
|
|
3215
|
+
cubeGeo.applyMatrix4(new THREE3.Matrix4().makeTranslation(w / 2, h / 2, l / 2));
|
|
3216
|
+
cubeGeo.applyMatrix4(new THREE3.Matrix4().makeTranslation(cube.minX, cube.minY, cube.minZ));
|
|
3096
3217
|
applyModelPartRotation(part, cubeGeo);
|
|
3097
3218
|
const mesh = this.createMesh(partName, cubeGeo, mat);
|
|
3098
3219
|
partAnchor.add(mesh);
|
|
@@ -3105,23 +3226,26 @@ var EntityObject = class extends SceneObject {
|
|
|
3105
3226
|
this.meshesCreated = true;
|
|
3106
3227
|
}
|
|
3107
3228
|
async applyTextures() {
|
|
3108
|
-
const
|
|
3109
|
-
|
|
3110
|
-
|
|
3111
|
-
|
|
3112
|
-
|
|
3113
|
-
|
|
3114
|
-
|
|
3115
|
-
|
|
3116
|
-
|
|
3117
|
-
|
|
3118
|
-
|
|
3119
|
-
|
|
3120
|
-
|
|
3121
|
-
|
|
3229
|
+
const assetKeyStr = this.textureKey.serialize();
|
|
3230
|
+
const keyStr = `entity:${assetKeyStr}`;
|
|
3231
|
+
let mat = Caching.materialCache.getIfPresent(keyStr);
|
|
3232
|
+
if (!mat) {
|
|
3233
|
+
const pending = this.loadTextures();
|
|
3234
|
+
const cachedAsset = Caching.textureAssetCache.getIfPresent(assetKeyStr);
|
|
3235
|
+
await pending;
|
|
3236
|
+
if (!this.imageData) return;
|
|
3237
|
+
const canvas = this.imageData.data.canvas;
|
|
3238
|
+
const createMaterial = () => Materials.createBasicCanvasMaterial(canvas);
|
|
3239
|
+
mat = cachedAsset && Caching.textureAssetCache.getIfPresent(assetKeyStr) === cachedAsset ? Caching.materialCache.get(keyStr, createMaterial) : createMaterial();
|
|
3240
|
+
this.imageData = void 0;
|
|
3241
|
+
}
|
|
3242
|
+
this.iterateAllMeshes((mesh) => {
|
|
3243
|
+
mesh.material = mat;
|
|
3244
|
+
});
|
|
3245
|
+
this.notifyDirty();
|
|
3122
3246
|
}
|
|
3123
3247
|
};
|
|
3124
|
-
EntityObject.DEFAULT_OPTIONS = (0,
|
|
3248
|
+
EntityObject.DEFAULT_OPTIONS = (0, import_ts_deepmerge4.default)({}, SceneObject.DEFAULT_OPTIONS, {});
|
|
3125
3249
|
function isEntityObject(obj) {
|
|
3126
3250
|
return obj.isEntityObject;
|
|
3127
3251
|
}
|
|
@@ -4112,7 +4236,7 @@ function computeMorphedAttributes(object) {
|
|
|
4112
4236
|
}
|
|
4113
4237
|
|
|
4114
4238
|
// src/model/scene/ModelObject.ts
|
|
4115
|
-
var
|
|
4239
|
+
var import_ts_deepmerge5 = __toESM(require_dist());
|
|
4116
4240
|
var p10 = prefix("ModelObject");
|
|
4117
4241
|
var _ModelObject = class _ModelObject extends SceneObject {
|
|
4118
4242
|
constructor(originalModel, options) {
|
|
@@ -4120,7 +4244,7 @@ var _ModelObject = class _ModelObject extends SceneObject {
|
|
|
4120
4244
|
this.originalModel = originalModel;
|
|
4121
4245
|
this.isModelObject = true;
|
|
4122
4246
|
this.meshesCreated = false;
|
|
4123
|
-
this.options = (0,
|
|
4247
|
+
this.options = (0, import_ts_deepmerge5.default)({}, _ModelObject.DEFAULT_OPTIONS, options ?? {});
|
|
4124
4248
|
console.log("ModelObject options", this.options);
|
|
4125
4249
|
}
|
|
4126
4250
|
async init() {
|
|
@@ -4218,14 +4342,14 @@ var _ModelObject = class _ModelObject extends SceneObject {
|
|
|
4218
4342
|
}
|
|
4219
4343
|
}
|
|
4220
4344
|
};
|
|
4221
|
-
_ModelObject.DEFAULT_OPTIONS = (0,
|
|
4345
|
+
_ModelObject.DEFAULT_OPTIONS = (0, import_ts_deepmerge5.default)({}, SceneObject.DEFAULT_OPTIONS, {});
|
|
4222
4346
|
var ModelObject = _ModelObject;
|
|
4223
4347
|
function isModelObject(obj) {
|
|
4224
4348
|
return obj.isModelObject;
|
|
4225
4349
|
}
|
|
4226
4350
|
|
|
4227
4351
|
// src/model/block/scene/BlockObject.ts
|
|
4228
|
-
var
|
|
4352
|
+
var import_ts_deepmerge6 = __toESM(require_dist());
|
|
4229
4353
|
var import_three16 = require("three");
|
|
4230
4354
|
var p11 = prefix("BlockObject");
|
|
4231
4355
|
var _BlockObject = class _BlockObject extends SceneObject {
|
|
@@ -4241,7 +4365,7 @@ var _BlockObject = class _BlockObject extends SceneObject {
|
|
|
4241
4365
|
this._instanceModel = [];
|
|
4242
4366
|
this._variants = [];
|
|
4243
4367
|
this._models = [];
|
|
4244
|
-
this.options = (0,
|
|
4368
|
+
this.options = (0, import_ts_deepmerge6.default)({}, _BlockObject.DEFAULT_OPTIONS, options ?? {});
|
|
4245
4369
|
}
|
|
4246
4370
|
async init() {
|
|
4247
4371
|
if (this.options.applyDefaultState) {
|
|
@@ -4530,7 +4654,7 @@ var _BlockObject = class _BlockObject extends SceneObject {
|
|
|
4530
4654
|
//TODO: should override rotation + scale methods
|
|
4531
4655
|
//TODO
|
|
4532
4656
|
};
|
|
4533
|
-
_BlockObject.DEFAULT_OPTIONS = (0,
|
|
4657
|
+
_BlockObject.DEFAULT_OPTIONS = (0, import_ts_deepmerge6.default)({}, ModelObject.DEFAULT_OPTIONS, {
|
|
4534
4658
|
applyDefaultState: true
|
|
4535
4659
|
});
|
|
4536
4660
|
var BlockObject = _BlockObject;
|
|
@@ -4580,7 +4704,7 @@ var StructureParser = class {
|
|
|
4580
4704
|
|
|
4581
4705
|
// src/renderer/MineRenderScene.ts
|
|
4582
4706
|
var import_three17 = require("three");
|
|
4583
|
-
var
|
|
4707
|
+
var import_ts_deepmerge8 = __toESM(require_dist());
|
|
4584
4708
|
|
|
4585
4709
|
// src/skin/SkinPart.ts
|
|
4586
4710
|
var SkinPart = /* @__PURE__ */ ((SkinPart2) => {
|
|
@@ -5311,7 +5435,7 @@ var slimSkinGeometries = {
|
|
|
5311
5435
|
};
|
|
5312
5436
|
|
|
5313
5437
|
// src/skin/scene/SkinObject.ts
|
|
5314
|
-
var
|
|
5438
|
+
var import_ts_deepmerge7 = __toESM(require_dist());
|
|
5315
5439
|
var SkinObject = class extends SceneObject {
|
|
5316
5440
|
constructor(options) {
|
|
5317
5441
|
super();
|
|
@@ -5319,7 +5443,7 @@ var SkinObject = class extends SceneObject {
|
|
|
5319
5443
|
this.legacy = false;
|
|
5320
5444
|
this.skinTextureWidth = 64;
|
|
5321
5445
|
this.skinTextureHeight = 64;
|
|
5322
|
-
this.options = (0,
|
|
5446
|
+
this.options = (0, import_ts_deepmerge7.default)({}, SceneObject.DEFAULT_OPTIONS, options ?? {});
|
|
5323
5447
|
}
|
|
5324
5448
|
async init() {
|
|
5325
5449
|
this.createMeshes();
|
|
@@ -5430,24 +5554,54 @@ var _MineRenderScene = class _MineRenderScene extends import_three17.Scene {
|
|
|
5430
5554
|
this.stats = new SceneStats();
|
|
5431
5555
|
this.instanceManager = new InstanceManager();
|
|
5432
5556
|
this.dirty = true;
|
|
5433
|
-
this.
|
|
5557
|
+
this.observedObjects = /* @__PURE__ */ new Set();
|
|
5558
|
+
this.onObjectChange = (event) => {
|
|
5559
|
+
if (event.target?.parent === this) {
|
|
5560
|
+
this.dirty = true;
|
|
5561
|
+
}
|
|
5562
|
+
};
|
|
5563
|
+
this.options = (0, import_ts_deepmerge8.default)({}, _MineRenderScene.DEFAULT_OPTIONS, options ?? {});
|
|
5434
5564
|
}
|
|
5435
|
-
add(...
|
|
5436
|
-
|
|
5437
|
-
|
|
5438
|
-
|
|
5439
|
-
|
|
5440
|
-
|
|
5565
|
+
add(...objects) {
|
|
5566
|
+
for (const object of objects) {
|
|
5567
|
+
this.dirty = true;
|
|
5568
|
+
try {
|
|
5569
|
+
super.add(object);
|
|
5570
|
+
} finally {
|
|
5571
|
+
if (object?.isObject3D && object !== this) {
|
|
5572
|
+
this.updateObjectRegistration(object, object.parent === this);
|
|
5573
|
+
}
|
|
5441
5574
|
}
|
|
5442
|
-
obj.addEventListener("change", (event) => {
|
|
5443
|
-
this.dirty = true;
|
|
5444
|
-
});
|
|
5445
5575
|
}
|
|
5446
|
-
return
|
|
5576
|
+
return this;
|
|
5447
5577
|
}
|
|
5448
|
-
remove(...
|
|
5449
|
-
|
|
5450
|
-
|
|
5578
|
+
remove(...objects) {
|
|
5579
|
+
for (const object of objects) {
|
|
5580
|
+
if (!this.children.includes(object)) continue;
|
|
5581
|
+
this.dirty = true;
|
|
5582
|
+
this.updateObjectRegistration(object, false);
|
|
5583
|
+
try {
|
|
5584
|
+
super.remove(object);
|
|
5585
|
+
} finally {
|
|
5586
|
+
this.updateObjectRegistration(object, object.parent === this);
|
|
5587
|
+
}
|
|
5588
|
+
}
|
|
5589
|
+
return this;
|
|
5590
|
+
}
|
|
5591
|
+
updateObjectRegistration(object, attached) {
|
|
5592
|
+
if (this.observedObjects.has(object) === attached) return;
|
|
5593
|
+
if (attached) {
|
|
5594
|
+
this.observedObjects.add(object);
|
|
5595
|
+
object.addEventListener("change", this.onObjectChange);
|
|
5596
|
+
} else {
|
|
5597
|
+
this.observedObjects.delete(object);
|
|
5598
|
+
object.removeEventListener("change", this.onObjectChange);
|
|
5599
|
+
}
|
|
5600
|
+
const change = attached ? 1 : -1;
|
|
5601
|
+
this.stats.objectCount += change;
|
|
5602
|
+
if (isSceneObject(object)) {
|
|
5603
|
+
this.stats.sceneObjectCount += change;
|
|
5604
|
+
}
|
|
5451
5605
|
}
|
|
5452
5606
|
async initAndAdd(...object) {
|
|
5453
5607
|
this.dirty = true;
|
|
@@ -5502,412 +5656,24 @@ var _MineRenderScene = class _MineRenderScene extends import_three17.Scene {
|
|
|
5502
5656
|
return this.addSceneObject(entity, () => new EntityObject(entity, options), options, parent);
|
|
5503
5657
|
}
|
|
5504
5658
|
};
|
|
5505
|
-
_MineRenderScene.DEFAULT_OPTIONS = (0,
|
|
5659
|
+
_MineRenderScene.DEFAULT_OPTIONS = (0, import_ts_deepmerge8.default)({}, {});
|
|
5506
5660
|
var MineRenderScene = _MineRenderScene;
|
|
5507
5661
|
function isMineRenderScene(obj) {
|
|
5508
5662
|
return obj.isMineRenderScene;
|
|
5509
5663
|
}
|
|
5510
5664
|
|
|
5511
5665
|
// src/renderer/Renderer.ts
|
|
5512
|
-
var
|
|
5513
|
-
var
|
|
5666
|
+
var import_three19 = require("three");
|
|
5667
|
+
var import_ts_deepmerge9 = __toESM(require_dist());
|
|
5514
5668
|
var import_stats = __toESM(require("stats.js"));
|
|
5515
5669
|
var import_postprocessing = require("postprocessing");
|
|
5516
|
-
var _Renderer = class _Renderer {
|
|
5517
|
-
constructor(options) {
|
|
5518
|
-
this._dirty = true;
|
|
5519
|
-
this._animationTimer = void 0;
|
|
5520
|
-
this._animationFrame = void 0;
|
|
5521
|
-
this._resizeListener = void 0;
|
|
5522
|
-
this.options = (0, import_ts_deepmerge10.default)({}, _Renderer.DEFAULT_OPTIONS, options ?? {});
|
|
5523
|
-
this._animationLoop = this.animate.bind(this);
|
|
5524
|
-
this._fpsTimer = this.options.render.fpsLimit > 0 ? 1e3 / this.options.render.fpsLimit : void 0;
|
|
5525
|
-
this._scene = this.createScene();
|
|
5526
|
-
this._camera = this.createCamera();
|
|
5527
|
-
this._renderer = this.createRenderer();
|
|
5528
|
-
this._composer = this.createComposer();
|
|
5529
|
-
if (this.options.render.stats) {
|
|
5530
|
-
this._stats = new import_stats.default();
|
|
5531
|
-
document.body.appendChild(this._stats.dom);
|
|
5532
|
-
}
|
|
5533
|
-
this.init();
|
|
5534
|
-
}
|
|
5535
|
-
//<editor-fold desc="INIT">
|
|
5536
|
-
createScene() {
|
|
5537
|
-
return new MineRenderScene();
|
|
5538
|
-
}
|
|
5539
|
-
createCamera() {
|
|
5540
|
-
switch (this.options.camera.type) {
|
|
5541
|
-
case "perspective":
|
|
5542
|
-
default:
|
|
5543
|
-
return new import_three18.PerspectiveCamera(
|
|
5544
|
-
this.options.camera.perspective.fov,
|
|
5545
|
-
this.options.camera.perspective.aspect ?? this.viewWidth / this.viewHeight,
|
|
5546
|
-
this.options.camera.near,
|
|
5547
|
-
this.options.camera.far
|
|
5548
|
-
);
|
|
5549
|
-
case "orthographic":
|
|
5550
|
-
return new import_three18.OrthographicCamera(
|
|
5551
|
-
this.options.camera.orthographic.left ?? this.viewWidth / -2,
|
|
5552
|
-
this.options.camera.orthographic.right ?? this.viewWidth / 2,
|
|
5553
|
-
this.options.camera.orthographic.top ?? this.viewHeight / 2,
|
|
5554
|
-
this.options.camera.orthographic.bottom ?? this.viewHeight / -2,
|
|
5555
|
-
this.options.camera.near,
|
|
5556
|
-
this.options.camera.far
|
|
5557
|
-
);
|
|
5558
|
-
}
|
|
5559
|
-
}
|
|
5560
|
-
createRenderer() {
|
|
5561
|
-
const renderer = new import_three18.WebGLRenderer({
|
|
5562
|
-
antialias: this.options.render.antialias,
|
|
5563
|
-
alpha: true,
|
|
5564
|
-
powerPreference: "high-performance",
|
|
5565
|
-
depth: true
|
|
5566
|
-
});
|
|
5567
|
-
renderer.setClearColor(0, 0);
|
|
5568
|
-
renderer.shadowMap.enabled = true;
|
|
5569
|
-
renderer.shadowMap.type = import_three18.PCFSoftShadowMap;
|
|
5570
|
-
renderer.outputEncoding = import_three18.LinearEncoding;
|
|
5571
|
-
renderer.setSize(this.viewWidth, this.viewHeight);
|
|
5572
|
-
return renderer;
|
|
5573
|
-
}
|
|
5574
|
-
createComposer() {
|
|
5575
|
-
const composer = new import_postprocessing.EffectComposer(this.renderer);
|
|
5576
|
-
if (!this.options.composer.enabled) return composer;
|
|
5577
|
-
composer.setSize(this.viewWidth, this.viewHeight);
|
|
5578
|
-
composer.addPass(new import_postprocessing.RenderPass(this.scene, this.camera));
|
|
5579
|
-
return composer;
|
|
5580
|
-
}
|
|
5581
|
-
//</editor-fold>
|
|
5582
|
-
init() {
|
|
5583
|
-
if (typeof window["__THREE_DEVTOOLS__"] !== "undefined") {
|
|
5584
|
-
window["__THREE_DEVTOOLS__"].dispatchEvent(new CustomEvent("observe", { detail: this.scene }));
|
|
5585
|
-
}
|
|
5586
|
-
if (this.options.debug.grid) {
|
|
5587
|
-
const gridHelper = new import_three18.GridHelper(128, 16);
|
|
5588
|
-
this.scene.add(gridHelper);
|
|
5589
|
-
const gridHelper2 = new import_three18.GridHelper(128, 16);
|
|
5590
|
-
gridHelper2.rotation.x = 90 * (Math.PI / 180);
|
|
5591
|
-
this.scene.add(gridHelper2);
|
|
5592
|
-
const gridHelper3 = new import_three18.GridHelper(128, 16);
|
|
5593
|
-
gridHelper3.rotation.z = 90 * (Math.PI / 180);
|
|
5594
|
-
this.scene.add(gridHelper3);
|
|
5595
|
-
}
|
|
5596
|
-
if (this.options.debug.axes) {
|
|
5597
|
-
const axesHelper = new import_three18.AxesHelper(64);
|
|
5598
|
-
this.scene.add(axesHelper);
|
|
5599
|
-
}
|
|
5600
|
-
if (this.options.camera.position) {
|
|
5601
|
-
if (isVector3(this.options.camera.position)) {
|
|
5602
|
-
this.camera.position.set(this.options.camera.position.x, this.options.camera.position.y, this.options.camera.position.z);
|
|
5603
|
-
} else if (isTripleArray(this.options.camera.position)) {
|
|
5604
|
-
this.camera.position.set(this.options.camera.position[0], this.options.camera.position[1], this.options.camera.position[2]);
|
|
5605
|
-
}
|
|
5606
|
-
}
|
|
5607
|
-
if (this.options.camera.lookingAt) {
|
|
5608
|
-
if (isVector3(this.options.camera.lookingAt)) {
|
|
5609
|
-
this.camera.lookAt(this.options.camera.lookingAt);
|
|
5610
|
-
} else if (isTripleArray(this.options.camera.lookingAt)) {
|
|
5611
|
-
this.camera.lookAt(this.options.camera.lookingAt[0], this.options.camera.lookingAt[1], this.options.camera.lookingAt[2]);
|
|
5612
|
-
}
|
|
5613
|
-
}
|
|
5614
|
-
if (this.options.render.autoResize) {
|
|
5615
|
-
this._resizeListener = () => {
|
|
5616
|
-
this.resize(this.viewWidth, this.viewHeight);
|
|
5617
|
-
};
|
|
5618
|
-
window.addEventListener("resize", this._resizeListener);
|
|
5619
|
-
}
|
|
5620
|
-
}
|
|
5621
|
-
get element() {
|
|
5622
|
-
return this._element;
|
|
5623
|
-
}
|
|
5624
|
-
appendTo(element) {
|
|
5625
|
-
this._element = element;
|
|
5626
|
-
this._element.appendChild(this.renderer.domElement);
|
|
5627
|
-
if (this.viewWidth == 0) {
|
|
5628
|
-
console.warn("0 element width");
|
|
5629
|
-
}
|
|
5630
|
-
if (this.viewHeight == 0) {
|
|
5631
|
-
console.warn("0 element height");
|
|
5632
|
-
}
|
|
5633
|
-
this.resize(this.viewWidth, this.viewHeight);
|
|
5634
|
-
}
|
|
5635
|
-
/**
|
|
5636
|
-
* Register an EventDispatcher which may update the scene or renderer in order to redraw the scene
|
|
5637
|
-
*/
|
|
5638
|
-
registerEventDispatcher(dispatcher, changeEvent2 = "change") {
|
|
5639
|
-
dispatcher.addEventListener(changeEvent2, (event) => {
|
|
5640
|
-
this._dirty = true;
|
|
5641
|
-
});
|
|
5642
|
-
}
|
|
5643
|
-
resize(width, height) {
|
|
5644
|
-
if (isPerspectiveCamera(this.camera)) {
|
|
5645
|
-
this.camera.aspect = width / height;
|
|
5646
|
-
this.camera.updateProjectionMatrix();
|
|
5647
|
-
} else if (isOrthographicCamera(this.camera)) {
|
|
5648
|
-
this.camera.left = width / -2;
|
|
5649
|
-
this.camera.right = width / 2;
|
|
5650
|
-
this.camera.top = height / 2;
|
|
5651
|
-
this.camera.bottom = height / -2;
|
|
5652
|
-
this.camera.updateProjectionMatrix();
|
|
5653
|
-
}
|
|
5654
|
-
this.renderer.setSize(width, height);
|
|
5655
|
-
this.composer.setSize(width, height);
|
|
5656
|
-
}
|
|
5657
|
-
//<editor-fold desc="RENDER">
|
|
5658
|
-
get dirty() {
|
|
5659
|
-
return this._dirty || this.scene.dirty;
|
|
5660
|
-
}
|
|
5661
|
-
set dirty(dirty) {
|
|
5662
|
-
this._dirty = dirty;
|
|
5663
|
-
this.scene.dirty = dirty;
|
|
5664
|
-
}
|
|
5665
|
-
start() {
|
|
5666
|
-
stop();
|
|
5667
|
-
this.renderer.setAnimationLoop(this._animationLoop);
|
|
5668
|
-
}
|
|
5669
|
-
stop() {
|
|
5670
|
-
this.renderer.setAnimationLoop(null);
|
|
5671
|
-
if (this._animationTimer)
|
|
5672
|
-
clearTimeout(this._animationTimer);
|
|
5673
|
-
this._animationTimer = void 0;
|
|
5674
|
-
if (this._animationFrame)
|
|
5675
|
-
cancelAnimationFrame(this._animationFrame);
|
|
5676
|
-
this._animationFrame = void 0;
|
|
5677
|
-
}
|
|
5678
|
-
animate(t) {
|
|
5679
|
-
if (this._stats) {
|
|
5680
|
-
this._stats.begin();
|
|
5681
|
-
}
|
|
5682
|
-
if (this.dirty || this.options.render.renderAlways) {
|
|
5683
|
-
if (this.options.composer.enabled) {
|
|
5684
|
-
this.composer.render();
|
|
5685
|
-
} else {
|
|
5686
|
-
this.renderer.render(this.scene, this.camera);
|
|
5687
|
-
}
|
|
5688
|
-
}
|
|
5689
|
-
this.dirty = false;
|
|
5690
|
-
if (this._stats) {
|
|
5691
|
-
this._stats.end();
|
|
5692
|
-
}
|
|
5693
|
-
}
|
|
5694
|
-
//</editor-fold>
|
|
5695
|
-
toImage() {
|
|
5696
|
-
return this.renderer.domElement.toDataURL();
|
|
5697
|
-
}
|
|
5698
|
-
///
|
|
5699
|
-
get attachedToBody() {
|
|
5700
|
-
return this.element === document.body;
|
|
5701
|
-
}
|
|
5702
|
-
get viewWidth() {
|
|
5703
|
-
return this.attachedToBody ? window.innerWidth : this.element?.offsetWidth || 0;
|
|
5704
|
-
}
|
|
5705
|
-
get viewHeight() {
|
|
5706
|
-
return this.attachedToBody ? window.innerHeight : this.element?.offsetHeight || 0;
|
|
5707
|
-
}
|
|
5708
|
-
get scene() {
|
|
5709
|
-
return this._scene;
|
|
5710
|
-
}
|
|
5711
|
-
get camera() {
|
|
5712
|
-
return this._camera;
|
|
5713
|
-
}
|
|
5714
|
-
get renderer() {
|
|
5715
|
-
return this._renderer;
|
|
5716
|
-
}
|
|
5717
|
-
get composer() {
|
|
5718
|
-
return this._composer;
|
|
5719
|
-
}
|
|
5720
|
-
///
|
|
5721
|
-
};
|
|
5722
|
-
_Renderer.DEFAULT_OPTIONS = (0, import_ts_deepmerge10.default)({}, {
|
|
5723
|
-
camera: {
|
|
5724
|
-
type: "perspective",
|
|
5725
|
-
near: 1,
|
|
5726
|
-
far: 5e3,
|
|
5727
|
-
perspective: {
|
|
5728
|
-
aspect: void 0,
|
|
5729
|
-
fov: 50
|
|
5730
|
-
},
|
|
5731
|
-
orthographic: {
|
|
5732
|
-
left: void 0,
|
|
5733
|
-
right: void 0,
|
|
5734
|
-
top: void 0,
|
|
5735
|
-
bottom: void 0
|
|
5736
|
-
},
|
|
5737
|
-
position: new import_three18.Vector3(50, 50, 50),
|
|
5738
|
-
lookingAt: new import_three18.Vector3(0, 0, 0)
|
|
5739
|
-
},
|
|
5740
|
-
render: {
|
|
5741
|
-
fpsLimit: 60,
|
|
5742
|
-
stats: false,
|
|
5743
|
-
antialias: true,
|
|
5744
|
-
shade: true,
|
|
5745
|
-
autoResize: true,
|
|
5746
|
-
renderAlways: false
|
|
5747
|
-
},
|
|
5748
|
-
composer: {
|
|
5749
|
-
enabled: true
|
|
5750
|
-
},
|
|
5751
|
-
debug: {
|
|
5752
|
-
grid: false,
|
|
5753
|
-
axes: false
|
|
5754
|
-
}
|
|
5755
|
-
});
|
|
5756
|
-
var Renderer = _Renderer;
|
|
5757
|
-
|
|
5758
|
-
// src/skin/Skins.ts
|
|
5759
|
-
var Skins = class {
|
|
5760
|
-
//<editor-fold desc="Skins">
|
|
5761
|
-
static async fromUuidOrUsername(uuidOrUsername) {
|
|
5762
|
-
if (uuidOrUsername.length === 32 || uuidOrUsername.length === 36) {
|
|
5763
|
-
return this.fromUuid(uuidOrUsername);
|
|
5764
|
-
}
|
|
5765
|
-
return this.fromUsername(uuidOrUsername);
|
|
5766
|
-
}
|
|
5767
|
-
static async fromUuid(uuid) {
|
|
5768
|
-
return this.getSkinProxySkinUrl(uuid);
|
|
5769
|
-
}
|
|
5770
|
-
static async fromUsername(username) {
|
|
5771
|
-
return this.usernameToUuid(username).then((uuid) => {
|
|
5772
|
-
if (uuid) {
|
|
5773
|
-
return this.fromUuid(uuid);
|
|
5774
|
-
}
|
|
5775
|
-
return void 0;
|
|
5776
|
-
});
|
|
5777
|
-
}
|
|
5778
|
-
static async fromMineSkin(mineskinId) {
|
|
5779
|
-
return this.getMineSkin(mineskinId).then((mineskin) => {
|
|
5780
|
-
if (mineskin) {
|
|
5781
|
-
return mineskin["data"]["texture"]["value"]["urls"]["skins"];
|
|
5782
|
-
}
|
|
5783
|
-
return void 0;
|
|
5784
|
-
});
|
|
5785
|
-
}
|
|
5786
|
-
//</editor-fold>
|
|
5787
|
-
//<editor-fold desc="Capes">
|
|
5788
|
-
static async capeFromUuidOrUsername(uuidOrUsername) {
|
|
5789
|
-
if (uuidOrUsername.length === 32 || uuidOrUsername.length === 36) {
|
|
5790
|
-
return this.capeFromUuid(uuidOrUsername);
|
|
5791
|
-
}
|
|
5792
|
-
return this.capeFromUsername(uuidOrUsername);
|
|
5793
|
-
}
|
|
5794
|
-
static async capeFromUuid(uuid) {
|
|
5795
|
-
return this.getSkinProxyCapeUrl(uuid);
|
|
5796
|
-
}
|
|
5797
|
-
static async capeFromUsername(username) {
|
|
5798
|
-
return this.usernameToUuid(username).then((uuid) => {
|
|
5799
|
-
if (uuid) {
|
|
5800
|
-
return this.capeFromUuid(uuid);
|
|
5801
|
-
}
|
|
5802
|
-
return void 0;
|
|
5803
|
-
});
|
|
5804
|
-
}
|
|
5805
|
-
static async capeFromCapesDev(uuid, capeType = "minecraft") {
|
|
5806
|
-
return this.getCapesDev(uuid, capeType).then((cape) => {
|
|
5807
|
-
if (cape) {
|
|
5808
|
-
return cape?.stillImageUrl;
|
|
5809
|
-
}
|
|
5810
|
-
return void 0;
|
|
5811
|
-
});
|
|
5812
|
-
}
|
|
5813
|
-
//</editor-fold>
|
|
5814
|
-
//<editor-fold desc="Helpers">
|
|
5815
|
-
static async usernameToUuid(username) {
|
|
5816
|
-
return this.usernameToUuidSkinProxy(username);
|
|
5817
|
-
}
|
|
5818
|
-
static async usernameToUuidSkinProxy(username) {
|
|
5819
|
-
return Requests.genericRequest({
|
|
5820
|
-
baseURL: "https://minecraft-skin-proxy.inventive.workers.dev",
|
|
5821
|
-
url: "/uuid/" + username
|
|
5822
|
-
}).then((res) => {
|
|
5823
|
-
if (res.status === 200) {
|
|
5824
|
-
return res.data["id"];
|
|
5825
|
-
}
|
|
5826
|
-
return void 0;
|
|
5827
|
-
}).catch((err) => {
|
|
5828
|
-
console.warn(err);
|
|
5829
|
-
return void 0;
|
|
5830
|
-
});
|
|
5831
|
-
}
|
|
5832
|
-
static async usernameToUuidMineTools(username) {
|
|
5833
|
-
return Requests.genericRequest({
|
|
5834
|
-
baseURL: "https://api.minetools.eu",
|
|
5835
|
-
url: "/uuid/" + username
|
|
5836
|
-
}).then((res) => {
|
|
5837
|
-
if (res.status === 200) {
|
|
5838
|
-
return res.data["id"];
|
|
5839
|
-
}
|
|
5840
|
-
return void 0;
|
|
5841
|
-
}).catch((err) => {
|
|
5842
|
-
console.warn(err);
|
|
5843
|
-
return void 0;
|
|
5844
|
-
});
|
|
5845
|
-
}
|
|
5846
|
-
static async getProfileFromMinetools(uuid) {
|
|
5847
|
-
return Requests.genericRequest({
|
|
5848
|
-
baseURL: "https://api.minetools.eu",
|
|
5849
|
-
url: "/profile/" + uuid
|
|
5850
|
-
}).then((res) => {
|
|
5851
|
-
if (res.status === 200) {
|
|
5852
|
-
return res.data;
|
|
5853
|
-
}
|
|
5854
|
-
});
|
|
5855
|
-
}
|
|
5856
|
-
static async getMineSkin(mineskinId) {
|
|
5857
|
-
return Requests.genericRequest({
|
|
5858
|
-
baseURL: "https://api.mineskin.org",
|
|
5859
|
-
url: "/get/uuid/" + mineskinId
|
|
5860
|
-
}).then((res) => {
|
|
5861
|
-
if (res.status === 200) {
|
|
5862
|
-
return res.data;
|
|
5863
|
-
}
|
|
5864
|
-
return void 0;
|
|
5865
|
-
}).catch((err) => {
|
|
5866
|
-
console.warn(err);
|
|
5867
|
-
return void 0;
|
|
5868
|
-
});
|
|
5869
|
-
}
|
|
5870
|
-
static async getCapesDev(uuid, type = "all") {
|
|
5871
|
-
return Requests.genericRequest({
|
|
5872
|
-
baseURL: "https://api.capes.dev",
|
|
5873
|
-
url: "/load/" + uuid + "/" + type
|
|
5874
|
-
}).then((res) => {
|
|
5875
|
-
if (res.status === 200) {
|
|
5876
|
-
return res.data;
|
|
5877
|
-
}
|
|
5878
|
-
return void 0;
|
|
5879
|
-
}).catch((err) => {
|
|
5880
|
-
console.warn(err);
|
|
5881
|
-
return void 0;
|
|
5882
|
-
});
|
|
5883
|
-
}
|
|
5884
|
-
static getCrafatarSkinUrl(uuid) {
|
|
5885
|
-
return "https://crafatar.com/skins/" + uuid;
|
|
5886
|
-
}
|
|
5887
|
-
static getCrafatarCapeUrl(uuid) {
|
|
5888
|
-
return "https://crafatar.com/capes/" + uuid;
|
|
5889
|
-
}
|
|
5890
|
-
static getMcHeadsSkinUrl(uuid) {
|
|
5891
|
-
return "https://mc-heads.net/skin/" + uuid;
|
|
5892
|
-
}
|
|
5893
|
-
static getMineSkinPlayerSkinUrl(uuid) {
|
|
5894
|
-
return "https://mineskin.org/skin/player/" + uuid;
|
|
5895
|
-
}
|
|
5896
|
-
static getSkinProxySkinUrl(uuid) {
|
|
5897
|
-
return "https://minecraft-skin-proxy.inventive.workers.dev/skin/" + uuid;
|
|
5898
|
-
}
|
|
5899
|
-
static getSkinProxyCapeUrl(uuid) {
|
|
5900
|
-
return "https://minecraft-skin-proxy.inventive.workers.dev/cape/" + uuid;
|
|
5901
|
-
}
|
|
5902
|
-
//</editor-fold>
|
|
5903
|
-
};
|
|
5904
5670
|
|
|
5905
5671
|
// src/three/OrbitControls.js
|
|
5906
|
-
var
|
|
5672
|
+
var import_three18 = require("three");
|
|
5907
5673
|
var _changeEvent = { type: "change" };
|
|
5908
5674
|
var _startEvent = { type: "start" };
|
|
5909
5675
|
var _endEvent = { type: "end" };
|
|
5910
|
-
var OrbitControls = class extends
|
|
5676
|
+
var OrbitControls = class extends import_three18.EventDispatcher {
|
|
5911
5677
|
constructor(object, domElement) {
|
|
5912
5678
|
super();
|
|
5913
5679
|
if (domElement === void 0) console.warn('THREE.OrbitControls: The second parameter "domElement" is now mandatory.');
|
|
@@ -5916,7 +5682,7 @@ var OrbitControls = class extends import_three20.EventDispatcher {
|
|
|
5916
5682
|
this.domElement = domElement;
|
|
5917
5683
|
this.domElement.style.touchAction = "none";
|
|
5918
5684
|
this.enabled = true;
|
|
5919
|
-
this.target = new
|
|
5685
|
+
this.target = new import_three18.Vector3();
|
|
5920
5686
|
this.minDistance = 0;
|
|
5921
5687
|
this.maxDistance = Infinity;
|
|
5922
5688
|
this.minZoom = 0;
|
|
@@ -5938,8 +5704,8 @@ var OrbitControls = class extends import_three20.EventDispatcher {
|
|
|
5938
5704
|
this.autoRotate = false;
|
|
5939
5705
|
this.autoRotateSpeed = 2;
|
|
5940
5706
|
this.keys = { LEFT: "ArrowLeft", UP: "ArrowUp", RIGHT: "ArrowRight", BOTTOM: "ArrowDown" };
|
|
5941
|
-
this.mouseButtons = { LEFT:
|
|
5942
|
-
this.touches = { ONE:
|
|
5707
|
+
this.mouseButtons = { LEFT: import_three18.MOUSE.ROTATE, MIDDLE: import_three18.MOUSE.DOLLY, RIGHT: import_three18.MOUSE.PAN };
|
|
5708
|
+
this.touches = { ONE: import_three18.TOUCH.ROTATE, TWO: import_three18.TOUCH.DOLLY_PAN };
|
|
5943
5709
|
this.target0 = this.target.clone();
|
|
5944
5710
|
this.position0 = this.object.position.clone();
|
|
5945
5711
|
this.zoom0 = this.object.zoom;
|
|
@@ -5968,11 +5734,11 @@ var OrbitControls = class extends import_three20.EventDispatcher {
|
|
|
5968
5734
|
state = STATE.NONE;
|
|
5969
5735
|
};
|
|
5970
5736
|
this.update = function() {
|
|
5971
|
-
const offset = new
|
|
5972
|
-
const quat = new
|
|
5737
|
+
const offset = new import_three18.Vector3();
|
|
5738
|
+
const quat = new import_three18.Quaternion().setFromUnitVectors(object.up, new import_three18.Vector3(0, 1, 0));
|
|
5973
5739
|
const quatInverse = quat.clone().invert();
|
|
5974
|
-
const lastPosition = new
|
|
5975
|
-
const lastQuaternion = new
|
|
5740
|
+
const lastPosition = new import_three18.Vector3();
|
|
5741
|
+
const lastQuaternion = new import_three18.Quaternion();
|
|
5976
5742
|
const twoPI = 2 * Math.PI;
|
|
5977
5743
|
return function update() {
|
|
5978
5744
|
const position = scope.object.position;
|
|
@@ -6058,20 +5824,20 @@ var OrbitControls = class extends import_three20.EventDispatcher {
|
|
|
6058
5824
|
};
|
|
6059
5825
|
let state = STATE.NONE;
|
|
6060
5826
|
const EPS = 1e-6;
|
|
6061
|
-
const spherical = new
|
|
6062
|
-
const sphericalDelta = new
|
|
5827
|
+
const spherical = new import_three18.Spherical();
|
|
5828
|
+
const sphericalDelta = new import_three18.Spherical();
|
|
6063
5829
|
let scale = 1;
|
|
6064
|
-
const panOffset = new
|
|
5830
|
+
const panOffset = new import_three18.Vector3();
|
|
6065
5831
|
let zoomChanged = false;
|
|
6066
|
-
const rotateStart = new
|
|
6067
|
-
const rotateEnd = new
|
|
6068
|
-
const rotateDelta = new
|
|
6069
|
-
const panStart = new
|
|
6070
|
-
const panEnd = new
|
|
6071
|
-
const panDelta = new
|
|
6072
|
-
const dollyStart = new
|
|
6073
|
-
const dollyEnd = new
|
|
6074
|
-
const dollyDelta = new
|
|
5832
|
+
const rotateStart = new import_three18.Vector2();
|
|
5833
|
+
const rotateEnd = new import_three18.Vector2();
|
|
5834
|
+
const rotateDelta = new import_three18.Vector2();
|
|
5835
|
+
const panStart = new import_three18.Vector2();
|
|
5836
|
+
const panEnd = new import_three18.Vector2();
|
|
5837
|
+
const panDelta = new import_three18.Vector2();
|
|
5838
|
+
const dollyStart = new import_three18.Vector2();
|
|
5839
|
+
const dollyEnd = new import_three18.Vector2();
|
|
5840
|
+
const dollyDelta = new import_three18.Vector2();
|
|
6075
5841
|
const pointers = [];
|
|
6076
5842
|
const pointerPositions = {};
|
|
6077
5843
|
function getAutoRotationAngle() {
|
|
@@ -6087,7 +5853,7 @@ var OrbitControls = class extends import_three20.EventDispatcher {
|
|
|
6087
5853
|
sphericalDelta.phi -= angle;
|
|
6088
5854
|
}
|
|
6089
5855
|
const panLeft = function() {
|
|
6090
|
-
const v = new
|
|
5856
|
+
const v = new import_three18.Vector3();
|
|
6091
5857
|
return function panLeft2(distance, objectMatrix) {
|
|
6092
5858
|
v.setFromMatrixColumn(objectMatrix, 0);
|
|
6093
5859
|
v.multiplyScalar(-distance);
|
|
@@ -6095,7 +5861,7 @@ var OrbitControls = class extends import_three20.EventDispatcher {
|
|
|
6095
5861
|
};
|
|
6096
5862
|
}();
|
|
6097
5863
|
const panUp = function() {
|
|
6098
|
-
const v = new
|
|
5864
|
+
const v = new import_three18.Vector3();
|
|
6099
5865
|
return function panUp2(distance, objectMatrix) {
|
|
6100
5866
|
if (scope.screenSpacePanning === true) {
|
|
6101
5867
|
v.setFromMatrixColumn(objectMatrix, 1);
|
|
@@ -6108,7 +5874,7 @@ var OrbitControls = class extends import_three20.EventDispatcher {
|
|
|
6108
5874
|
};
|
|
6109
5875
|
}();
|
|
6110
5876
|
const pan = function() {
|
|
6111
|
-
const offset = new
|
|
5877
|
+
const offset = new import_three18.Vector3();
|
|
6112
5878
|
return function pan2(deltaX, deltaY) {
|
|
6113
5879
|
const element = scope.domElement;
|
|
6114
5880
|
if (scope.object.isPerspectiveCamera) {
|
|
@@ -6177,371 +5943,853 @@ var OrbitControls = class extends import_three20.EventDispatcher {
|
|
|
6177
5943
|
} else if (dollyDelta.y < 0) {
|
|
6178
5944
|
dollyIn(getZoomScale());
|
|
6179
5945
|
}
|
|
6180
|
-
dollyStart.copy(dollyEnd);
|
|
6181
|
-
scope.update();
|
|
5946
|
+
dollyStart.copy(dollyEnd);
|
|
5947
|
+
scope.update();
|
|
5948
|
+
}
|
|
5949
|
+
function handleMouseMovePan(event) {
|
|
5950
|
+
panEnd.set(event.clientX, event.clientY);
|
|
5951
|
+
panDelta.subVectors(panEnd, panStart).multiplyScalar(scope.panSpeed);
|
|
5952
|
+
pan(panDelta.x, panDelta.y);
|
|
5953
|
+
panStart.copy(panEnd);
|
|
5954
|
+
scope.update();
|
|
5955
|
+
}
|
|
5956
|
+
function handleMouseUp() {
|
|
5957
|
+
}
|
|
5958
|
+
function handleMouseWheel(event) {
|
|
5959
|
+
if (event.deltaY < 0) {
|
|
5960
|
+
dollyIn(getZoomScale());
|
|
5961
|
+
} else if (event.deltaY > 0) {
|
|
5962
|
+
dollyOut(getZoomScale());
|
|
5963
|
+
}
|
|
5964
|
+
scope.update();
|
|
5965
|
+
}
|
|
5966
|
+
function handleKeyDown(event) {
|
|
5967
|
+
let needsUpdate = false;
|
|
5968
|
+
switch (event.code) {
|
|
5969
|
+
case scope.keys.UP:
|
|
5970
|
+
pan(0, scope.keyPanSpeed);
|
|
5971
|
+
needsUpdate = true;
|
|
5972
|
+
break;
|
|
5973
|
+
case scope.keys.BOTTOM:
|
|
5974
|
+
pan(0, -scope.keyPanSpeed);
|
|
5975
|
+
needsUpdate = true;
|
|
5976
|
+
break;
|
|
5977
|
+
case scope.keys.LEFT:
|
|
5978
|
+
pan(scope.keyPanSpeed, 0);
|
|
5979
|
+
needsUpdate = true;
|
|
5980
|
+
break;
|
|
5981
|
+
case scope.keys.RIGHT:
|
|
5982
|
+
pan(-scope.keyPanSpeed, 0);
|
|
5983
|
+
needsUpdate = true;
|
|
5984
|
+
break;
|
|
5985
|
+
}
|
|
5986
|
+
if (needsUpdate) {
|
|
5987
|
+
event.preventDefault();
|
|
5988
|
+
scope.update();
|
|
5989
|
+
}
|
|
5990
|
+
}
|
|
5991
|
+
function handleTouchStartRotate() {
|
|
5992
|
+
if (pointers.length === 1) {
|
|
5993
|
+
rotateStart.set(pointers[0].pageX, pointers[0].pageY);
|
|
5994
|
+
} else {
|
|
5995
|
+
const x = 0.5 * (pointers[0].pageX + pointers[1].pageX);
|
|
5996
|
+
const y = 0.5 * (pointers[0].pageY + pointers[1].pageY);
|
|
5997
|
+
rotateStart.set(x, y);
|
|
5998
|
+
}
|
|
5999
|
+
}
|
|
6000
|
+
function handleTouchStartPan() {
|
|
6001
|
+
if (pointers.length === 1) {
|
|
6002
|
+
panStart.set(pointers[0].pageX, pointers[0].pageY);
|
|
6003
|
+
} else {
|
|
6004
|
+
const x = 0.5 * (pointers[0].pageX + pointers[1].pageX);
|
|
6005
|
+
const y = 0.5 * (pointers[0].pageY + pointers[1].pageY);
|
|
6006
|
+
panStart.set(x, y);
|
|
6007
|
+
}
|
|
6008
|
+
}
|
|
6009
|
+
function handleTouchStartDolly() {
|
|
6010
|
+
const dx = pointers[0].pageX - pointers[1].pageX;
|
|
6011
|
+
const dy = pointers[0].pageY - pointers[1].pageY;
|
|
6012
|
+
const distance = Math.sqrt(dx * dx + dy * dy);
|
|
6013
|
+
dollyStart.set(0, distance);
|
|
6014
|
+
}
|
|
6015
|
+
function handleTouchStartDollyPan() {
|
|
6016
|
+
if (scope.enableZoom) handleTouchStartDolly();
|
|
6017
|
+
if (scope.enablePan) handleTouchStartPan();
|
|
6018
|
+
}
|
|
6019
|
+
function handleTouchStartDollyRotate() {
|
|
6020
|
+
if (scope.enableZoom) handleTouchStartDolly();
|
|
6021
|
+
if (scope.enableRotate) handleTouchStartRotate();
|
|
6022
|
+
}
|
|
6023
|
+
function handleTouchMoveRotate(event) {
|
|
6024
|
+
if (pointers.length == 1) {
|
|
6025
|
+
rotateEnd.set(event.pageX, event.pageY);
|
|
6026
|
+
} else {
|
|
6027
|
+
const position = getSecondPointerPosition(event);
|
|
6028
|
+
const x = 0.5 * (event.pageX + position.x);
|
|
6029
|
+
const y = 0.5 * (event.pageY + position.y);
|
|
6030
|
+
rotateEnd.set(x, y);
|
|
6031
|
+
}
|
|
6032
|
+
rotateDelta.subVectors(rotateEnd, rotateStart).multiplyScalar(scope.rotateSpeed);
|
|
6033
|
+
const element = scope.domElement;
|
|
6034
|
+
rotateLeft(2 * Math.PI * rotateDelta.x / element.clientHeight);
|
|
6035
|
+
rotateUp(2 * Math.PI * rotateDelta.y / element.clientHeight);
|
|
6036
|
+
rotateStart.copy(rotateEnd);
|
|
6037
|
+
}
|
|
6038
|
+
function handleTouchMovePan(event) {
|
|
6039
|
+
if (pointers.length === 1) {
|
|
6040
|
+
panEnd.set(event.pageX, event.pageY);
|
|
6041
|
+
} else {
|
|
6042
|
+
const position = getSecondPointerPosition(event);
|
|
6043
|
+
const x = 0.5 * (event.pageX + position.x);
|
|
6044
|
+
const y = 0.5 * (event.pageY + position.y);
|
|
6045
|
+
panEnd.set(x, y);
|
|
6046
|
+
}
|
|
6047
|
+
panDelta.subVectors(panEnd, panStart).multiplyScalar(scope.panSpeed);
|
|
6048
|
+
pan(panDelta.x, panDelta.y);
|
|
6049
|
+
panStart.copy(panEnd);
|
|
6050
|
+
}
|
|
6051
|
+
function handleTouchMoveDolly(event) {
|
|
6052
|
+
const position = getSecondPointerPosition(event);
|
|
6053
|
+
const dx = event.pageX - position.x;
|
|
6054
|
+
const dy = event.pageY - position.y;
|
|
6055
|
+
const distance = Math.sqrt(dx * dx + dy * dy);
|
|
6056
|
+
dollyEnd.set(0, distance);
|
|
6057
|
+
dollyDelta.set(0, Math.pow(dollyEnd.y / dollyStart.y, scope.zoomSpeed));
|
|
6058
|
+
dollyOut(dollyDelta.y);
|
|
6059
|
+
dollyStart.copy(dollyEnd);
|
|
6060
|
+
}
|
|
6061
|
+
function handleTouchMoveDollyPan(event) {
|
|
6062
|
+
if (scope.enableZoom) handleTouchMoveDolly(event);
|
|
6063
|
+
if (scope.enablePan) handleTouchMovePan(event);
|
|
6064
|
+
}
|
|
6065
|
+
function handleTouchMoveDollyRotate(event) {
|
|
6066
|
+
if (scope.enableZoom) handleTouchMoveDolly(event);
|
|
6067
|
+
if (scope.enableRotate) handleTouchMoveRotate(event);
|
|
6068
|
+
}
|
|
6069
|
+
function handleTouchEnd() {
|
|
6070
|
+
}
|
|
6071
|
+
function onPointerDown(event) {
|
|
6072
|
+
if (scope.enabled === false) return;
|
|
6073
|
+
if (pointers.length === 0) {
|
|
6074
|
+
scope.domElement.setPointerCapture(event.pointerId);
|
|
6075
|
+
scope.domElement.addEventListener("pointermove", onPointerMove);
|
|
6076
|
+
scope.domElement.addEventListener("pointerup", onPointerUp);
|
|
6077
|
+
}
|
|
6078
|
+
addPointer(event);
|
|
6079
|
+
if (event.pointerType === "touch") {
|
|
6080
|
+
onTouchStart(event);
|
|
6081
|
+
} else {
|
|
6082
|
+
onMouseDown(event);
|
|
6083
|
+
}
|
|
6084
|
+
}
|
|
6085
|
+
function onPointerMove(event) {
|
|
6086
|
+
if (scope.enabled === false) return;
|
|
6087
|
+
if (event.pointerType === "touch") {
|
|
6088
|
+
onTouchMove(event);
|
|
6089
|
+
} else {
|
|
6090
|
+
onMouseMove(event);
|
|
6091
|
+
}
|
|
6092
|
+
}
|
|
6093
|
+
function onPointerUp(event) {
|
|
6094
|
+
if (scope.enabled === false) return;
|
|
6095
|
+
if (event.pointerType === "touch") {
|
|
6096
|
+
onTouchEnd();
|
|
6097
|
+
} else {
|
|
6098
|
+
onMouseUp(event);
|
|
6099
|
+
}
|
|
6100
|
+
removePointer(event);
|
|
6101
|
+
if (pointers.length === 0) {
|
|
6102
|
+
scope.domElement.releasePointerCapture(event.pointerId);
|
|
6103
|
+
scope.domElement.removeEventListener("pointermove", onPointerMove);
|
|
6104
|
+
scope.domElement.removeEventListener("pointerup", onPointerUp);
|
|
6105
|
+
}
|
|
6106
|
+
}
|
|
6107
|
+
function onPointerCancel(event) {
|
|
6108
|
+
removePointer(event);
|
|
6109
|
+
}
|
|
6110
|
+
function onMouseDown(event) {
|
|
6111
|
+
let mouseAction;
|
|
6112
|
+
switch (event.button) {
|
|
6113
|
+
case 0:
|
|
6114
|
+
mouseAction = scope.mouseButtons.LEFT;
|
|
6115
|
+
break;
|
|
6116
|
+
case 1:
|
|
6117
|
+
mouseAction = scope.mouseButtons.MIDDLE;
|
|
6118
|
+
break;
|
|
6119
|
+
case 2:
|
|
6120
|
+
mouseAction = scope.mouseButtons.RIGHT;
|
|
6121
|
+
break;
|
|
6122
|
+
default:
|
|
6123
|
+
mouseAction = -1;
|
|
6124
|
+
}
|
|
6125
|
+
switch (mouseAction) {
|
|
6126
|
+
case import_three18.MOUSE.DOLLY:
|
|
6127
|
+
if (scope.enableZoom === false) return;
|
|
6128
|
+
handleMouseDownDolly(event);
|
|
6129
|
+
state = STATE.DOLLY;
|
|
6130
|
+
break;
|
|
6131
|
+
case import_three18.MOUSE.ROTATE:
|
|
6132
|
+
if (event.ctrlKey || event.metaKey || event.shiftKey) {
|
|
6133
|
+
if (scope.enablePan === false) return;
|
|
6134
|
+
handleMouseDownPan(event);
|
|
6135
|
+
state = STATE.PAN;
|
|
6136
|
+
} else {
|
|
6137
|
+
if (scope.enableRotate === false) return;
|
|
6138
|
+
handleMouseDownRotate(event);
|
|
6139
|
+
state = STATE.ROTATE;
|
|
6140
|
+
}
|
|
6141
|
+
break;
|
|
6142
|
+
case import_three18.MOUSE.PAN:
|
|
6143
|
+
if (event.ctrlKey || event.metaKey || event.shiftKey) {
|
|
6144
|
+
if (scope.enableRotate === false) return;
|
|
6145
|
+
handleMouseDownRotate(event);
|
|
6146
|
+
state = STATE.ROTATE;
|
|
6147
|
+
} else {
|
|
6148
|
+
if (scope.enablePan === false) return;
|
|
6149
|
+
handleMouseDownPan(event);
|
|
6150
|
+
state = STATE.PAN;
|
|
6151
|
+
}
|
|
6152
|
+
break;
|
|
6153
|
+
default:
|
|
6154
|
+
state = STATE.NONE;
|
|
6155
|
+
}
|
|
6156
|
+
if (state !== STATE.NONE) {
|
|
6157
|
+
scope.dispatchEvent(_startEvent);
|
|
6158
|
+
}
|
|
6159
|
+
}
|
|
6160
|
+
function onMouseMove(event) {
|
|
6161
|
+
if (scope.enabled === false) return;
|
|
6162
|
+
switch (state) {
|
|
6163
|
+
case STATE.ROTATE:
|
|
6164
|
+
if (scope.enableRotate === false) return;
|
|
6165
|
+
handleMouseMoveRotate(event);
|
|
6166
|
+
break;
|
|
6167
|
+
case STATE.DOLLY:
|
|
6168
|
+
if (scope.enableZoom === false) return;
|
|
6169
|
+
handleMouseMoveDolly(event);
|
|
6170
|
+
break;
|
|
6171
|
+
case STATE.PAN:
|
|
6172
|
+
if (scope.enablePan === false) return;
|
|
6173
|
+
handleMouseMovePan(event);
|
|
6174
|
+
break;
|
|
6175
|
+
}
|
|
6182
6176
|
}
|
|
6183
|
-
function
|
|
6184
|
-
|
|
6185
|
-
|
|
6186
|
-
|
|
6187
|
-
panStart.copy(panEnd);
|
|
6188
|
-
scope.update();
|
|
6177
|
+
function onMouseUp(event) {
|
|
6178
|
+
handleMouseUp(event);
|
|
6179
|
+
scope.dispatchEvent(_endEvent);
|
|
6180
|
+
state = STATE.NONE;
|
|
6189
6181
|
}
|
|
6190
|
-
function
|
|
6182
|
+
function onMouseWheel(event) {
|
|
6183
|
+
if (scope.enabled === false || scope.enableZoom === false || state !== STATE.NONE) return;
|
|
6184
|
+
event.preventDefault();
|
|
6185
|
+
scope.dispatchEvent(_startEvent);
|
|
6186
|
+
handleMouseWheel(event);
|
|
6187
|
+
scope.dispatchEvent(_endEvent);
|
|
6191
6188
|
}
|
|
6192
|
-
function
|
|
6193
|
-
if (
|
|
6194
|
-
|
|
6195
|
-
|
|
6196
|
-
|
|
6189
|
+
function onKeyDown(event) {
|
|
6190
|
+
if (scope.enabled === false || scope.enablePan === false) return;
|
|
6191
|
+
handleKeyDown(event);
|
|
6192
|
+
}
|
|
6193
|
+
function onTouchStart(event) {
|
|
6194
|
+
trackPointer(event);
|
|
6195
|
+
switch (pointers.length) {
|
|
6196
|
+
case 1:
|
|
6197
|
+
switch (scope.touches.ONE) {
|
|
6198
|
+
case import_three18.TOUCH.ROTATE:
|
|
6199
|
+
if (scope.enableRotate === false) return;
|
|
6200
|
+
handleTouchStartRotate();
|
|
6201
|
+
state = STATE.TOUCH_ROTATE;
|
|
6202
|
+
break;
|
|
6203
|
+
case import_three18.TOUCH.PAN:
|
|
6204
|
+
if (scope.enablePan === false) return;
|
|
6205
|
+
handleTouchStartPan();
|
|
6206
|
+
state = STATE.TOUCH_PAN;
|
|
6207
|
+
break;
|
|
6208
|
+
default:
|
|
6209
|
+
state = STATE.NONE;
|
|
6210
|
+
}
|
|
6211
|
+
break;
|
|
6212
|
+
case 2:
|
|
6213
|
+
switch (scope.touches.TWO) {
|
|
6214
|
+
case import_three18.TOUCH.DOLLY_PAN:
|
|
6215
|
+
if (scope.enableZoom === false && scope.enablePan === false) return;
|
|
6216
|
+
handleTouchStartDollyPan();
|
|
6217
|
+
state = STATE.TOUCH_DOLLY_PAN;
|
|
6218
|
+
break;
|
|
6219
|
+
case import_three18.TOUCH.DOLLY_ROTATE:
|
|
6220
|
+
if (scope.enableZoom === false && scope.enableRotate === false) return;
|
|
6221
|
+
handleTouchStartDollyRotate();
|
|
6222
|
+
state = STATE.TOUCH_DOLLY_ROTATE;
|
|
6223
|
+
break;
|
|
6224
|
+
default:
|
|
6225
|
+
state = STATE.NONE;
|
|
6226
|
+
}
|
|
6227
|
+
break;
|
|
6228
|
+
default:
|
|
6229
|
+
state = STATE.NONE;
|
|
6230
|
+
}
|
|
6231
|
+
if (state !== STATE.NONE) {
|
|
6232
|
+
scope.dispatchEvent(_startEvent);
|
|
6197
6233
|
}
|
|
6198
|
-
scope.update();
|
|
6199
6234
|
}
|
|
6200
|
-
function
|
|
6201
|
-
|
|
6202
|
-
switch (
|
|
6203
|
-
case
|
|
6204
|
-
|
|
6205
|
-
|
|
6235
|
+
function onTouchMove(event) {
|
|
6236
|
+
trackPointer(event);
|
|
6237
|
+
switch (state) {
|
|
6238
|
+
case STATE.TOUCH_ROTATE:
|
|
6239
|
+
if (scope.enableRotate === false) return;
|
|
6240
|
+
handleTouchMoveRotate(event);
|
|
6241
|
+
scope.update();
|
|
6206
6242
|
break;
|
|
6207
|
-
case
|
|
6208
|
-
|
|
6209
|
-
|
|
6243
|
+
case STATE.TOUCH_PAN:
|
|
6244
|
+
if (scope.enablePan === false) return;
|
|
6245
|
+
handleTouchMovePan(event);
|
|
6246
|
+
scope.update();
|
|
6210
6247
|
break;
|
|
6211
|
-
case
|
|
6212
|
-
|
|
6213
|
-
|
|
6248
|
+
case STATE.TOUCH_DOLLY_PAN:
|
|
6249
|
+
if (scope.enableZoom === false && scope.enablePan === false) return;
|
|
6250
|
+
handleTouchMoveDollyPan(event);
|
|
6251
|
+
scope.update();
|
|
6214
6252
|
break;
|
|
6215
|
-
case
|
|
6216
|
-
|
|
6217
|
-
|
|
6253
|
+
case STATE.TOUCH_DOLLY_ROTATE:
|
|
6254
|
+
if (scope.enableZoom === false && scope.enableRotate === false) return;
|
|
6255
|
+
handleTouchMoveDollyRotate(event);
|
|
6256
|
+
scope.update();
|
|
6218
6257
|
break;
|
|
6219
|
-
|
|
6220
|
-
|
|
6221
|
-
event.preventDefault();
|
|
6222
|
-
scope.update();
|
|
6258
|
+
default:
|
|
6259
|
+
state = STATE.NONE;
|
|
6223
6260
|
}
|
|
6224
6261
|
}
|
|
6225
|
-
function
|
|
6226
|
-
|
|
6227
|
-
|
|
6228
|
-
|
|
6229
|
-
|
|
6230
|
-
|
|
6231
|
-
|
|
6262
|
+
function onTouchEnd(event) {
|
|
6263
|
+
handleTouchEnd(event);
|
|
6264
|
+
scope.dispatchEvent(_endEvent);
|
|
6265
|
+
state = STATE.NONE;
|
|
6266
|
+
}
|
|
6267
|
+
function onContextMenu(event) {
|
|
6268
|
+
if (scope.enabled === false) return;
|
|
6269
|
+
event.preventDefault();
|
|
6270
|
+
}
|
|
6271
|
+
function addPointer(event) {
|
|
6272
|
+
pointers.push(event);
|
|
6273
|
+
}
|
|
6274
|
+
function removePointer(event) {
|
|
6275
|
+
delete pointerPositions[event.pointerId];
|
|
6276
|
+
for (let i = 0; i < pointers.length; i++) {
|
|
6277
|
+
if (pointers[i].pointerId == event.pointerId) {
|
|
6278
|
+
pointers.splice(i, 1);
|
|
6279
|
+
return;
|
|
6280
|
+
}
|
|
6232
6281
|
}
|
|
6233
6282
|
}
|
|
6234
|
-
function
|
|
6235
|
-
|
|
6236
|
-
|
|
6237
|
-
|
|
6238
|
-
|
|
6239
|
-
const y = 0.5 * (pointers[0].pageY + pointers[1].pageY);
|
|
6240
|
-
panStart.set(x, y);
|
|
6283
|
+
function trackPointer(event) {
|
|
6284
|
+
let position = pointerPositions[event.pointerId];
|
|
6285
|
+
if (position === void 0) {
|
|
6286
|
+
position = new import_three18.Vector2();
|
|
6287
|
+
pointerPositions[event.pointerId] = position;
|
|
6241
6288
|
}
|
|
6289
|
+
position.set(event.pageX, event.pageY);
|
|
6242
6290
|
}
|
|
6243
|
-
function
|
|
6244
|
-
const
|
|
6245
|
-
|
|
6246
|
-
const distance = Math.sqrt(dx * dx + dy * dy);
|
|
6247
|
-
dollyStart.set(0, distance);
|
|
6291
|
+
function getSecondPointerPosition(event) {
|
|
6292
|
+
const pointer = event.pointerId === pointers[0].pointerId ? pointers[1] : pointers[0];
|
|
6293
|
+
return pointerPositions[pointer.pointerId];
|
|
6248
6294
|
}
|
|
6249
|
-
|
|
6250
|
-
|
|
6251
|
-
|
|
6295
|
+
scope.domElement.addEventListener("contextmenu", onContextMenu);
|
|
6296
|
+
scope.domElement.addEventListener("pointerdown", onPointerDown);
|
|
6297
|
+
scope.domElement.addEventListener("pointercancel", onPointerCancel);
|
|
6298
|
+
scope.domElement.addEventListener("wheel", onMouseWheel, { passive: false });
|
|
6299
|
+
this.update();
|
|
6300
|
+
}
|
|
6301
|
+
};
|
|
6302
|
+
var MapControls = class extends OrbitControls {
|
|
6303
|
+
constructor(object, domElement) {
|
|
6304
|
+
super(object, domElement);
|
|
6305
|
+
this.screenSpacePanning = false;
|
|
6306
|
+
this.mouseButtons.LEFT = import_three18.MOUSE.PAN;
|
|
6307
|
+
this.mouseButtons.RIGHT = import_three18.MOUSE.ROTATE;
|
|
6308
|
+
this.touches.ONE = import_three18.TOUCH.PAN;
|
|
6309
|
+
this.touches.TWO = import_three18.TOUCH.DOLLY_ROTATE;
|
|
6310
|
+
}
|
|
6311
|
+
};
|
|
6312
|
+
|
|
6313
|
+
// src/renderer/Renderer.ts
|
|
6314
|
+
var _Renderer = class _Renderer {
|
|
6315
|
+
constructor(options) {
|
|
6316
|
+
this._dirty = true;
|
|
6317
|
+
this._resizeListener = void 0;
|
|
6318
|
+
this._disposed = false;
|
|
6319
|
+
this._debugHelpers = [];
|
|
6320
|
+
this._eventDispatchers = /* @__PURE__ */ new Map();
|
|
6321
|
+
this._changeListener = () => {
|
|
6322
|
+
this._dirty = true;
|
|
6323
|
+
};
|
|
6324
|
+
this.options = (0, import_ts_deepmerge9.default)({}, _Renderer.DEFAULT_OPTIONS, options ?? {});
|
|
6325
|
+
this._animationLoop = this.animate.bind(this);
|
|
6326
|
+
this._frameInterval = this.options.render.fpsLimit > 0 ? 1e3 / this.options.render.fpsLimit : void 0;
|
|
6327
|
+
this._scene = this.createScene();
|
|
6328
|
+
this._camera = this.createCamera();
|
|
6329
|
+
this._renderer = this.createRenderer();
|
|
6330
|
+
this._composer = this.createComposer();
|
|
6331
|
+
if (this.options.render.stats) {
|
|
6332
|
+
this._stats = new import_stats.default();
|
|
6333
|
+
document.body.appendChild(this._stats.dom);
|
|
6252
6334
|
}
|
|
6253
|
-
|
|
6254
|
-
|
|
6255
|
-
|
|
6335
|
+
this.init();
|
|
6336
|
+
this._controls = this.createControls();
|
|
6337
|
+
}
|
|
6338
|
+
//<editor-fold desc="INIT">
|
|
6339
|
+
createScene() {
|
|
6340
|
+
return new MineRenderScene();
|
|
6341
|
+
}
|
|
6342
|
+
createCamera() {
|
|
6343
|
+
switch (this.options.camera.type) {
|
|
6344
|
+
case "perspective":
|
|
6345
|
+
default:
|
|
6346
|
+
return new import_three19.PerspectiveCamera(
|
|
6347
|
+
this.options.camera.perspective.fov,
|
|
6348
|
+
this.options.camera.perspective.aspect ?? this.viewWidth / this.viewHeight,
|
|
6349
|
+
this.options.camera.near,
|
|
6350
|
+
this.options.camera.far
|
|
6351
|
+
);
|
|
6352
|
+
case "orthographic":
|
|
6353
|
+
return new import_three19.OrthographicCamera(
|
|
6354
|
+
this.options.camera.orthographic.left ?? this.viewWidth / -2,
|
|
6355
|
+
this.options.camera.orthographic.right ?? this.viewWidth / 2,
|
|
6356
|
+
this.options.camera.orthographic.top ?? this.viewHeight / 2,
|
|
6357
|
+
this.options.camera.orthographic.bottom ?? this.viewHeight / -2,
|
|
6358
|
+
this.options.camera.near,
|
|
6359
|
+
this.options.camera.far
|
|
6360
|
+
);
|
|
6256
6361
|
}
|
|
6257
|
-
|
|
6258
|
-
|
|
6259
|
-
|
|
6260
|
-
|
|
6261
|
-
|
|
6262
|
-
|
|
6263
|
-
|
|
6264
|
-
|
|
6362
|
+
}
|
|
6363
|
+
createRenderer() {
|
|
6364
|
+
const renderer = new import_three19.WebGLRenderer({
|
|
6365
|
+
antialias: this.options.render.antialias,
|
|
6366
|
+
alpha: true,
|
|
6367
|
+
powerPreference: "high-performance",
|
|
6368
|
+
depth: true
|
|
6369
|
+
});
|
|
6370
|
+
renderer.setClearColor(0, 0);
|
|
6371
|
+
renderer.shadowMap.enabled = true;
|
|
6372
|
+
renderer.shadowMap.type = import_three19.PCFSoftShadowMap;
|
|
6373
|
+
renderer.outputColorSpace = import_three19.SRGBColorSpace;
|
|
6374
|
+
renderer.setSize(this.viewWidth, this.viewHeight);
|
|
6375
|
+
return renderer;
|
|
6376
|
+
}
|
|
6377
|
+
createComposer() {
|
|
6378
|
+
if (!this.options.composer.enabled) return void 0;
|
|
6379
|
+
const composer = new import_postprocessing.EffectComposer(this.renderer);
|
|
6380
|
+
composer.setSize(this.viewWidth, this.viewHeight);
|
|
6381
|
+
composer.addPass(new import_postprocessing.RenderPass(this.scene, this.camera));
|
|
6382
|
+
return composer;
|
|
6383
|
+
}
|
|
6384
|
+
createControls() {
|
|
6385
|
+
if (!this.options.controls?.enabled) return void 0;
|
|
6386
|
+
const position = this.camera.position.clone();
|
|
6387
|
+
const controls = new OrbitControls(this.camera, this.renderer.domElement);
|
|
6388
|
+
this.camera.position.copy(position);
|
|
6389
|
+
const target = this.options.camera.lookingAt;
|
|
6390
|
+
if (isVector3(target)) {
|
|
6391
|
+
controls.target.copy(target);
|
|
6392
|
+
} else if (isTripleArray(target)) {
|
|
6393
|
+
controls.target.set(target[0], target[1], target[2]);
|
|
6394
|
+
}
|
|
6395
|
+
controls.update();
|
|
6396
|
+
controls.saveState();
|
|
6397
|
+
this.registerEventDispatcher(controls);
|
|
6398
|
+
return controls;
|
|
6399
|
+
}
|
|
6400
|
+
//</editor-fold>
|
|
6401
|
+
init() {
|
|
6402
|
+
if (this._disposed) return;
|
|
6403
|
+
if (typeof window["__THREE_DEVTOOLS__"] !== "undefined") {
|
|
6404
|
+
window["__THREE_DEVTOOLS__"].dispatchEvent(new CustomEvent("observe", { detail: this.scene }));
|
|
6405
|
+
}
|
|
6406
|
+
if (this.options.debug.grid) {
|
|
6407
|
+
const gridHelper = new import_three19.GridHelper(128, 16);
|
|
6408
|
+
this._debugHelpers.push(gridHelper);
|
|
6409
|
+
this.scene.add(gridHelper);
|
|
6410
|
+
const gridHelper2 = new import_three19.GridHelper(128, 16);
|
|
6411
|
+
this._debugHelpers.push(gridHelper2);
|
|
6412
|
+
gridHelper2.rotation.x = 90 * (Math.PI / 180);
|
|
6413
|
+
this.scene.add(gridHelper2);
|
|
6414
|
+
const gridHelper3 = new import_three19.GridHelper(128, 16);
|
|
6415
|
+
this._debugHelpers.push(gridHelper3);
|
|
6416
|
+
gridHelper3.rotation.z = 90 * (Math.PI / 180);
|
|
6417
|
+
this.scene.add(gridHelper3);
|
|
6418
|
+
}
|
|
6419
|
+
if (this.options.debug.axes) {
|
|
6420
|
+
const axesHelper = new import_three19.AxesHelper(64);
|
|
6421
|
+
this._debugHelpers.push(axesHelper);
|
|
6422
|
+
this.scene.add(axesHelper);
|
|
6423
|
+
}
|
|
6424
|
+
if (this.options.camera.position) {
|
|
6425
|
+
if (isVector3(this.options.camera.position)) {
|
|
6426
|
+
this.camera.position.set(this.options.camera.position.x, this.options.camera.position.y, this.options.camera.position.z);
|
|
6427
|
+
} else if (isTripleArray(this.options.camera.position)) {
|
|
6428
|
+
this.camera.position.set(this.options.camera.position[0], this.options.camera.position[1], this.options.camera.position[2]);
|
|
6265
6429
|
}
|
|
6266
|
-
rotateDelta.subVectors(rotateEnd, rotateStart).multiplyScalar(scope.rotateSpeed);
|
|
6267
|
-
const element = scope.domElement;
|
|
6268
|
-
rotateLeft(2 * Math.PI * rotateDelta.x / element.clientHeight);
|
|
6269
|
-
rotateUp(2 * Math.PI * rotateDelta.y / element.clientHeight);
|
|
6270
|
-
rotateStart.copy(rotateEnd);
|
|
6271
6430
|
}
|
|
6272
|
-
|
|
6273
|
-
if (
|
|
6274
|
-
|
|
6275
|
-
} else {
|
|
6276
|
-
|
|
6277
|
-
const x = 0.5 * (event.pageX + position.x);
|
|
6278
|
-
const y = 0.5 * (event.pageY + position.y);
|
|
6279
|
-
panEnd.set(x, y);
|
|
6431
|
+
if (this.options.camera.lookingAt) {
|
|
6432
|
+
if (isVector3(this.options.camera.lookingAt)) {
|
|
6433
|
+
this.camera.lookAt(this.options.camera.lookingAt);
|
|
6434
|
+
} else if (isTripleArray(this.options.camera.lookingAt)) {
|
|
6435
|
+
this.camera.lookAt(this.options.camera.lookingAt[0], this.options.camera.lookingAt[1], this.options.camera.lookingAt[2]);
|
|
6280
6436
|
}
|
|
6281
|
-
panDelta.subVectors(panEnd, panStart).multiplyScalar(scope.panSpeed);
|
|
6282
|
-
pan(panDelta.x, panDelta.y);
|
|
6283
|
-
panStart.copy(panEnd);
|
|
6284
6437
|
}
|
|
6285
|
-
|
|
6286
|
-
|
|
6287
|
-
|
|
6288
|
-
|
|
6289
|
-
|
|
6290
|
-
dollyEnd.set(0, distance);
|
|
6291
|
-
dollyDelta.set(0, Math.pow(dollyEnd.y / dollyStart.y, scope.zoomSpeed));
|
|
6292
|
-
dollyOut(dollyDelta.y);
|
|
6293
|
-
dollyStart.copy(dollyEnd);
|
|
6438
|
+
if (this.options.render.autoResize && !this._resizeListener) {
|
|
6439
|
+
this._resizeListener = () => {
|
|
6440
|
+
this.resize(this.viewWidth, this.viewHeight);
|
|
6441
|
+
};
|
|
6442
|
+
window.addEventListener("resize", this._resizeListener);
|
|
6294
6443
|
}
|
|
6295
|
-
|
|
6296
|
-
|
|
6297
|
-
|
|
6444
|
+
}
|
|
6445
|
+
get element() {
|
|
6446
|
+
return this._element;
|
|
6447
|
+
}
|
|
6448
|
+
appendTo(element) {
|
|
6449
|
+
if (this._disposed) return;
|
|
6450
|
+
this._element = element;
|
|
6451
|
+
this._element.appendChild(this.renderer.domElement);
|
|
6452
|
+
if (this.viewWidth == 0) {
|
|
6453
|
+
console.warn("0 element width");
|
|
6298
6454
|
}
|
|
6299
|
-
|
|
6300
|
-
|
|
6301
|
-
if (scope.enableRotate) handleTouchMoveRotate(event);
|
|
6455
|
+
if (this.viewHeight == 0) {
|
|
6456
|
+
console.warn("0 element height");
|
|
6302
6457
|
}
|
|
6303
|
-
|
|
6458
|
+
this.resize(this.viewWidth, this.viewHeight);
|
|
6459
|
+
}
|
|
6460
|
+
/**
|
|
6461
|
+
* Redraws when the dispatcher emits the selected event. Registering the same pair twice has no effect.
|
|
6462
|
+
* The renderer removes its listener on disposal; the caller retains ownership of the dispatcher.
|
|
6463
|
+
*/
|
|
6464
|
+
registerEventDispatcher(dispatcher, changeEvent2 = "change") {
|
|
6465
|
+
if (this._disposed) return;
|
|
6466
|
+
let events = this._eventDispatchers.get(dispatcher);
|
|
6467
|
+
if (!events) {
|
|
6468
|
+
events = /* @__PURE__ */ new Set();
|
|
6469
|
+
this._eventDispatchers.set(dispatcher, events);
|
|
6304
6470
|
}
|
|
6305
|
-
|
|
6306
|
-
|
|
6307
|
-
|
|
6308
|
-
|
|
6309
|
-
|
|
6310
|
-
|
|
6311
|
-
|
|
6312
|
-
|
|
6313
|
-
|
|
6314
|
-
|
|
6315
|
-
|
|
6316
|
-
|
|
6317
|
-
|
|
6471
|
+
if (events.has(changeEvent2)) return;
|
|
6472
|
+
events.add(changeEvent2);
|
|
6473
|
+
dispatcher.addEventListener(changeEvent2, this._changeListener);
|
|
6474
|
+
}
|
|
6475
|
+
resize(width, height) {
|
|
6476
|
+
if (this._disposed) return;
|
|
6477
|
+
if (isPerspectiveCamera(this.camera)) {
|
|
6478
|
+
this.camera.aspect = width / height;
|
|
6479
|
+
this.camera.updateProjectionMatrix();
|
|
6480
|
+
} else if (isOrthographicCamera(this.camera)) {
|
|
6481
|
+
this.camera.left = width / -2;
|
|
6482
|
+
this.camera.right = width / 2;
|
|
6483
|
+
this.camera.top = height / 2;
|
|
6484
|
+
this.camera.bottom = height / -2;
|
|
6485
|
+
this.camera.updateProjectionMatrix();
|
|
6318
6486
|
}
|
|
6319
|
-
|
|
6320
|
-
|
|
6321
|
-
|
|
6322
|
-
|
|
6323
|
-
|
|
6324
|
-
|
|
6325
|
-
|
|
6487
|
+
this.renderer.setSize(width, height);
|
|
6488
|
+
this.composer?.setSize(width, height);
|
|
6489
|
+
this._dirty = true;
|
|
6490
|
+
}
|
|
6491
|
+
//<editor-fold desc="RENDER">
|
|
6492
|
+
get dirty() {
|
|
6493
|
+
return this._dirty || this.scene.dirty;
|
|
6494
|
+
}
|
|
6495
|
+
set dirty(dirty) {
|
|
6496
|
+
this._dirty = dirty;
|
|
6497
|
+
this.scene.dirty = dirty;
|
|
6498
|
+
}
|
|
6499
|
+
start() {
|
|
6500
|
+
if (this._disposed) return;
|
|
6501
|
+
this.stop();
|
|
6502
|
+
this.renderer.setAnimationLoop(this._animationLoop);
|
|
6503
|
+
}
|
|
6504
|
+
stop() {
|
|
6505
|
+
if (this._disposed) return;
|
|
6506
|
+
this.renderer.setAnimationLoop(null);
|
|
6507
|
+
this._nextFrameTime = void 0;
|
|
6508
|
+
}
|
|
6509
|
+
/**
|
|
6510
|
+
* Stops rendering and releases owned resources. Repeated calls have no effect, and a disposed
|
|
6511
|
+
* renderer cannot be restarted. Scene objects are detached; shared assets and caller-owned
|
|
6512
|
+
* controls must be managed by their owners.
|
|
6513
|
+
*/
|
|
6514
|
+
dispose() {
|
|
6515
|
+
if (this._disposed) return;
|
|
6516
|
+
this.stop();
|
|
6517
|
+
this._disposed = true;
|
|
6518
|
+
if (this._resizeListener) {
|
|
6519
|
+
window.removeEventListener("resize", this._resizeListener);
|
|
6520
|
+
this._resizeListener = void 0;
|
|
6521
|
+
}
|
|
6522
|
+
for (const [dispatcher, events] of this._eventDispatchers) {
|
|
6523
|
+
for (const event of events) {
|
|
6524
|
+
dispatcher.removeEventListener(event, this._changeListener);
|
|
6525
|
+
}
|
|
6526
|
+
}
|
|
6527
|
+
this._eventDispatchers.clear();
|
|
6528
|
+
this._stats?.dom.remove();
|
|
6529
|
+
this._stats = void 0;
|
|
6530
|
+
this.renderer.domElement.remove();
|
|
6531
|
+
this._element = void 0;
|
|
6532
|
+
if (this._controls) {
|
|
6533
|
+
const controls = this._controls;
|
|
6534
|
+
this._controls = void 0;
|
|
6535
|
+
controls.enabled = false;
|
|
6536
|
+
controls.dispose();
|
|
6537
|
+
}
|
|
6538
|
+
this.scene.clear();
|
|
6539
|
+
for (const helper of this._debugHelpers) {
|
|
6540
|
+
helper.geometry.dispose();
|
|
6541
|
+
const materials = Array.isArray(helper.material) ? helper.material : [helper.material];
|
|
6542
|
+
for (const material of materials) {
|
|
6543
|
+
material.dispose();
|
|
6544
|
+
}
|
|
6545
|
+
}
|
|
6546
|
+
this._debugHelpers.length = 0;
|
|
6547
|
+
this.composer?.dispose();
|
|
6548
|
+
this.renderer.dispose();
|
|
6549
|
+
this.renderer.forceContextLoss();
|
|
6550
|
+
}
|
|
6551
|
+
animate(t = performance.now()) {
|
|
6552
|
+
if (this._disposed) return;
|
|
6553
|
+
if (this._controls?.enabled) {
|
|
6554
|
+
this._controls.update();
|
|
6555
|
+
}
|
|
6556
|
+
if (this._disposed) return;
|
|
6557
|
+
if (!this.dirty && !this.options.render.renderAlways) return;
|
|
6558
|
+
const interval = this._frameInterval;
|
|
6559
|
+
if (interval) {
|
|
6560
|
+
const next = this._nextFrameTime;
|
|
6561
|
+
if (next !== void 0 && t + 0.1 < next) return;
|
|
6562
|
+
this._nextFrameTime = next !== void 0 && t - next < interval ? next + interval : t + interval;
|
|
6326
6563
|
}
|
|
6327
|
-
|
|
6328
|
-
|
|
6329
|
-
if (event.pointerType === "touch") {
|
|
6330
|
-
onTouchEnd();
|
|
6331
|
-
} else {
|
|
6332
|
-
onMouseUp(event);
|
|
6333
|
-
}
|
|
6334
|
-
removePointer(event);
|
|
6335
|
-
if (pointers.length === 0) {
|
|
6336
|
-
scope.domElement.releasePointerCapture(event.pointerId);
|
|
6337
|
-
scope.domElement.removeEventListener("pointermove", onPointerMove);
|
|
6338
|
-
scope.domElement.removeEventListener("pointerup", onPointerUp);
|
|
6339
|
-
}
|
|
6564
|
+
if (this._stats) {
|
|
6565
|
+
this._stats.begin();
|
|
6340
6566
|
}
|
|
6341
|
-
|
|
6342
|
-
|
|
6567
|
+
if (this.options.composer.enabled && this.composer) {
|
|
6568
|
+
this.composer.render();
|
|
6569
|
+
} else {
|
|
6570
|
+
this.renderer.render(this.scene, this.camera);
|
|
6343
6571
|
}
|
|
6344
|
-
|
|
6345
|
-
|
|
6346
|
-
|
|
6347
|
-
|
|
6348
|
-
|
|
6349
|
-
|
|
6350
|
-
|
|
6351
|
-
|
|
6352
|
-
|
|
6353
|
-
|
|
6354
|
-
|
|
6355
|
-
|
|
6356
|
-
|
|
6357
|
-
|
|
6358
|
-
|
|
6359
|
-
|
|
6360
|
-
|
|
6361
|
-
|
|
6362
|
-
|
|
6363
|
-
|
|
6364
|
-
|
|
6365
|
-
|
|
6366
|
-
|
|
6367
|
-
|
|
6368
|
-
|
|
6369
|
-
|
|
6370
|
-
|
|
6371
|
-
|
|
6372
|
-
|
|
6373
|
-
|
|
6374
|
-
|
|
6375
|
-
|
|
6376
|
-
|
|
6377
|
-
|
|
6378
|
-
|
|
6379
|
-
|
|
6380
|
-
|
|
6381
|
-
|
|
6382
|
-
|
|
6383
|
-
|
|
6384
|
-
|
|
6385
|
-
|
|
6386
|
-
|
|
6387
|
-
|
|
6388
|
-
|
|
6572
|
+
this.dirty = false;
|
|
6573
|
+
if (this._stats) {
|
|
6574
|
+
this._stats.end();
|
|
6575
|
+
}
|
|
6576
|
+
}
|
|
6577
|
+
//</editor-fold>
|
|
6578
|
+
toImage() {
|
|
6579
|
+
return this.renderer.domElement.toDataURL();
|
|
6580
|
+
}
|
|
6581
|
+
///
|
|
6582
|
+
get attachedToBody() {
|
|
6583
|
+
return this.element === document.body;
|
|
6584
|
+
}
|
|
6585
|
+
get viewWidth() {
|
|
6586
|
+
return this.attachedToBody ? window.innerWidth : this.element?.offsetWidth || 0;
|
|
6587
|
+
}
|
|
6588
|
+
get viewHeight() {
|
|
6589
|
+
return this.attachedToBody ? window.innerHeight : this.element?.offsetHeight || 0;
|
|
6590
|
+
}
|
|
6591
|
+
get scene() {
|
|
6592
|
+
return this._scene;
|
|
6593
|
+
}
|
|
6594
|
+
get camera() {
|
|
6595
|
+
return this._camera;
|
|
6596
|
+
}
|
|
6597
|
+
get renderer() {
|
|
6598
|
+
return this._renderer;
|
|
6599
|
+
}
|
|
6600
|
+
get composer() {
|
|
6601
|
+
return this._composer;
|
|
6602
|
+
}
|
|
6603
|
+
/** Renderer-owned controls, or undefined when disabled at construction or after disposal. */
|
|
6604
|
+
get controls() {
|
|
6605
|
+
return this._controls;
|
|
6606
|
+
}
|
|
6607
|
+
///
|
|
6608
|
+
};
|
|
6609
|
+
_Renderer.DEFAULT_OPTIONS = (0, import_ts_deepmerge9.default)({}, {
|
|
6610
|
+
camera: {
|
|
6611
|
+
type: "perspective",
|
|
6612
|
+
near: 1,
|
|
6613
|
+
far: 5e3,
|
|
6614
|
+
perspective: {
|
|
6615
|
+
aspect: void 0,
|
|
6616
|
+
fov: 50
|
|
6617
|
+
},
|
|
6618
|
+
orthographic: {
|
|
6619
|
+
left: void 0,
|
|
6620
|
+
right: void 0,
|
|
6621
|
+
top: void 0,
|
|
6622
|
+
bottom: void 0
|
|
6623
|
+
},
|
|
6624
|
+
position: new import_three19.Vector3(50, 50, 50),
|
|
6625
|
+
lookingAt: new import_three19.Vector3(0, 0, 0)
|
|
6626
|
+
},
|
|
6627
|
+
render: {
|
|
6628
|
+
fpsLimit: 60,
|
|
6629
|
+
stats: false,
|
|
6630
|
+
antialias: true,
|
|
6631
|
+
shade: true,
|
|
6632
|
+
autoResize: true,
|
|
6633
|
+
renderAlways: false
|
|
6634
|
+
},
|
|
6635
|
+
composer: {
|
|
6636
|
+
enabled: true
|
|
6637
|
+
},
|
|
6638
|
+
controls: {
|
|
6639
|
+
enabled: false
|
|
6640
|
+
},
|
|
6641
|
+
debug: {
|
|
6642
|
+
grid: false,
|
|
6643
|
+
axes: false
|
|
6644
|
+
}
|
|
6645
|
+
});
|
|
6646
|
+
var Renderer = _Renderer;
|
|
6647
|
+
|
|
6648
|
+
// src/skin/Skins.ts
|
|
6649
|
+
var Skins = class {
|
|
6650
|
+
//<editor-fold desc="Skins">
|
|
6651
|
+
static async fromUuidOrUsername(uuidOrUsername) {
|
|
6652
|
+
if (uuidOrUsername.length === 32 || uuidOrUsername.length === 36) {
|
|
6653
|
+
return this.fromUuid(uuidOrUsername);
|
|
6654
|
+
}
|
|
6655
|
+
return this.fromUsername(uuidOrUsername);
|
|
6656
|
+
}
|
|
6657
|
+
static async fromUuid(uuid) {
|
|
6658
|
+
return this.getSkinProxySkinUrl(uuid);
|
|
6659
|
+
}
|
|
6660
|
+
static async fromUsername(username) {
|
|
6661
|
+
return this.usernameToUuid(username).then((uuid) => {
|
|
6662
|
+
if (uuid) {
|
|
6663
|
+
return this.fromUuid(uuid);
|
|
6389
6664
|
}
|
|
6390
|
-
|
|
6391
|
-
|
|
6665
|
+
return void 0;
|
|
6666
|
+
});
|
|
6667
|
+
}
|
|
6668
|
+
static async fromMineSkin(mineskinId) {
|
|
6669
|
+
return this.getMineSkin(mineskinId).then((mineskin) => {
|
|
6670
|
+
if (mineskin) {
|
|
6671
|
+
return mineskin["data"]["texture"]["value"]["urls"]["skins"];
|
|
6392
6672
|
}
|
|
6673
|
+
return void 0;
|
|
6674
|
+
});
|
|
6675
|
+
}
|
|
6676
|
+
//</editor-fold>
|
|
6677
|
+
//<editor-fold desc="Capes">
|
|
6678
|
+
static async capeFromUuidOrUsername(uuidOrUsername) {
|
|
6679
|
+
if (uuidOrUsername.length === 32 || uuidOrUsername.length === 36) {
|
|
6680
|
+
return this.capeFromUuid(uuidOrUsername);
|
|
6393
6681
|
}
|
|
6394
|
-
|
|
6395
|
-
|
|
6396
|
-
|
|
6397
|
-
|
|
6398
|
-
|
|
6399
|
-
|
|
6400
|
-
|
|
6401
|
-
|
|
6402
|
-
|
|
6403
|
-
handleMouseMoveDolly(event);
|
|
6404
|
-
break;
|
|
6405
|
-
case STATE.PAN:
|
|
6406
|
-
if (scope.enablePan === false) return;
|
|
6407
|
-
handleMouseMovePan(event);
|
|
6408
|
-
break;
|
|
6682
|
+
return this.capeFromUsername(uuidOrUsername);
|
|
6683
|
+
}
|
|
6684
|
+
static async capeFromUuid(uuid) {
|
|
6685
|
+
return this.getSkinProxyCapeUrl(uuid);
|
|
6686
|
+
}
|
|
6687
|
+
static async capeFromUsername(username) {
|
|
6688
|
+
return this.usernameToUuid(username).then((uuid) => {
|
|
6689
|
+
if (uuid) {
|
|
6690
|
+
return this.capeFromUuid(uuid);
|
|
6409
6691
|
}
|
|
6410
|
-
|
|
6411
|
-
|
|
6412
|
-
|
|
6413
|
-
|
|
6414
|
-
|
|
6415
|
-
|
|
6416
|
-
|
|
6417
|
-
if (scope.enabled === false || scope.enableZoom === false || state !== STATE.NONE) return;
|
|
6418
|
-
event.preventDefault();
|
|
6419
|
-
scope.dispatchEvent(_startEvent);
|
|
6420
|
-
handleMouseWheel(event);
|
|
6421
|
-
scope.dispatchEvent(_endEvent);
|
|
6422
|
-
}
|
|
6423
|
-
function onKeyDown(event) {
|
|
6424
|
-
if (scope.enabled === false || scope.enablePan === false) return;
|
|
6425
|
-
handleKeyDown(event);
|
|
6426
|
-
}
|
|
6427
|
-
function onTouchStart(event) {
|
|
6428
|
-
trackPointer(event);
|
|
6429
|
-
switch (pointers.length) {
|
|
6430
|
-
case 1:
|
|
6431
|
-
switch (scope.touches.ONE) {
|
|
6432
|
-
case import_three20.TOUCH.ROTATE:
|
|
6433
|
-
if (scope.enableRotate === false) return;
|
|
6434
|
-
handleTouchStartRotate();
|
|
6435
|
-
state = STATE.TOUCH_ROTATE;
|
|
6436
|
-
break;
|
|
6437
|
-
case import_three20.TOUCH.PAN:
|
|
6438
|
-
if (scope.enablePan === false) return;
|
|
6439
|
-
handleTouchStartPan();
|
|
6440
|
-
state = STATE.TOUCH_PAN;
|
|
6441
|
-
break;
|
|
6442
|
-
default:
|
|
6443
|
-
state = STATE.NONE;
|
|
6444
|
-
}
|
|
6445
|
-
break;
|
|
6446
|
-
case 2:
|
|
6447
|
-
switch (scope.touches.TWO) {
|
|
6448
|
-
case import_three20.TOUCH.DOLLY_PAN:
|
|
6449
|
-
if (scope.enableZoom === false && scope.enablePan === false) return;
|
|
6450
|
-
handleTouchStartDollyPan();
|
|
6451
|
-
state = STATE.TOUCH_DOLLY_PAN;
|
|
6452
|
-
break;
|
|
6453
|
-
case import_three20.TOUCH.DOLLY_ROTATE:
|
|
6454
|
-
if (scope.enableZoom === false && scope.enableRotate === false) return;
|
|
6455
|
-
handleTouchStartDollyRotate();
|
|
6456
|
-
state = STATE.TOUCH_DOLLY_ROTATE;
|
|
6457
|
-
break;
|
|
6458
|
-
default:
|
|
6459
|
-
state = STATE.NONE;
|
|
6460
|
-
}
|
|
6461
|
-
break;
|
|
6462
|
-
default:
|
|
6463
|
-
state = STATE.NONE;
|
|
6692
|
+
return void 0;
|
|
6693
|
+
});
|
|
6694
|
+
}
|
|
6695
|
+
static async capeFromCapesDev(uuid, capeType = "minecraft") {
|
|
6696
|
+
return this.getCapesDev(uuid, capeType).then((cape) => {
|
|
6697
|
+
if (cape) {
|
|
6698
|
+
return cape?.stillImageUrl;
|
|
6464
6699
|
}
|
|
6465
|
-
|
|
6466
|
-
|
|
6700
|
+
return void 0;
|
|
6701
|
+
});
|
|
6702
|
+
}
|
|
6703
|
+
//</editor-fold>
|
|
6704
|
+
//<editor-fold desc="Helpers">
|
|
6705
|
+
static async usernameToUuid(username) {
|
|
6706
|
+
return this.usernameToUuidSkinProxy(username);
|
|
6707
|
+
}
|
|
6708
|
+
static async usernameToUuidSkinProxy(username) {
|
|
6709
|
+
return Requests.genericRequest({
|
|
6710
|
+
baseURL: "https://minecraft-skin-proxy.inventive.workers.dev",
|
|
6711
|
+
url: "/uuid/" + username
|
|
6712
|
+
}).then((res) => {
|
|
6713
|
+
if (res.status === 200) {
|
|
6714
|
+
return res.data["id"];
|
|
6467
6715
|
}
|
|
6468
|
-
|
|
6469
|
-
|
|
6470
|
-
|
|
6471
|
-
|
|
6472
|
-
|
|
6473
|
-
|
|
6474
|
-
|
|
6475
|
-
|
|
6476
|
-
|
|
6477
|
-
|
|
6478
|
-
|
|
6479
|
-
|
|
6480
|
-
|
|
6481
|
-
break;
|
|
6482
|
-
case STATE.TOUCH_DOLLY_PAN:
|
|
6483
|
-
if (scope.enableZoom === false && scope.enablePan === false) return;
|
|
6484
|
-
handleTouchMoveDollyPan(event);
|
|
6485
|
-
scope.update();
|
|
6486
|
-
break;
|
|
6487
|
-
case STATE.TOUCH_DOLLY_ROTATE:
|
|
6488
|
-
if (scope.enableZoom === false && scope.enableRotate === false) return;
|
|
6489
|
-
handleTouchMoveDollyRotate(event);
|
|
6490
|
-
scope.update();
|
|
6491
|
-
break;
|
|
6492
|
-
default:
|
|
6493
|
-
state = STATE.NONE;
|
|
6716
|
+
return void 0;
|
|
6717
|
+
}).catch((err) => {
|
|
6718
|
+
console.warn(err);
|
|
6719
|
+
return void 0;
|
|
6720
|
+
});
|
|
6721
|
+
}
|
|
6722
|
+
static async usernameToUuidMineTools(username) {
|
|
6723
|
+
return Requests.genericRequest({
|
|
6724
|
+
baseURL: "https://api.minetools.eu",
|
|
6725
|
+
url: "/uuid/" + username
|
|
6726
|
+
}).then((res) => {
|
|
6727
|
+
if (res.status === 200) {
|
|
6728
|
+
return res.data["id"];
|
|
6494
6729
|
}
|
|
6495
|
-
|
|
6496
|
-
|
|
6497
|
-
|
|
6498
|
-
|
|
6499
|
-
|
|
6500
|
-
|
|
6501
|
-
|
|
6502
|
-
|
|
6503
|
-
|
|
6504
|
-
|
|
6505
|
-
|
|
6506
|
-
|
|
6507
|
-
|
|
6508
|
-
function removePointer(event) {
|
|
6509
|
-
delete pointerPositions[event.pointerId];
|
|
6510
|
-
for (let i = 0; i < pointers.length; i++) {
|
|
6511
|
-
if (pointers[i].pointerId == event.pointerId) {
|
|
6512
|
-
pointers.splice(i, 1);
|
|
6513
|
-
return;
|
|
6514
|
-
}
|
|
6730
|
+
return void 0;
|
|
6731
|
+
}).catch((err) => {
|
|
6732
|
+
console.warn(err);
|
|
6733
|
+
return void 0;
|
|
6734
|
+
});
|
|
6735
|
+
}
|
|
6736
|
+
static async getProfileFromMinetools(uuid) {
|
|
6737
|
+
return Requests.genericRequest({
|
|
6738
|
+
baseURL: "https://api.minetools.eu",
|
|
6739
|
+
url: "/profile/" + uuid
|
|
6740
|
+
}).then((res) => {
|
|
6741
|
+
if (res.status === 200) {
|
|
6742
|
+
return res.data;
|
|
6515
6743
|
}
|
|
6516
|
-
}
|
|
6517
|
-
|
|
6518
|
-
|
|
6519
|
-
|
|
6520
|
-
|
|
6521
|
-
|
|
6744
|
+
});
|
|
6745
|
+
}
|
|
6746
|
+
static async getMineSkin(mineskinId) {
|
|
6747
|
+
return Requests.genericRequest({
|
|
6748
|
+
baseURL: "https://api.mineskin.org",
|
|
6749
|
+
url: "/get/uuid/" + mineskinId
|
|
6750
|
+
}).then((res) => {
|
|
6751
|
+
if (res.status === 200) {
|
|
6752
|
+
return res.data;
|
|
6522
6753
|
}
|
|
6523
|
-
|
|
6524
|
-
}
|
|
6525
|
-
|
|
6526
|
-
|
|
6527
|
-
|
|
6528
|
-
}
|
|
6529
|
-
scope.domElement.addEventListener("contextmenu", onContextMenu);
|
|
6530
|
-
scope.domElement.addEventListener("pointerdown", onPointerDown);
|
|
6531
|
-
scope.domElement.addEventListener("pointercancel", onPointerCancel);
|
|
6532
|
-
scope.domElement.addEventListener("wheel", onMouseWheel, { passive: false });
|
|
6533
|
-
this.update();
|
|
6754
|
+
return void 0;
|
|
6755
|
+
}).catch((err) => {
|
|
6756
|
+
console.warn(err);
|
|
6757
|
+
return void 0;
|
|
6758
|
+
});
|
|
6534
6759
|
}
|
|
6535
|
-
|
|
6536
|
-
|
|
6537
|
-
|
|
6538
|
-
|
|
6539
|
-
|
|
6540
|
-
|
|
6541
|
-
|
|
6542
|
-
|
|
6543
|
-
|
|
6760
|
+
static async getCapesDev(uuid, type = "all") {
|
|
6761
|
+
return Requests.genericRequest({
|
|
6762
|
+
baseURL: "https://api.capes.dev",
|
|
6763
|
+
url: "/load/" + uuid + "/" + type
|
|
6764
|
+
}).then((res) => {
|
|
6765
|
+
if (res.status === 200) {
|
|
6766
|
+
return res.data;
|
|
6767
|
+
}
|
|
6768
|
+
return void 0;
|
|
6769
|
+
}).catch((err) => {
|
|
6770
|
+
console.warn(err);
|
|
6771
|
+
return void 0;
|
|
6772
|
+
});
|
|
6773
|
+
}
|
|
6774
|
+
static getCrafatarSkinUrl(uuid) {
|
|
6775
|
+
return "https://crafatar.com/skins/" + uuid;
|
|
6544
6776
|
}
|
|
6777
|
+
static getCrafatarCapeUrl(uuid) {
|
|
6778
|
+
return "https://crafatar.com/capes/" + uuid;
|
|
6779
|
+
}
|
|
6780
|
+
static getMcHeadsSkinUrl(uuid) {
|
|
6781
|
+
return "https://mc-heads.net/skin/" + uuid;
|
|
6782
|
+
}
|
|
6783
|
+
static getMineSkinPlayerSkinUrl(uuid) {
|
|
6784
|
+
return "https://mineskin.org/skin/player/" + uuid;
|
|
6785
|
+
}
|
|
6786
|
+
static getSkinProxySkinUrl(uuid) {
|
|
6787
|
+
return "https://minecraft-skin-proxy.inventive.workers.dev/skin/" + uuid;
|
|
6788
|
+
}
|
|
6789
|
+
static getSkinProxyCapeUrl(uuid) {
|
|
6790
|
+
return "https://minecraft-skin-proxy.inventive.workers.dev/cape/" + uuid;
|
|
6791
|
+
}
|
|
6792
|
+
//</editor-fold>
|
|
6545
6793
|
};
|
|
6546
6794
|
|
|
6547
6795
|
// src/world/Chunk.ts
|