minerender 2.1.0-alpha.47 → 2.1.0-alpha.49
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/dist/browser/index.d.mts +37 -5
- package/dist/browser/index.d.ts +37 -5
- package/dist/browser/index.js +280 -145
- package/dist/browser/index.js.map +1 -1
- package/dist/browser/index.mjs +155 -20
- package/dist/browser/index.mjs.map +1 -1
- package/dist/bundle.js +249 -3
- package/dist/bundle.js.map +1 -1
- package/dist/node/index.d.mts +37 -5
- package/dist/node/index.d.ts +37 -5
- package/dist/node/index.js +282 -145
- package/dist/node/index.js.map +1 -1
- package/dist/node/index.mjs +155 -20
- package/dist/node/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/browser/index.js
CHANGED
|
@@ -839,6 +839,31 @@ var init_Materials = __esm({
|
|
|
839
839
|
alphaTest: 0.5
|
|
840
840
|
});
|
|
841
841
|
}
|
|
842
|
+
static createGuiCanvasMaterial(canvas) {
|
|
843
|
+
const material = new import_three5.MeshBasicMaterial({
|
|
844
|
+
map: Textures.createCanvasTexture(canvas),
|
|
845
|
+
transparent: true,
|
|
846
|
+
depthWrite: false,
|
|
847
|
+
side: import_three5.DoubleSide,
|
|
848
|
+
toneMapped: false
|
|
849
|
+
});
|
|
850
|
+
material.onBeforeCompile = (shader) => {
|
|
851
|
+
for (const [stage, direction] of [["vertex", "out"], ["fragment", "in"]]) {
|
|
852
|
+
const chunk = `uv_pars_${stage}`;
|
|
853
|
+
shader[`${stage}Shader`] = shader[`${stage}Shader`].replace(
|
|
854
|
+
`#include <${chunk}>`,
|
|
855
|
+
import_three5.ShaderChunk[chunk].replace("varying vec2 vMapUv;", `
|
|
856
|
+
#if __VERSION__ >= 300
|
|
857
|
+
centroid ${direction} vec2 vMapUv;
|
|
858
|
+
#else
|
|
859
|
+
varying vec2 vMapUv;
|
|
860
|
+
#endif
|
|
861
|
+
`)
|
|
862
|
+
);
|
|
863
|
+
}
|
|
864
|
+
};
|
|
865
|
+
return material;
|
|
866
|
+
}
|
|
842
867
|
static createShadedCanvasMaterial(canvas, transparent = false, shade = false) {
|
|
843
868
|
const vertShader = `
|
|
844
869
|
uniform bool SHADE;
|
|
@@ -2985,6 +3010,10 @@ var init_SceneObject = __esm({
|
|
|
2985
3010
|
async init() {
|
|
2986
3011
|
}
|
|
2987
3012
|
notifyDirty() {
|
|
3013
|
+
this.traverseAncestors((parent) => {
|
|
3014
|
+
const scene = parent;
|
|
3015
|
+
if (scene.isMineRenderScene) scene.dirty = true;
|
|
3016
|
+
});
|
|
2988
3017
|
this.dispatchEvent(changeEvent);
|
|
2989
3018
|
}
|
|
2990
3019
|
//<editor-fold desc="GROUPS">
|
|
@@ -3328,6 +3357,7 @@ var init_SceneObject = __esm({
|
|
|
3328
3357
|
} else {
|
|
3329
3358
|
object.visible = !object.visible;
|
|
3330
3359
|
}
|
|
3360
|
+
this.notifyDirty();
|
|
3331
3361
|
return object.visible;
|
|
3332
3362
|
}
|
|
3333
3363
|
this.notifyDirty();
|
|
@@ -3360,8 +3390,8 @@ var init_SceneObject = __esm({
|
|
|
3360
3390
|
this.notifyDirty();
|
|
3361
3391
|
}
|
|
3362
3392
|
removeFromScene() {
|
|
3363
|
-
this._scene?.remove(this);
|
|
3364
3393
|
this.notifyDirty();
|
|
3394
|
+
this.removeFromParent();
|
|
3365
3395
|
}
|
|
3366
3396
|
//</editor-fold>
|
|
3367
3397
|
};
|
|
@@ -3376,16 +3406,16 @@ var init_SceneObject = __esm({
|
|
|
3376
3406
|
});
|
|
3377
3407
|
|
|
3378
3408
|
// src/model/ModelCulling.ts
|
|
3379
|
-
var
|
|
3409
|
+
var import_three17, ModelCulling;
|
|
3380
3410
|
var init_ModelCulling = __esm({
|
|
3381
3411
|
"src/model/ModelCulling.ts"() {
|
|
3382
|
-
|
|
3412
|
+
import_three17 = require("three");
|
|
3383
3413
|
init_CubeFace();
|
|
3384
3414
|
ModelCulling = class {
|
|
3385
3415
|
static toLocalMask(worldMask, rotation) {
|
|
3386
3416
|
let localMask = 0;
|
|
3387
3417
|
for (const [localFace, offset] of CUBE_FACE_OFFSETS.entries()) {
|
|
3388
|
-
const normal = new
|
|
3418
|
+
const normal = new import_three17.Vector3(...offset).applyEuler(rotation);
|
|
3389
3419
|
const worldFace = CUBE_FACE_OFFSETS.findIndex(([x, y, z]) => Math.abs(normal.x - x) < 1e-6 && Math.abs(normal.y - y) < 1e-6 && Math.abs(normal.z - z) < 1e-6);
|
|
3390
3420
|
if (worldFace < 0) return 0;
|
|
3391
3421
|
if (worldMask & 1 << worldFace) localMask |= 1 << localFace;
|
|
@@ -3429,7 +3459,7 @@ function mergeBufferGeometries(geometries, useGroups = false) {
|
|
|
3429
3459
|
const attributes = {};
|
|
3430
3460
|
const morphAttributes = {};
|
|
3431
3461
|
const morphTargetsRelative = geometries[0].morphTargetsRelative;
|
|
3432
|
-
const mergedGeometry = new
|
|
3462
|
+
const mergedGeometry = new import_three19.BufferGeometry();
|
|
3433
3463
|
let offset = 0;
|
|
3434
3464
|
for (let i = 0; i < geometries.length; ++i) {
|
|
3435
3465
|
const geometry = geometries[i];
|
|
@@ -3553,7 +3583,7 @@ function mergeBufferAttributes(attributes) {
|
|
|
3553
3583
|
array.set(attributes[i].array, offset);
|
|
3554
3584
|
offset += attributes[i].array.length;
|
|
3555
3585
|
}
|
|
3556
|
-
return new
|
|
3586
|
+
return new import_three19.BufferAttribute(array, itemSize, normalized);
|
|
3557
3587
|
}
|
|
3558
3588
|
function interleaveAttributes(attributes) {
|
|
3559
3589
|
let TypedArray;
|
|
@@ -3569,7 +3599,7 @@ function interleaveAttributes(attributes) {
|
|
|
3569
3599
|
arrayLength += attribute.array.length;
|
|
3570
3600
|
stride += attribute.itemSize;
|
|
3571
3601
|
}
|
|
3572
|
-
const interleavedBuffer = new
|
|
3602
|
+
const interleavedBuffer = new import_three19.InterleavedBuffer(new TypedArray(arrayLength), stride);
|
|
3573
3603
|
let offset = 0;
|
|
3574
3604
|
const res = [];
|
|
3575
3605
|
const getters = ["getX", "getY", "getZ", "getW"];
|
|
@@ -3578,7 +3608,7 @@ function interleaveAttributes(attributes) {
|
|
|
3578
3608
|
const attribute = attributes[j];
|
|
3579
3609
|
const itemSize = attribute.itemSize;
|
|
3580
3610
|
const count = attribute.count;
|
|
3581
|
-
const iba = new
|
|
3611
|
+
const iba = new import_three19.InterleavedBufferAttribute(interleavedBuffer, itemSize, offset, attribute.normalized);
|
|
3582
3612
|
res.push(iba);
|
|
3583
3613
|
offset += itemSize;
|
|
3584
3614
|
for (let c = 0; c < count; c++) {
|
|
@@ -3662,13 +3692,13 @@ function mergeVertices(geometry, tolerance = 1e-4) {
|
|
|
3662
3692
|
const name = attributeNames[i];
|
|
3663
3693
|
const oldAttribute = geometry.getAttribute(name);
|
|
3664
3694
|
const buffer = new oldAttribute.array.constructor(attrArrays[name]);
|
|
3665
|
-
const attribute = new
|
|
3695
|
+
const attribute = new import_three19.BufferAttribute(buffer, oldAttribute.itemSize, oldAttribute.normalized);
|
|
3666
3696
|
result.setAttribute(name, attribute);
|
|
3667
3697
|
if (name in morphAttrsArrays) {
|
|
3668
3698
|
for (let j = 0; j < morphAttrsArrays[name].length; j++) {
|
|
3669
3699
|
const oldMorphAttribute = geometry.morphAttributes[name][j];
|
|
3670
3700
|
const buffer2 = new oldMorphAttribute.array.constructor(morphAttrsArrays[name][j]);
|
|
3671
|
-
const morphAttribute = new
|
|
3701
|
+
const morphAttribute = new import_three19.BufferAttribute(buffer2, oldMorphAttribute.itemSize, oldMorphAttribute.normalized);
|
|
3672
3702
|
result.morphAttributes[name][j] = morphAttribute;
|
|
3673
3703
|
}
|
|
3674
3704
|
}
|
|
@@ -3677,11 +3707,11 @@ function mergeVertices(geometry, tolerance = 1e-4) {
|
|
|
3677
3707
|
return result;
|
|
3678
3708
|
}
|
|
3679
3709
|
function toTrianglesDrawMode(geometry, drawMode) {
|
|
3680
|
-
if (drawMode ===
|
|
3710
|
+
if (drawMode === import_three19.TrianglesDrawMode) {
|
|
3681
3711
|
console.warn("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles.");
|
|
3682
3712
|
return geometry;
|
|
3683
3713
|
}
|
|
3684
|
-
if (drawMode ===
|
|
3714
|
+
if (drawMode === import_three19.TriangleFanDrawMode || drawMode === import_three19.TriangleStripDrawMode) {
|
|
3685
3715
|
let index = geometry.getIndex();
|
|
3686
3716
|
if (index === null) {
|
|
3687
3717
|
const indices = [];
|
|
@@ -3699,7 +3729,7 @@ function toTrianglesDrawMode(geometry, drawMode) {
|
|
|
3699
3729
|
}
|
|
3700
3730
|
const numberOfTriangles = index.count - 2;
|
|
3701
3731
|
const newIndices = [];
|
|
3702
|
-
if (drawMode ===
|
|
3732
|
+
if (drawMode === import_three19.TriangleFanDrawMode) {
|
|
3703
3733
|
for (let i = 1; i <= numberOfTriangles; i++) {
|
|
3704
3734
|
newIndices.push(index.getX(0));
|
|
3705
3735
|
newIndices.push(index.getX(i));
|
|
@@ -3735,15 +3765,15 @@ function computeMorphedAttributes(object) {
|
|
|
3735
3765
|
console.error("THREE.BufferGeometryUtils: Geometry is not of type BufferGeometry.");
|
|
3736
3766
|
return null;
|
|
3737
3767
|
}
|
|
3738
|
-
const _vA = new
|
|
3739
|
-
const _vB = new
|
|
3740
|
-
const _vC = new
|
|
3741
|
-
const _tempA = new
|
|
3742
|
-
const _tempB = new
|
|
3743
|
-
const _tempC = new
|
|
3744
|
-
const _morphA = new
|
|
3745
|
-
const _morphB = new
|
|
3746
|
-
const _morphC = new
|
|
3768
|
+
const _vA = new import_three19.Vector3();
|
|
3769
|
+
const _vB = new import_three19.Vector3();
|
|
3770
|
+
const _vC = new import_three19.Vector3();
|
|
3771
|
+
const _tempA = new import_three19.Vector3();
|
|
3772
|
+
const _tempB = new import_three19.Vector3();
|
|
3773
|
+
const _tempC = new import_three19.Vector3();
|
|
3774
|
+
const _morphA = new import_three19.Vector3();
|
|
3775
|
+
const _morphB = new import_three19.Vector3();
|
|
3776
|
+
const _morphC = new import_three19.Vector3();
|
|
3747
3777
|
function _calculateMorphedAttributeData(object2, material2, attribute, morphAttribute, morphTargetsRelative2, a2, b2, c2, modifiedAttributeArray) {
|
|
3748
3778
|
_vA.fromBufferAttribute(attribute, a2);
|
|
3749
3779
|
_vB.fromBufferAttribute(attribute, b2);
|
|
@@ -3938,8 +3968,8 @@ function computeMorphedAttributes(object) {
|
|
|
3938
3968
|
}
|
|
3939
3969
|
}
|
|
3940
3970
|
}
|
|
3941
|
-
const morphedPositionAttribute = new
|
|
3942
|
-
const morphedNormalAttribute = new
|
|
3971
|
+
const morphedPositionAttribute = new import_three19.Float32BufferAttribute(modifiedPosition, 3);
|
|
3972
|
+
const morphedNormalAttribute = new import_three19.Float32BufferAttribute(modifiedNormal, 3);
|
|
3943
3973
|
return {
|
|
3944
3974
|
positionAttribute,
|
|
3945
3975
|
normalAttribute,
|
|
@@ -3947,10 +3977,10 @@ function computeMorphedAttributes(object) {
|
|
|
3947
3977
|
morphedNormalAttribute
|
|
3948
3978
|
};
|
|
3949
3979
|
}
|
|
3950
|
-
var
|
|
3980
|
+
var import_three19;
|
|
3951
3981
|
var init_BufferGeometryUtils = __esm({
|
|
3952
3982
|
"src/three/BufferGeometryUtils.js"() {
|
|
3953
|
-
|
|
3983
|
+
import_three19 = require("three");
|
|
3954
3984
|
}
|
|
3955
3985
|
});
|
|
3956
3986
|
|
|
@@ -3958,13 +3988,13 @@ var init_BufferGeometryUtils = __esm({
|
|
|
3958
3988
|
function isModelObject(obj) {
|
|
3959
3989
|
return obj.isModelObject;
|
|
3960
3990
|
}
|
|
3961
|
-
var
|
|
3991
|
+
var import_three20, import_ts_deepmerge5, p9, _ModelObject, ModelObject;
|
|
3962
3992
|
var init_ModelObject = __esm({
|
|
3963
3993
|
"src/model/scene/ModelObject.ts"() {
|
|
3964
3994
|
init_SceneObject();
|
|
3965
3995
|
init_Materials();
|
|
3966
3996
|
init_UVMapper();
|
|
3967
|
-
|
|
3997
|
+
import_three20 = require("three");
|
|
3968
3998
|
init_BufferGeometryUtils();
|
|
3969
3999
|
init_model();
|
|
3970
4000
|
import_ts_deepmerge5 = __toESM(require_dist());
|
|
@@ -4019,7 +4049,7 @@ var init_ModelObject = __esm({
|
|
|
4019
4049
|
elGeo.clearGroups();
|
|
4020
4050
|
}
|
|
4021
4051
|
if (this.options.uvLockRotation) {
|
|
4022
|
-
UVMapper.lockUvs(elGeo, el.faces, this.atlas, new
|
|
4052
|
+
UVMapper.lockUvs(elGeo, el.faces, this.atlas, new import_three20.Euler(...this.options.uvLockRotation));
|
|
4023
4053
|
}
|
|
4024
4054
|
if (this.options.tints) {
|
|
4025
4055
|
const colors = new Float32Array(elGeo.getAttribute("position").count * 3).fill(1);
|
|
@@ -4028,19 +4058,19 @@ var init_ModelObject = __esm({
|
|
|
4028
4058
|
if (tintIndex === void 0 || tintIndex < 0) continue;
|
|
4029
4059
|
const tint = this.options.tints[tintIndex];
|
|
4030
4060
|
if (tint === void 0) continue;
|
|
4031
|
-
const color = new
|
|
4061
|
+
const color = new import_three20.Color(tint);
|
|
4032
4062
|
for (let vertex = 0; vertex < 4; vertex++) {
|
|
4033
4063
|
color.toArray(colors, (faceIndex * 4 + vertex) * 3);
|
|
4034
4064
|
}
|
|
4035
4065
|
}
|
|
4036
|
-
elGeo.setAttribute("color", new
|
|
4066
|
+
elGeo.setAttribute("color", new import_three20.BufferAttribute(colors, 3));
|
|
4037
4067
|
}
|
|
4038
|
-
elGeo.applyMatrix4(new
|
|
4039
|
-
elGeo.applyMatrix4(new
|
|
4068
|
+
elGeo.applyMatrix4(new import_three20.Matrix4().makeTranslation((el.to[0] - el.from[0]) / 2, (el.to[1] - el.from[1]) / 2, (el.to[2] - el.from[2]) / 2));
|
|
4069
|
+
elGeo.applyMatrix4(new import_three20.Matrix4().makeTranslation(el.from[0], el.from[1], el.from[2]));
|
|
4040
4070
|
if (el.rotation) {
|
|
4041
4071
|
applyElementRotation(el.rotation, elGeo);
|
|
4042
4072
|
}
|
|
4043
|
-
elGeo.applyMatrix4(new
|
|
4073
|
+
elGeo.applyMatrix4(new import_three20.Matrix4().makeTranslation(-8, -8, -8));
|
|
4044
4074
|
if (displayTransform) DisplayTransforms.apply(elGeo, displayTransform);
|
|
4045
4075
|
if (this.options.mergeMeshes) {
|
|
4046
4076
|
allGeos.push(elGeo);
|
|
@@ -4062,7 +4092,7 @@ var init_ModelObject = __esm({
|
|
|
4062
4092
|
if (allGeos.length > 0) {
|
|
4063
4093
|
combinedGeo = mergeBufferGeometries(allGeos);
|
|
4064
4094
|
} else {
|
|
4065
|
-
combinedGeo = new
|
|
4095
|
+
combinedGeo = new import_three20.BoxGeometry(16, 16, 16);
|
|
4066
4096
|
if (displayTransform) DisplayTransforms.apply(combinedGeo, displayTransform);
|
|
4067
4097
|
}
|
|
4068
4098
|
combinedGeo.computeBoundingBox();
|
|
@@ -4172,7 +4202,7 @@ function ownHeight(sample) {
|
|
|
4172
4202
|
return (level === 0 || level >= 8 ? 8 : 8 - level) / 9;
|
|
4173
4203
|
}
|
|
4174
4204
|
function createFluidGeometry(kind, sample) {
|
|
4175
|
-
const geometry = new
|
|
4205
|
+
const geometry = new import_three21.BufferGeometry();
|
|
4176
4206
|
const positions = [], normals = [], uvs = [], indices = [];
|
|
4177
4207
|
const self = sample(0, 0, 0);
|
|
4178
4208
|
const height = (x, z) => {
|
|
@@ -4271,16 +4301,16 @@ function createFluidGeometry(kind, sample) {
|
|
|
4271
4301
|
1
|
|
4272
4302
|
);
|
|
4273
4303
|
}
|
|
4274
|
-
geometry.setAttribute("position", new
|
|
4275
|
-
geometry.setAttribute("normal", new
|
|
4276
|
-
geometry.setAttribute("uv", new
|
|
4304
|
+
geometry.setAttribute("position", new import_three21.Float32BufferAttribute(positions, 3));
|
|
4305
|
+
geometry.setAttribute("normal", new import_three21.Float32BufferAttribute(normals, 3));
|
|
4306
|
+
geometry.setAttribute("uv", new import_three21.Float32BufferAttribute(uvs, 2));
|
|
4277
4307
|
geometry.setIndex(indices);
|
|
4278
4308
|
return geometry;
|
|
4279
4309
|
}
|
|
4280
|
-
var
|
|
4310
|
+
var import_three21, fluidRules, HORIZONTAL, EPSILON;
|
|
4281
4311
|
var init_FluidGeometry = __esm({
|
|
4282
4312
|
"src/model/fluid/FluidGeometry.ts"() {
|
|
4283
|
-
|
|
4313
|
+
import_three21 = require("three");
|
|
4284
4314
|
init_fluidBlocks();
|
|
4285
4315
|
fluidRules = fluidBlocks_default;
|
|
4286
4316
|
HORIZONTAL = [[0, -1], [0, 1], [-1, 0], [1, 0]];
|
|
@@ -4309,10 +4339,10 @@ function sampleFluid(kind, sample) {
|
|
|
4309
4339
|
}
|
|
4310
4340
|
return { key: key.join(""), sample: (x, y, z) => cells[(y + 1) * 9 + (z + 1) * 3 + x + 1] };
|
|
4311
4341
|
}
|
|
4312
|
-
var
|
|
4342
|
+
var import_three22, FluidModelObject;
|
|
4313
4343
|
var init_FluidModelObject = __esm({
|
|
4314
4344
|
"src/model/fluid/FluidModelObject.ts"() {
|
|
4315
|
-
|
|
4345
|
+
import_three22 = require("three");
|
|
4316
4346
|
init_AssetKey();
|
|
4317
4347
|
init_Materials();
|
|
4318
4348
|
init_ModelObject();
|
|
@@ -4345,10 +4375,10 @@ var init_FluidModelObject = __esm({
|
|
|
4345
4375
|
}
|
|
4346
4376
|
}
|
|
4347
4377
|
geometry.clearGroups();
|
|
4348
|
-
const color = new
|
|
4378
|
+
const color = new import_three22.Color(this.options.tints?.[0] ?? (this.kind === "water" ? 4159204 : 16777215));
|
|
4349
4379
|
const colors = new Float32Array(geometry.getAttribute("position").count * 3);
|
|
4350
4380
|
for (let i = 0; i < colors.length; i += 3) color.toArray(colors, i);
|
|
4351
|
-
geometry.setAttribute("color", new
|
|
4381
|
+
geometry.setAttribute("color", new import_three22.BufferAttribute(colors, 3));
|
|
4352
4382
|
geometry.computeBoundingBox();
|
|
4353
4383
|
geometry.computeBoundingSphere();
|
|
4354
4384
|
if (this.options.instanceMeshes) {
|
|
@@ -4362,7 +4392,7 @@ var init_FluidModelObject = __esm({
|
|
|
4362
4392
|
super.applyTextures();
|
|
4363
4393
|
this.iterateAllMeshes((mesh) => {
|
|
4364
4394
|
const material = mesh.material;
|
|
4365
|
-
material.side =
|
|
4395
|
+
material.side = import_three22.DoubleSide;
|
|
4366
4396
|
material.forceSinglePass = true;
|
|
4367
4397
|
material.depthWrite = !material.transparent;
|
|
4368
4398
|
});
|
|
@@ -4421,6 +4451,7 @@ __export(index_browser_exports, {
|
|
|
4421
4451
|
Env: () => Env,
|
|
4422
4452
|
FluidModelObject: () => FluidModelObject,
|
|
4423
4453
|
Geometries: () => Geometries,
|
|
4454
|
+
GuiHelper: () => GuiHelper,
|
|
4424
4455
|
GuiLight: () => GuiLight,
|
|
4425
4456
|
GuiObject: () => GuiObject,
|
|
4426
4457
|
HostedAssetSource: () => HostedAssetSource,
|
|
@@ -4498,6 +4529,7 @@ __export(index_browser_exports, {
|
|
|
4498
4529
|
isDisposable: () => isDisposable,
|
|
4499
4530
|
isDoubleArray: () => isDoubleArray,
|
|
4500
4531
|
isEntityObject: () => isEntityObject,
|
|
4532
|
+
isGuiObject: () => isGuiObject,
|
|
4501
4533
|
isInstanceManager: () => isInstanceManager,
|
|
4502
4534
|
isInstanceReference: () => isInstanceReference,
|
|
4503
4535
|
isInstanceable: () => isInstanceable,
|
|
@@ -5038,17 +5070,106 @@ function isEntityObject(obj) {
|
|
|
5038
5070
|
// src/error/index.ts
|
|
5039
5071
|
init_MineRenderError();
|
|
5040
5072
|
|
|
5073
|
+
// src/gui/GuiHelper.ts
|
|
5074
|
+
var GuiHelper = class {
|
|
5075
|
+
static inventorySlot(slot, origin = [0, 0], offset = [18, 18], rowSize = 9) {
|
|
5076
|
+
const [column, row] = typeof slot === "number" ? [slot % rowSize, Math.floor(slot / rowSize)] : slot;
|
|
5077
|
+
return [origin[0] + column * offset[0], origin[1] + row * offset[1]];
|
|
5078
|
+
}
|
|
5079
|
+
};
|
|
5080
|
+
|
|
5041
5081
|
// src/gui/scene/GuiObject.ts
|
|
5082
|
+
var import_three14 = require("three");
|
|
5083
|
+
init_AssetKey();
|
|
5084
|
+
init_ModelTextures();
|
|
5085
|
+
init_Caching();
|
|
5042
5086
|
init_SceneObject();
|
|
5087
|
+
init_Materials();
|
|
5043
5088
|
var GuiObject = class extends SceneObject {
|
|
5044
|
-
|
|
5089
|
+
constructor(textureLayers, options) {
|
|
5090
|
+
super({ ...options, instanceMeshes: false, mergeMeshes: false });
|
|
5091
|
+
this.textureLayers = textureLayers;
|
|
5092
|
+
this.isGuiObject = true;
|
|
5093
|
+
/** Local bounds in GUI pixels, with y growing down from the origin. */
|
|
5094
|
+
this.bounds = new import_three14.Box2();
|
|
5095
|
+
this.geometries = /* @__PURE__ */ new Set();
|
|
5096
|
+
this.ownedMaterials = /* @__PURE__ */ new Set();
|
|
5097
|
+
this.initialized = false;
|
|
5098
|
+
}
|
|
5099
|
+
async init() {
|
|
5100
|
+
if (this.initialized) return;
|
|
5101
|
+
try {
|
|
5102
|
+
for (const [index, layer] of this.textureLayers.entries()) {
|
|
5103
|
+
const key = typeof layer.texture === "string" ? AssetKey.parse("textures", layer.texture) : layer.texture;
|
|
5104
|
+
const material = await this.loadMaterial(key);
|
|
5105
|
+
const image = material.map.image;
|
|
5106
|
+
const [cropX, cropY, cropWidth, cropHeight] = layer.crop ?? [0, 0, image.width, image.height];
|
|
5107
|
+
const [width, height] = layer.size ?? [cropWidth, cropHeight];
|
|
5108
|
+
const [x, y] = layer.position ?? [0, 0];
|
|
5109
|
+
const geometry = new import_three14.PlaneGeometry(width, height);
|
|
5110
|
+
this.geometries.add(geometry);
|
|
5111
|
+
const uv = geometry.getAttribute("uv");
|
|
5112
|
+
for (let i = 0; i < uv.count; i++) {
|
|
5113
|
+
uv.setXY(
|
|
5114
|
+
i,
|
|
5115
|
+
(cropX + uv.getX(i) * cropWidth) / image.width,
|
|
5116
|
+
1 - (cropY + (1 - uv.getY(i)) * cropHeight) / image.height
|
|
5117
|
+
);
|
|
5118
|
+
}
|
|
5119
|
+
const mesh = new import_three14.Mesh(geometry, material);
|
|
5120
|
+
mesh.name = `mesh:${layer.name ?? index}`;
|
|
5121
|
+
mesh.position.set(x + width / 2, -y - height / 2, 0);
|
|
5122
|
+
mesh.renderOrder = index;
|
|
5123
|
+
this.add(mesh);
|
|
5124
|
+
this.bounds.expandByPoint(new import_three14.Vector2(x, y));
|
|
5125
|
+
this.bounds.expandByPoint(new import_three14.Vector2(x + width, y + height));
|
|
5126
|
+
}
|
|
5127
|
+
this.initialized = true;
|
|
5128
|
+
this.notifyDirty();
|
|
5129
|
+
} catch (error) {
|
|
5130
|
+
this.disposeAndRemoveAllChildren();
|
|
5131
|
+
throw error;
|
|
5132
|
+
}
|
|
5133
|
+
}
|
|
5134
|
+
async loadMaterial(key) {
|
|
5135
|
+
const assetKey = key.serialize();
|
|
5136
|
+
const materialKey = `gui:${assetKey}`;
|
|
5137
|
+
const cached2 = Caching.materialCache.getIfPresent(materialKey);
|
|
5138
|
+
if (cached2) return cached2;
|
|
5139
|
+
const pending = ModelTextures.get(key);
|
|
5140
|
+
const cachedAsset = Caching.textureAssetCache.getIfPresent(assetKey);
|
|
5141
|
+
const image = await pending;
|
|
5142
|
+
if (!image) throw new Error(`Could not load GUI texture ${key.toNamespacedString()}`);
|
|
5143
|
+
const create = () => Materials.createGuiCanvasMaterial(image.data.canvas);
|
|
5144
|
+
if (cachedAsset && Caching.textureAssetCache.getIfPresent(assetKey) === cachedAsset) {
|
|
5145
|
+
return Caching.materialCache.get(materialKey, create);
|
|
5146
|
+
}
|
|
5147
|
+
const material = create();
|
|
5148
|
+
this.ownedMaterials.add(material);
|
|
5149
|
+
return material;
|
|
5150
|
+
}
|
|
5151
|
+
disposeAndRemoveAllChildren() {
|
|
5152
|
+
for (const geometry of this.geometries) geometry.dispose();
|
|
5153
|
+
this.geometries.clear();
|
|
5154
|
+
for (const material of this.ownedMaterials) {
|
|
5155
|
+
material.map.dispose();
|
|
5156
|
+
material.dispose();
|
|
5157
|
+
}
|
|
5158
|
+
this.ownedMaterials.clear();
|
|
5159
|
+
this.bounds.makeEmpty();
|
|
5160
|
+
this.initialized = false;
|
|
5161
|
+
super.disposeAndRemoveAllChildren();
|
|
5162
|
+
}
|
|
5045
5163
|
};
|
|
5164
|
+
function isGuiObject(obj) {
|
|
5165
|
+
return obj.isGuiObject;
|
|
5166
|
+
}
|
|
5046
5167
|
|
|
5047
5168
|
// src/index.ts
|
|
5048
5169
|
init_image();
|
|
5049
5170
|
|
|
5050
5171
|
// src/inspector/SceneInspector.ts
|
|
5051
|
-
var
|
|
5172
|
+
var import_three15 = require("three");
|
|
5052
5173
|
init_SceneObject();
|
|
5053
5174
|
init_util();
|
|
5054
5175
|
init_log();
|
|
@@ -5058,11 +5179,11 @@ var help = "<span>Ctrl/Cmd+Click to Select<br/></span><br/>";
|
|
|
5058
5179
|
var SceneInspector = class {
|
|
5059
5180
|
constructor(renderer) {
|
|
5060
5181
|
this.renderer = renderer;
|
|
5061
|
-
this.mouse = new
|
|
5182
|
+
this.mouse = new import_three15.Vector2();
|
|
5062
5183
|
this.listeners = new AbortController();
|
|
5063
5184
|
this.objectInfoContainer = document.createElement("div");
|
|
5064
5185
|
this.objectControlsContainer = document.createElement("div");
|
|
5065
|
-
this.raycaster = new
|
|
5186
|
+
this.raycaster = new import_three15.Raycaster();
|
|
5066
5187
|
this.init();
|
|
5067
5188
|
}
|
|
5068
5189
|
init() {
|
|
@@ -5478,7 +5599,7 @@ init_ModelGenerator();
|
|
|
5478
5599
|
init_ModelMerger();
|
|
5479
5600
|
|
|
5480
5601
|
// src/model/block/BlockStateResolver.ts
|
|
5481
|
-
var
|
|
5602
|
+
var import_three18 = require("three");
|
|
5482
5603
|
init_BlockStates();
|
|
5483
5604
|
init_MineRenderError();
|
|
5484
5605
|
init_util();
|
|
@@ -5556,7 +5677,7 @@ var BlockStateResolver = class {
|
|
|
5556
5677
|
return variants[variants.length - 1];
|
|
5557
5678
|
}
|
|
5558
5679
|
static rotation(variant) {
|
|
5559
|
-
const rotation = new
|
|
5680
|
+
const rotation = new import_three18.Euler();
|
|
5560
5681
|
if (typeof variant.x !== "undefined") {
|
|
5561
5682
|
rotation.x = toRadians(clampRotationDegrees(variant.x));
|
|
5562
5683
|
}
|
|
@@ -5663,7 +5784,7 @@ init_SceneObject();
|
|
|
5663
5784
|
init_ModelObject();
|
|
5664
5785
|
init_Models();
|
|
5665
5786
|
var import_ts_deepmerge6 = __toESM(require_dist());
|
|
5666
|
-
var
|
|
5787
|
+
var import_three23 = require("three");
|
|
5667
5788
|
init_MineRenderError();
|
|
5668
5789
|
init_InstanceReference();
|
|
5669
5790
|
init_AssetKey();
|
|
@@ -5727,12 +5848,12 @@ var _BlockObject = class _BlockObject extends SceneObject {
|
|
|
5727
5848
|
getModelCullMask(model, worldMask) {
|
|
5728
5849
|
const object = isInstanceReference(model) ? model.instanceable : model;
|
|
5729
5850
|
if (object.options.displayPosition) return 0;
|
|
5730
|
-
const position = new
|
|
5731
|
-
const rotation = new
|
|
5732
|
-
const scale = new
|
|
5851
|
+
const position = new import_three23.Vector3();
|
|
5852
|
+
const rotation = new import_three23.Quaternion();
|
|
5853
|
+
const scale = new import_three23.Vector3();
|
|
5733
5854
|
this.getModelMatrix(model).decompose(position, rotation, scale);
|
|
5734
|
-
if (position.distanceToSquared(this.position) > 1e-10 || scale.distanceToSquared(new
|
|
5735
|
-
return ModelCulling.toLocalMask(worldMask, new
|
|
5855
|
+
if (position.distanceToSquared(this.position) > 1e-10 || scale.distanceToSquared(new import_three23.Vector3(1, 1, 1)) > 1e-10) return 0;
|
|
5856
|
+
return ModelCulling.toLocalMask(worldMask, new import_three23.Euler().setFromQuaternion(rotation));
|
|
5736
5857
|
}
|
|
5737
5858
|
async setCullMask(worldMask) {
|
|
5738
5859
|
worldMask &= 63;
|
|
@@ -5794,7 +5915,7 @@ var _BlockObject = class _BlockObject extends SceneObject {
|
|
|
5794
5915
|
() => new FluidModelObject2(kind, surface.sample, this.blockState.key, this.options)
|
|
5795
5916
|
);
|
|
5796
5917
|
const previous = this._fluidModel;
|
|
5797
|
-
const matrix = previous ? this.getModelMatrix(previous) : new
|
|
5918
|
+
const matrix = previous ? this.getModelMatrix(previous) : new import_three23.Matrix4().makeTranslation(...this.position.toArray());
|
|
5798
5919
|
if (isInstanceReference(replacement)) replacement.setMatrix(matrix);
|
|
5799
5920
|
else matrix.decompose(replacement.position, replacement.quaternion, replacement.scale);
|
|
5800
5921
|
this._models = this._models.filter((model) => model !== previous);
|
|
@@ -5925,7 +6046,7 @@ var _BlockObject = class _BlockObject extends SceneObject {
|
|
|
5925
6046
|
setPositionRotationScaleAt(index, position, rotation, scale) {
|
|
5926
6047
|
super.setPositionRotationScaleAt(index, position, rotation, scale);
|
|
5927
6048
|
}
|
|
5928
|
-
getMatrixAt(index, matrix = new
|
|
6049
|
+
getMatrixAt(index, matrix = new import_three23.Matrix4()) {
|
|
5929
6050
|
if (!this.isInstanced) throw new MineRenderError("Object is not instanced");
|
|
5930
6051
|
const child = this._models[0];
|
|
5931
6052
|
if (child && isModelObject(child)) {
|
|
@@ -7795,7 +7916,7 @@ init_ModelObject();
|
|
|
7795
7916
|
init_nbt();
|
|
7796
7917
|
|
|
7797
7918
|
// src/renderer/MineRenderScene.ts
|
|
7798
|
-
var
|
|
7919
|
+
var import_three25 = require("three");
|
|
7799
7920
|
init_SceneObject();
|
|
7800
7921
|
var import_ts_deepmerge8 = __toESM(require_dist());
|
|
7801
7922
|
init_ModelObject();
|
|
@@ -8528,7 +8649,7 @@ var import_ts_deepmerge7 = __toESM(require_dist());
|
|
|
8528
8649
|
init_util();
|
|
8529
8650
|
|
|
8530
8651
|
// src/skin/SkinTextures.ts
|
|
8531
|
-
var
|
|
8652
|
+
var import_three24 = require("three");
|
|
8532
8653
|
init_Caching();
|
|
8533
8654
|
init_CacheKey();
|
|
8534
8655
|
init_MineRenderError();
|
|
@@ -8612,11 +8733,11 @@ var SkinTextures = class {
|
|
|
8612
8733
|
});
|
|
8613
8734
|
}
|
|
8614
8735
|
static createMaterial(pixels, width, height, transparent = true) {
|
|
8615
|
-
const texture = Textures.initTextureProps(new
|
|
8616
|
-
texture.colorSpace =
|
|
8736
|
+
const texture = Textures.initTextureProps(new import_three24.DataTexture(pixels, width, height));
|
|
8737
|
+
texture.colorSpace = import_three24.SRGBColorSpace;
|
|
8617
8738
|
texture.flipY = true;
|
|
8618
8739
|
texture.needsUpdate = true;
|
|
8619
|
-
return new
|
|
8740
|
+
return new import_three24.MeshBasicMaterial({ map: texture, transparent, side: transparent ? import_three24.DoubleSide : import_three24.FrontSide, alphaTest: transparent ? 0.1 : 0 });
|
|
8620
8741
|
}
|
|
8621
8742
|
static isSlim(image, scale) {
|
|
8622
8743
|
for (const [x, y] of [[46, 52], [54, 20]]) {
|
|
@@ -8843,7 +8964,7 @@ var SkinObject = class extends SceneObject {
|
|
|
8843
8964
|
};
|
|
8844
8965
|
|
|
8845
8966
|
// src/renderer/MineRenderScene.ts
|
|
8846
|
-
var _MineRenderScene = class _MineRenderScene extends
|
|
8967
|
+
var _MineRenderScene = class _MineRenderScene extends import_three25.Scene {
|
|
8847
8968
|
constructor(options) {
|
|
8848
8969
|
super();
|
|
8849
8970
|
this.isMineRenderScene = true;
|
|
@@ -8959,6 +9080,14 @@ var _MineRenderScene = class _MineRenderScene extends import_three24.Scene {
|
|
|
8959
9080
|
async addEntity(entity, options, parent = this) {
|
|
8960
9081
|
return this.addSceneObject(entity, () => new EntityObject(entity, options), options, parent);
|
|
8961
9082
|
}
|
|
9083
|
+
async addGui(layers, options, parent = this) {
|
|
9084
|
+
const obj = new GuiObject(layers, options);
|
|
9085
|
+
obj.scene = this;
|
|
9086
|
+
await obj.init();
|
|
9087
|
+
parent.add(obj);
|
|
9088
|
+
this.dirty = true;
|
|
9089
|
+
return obj;
|
|
9090
|
+
}
|
|
8962
9091
|
};
|
|
8963
9092
|
_MineRenderScene.DEFAULT_OPTIONS = (0, import_ts_deepmerge8.default)({}, {});
|
|
8964
9093
|
var MineRenderScene = _MineRenderScene;
|
|
@@ -8967,7 +9096,7 @@ function isMineRenderScene(obj) {
|
|
|
8967
9096
|
}
|
|
8968
9097
|
|
|
8969
9098
|
// src/renderer/Renderer.ts
|
|
8970
|
-
var
|
|
9099
|
+
var import_three27 = require("three");
|
|
8971
9100
|
var import_ts_deepmerge9 = __toESM(require_dist());
|
|
8972
9101
|
var import_stats = __toESM(require("stats.js"));
|
|
8973
9102
|
var import_postprocessing = require("postprocessing");
|
|
@@ -8975,11 +9104,11 @@ init_util();
|
|
|
8975
9104
|
init_three();
|
|
8976
9105
|
|
|
8977
9106
|
// src/three/OrbitControls.js
|
|
8978
|
-
var
|
|
9107
|
+
var import_three26 = require("three");
|
|
8979
9108
|
var _changeEvent = { type: "change" };
|
|
8980
9109
|
var _startEvent = { type: "start" };
|
|
8981
9110
|
var _endEvent = { type: "end" };
|
|
8982
|
-
var OrbitControls = class extends
|
|
9111
|
+
var OrbitControls = class extends import_three26.EventDispatcher {
|
|
8983
9112
|
constructor(object, domElement) {
|
|
8984
9113
|
super();
|
|
8985
9114
|
if (domElement === void 0) console.warn('THREE.OrbitControls: The second parameter "domElement" is now mandatory.');
|
|
@@ -8988,7 +9117,7 @@ var OrbitControls = class extends import_three25.EventDispatcher {
|
|
|
8988
9117
|
this.domElement = domElement;
|
|
8989
9118
|
this.domElement.style.touchAction = "none";
|
|
8990
9119
|
this.enabled = true;
|
|
8991
|
-
this.target = new
|
|
9120
|
+
this.target = new import_three26.Vector3();
|
|
8992
9121
|
this.minDistance = 0;
|
|
8993
9122
|
this.maxDistance = Infinity;
|
|
8994
9123
|
this.minZoom = 0;
|
|
@@ -9010,8 +9139,8 @@ var OrbitControls = class extends import_three25.EventDispatcher {
|
|
|
9010
9139
|
this.autoRotate = false;
|
|
9011
9140
|
this.autoRotateSpeed = 2;
|
|
9012
9141
|
this.keys = { LEFT: "ArrowLeft", UP: "ArrowUp", RIGHT: "ArrowRight", BOTTOM: "ArrowDown" };
|
|
9013
|
-
this.mouseButtons = { LEFT:
|
|
9014
|
-
this.touches = { ONE:
|
|
9142
|
+
this.mouseButtons = { LEFT: import_three26.MOUSE.ROTATE, MIDDLE: import_three26.MOUSE.DOLLY, RIGHT: import_three26.MOUSE.PAN };
|
|
9143
|
+
this.touches = { ONE: import_three26.TOUCH.ROTATE, TWO: import_three26.TOUCH.DOLLY_PAN };
|
|
9015
9144
|
this.target0 = this.target.clone();
|
|
9016
9145
|
this.position0 = this.object.position.clone();
|
|
9017
9146
|
this.zoom0 = this.object.zoom;
|
|
@@ -9040,11 +9169,11 @@ var OrbitControls = class extends import_three25.EventDispatcher {
|
|
|
9040
9169
|
state = STATE.NONE;
|
|
9041
9170
|
};
|
|
9042
9171
|
this.update = function() {
|
|
9043
|
-
const offset = new
|
|
9044
|
-
const quat = new
|
|
9172
|
+
const offset = new import_three26.Vector3();
|
|
9173
|
+
const quat = new import_three26.Quaternion().setFromUnitVectors(object.up, new import_three26.Vector3(0, 1, 0));
|
|
9045
9174
|
const quatInverse = quat.clone().invert();
|
|
9046
|
-
const lastPosition = new
|
|
9047
|
-
const lastQuaternion = new
|
|
9175
|
+
const lastPosition = new import_three26.Vector3();
|
|
9176
|
+
const lastQuaternion = new import_three26.Quaternion();
|
|
9048
9177
|
const twoPI = 2 * Math.PI;
|
|
9049
9178
|
return function update() {
|
|
9050
9179
|
const position = scope.object.position;
|
|
@@ -9130,20 +9259,20 @@ var OrbitControls = class extends import_three25.EventDispatcher {
|
|
|
9130
9259
|
};
|
|
9131
9260
|
let state = STATE.NONE;
|
|
9132
9261
|
const EPS = 1e-6;
|
|
9133
|
-
const spherical = new
|
|
9134
|
-
const sphericalDelta = new
|
|
9262
|
+
const spherical = new import_three26.Spherical();
|
|
9263
|
+
const sphericalDelta = new import_three26.Spherical();
|
|
9135
9264
|
let scale = 1;
|
|
9136
|
-
const panOffset = new
|
|
9265
|
+
const panOffset = new import_three26.Vector3();
|
|
9137
9266
|
let zoomChanged = false;
|
|
9138
|
-
const rotateStart = new
|
|
9139
|
-
const rotateEnd = new
|
|
9140
|
-
const rotateDelta = new
|
|
9141
|
-
const panStart = new
|
|
9142
|
-
const panEnd = new
|
|
9143
|
-
const panDelta = new
|
|
9144
|
-
const dollyStart = new
|
|
9145
|
-
const dollyEnd = new
|
|
9146
|
-
const dollyDelta = new
|
|
9267
|
+
const rotateStart = new import_three26.Vector2();
|
|
9268
|
+
const rotateEnd = new import_three26.Vector2();
|
|
9269
|
+
const rotateDelta = new import_three26.Vector2();
|
|
9270
|
+
const panStart = new import_three26.Vector2();
|
|
9271
|
+
const panEnd = new import_three26.Vector2();
|
|
9272
|
+
const panDelta = new import_three26.Vector2();
|
|
9273
|
+
const dollyStart = new import_three26.Vector2();
|
|
9274
|
+
const dollyEnd = new import_three26.Vector2();
|
|
9275
|
+
const dollyDelta = new import_three26.Vector2();
|
|
9147
9276
|
const pointers = [];
|
|
9148
9277
|
const pointerPositions = {};
|
|
9149
9278
|
function getAutoRotationAngle() {
|
|
@@ -9159,7 +9288,7 @@ var OrbitControls = class extends import_three25.EventDispatcher {
|
|
|
9159
9288
|
sphericalDelta.phi -= angle;
|
|
9160
9289
|
}
|
|
9161
9290
|
const panLeft = function() {
|
|
9162
|
-
const v = new
|
|
9291
|
+
const v = new import_three26.Vector3();
|
|
9163
9292
|
return function panLeft2(distance, objectMatrix) {
|
|
9164
9293
|
v.setFromMatrixColumn(objectMatrix, 0);
|
|
9165
9294
|
v.multiplyScalar(-distance);
|
|
@@ -9167,7 +9296,7 @@ var OrbitControls = class extends import_three25.EventDispatcher {
|
|
|
9167
9296
|
};
|
|
9168
9297
|
}();
|
|
9169
9298
|
const panUp = function() {
|
|
9170
|
-
const v = new
|
|
9299
|
+
const v = new import_three26.Vector3();
|
|
9171
9300
|
return function panUp2(distance, objectMatrix) {
|
|
9172
9301
|
if (scope.screenSpacePanning === true) {
|
|
9173
9302
|
v.setFromMatrixColumn(objectMatrix, 1);
|
|
@@ -9180,7 +9309,7 @@ var OrbitControls = class extends import_three25.EventDispatcher {
|
|
|
9180
9309
|
};
|
|
9181
9310
|
}();
|
|
9182
9311
|
const pan = function() {
|
|
9183
|
-
const offset = new
|
|
9312
|
+
const offset = new import_three26.Vector3();
|
|
9184
9313
|
return function pan2(deltaX, deltaY) {
|
|
9185
9314
|
const element = scope.domElement;
|
|
9186
9315
|
if (scope.object.isPerspectiveCamera) {
|
|
@@ -9429,12 +9558,12 @@ var OrbitControls = class extends import_three25.EventDispatcher {
|
|
|
9429
9558
|
mouseAction = -1;
|
|
9430
9559
|
}
|
|
9431
9560
|
switch (mouseAction) {
|
|
9432
|
-
case
|
|
9561
|
+
case import_three26.MOUSE.DOLLY:
|
|
9433
9562
|
if (scope.enableZoom === false) return;
|
|
9434
9563
|
handleMouseDownDolly(event);
|
|
9435
9564
|
state = STATE.DOLLY;
|
|
9436
9565
|
break;
|
|
9437
|
-
case
|
|
9566
|
+
case import_three26.MOUSE.ROTATE:
|
|
9438
9567
|
if (event.ctrlKey || event.metaKey || event.shiftKey) {
|
|
9439
9568
|
if (scope.enablePan === false) return;
|
|
9440
9569
|
handleMouseDownPan(event);
|
|
@@ -9445,7 +9574,7 @@ var OrbitControls = class extends import_three25.EventDispatcher {
|
|
|
9445
9574
|
state = STATE.ROTATE;
|
|
9446
9575
|
}
|
|
9447
9576
|
break;
|
|
9448
|
-
case
|
|
9577
|
+
case import_three26.MOUSE.PAN:
|
|
9449
9578
|
if (event.ctrlKey || event.metaKey || event.shiftKey) {
|
|
9450
9579
|
if (scope.enableRotate === false) return;
|
|
9451
9580
|
handleMouseDownRotate(event);
|
|
@@ -9501,12 +9630,12 @@ var OrbitControls = class extends import_three25.EventDispatcher {
|
|
|
9501
9630
|
switch (pointers.length) {
|
|
9502
9631
|
case 1:
|
|
9503
9632
|
switch (scope.touches.ONE) {
|
|
9504
|
-
case
|
|
9633
|
+
case import_three26.TOUCH.ROTATE:
|
|
9505
9634
|
if (scope.enableRotate === false) return;
|
|
9506
9635
|
handleTouchStartRotate();
|
|
9507
9636
|
state = STATE.TOUCH_ROTATE;
|
|
9508
9637
|
break;
|
|
9509
|
-
case
|
|
9638
|
+
case import_three26.TOUCH.PAN:
|
|
9510
9639
|
if (scope.enablePan === false) return;
|
|
9511
9640
|
handleTouchStartPan();
|
|
9512
9641
|
state = STATE.TOUCH_PAN;
|
|
@@ -9517,12 +9646,12 @@ var OrbitControls = class extends import_three25.EventDispatcher {
|
|
|
9517
9646
|
break;
|
|
9518
9647
|
case 2:
|
|
9519
9648
|
switch (scope.touches.TWO) {
|
|
9520
|
-
case
|
|
9649
|
+
case import_three26.TOUCH.DOLLY_PAN:
|
|
9521
9650
|
if (scope.enableZoom === false && scope.enablePan === false) return;
|
|
9522
9651
|
handleTouchStartDollyPan();
|
|
9523
9652
|
state = STATE.TOUCH_DOLLY_PAN;
|
|
9524
9653
|
break;
|
|
9525
|
-
case
|
|
9654
|
+
case import_three26.TOUCH.DOLLY_ROTATE:
|
|
9526
9655
|
if (scope.enableZoom === false && scope.enableRotate === false) return;
|
|
9527
9656
|
handleTouchStartDollyRotate();
|
|
9528
9657
|
state = STATE.TOUCH_DOLLY_ROTATE;
|
|
@@ -9589,7 +9718,7 @@ var OrbitControls = class extends import_three25.EventDispatcher {
|
|
|
9589
9718
|
function trackPointer(event) {
|
|
9590
9719
|
let position = pointerPositions[event.pointerId];
|
|
9591
9720
|
if (position === void 0) {
|
|
9592
|
-
position = new
|
|
9721
|
+
position = new import_three26.Vector2();
|
|
9593
9722
|
pointerPositions[event.pointerId] = position;
|
|
9594
9723
|
}
|
|
9595
9724
|
position.set(event.pageX, event.pageY);
|
|
@@ -9609,10 +9738,10 @@ var MapControls = class extends OrbitControls {
|
|
|
9609
9738
|
constructor(object, domElement) {
|
|
9610
9739
|
super(object, domElement);
|
|
9611
9740
|
this.screenSpacePanning = false;
|
|
9612
|
-
this.mouseButtons.LEFT =
|
|
9613
|
-
this.mouseButtons.RIGHT =
|
|
9614
|
-
this.touches.ONE =
|
|
9615
|
-
this.touches.TWO =
|
|
9741
|
+
this.mouseButtons.LEFT = import_three26.MOUSE.PAN;
|
|
9742
|
+
this.mouseButtons.RIGHT = import_three26.MOUSE.ROTATE;
|
|
9743
|
+
this.touches.ONE = import_three26.TOUCH.PAN;
|
|
9744
|
+
this.touches.TWO = import_three26.TOUCH.DOLLY_ROTATE;
|
|
9616
9745
|
}
|
|
9617
9746
|
};
|
|
9618
9747
|
|
|
@@ -9628,6 +9757,10 @@ var _Renderer = class _Renderer {
|
|
|
9628
9757
|
this._dirty = true;
|
|
9629
9758
|
};
|
|
9630
9759
|
this.options = (0, import_ts_deepmerge9.default)({}, _Renderer.DEFAULT_OPTIONS, options ?? {});
|
|
9760
|
+
const pixelRatio = this.options.render.pixelRatio ?? 1;
|
|
9761
|
+
if (!Number.isFinite(pixelRatio) || pixelRatio <= 0) {
|
|
9762
|
+
throw new RangeError("render.pixelRatio must be a finite positive number");
|
|
9763
|
+
}
|
|
9631
9764
|
this._animationLoop = this.animate.bind(this);
|
|
9632
9765
|
this._frameInterval = this.options.render.fpsLimit > 0 ? 1e3 / this.options.render.fpsLimit : void 0;
|
|
9633
9766
|
this._scene = this.createScene();
|
|
@@ -9649,14 +9782,14 @@ var _Renderer = class _Renderer {
|
|
|
9649
9782
|
switch (this.options.camera.type) {
|
|
9650
9783
|
case "perspective":
|
|
9651
9784
|
default:
|
|
9652
|
-
return new
|
|
9785
|
+
return new import_three27.PerspectiveCamera(
|
|
9653
9786
|
this.options.camera.perspective.fov,
|
|
9654
9787
|
this.options.camera.perspective.aspect ?? this.viewWidth / this.viewHeight,
|
|
9655
9788
|
this.options.camera.near,
|
|
9656
9789
|
this.options.camera.far
|
|
9657
9790
|
);
|
|
9658
9791
|
case "orthographic":
|
|
9659
|
-
return new
|
|
9792
|
+
return new import_three27.OrthographicCamera(
|
|
9660
9793
|
this.options.camera.orthographic.left ?? this.viewWidth / -2,
|
|
9661
9794
|
this.options.camera.orthographic.right ?? this.viewWidth / 2,
|
|
9662
9795
|
this.options.camera.orthographic.top ?? this.viewHeight / 2,
|
|
@@ -9667,7 +9800,7 @@ var _Renderer = class _Renderer {
|
|
|
9667
9800
|
}
|
|
9668
9801
|
}
|
|
9669
9802
|
createRenderer() {
|
|
9670
|
-
const renderer = new
|
|
9803
|
+
const renderer = new import_three27.WebGLRenderer({
|
|
9671
9804
|
antialias: this.options.render.antialias,
|
|
9672
9805
|
alpha: true,
|
|
9673
9806
|
powerPreference: "high-performance",
|
|
@@ -9675,8 +9808,9 @@ var _Renderer = class _Renderer {
|
|
|
9675
9808
|
});
|
|
9676
9809
|
renderer.setClearColor(0, 0);
|
|
9677
9810
|
renderer.shadowMap.enabled = true;
|
|
9678
|
-
renderer.shadowMap.type =
|
|
9679
|
-
renderer.outputColorSpace =
|
|
9811
|
+
renderer.shadowMap.type = import_three27.PCFSoftShadowMap;
|
|
9812
|
+
renderer.outputColorSpace = import_three27.SRGBColorSpace;
|
|
9813
|
+
renderer.setPixelRatio(this.options.render.pixelRatio ?? 1);
|
|
9680
9814
|
renderer.setSize(this.viewWidth, this.viewHeight);
|
|
9681
9815
|
return renderer;
|
|
9682
9816
|
}
|
|
@@ -9710,20 +9844,20 @@ var _Renderer = class _Renderer {
|
|
|
9710
9844
|
window["__THREE_DEVTOOLS__"].dispatchEvent(new CustomEvent("observe", { detail: this.scene }));
|
|
9711
9845
|
}
|
|
9712
9846
|
if (this.options.debug.grid) {
|
|
9713
|
-
const gridHelper = new
|
|
9847
|
+
const gridHelper = new import_three27.GridHelper(128, 16);
|
|
9714
9848
|
this._debugHelpers.push(gridHelper);
|
|
9715
9849
|
this.scene.add(gridHelper);
|
|
9716
|
-
const gridHelper2 = new
|
|
9850
|
+
const gridHelper2 = new import_three27.GridHelper(128, 16);
|
|
9717
9851
|
this._debugHelpers.push(gridHelper2);
|
|
9718
9852
|
gridHelper2.rotation.x = 90 * (Math.PI / 180);
|
|
9719
9853
|
this.scene.add(gridHelper2);
|
|
9720
|
-
const gridHelper3 = new
|
|
9854
|
+
const gridHelper3 = new import_three27.GridHelper(128, 16);
|
|
9721
9855
|
this._debugHelpers.push(gridHelper3);
|
|
9722
9856
|
gridHelper3.rotation.z = 90 * (Math.PI / 180);
|
|
9723
9857
|
this.scene.add(gridHelper3);
|
|
9724
9858
|
}
|
|
9725
9859
|
if (this.options.debug.axes) {
|
|
9726
|
-
const axesHelper = new
|
|
9860
|
+
const axesHelper = new import_three27.AxesHelper(64);
|
|
9727
9861
|
this._debugHelpers.push(axesHelper);
|
|
9728
9862
|
this.scene.add(axesHelper);
|
|
9729
9863
|
}
|
|
@@ -9927,11 +10061,12 @@ _Renderer.DEFAULT_OPTIONS = (0, import_ts_deepmerge9.default)({}, {
|
|
|
9927
10061
|
top: void 0,
|
|
9928
10062
|
bottom: void 0
|
|
9929
10063
|
},
|
|
9930
|
-
position: new
|
|
9931
|
-
lookingAt: new
|
|
10064
|
+
position: new import_three27.Vector3(50, 50, 50),
|
|
10065
|
+
lookingAt: new import_three27.Vector3(0, 0, 0)
|
|
9932
10066
|
},
|
|
9933
10067
|
render: {
|
|
9934
10068
|
fpsLimit: 60,
|
|
10069
|
+
pixelRatio: 1,
|
|
9935
10070
|
stats: false,
|
|
9936
10071
|
antialias: true,
|
|
9937
10072
|
shade: true,
|
|
@@ -10391,19 +10526,19 @@ var AnvilParser = class {
|
|
|
10391
10526
|
};
|
|
10392
10527
|
|
|
10393
10528
|
// src/world/Chunk.ts
|
|
10394
|
-
var
|
|
10529
|
+
var import_three32 = require("three");
|
|
10395
10530
|
init_BlockStates();
|
|
10396
10531
|
init_AssetKey();
|
|
10397
10532
|
|
|
10398
10533
|
// src/world/MineRenderWorld.ts
|
|
10399
|
-
var
|
|
10534
|
+
var import_three30 = require("three");
|
|
10400
10535
|
init_BatchedExecutor();
|
|
10401
10536
|
init_AssetKey();
|
|
10402
10537
|
init_BlockStates();
|
|
10403
10538
|
init_CubeFace();
|
|
10404
10539
|
|
|
10405
10540
|
// src/world/SectionModels.ts
|
|
10406
|
-
var
|
|
10541
|
+
var import_three29 = require("three");
|
|
10407
10542
|
init_AssetKey();
|
|
10408
10543
|
init_Models();
|
|
10409
10544
|
init_CubeFace();
|
|
@@ -10469,12 +10604,12 @@ var SectionModels = class {
|
|
|
10469
10604
|
});
|
|
10470
10605
|
await object.init();
|
|
10471
10606
|
const geometry = object.children[0].geometry;
|
|
10472
|
-
geometry.applyMatrix4(new
|
|
10607
|
+
geometry.applyMatrix4(new import_three29.Matrix4().makeRotationFromEuler(rotation));
|
|
10473
10608
|
object.clear();
|
|
10474
10609
|
const cullFaces = CUBE_FACES.map((face) => {
|
|
10475
10610
|
const local = CUBE_FACES.findIndex((name) => name === atlas.model.elements[0].faces[face]?.cullface);
|
|
10476
10611
|
if (local < 0) return 0;
|
|
10477
|
-
const normal = new
|
|
10612
|
+
const normal = new import_three29.Vector3(...CUBE_FACE_OFFSETS[local]).applyEuler(rotation);
|
|
10478
10613
|
const world = CUBE_FACE_OFFSETS.findIndex(([x, y, z]) => Math.abs(normal.x - x) < 1e-6 && Math.abs(normal.y - y) < 1e-6 && Math.abs(normal.z - z) < 1e-6);
|
|
10479
10614
|
return 1 << world;
|
|
10480
10615
|
});
|
|
@@ -10504,20 +10639,20 @@ var MineRenderWorld = class {
|
|
|
10504
10639
|
}
|
|
10505
10640
|
getBlockAt(posOrX, y, z) {
|
|
10506
10641
|
if (typeof posOrX == "number") {
|
|
10507
|
-
return this.getBlockAt(new
|
|
10642
|
+
return this.getBlockAt(new import_three30.Vector3(posOrX, y, z));
|
|
10508
10643
|
}
|
|
10509
10644
|
if (isTripleArray(posOrX)) {
|
|
10510
|
-
return this.getBlockAt(new
|
|
10645
|
+
return this.getBlockAt(new import_three30.Vector3(posOrX[0], posOrX[1], posOrX[2]));
|
|
10511
10646
|
}
|
|
10512
10647
|
this.validatePosBounds(posOrX);
|
|
10513
10648
|
return this.getChunkAt(posOrX)?.getBlockAt(posOrX);
|
|
10514
10649
|
}
|
|
10515
10650
|
async setBlockAt(posOrX, yOrBlock, z, block) {
|
|
10516
10651
|
if (typeof posOrX == "number") {
|
|
10517
|
-
return this.setBlockAt(new
|
|
10652
|
+
return this.setBlockAt(new import_three30.Vector3(posOrX, yOrBlock, z), block);
|
|
10518
10653
|
}
|
|
10519
10654
|
if (isTripleArray(posOrX)) {
|
|
10520
|
-
return this.setBlockAt(new
|
|
10655
|
+
return this.setBlockAt(new import_three30.Vector3(posOrX[0], posOrX[1], posOrX[2]), yOrBlock);
|
|
10521
10656
|
}
|
|
10522
10657
|
return this.placeBlock(posOrX, yOrBlock);
|
|
10523
10658
|
}
|
|
@@ -10538,7 +10673,7 @@ var MineRenderWorld = class {
|
|
|
10538
10673
|
const collect = async (positions2) => {
|
|
10539
10674
|
for (const pos of positions2) changes.set(pos.toArray().join(","), pos);
|
|
10540
10675
|
};
|
|
10541
|
-
const place = (block) => this.placeBlock(new
|
|
10676
|
+
const place = (block) => this.placeBlock(new import_three30.Vector3(...block.position), block, collect);
|
|
10542
10677
|
const keys = /* @__PURE__ */ new Map();
|
|
10543
10678
|
for (const block of multiblock.blocks) {
|
|
10544
10679
|
if (Chunk.isAir(block)) continue;
|
|
@@ -10616,13 +10751,13 @@ var MineRenderWorld = class {
|
|
|
10616
10751
|
for (const pos of positions) {
|
|
10617
10752
|
this.pendingCulling.set(pos.toArray().join(","), pos.clone());
|
|
10618
10753
|
for (const offset of CUBE_FACE_OFFSETS) {
|
|
10619
|
-
const neighbor = pos.clone().add(new
|
|
10754
|
+
const neighbor = pos.clone().add(new import_three30.Vector3(...offset));
|
|
10620
10755
|
this.pendingCulling.set(neighbor.toArray().join(","), neighbor);
|
|
10621
10756
|
}
|
|
10622
10757
|
for (let y = -1; y <= 1; y++) {
|
|
10623
10758
|
for (let z = -1; z <= 1; z++) {
|
|
10624
10759
|
for (let x = -1; x <= 1; x++) {
|
|
10625
|
-
const neighbor = pos.clone().add(new
|
|
10760
|
+
const neighbor = pos.clone().add(new import_three30.Vector3(x, y, z));
|
|
10626
10761
|
if (this.getBlockAt(neighbor)?.object?.fluidKind) {
|
|
10627
10762
|
this.pendingCulling.set(neighbor.toArray().join(","), neighbor);
|
|
10628
10763
|
}
|
|
@@ -10644,7 +10779,7 @@ var MineRenderWorld = class {
|
|
|
10644
10779
|
if (!block) continue;
|
|
10645
10780
|
if (block.object?.fluidKind) {
|
|
10646
10781
|
await block.object.updateFluid((x, y, z) => {
|
|
10647
|
-
const neighbor = pos.clone().add(new
|
|
10782
|
+
const neighbor = pos.clone().add(new import_three30.Vector3(x, y, z));
|
|
10648
10783
|
const section = this.getChunkAt(neighbor);
|
|
10649
10784
|
const object = section?.getBlockAt(neighbor)?.object;
|
|
10650
10785
|
return {
|
|
@@ -10656,7 +10791,7 @@ var MineRenderWorld = class {
|
|
|
10656
10791
|
}
|
|
10657
10792
|
let mask = 0;
|
|
10658
10793
|
for (const [face, offset] of CUBE_FACE_OFFSETS.entries()) {
|
|
10659
|
-
const neighbor = pos.clone().add(new
|
|
10794
|
+
const neighbor = pos.clone().add(new import_three30.Vector3(...offset));
|
|
10660
10795
|
if (this.getChunkAt(neighbor)?.isOccludingAt(neighbor)) {
|
|
10661
10796
|
mask |= 1 << face;
|
|
10662
10797
|
}
|
|
@@ -10690,14 +10825,14 @@ var MineRenderWorld = class {
|
|
|
10690
10825
|
return this._chunks.get(this.worldPosToChunkKey(pos));
|
|
10691
10826
|
}
|
|
10692
10827
|
static worldToScenePosition(pos) {
|
|
10693
|
-
return new
|
|
10828
|
+
return new import_three30.Vector3(
|
|
10694
10829
|
pos.x * 16,
|
|
10695
10830
|
pos.y * 16,
|
|
10696
10831
|
pos.z * 16
|
|
10697
10832
|
);
|
|
10698
10833
|
}
|
|
10699
10834
|
static sceneToWorldPosition(pos) {
|
|
10700
|
-
return new
|
|
10835
|
+
return new import_three30.Vector3(
|
|
10701
10836
|
pos.x / 16,
|
|
10702
10837
|
pos.y / 16,
|
|
10703
10838
|
pos.z / 16
|
|
@@ -10717,10 +10852,10 @@ var MineRenderWorld = class {
|
|
|
10717
10852
|
};
|
|
10718
10853
|
|
|
10719
10854
|
// src/world/SectionMesh.ts
|
|
10720
|
-
var
|
|
10855
|
+
var import_three31 = require("three");
|
|
10721
10856
|
init_CanvasCompat();
|
|
10722
10857
|
init_Materials();
|
|
10723
|
-
var SectionMesh = class _SectionMesh extends
|
|
10858
|
+
var SectionMesh = class _SectionMesh extends import_three31.Group {
|
|
10724
10859
|
constructor() {
|
|
10725
10860
|
super(...arguments);
|
|
10726
10861
|
this.ownedMeshes = [];
|
|
@@ -10793,18 +10928,18 @@ var SectionMesh = class _SectionMesh extends import_three30.Group {
|
|
|
10793
10928
|
for (let corner = 0; corner < 6; corner++) indices.push(start + sourceIndices.getX(face * 6 + corner) - face * 4);
|
|
10794
10929
|
}
|
|
10795
10930
|
}
|
|
10796
|
-
const geometry = new
|
|
10797
|
-
geometry.setAttribute("position", new
|
|
10798
|
-
geometry.setAttribute("normal", new
|
|
10799
|
-
geometry.setAttribute("uv", new
|
|
10800
|
-
geometry.setAttribute("color", new
|
|
10931
|
+
const geometry = new import_three31.BufferGeometry();
|
|
10932
|
+
geometry.setAttribute("position", new import_three31.Float32BufferAttribute(positions, 3));
|
|
10933
|
+
geometry.setAttribute("normal", new import_three31.Float32BufferAttribute(normals, 3));
|
|
10934
|
+
geometry.setAttribute("uv", new import_three31.Float32BufferAttribute(uvs, 2));
|
|
10935
|
+
geometry.setAttribute("color", new import_three31.Float32BufferAttribute(colors, 3));
|
|
10801
10936
|
geometry.setIndex(indices);
|
|
10802
10937
|
geometry.computeBoundingBox();
|
|
10803
10938
|
geometry.computeBoundingSphere();
|
|
10804
10939
|
const material = Materials.createShadedCanvasMaterial(canvas, false);
|
|
10805
10940
|
material.vertexColors = true;
|
|
10806
10941
|
const texture = material.uniforms?.map?.value ?? material.map;
|
|
10807
|
-
const mesh = new
|
|
10942
|
+
const mesh = new import_three31.Mesh(geometry, material);
|
|
10808
10943
|
section.add(mesh);
|
|
10809
10944
|
section.ownedMeshes.push({ mesh, texture });
|
|
10810
10945
|
}
|
|
@@ -10838,10 +10973,10 @@ var Chunk = class _Chunk {
|
|
|
10838
10973
|
}
|
|
10839
10974
|
getBlockAt(posOrX, y, z) {
|
|
10840
10975
|
if (typeof posOrX == "number") {
|
|
10841
|
-
return this.getBlockAt(new
|
|
10976
|
+
return this.getBlockAt(new import_three32.Vector3(posOrX, y, z));
|
|
10842
10977
|
}
|
|
10843
10978
|
if (isTripleArray(posOrX)) {
|
|
10844
|
-
return this.getBlockAt(new
|
|
10979
|
+
return this.getBlockAt(new import_three32.Vector3(posOrX[0], posOrX[1], posOrX[2]));
|
|
10845
10980
|
}
|
|
10846
10981
|
const pos = this.worldPosToChunkPos(posOrX);
|
|
10847
10982
|
const index = _Chunk.chunkPosToBlockIndex(pos);
|
|
@@ -10849,10 +10984,10 @@ var Chunk = class _Chunk {
|
|
|
10849
10984
|
}
|
|
10850
10985
|
async setBlockAt(posOrX, yOrBlock, z, block) {
|
|
10851
10986
|
if (typeof posOrX == "number") {
|
|
10852
|
-
return this.setBlockAt(new
|
|
10987
|
+
return this.setBlockAt(new import_three32.Vector3(posOrX, yOrBlock, z), block);
|
|
10853
10988
|
}
|
|
10854
10989
|
if (isTripleArray(posOrX)) {
|
|
10855
|
-
return this.setBlockAt(new
|
|
10990
|
+
return this.setBlockAt(new import_three32.Vector3(posOrX[0], posOrX[1], posOrX[2]), yOrBlock);
|
|
10856
10991
|
}
|
|
10857
10992
|
const worldPos = posOrX;
|
|
10858
10993
|
const pos = this.worldPosToChunkPos(worldPos);
|
|
@@ -10937,7 +11072,7 @@ var Chunk = class _Chunk {
|
|
|
10937
11072
|
}
|
|
10938
11073
|
async clear(onBlocksChanged = this.onBlocksChanged) {
|
|
10939
11074
|
const positions = [...this.renderedBlocks.keys()].map((index) => this.chunkPosToWorldPos(
|
|
10940
|
-
new
|
|
11075
|
+
new import_three32.Vector3(index % 16, Math.floor(index / 256), Math.floor(index / 16) % 16)
|
|
10941
11076
|
));
|
|
10942
11077
|
for (const info of this.renderedBlocks.values()) info.object?.removeFromScene();
|
|
10943
11078
|
this.sectionBlocks.clear();
|
|
@@ -10961,14 +11096,14 @@ var Chunk = class _Chunk {
|
|
|
10961
11096
|
return pos.y * 16 * 16 + pos.z * 16 + pos.x;
|
|
10962
11097
|
}
|
|
10963
11098
|
worldPosToChunkPos(pos) {
|
|
10964
|
-
return new
|
|
11099
|
+
return new import_three32.Vector3(
|
|
10965
11100
|
pos.x - this.x * 16,
|
|
10966
11101
|
pos.y - this.y * 16,
|
|
10967
11102
|
pos.z - this.z * 16
|
|
10968
11103
|
);
|
|
10969
11104
|
}
|
|
10970
11105
|
chunkPosToWorldPos(pos) {
|
|
10971
|
-
return new
|
|
11106
|
+
return new import_three32.Vector3(
|
|
10972
11107
|
this.x * 16 + pos.x,
|
|
10973
11108
|
this.y * 16 + pos.y,
|
|
10974
11109
|
this.z * 16 + pos.z
|