minerender 2.1.0-alpha.32 → 2.1.0-alpha.33
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 +18 -5
- package/dist/browser/index.d.ts +18 -5
- package/dist/browser/index.js +180 -149
- package/dist/browser/index.js.map +1 -1
- package/dist/browser/index.mjs +72 -41
- package/dist/browser/index.mjs.map +1 -1
- package/dist/bundle.js +72 -41
- package/dist/bundle.js.map +1 -1
- package/dist/node/index.d.mts +18 -5
- package/dist/node/index.d.ts +18 -5
- package/dist/node/index.js +180 -149
- package/dist/node/index.js.map +1 -1
- package/dist/node/index.mjs +72 -41
- package/dist/node/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/bundle.js
CHANGED
|
@@ -81078,26 +81078,40 @@ ${key}` : key;
|
|
|
81078
81078
|
};
|
|
81079
81079
|
return collect("");
|
|
81080
81080
|
}
|
|
81081
|
-
static async
|
|
81081
|
+
static async getModelFile(modelKey) {
|
|
81082
81082
|
const path = isAssetKey(modelKey) ? modelKey.getFullPath() : modelKey.path;
|
|
81083
81083
|
const key = new AssetKey(modelKey.namespace, path, void 0, void 0, "entity-models", ".json");
|
|
81084
|
-
|
|
81084
|
+
return Caching.entityModelCache.get(key.serialize(), () => AssetLoader.get(key, "json" /* JSON */));
|
|
81085
|
+
}
|
|
81086
|
+
static async getLayerList(modelKey) {
|
|
81087
|
+
return Object.keys((await this.getModelFile(modelKey))?.layers ?? {});
|
|
81088
|
+
}
|
|
81089
|
+
static async getEntity(modelKey, textureKey, options) {
|
|
81090
|
+
const model = await this.getModelFile(modelKey);
|
|
81085
81091
|
if (!model) return void 0;
|
|
81086
|
-
const
|
|
81087
|
-
|
|
81088
|
-
|
|
81089
|
-
|
|
81090
|
-
|
|
81091
|
-
|
|
81092
|
-
|
|
81093
|
-
|
|
81094
|
-
|
|
81095
|
-
|
|
81096
|
-
|
|
81097
|
-
|
|
81098
|
-
|
|
81099
|
-
|
|
81100
|
-
|
|
81092
|
+
const names = [...new Set(options?.layers ?? [options?.layer ?? "main"])];
|
|
81093
|
+
if (names.length === 0) throw new MineRenderError(`Entity ${model.id} requires at least one layer`);
|
|
81094
|
+
const selected = names.map((name2) => {
|
|
81095
|
+
const layer = model.layers[name2];
|
|
81096
|
+
if (!layer) {
|
|
81097
|
+
throw new MineRenderError(`Entity ${model.id} has no layer "${name2}". Available layers: ${Object.keys(model.layers).join(", ")}`);
|
|
81098
|
+
}
|
|
81099
|
+
return { name: name2, layer };
|
|
81100
|
+
});
|
|
81101
|
+
const layers = Object.fromEntries(await Promise.all(selected.map(async ({ name: name2, layer }, index) => {
|
|
81102
|
+
const override = options?.textures?.[name2] ?? (index === 0 ? textureKey : void 0);
|
|
81103
|
+
let texture;
|
|
81104
|
+
if (override) {
|
|
81105
|
+
const path = isAssetKey(override) ? override.getFullPath() : override.path;
|
|
81106
|
+
texture = isAssetKey(override) && override.assetType === "textures" && path.startsWith("entity/") ? override : new AssetKey(override.namespace, path, "textures", "entity", "assets", ".png", isAssetKey(override) ? override.root : void 0);
|
|
81107
|
+
} else if (layer.textureLocation !== void 0) {
|
|
81108
|
+
texture = AssetKey.parse("textures", layer.textureLocation.replace(/^([^:]+:)?textures\//, "$1"));
|
|
81109
|
+
} else {
|
|
81110
|
+
texture = await this.resolveTexture(modelKey);
|
|
81111
|
+
}
|
|
81112
|
+
return [name2, { key: override ?? modelKey, texture, layer }];
|
|
81113
|
+
})));
|
|
81114
|
+
return { ...layers[names[0]], id: model.id, layers };
|
|
81101
81115
|
}
|
|
81102
81116
|
static async resolveTexture(modelKey) {
|
|
81103
81117
|
const path = isAssetKey(modelKey) ? modelKey.getFullPath() : modelKey.path;
|
|
@@ -81621,9 +81635,21 @@ ${key}` : key;
|
|
|
81621
81635
|
dispose() {
|
|
81622
81636
|
super.dispose();
|
|
81623
81637
|
}
|
|
81624
|
-
|
|
81625
|
-
|
|
81626
|
-
|
|
81638
|
+
getLayerGroup(name2) {
|
|
81639
|
+
return super.getGroupByName(`layer:${name2}`);
|
|
81640
|
+
}
|
|
81641
|
+
getGroupByName(name2, layerName) {
|
|
81642
|
+
return layerName === void 0 ? super.getGroupByName(name2) : this.getLayerGroup(layerName)?.getObjectByName(`group:${name2}`);
|
|
81643
|
+
}
|
|
81644
|
+
getMeshByName(name2, layerName) {
|
|
81645
|
+
return layerName === void 0 ? super.getMeshByName(name2) : this.getLayerGroup(layerName)?.getObjectByName(`mesh:${name2}`);
|
|
81646
|
+
}
|
|
81647
|
+
get entityLayers() {
|
|
81648
|
+
return this.entity.layers ?? { main: this.entity };
|
|
81649
|
+
}
|
|
81650
|
+
getTextureKey(layer) {
|
|
81651
|
+
if (layer.texture) return layer.texture;
|
|
81652
|
+
const key = layer.key;
|
|
81627
81653
|
return new AssetKey(
|
|
81628
81654
|
key.namespace,
|
|
81629
81655
|
isAssetKey(key) ? key.getFullPath() : key.path,
|
|
@@ -81633,18 +81659,22 @@ ${key}` : key;
|
|
|
81633
81659
|
".png"
|
|
81634
81660
|
);
|
|
81635
81661
|
}
|
|
81636
|
-
async loadTextures() {
|
|
81637
|
-
|
|
81662
|
+
async loadTextures(layer = this.entity) {
|
|
81663
|
+
return ModelTextures.get(this.getTextureKey(layer));
|
|
81638
81664
|
}
|
|
81639
81665
|
createMeshes(force = false) {
|
|
81640
81666
|
if (this.meshesCreated && !force) return;
|
|
81641
81667
|
const modelRoot = new Object3D();
|
|
81642
81668
|
if (this.options.flip) modelRoot.scale.set(-1, -1, 1);
|
|
81643
81669
|
this.add(modelRoot);
|
|
81644
|
-
|
|
81670
|
+
Object.entries(this.entityLayers).forEach(([name2, layer], index) => {
|
|
81671
|
+
const group = this.createGroup(`layer:${name2}`);
|
|
81672
|
+
modelRoot.add(group);
|
|
81673
|
+
this.createPart("root", layer.layer.root, group, layer.layer.texture, Materials.MISSING_TEXTURE, index);
|
|
81674
|
+
});
|
|
81645
81675
|
this.meshesCreated = true;
|
|
81646
81676
|
}
|
|
81647
|
-
createPart(name2, part, parent, textureSize, material) {
|
|
81677
|
+
createPart(name2, part, parent, textureSize, material, renderOrder) {
|
|
81648
81678
|
const anchor = this.createGroup(name2);
|
|
81649
81679
|
anchor.position.fromArray(part.pose.offset);
|
|
81650
81680
|
anchor.rotation.set(...part.pose.rotation, "ZYX");
|
|
@@ -81664,30 +81694,31 @@ ${key}` : key;
|
|
|
81664
81694
|
).clone();
|
|
81665
81695
|
geometry.translate(cube.origin[0] + width / 2, cube.origin[1] + height / 2, cube.origin[2] + depth / 2);
|
|
81666
81696
|
const mesh = this.createMesh(name2, geometry, material);
|
|
81697
|
+
mesh.renderOrder = renderOrder;
|
|
81667
81698
|
anchor.add(mesh);
|
|
81668
81699
|
if (this.options.wireframe) addWireframeToMesh(geometry, mesh);
|
|
81669
81700
|
}
|
|
81670
81701
|
for (const [childName, child] of Object.entries(part.children)) {
|
|
81671
|
-
this.createPart(childName, child, anchor, size, material);
|
|
81702
|
+
this.createPart(childName, child, anchor, size, material, renderOrder);
|
|
81672
81703
|
}
|
|
81673
81704
|
}
|
|
81674
81705
|
async applyTextures() {
|
|
81675
|
-
|
|
81676
|
-
|
|
81677
|
-
|
|
81678
|
-
|
|
81679
|
-
|
|
81680
|
-
|
|
81681
|
-
|
|
81682
|
-
|
|
81683
|
-
|
|
81684
|
-
|
|
81685
|
-
|
|
81686
|
-
|
|
81687
|
-
|
|
81688
|
-
|
|
81689
|
-
|
|
81690
|
-
});
|
|
81706
|
+
await Promise.all(Object.entries(this.entityLayers).map(async ([name2, layer]) => {
|
|
81707
|
+
const assetKeyStr = this.getTextureKey(layer).serialize();
|
|
81708
|
+
const keyStr = `entity:${assetKeyStr}`;
|
|
81709
|
+
let mat = Caching.materialCache.getIfPresent(keyStr);
|
|
81710
|
+
if (!mat) {
|
|
81711
|
+
const cachedAsset = Caching.textureAssetCache.getIfPresent(assetKeyStr);
|
|
81712
|
+
const imageData = await this.loadTextures(layer);
|
|
81713
|
+
if (!imageData) return;
|
|
81714
|
+
const canvas = imageData.data.canvas;
|
|
81715
|
+
const createMaterial = () => Materials.createBasicCanvasMaterial(canvas);
|
|
81716
|
+
mat = cachedAsset && Caching.textureAssetCache.getIfPresent(assetKeyStr) === cachedAsset ? Caching.materialCache.get(keyStr, createMaterial) : createMaterial();
|
|
81717
|
+
}
|
|
81718
|
+
this.getLayerGroup(name2)?.traverse((object) => {
|
|
81719
|
+
if (isMesh(object)) object.material = mat;
|
|
81720
|
+
});
|
|
81721
|
+
}));
|
|
81691
81722
|
this.notifyDirty();
|
|
81692
81723
|
}
|
|
81693
81724
|
};
|