minerender 2.0.0-alpha.14 → 2.0.0-alpha.15

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.
Files changed (141) hide show
  1. package/dist/bundle.js +161 -132
  2. package/dist/bundle.js.map +4 -4
  3. package/dist/cjs/UVMapper.js +189 -204
  4. package/dist/cjs/UVMapper.js.map +1 -1
  5. package/dist/cjs/assets/AssetKey.js +7 -8
  6. package/dist/cjs/assets/AssetKey.js.map +1 -1
  7. package/dist/cjs/assets/AssetLoader.js +24 -37
  8. package/dist/cjs/assets/AssetLoader.js.map +1 -1
  9. package/dist/cjs/assets/Assets.js +4 -17
  10. package/dist/cjs/assets/Assets.js.map +1 -1
  11. package/dist/cjs/assets/BlockStates.js +29 -48
  12. package/dist/cjs/assets/BlockStates.js.map +1 -1
  13. package/dist/cjs/assets/Entities.js +46 -67
  14. package/dist/cjs/assets/Entities.js.map +1 -1
  15. package/dist/cjs/assets/ModelTextures.js +26 -43
  16. package/dist/cjs/assets/ModelTextures.js.map +1 -1
  17. package/dist/cjs/assets/Models.js +40 -61
  18. package/dist/cjs/assets/Models.js.map +1 -1
  19. package/dist/cjs/assets/source/HostedAssetSource.js +63 -79
  20. package/dist/cjs/assets/source/HostedAssetSource.js.map +1 -1
  21. package/dist/cjs/assets/source/archive/ArchiveAssetSource.js +74 -91
  22. package/dist/cjs/assets/source/archive/ArchiveAssetSource.js.map +1 -1
  23. package/dist/cjs/assets/source/archive/BrowserArchiveProxy.js +9 -20
  24. package/dist/cjs/assets/source/archive/BrowserArchiveProxy.js.map +1 -1
  25. package/dist/cjs/cache/CacheKey.js +1 -2
  26. package/dist/cjs/cache/CacheKey.js.map +1 -1
  27. package/dist/cjs/cache/PersistentCache.js +7 -18
  28. package/dist/cjs/cache/PersistentCache.js.map +1 -1
  29. package/dist/cjs/entity/scene/EntityObject.js +23 -37
  30. package/dist/cjs/entity/scene/EntityObject.js.map +1 -1
  31. package/dist/cjs/image/ImageLoader.js +85 -118
  32. package/dist/cjs/image/ImageLoader.js.map +1 -1
  33. package/dist/cjs/inspector/SceneInspector.js +1 -2
  34. package/dist/cjs/inspector/SceneInspector.js.map +1 -1
  35. package/dist/cjs/instance/InstanceManager.js +18 -31
  36. package/dist/cjs/instance/InstanceManager.js.map +1 -1
  37. package/dist/cjs/model/ModelMerger.js +23 -36
  38. package/dist/cjs/model/ModelMerger.js.map +1 -1
  39. package/dist/cjs/model/block/scene/BlockObject.js +211 -234
  40. package/dist/cjs/model/block/scene/BlockObject.js.map +1 -1
  41. package/dist/cjs/model/multiblock/SchematicParser.js +4 -15
  42. package/dist/cjs/model/multiblock/SchematicParser.js.map +1 -1
  43. package/dist/cjs/model/multiblock/StructureParser.js +28 -40
  44. package/dist/cjs/model/multiblock/StructureParser.js.map +1 -1
  45. package/dist/cjs/model/scene/ModelObject.js +10 -25
  46. package/dist/cjs/model/scene/ModelObject.js.map +1 -1
  47. package/dist/cjs/nbt/NBTHelper.js +4 -15
  48. package/dist/cjs/nbt/NBTHelper.js.map +1 -1
  49. package/dist/cjs/renderer/MineRenderScene.js +53 -75
  50. package/dist/cjs/renderer/MineRenderScene.js.map +1 -1
  51. package/dist/cjs/renderer/Renderer.js +5 -8
  52. package/dist/cjs/renderer/Renderer.js.map +1 -1
  53. package/dist/cjs/renderer/SceneObject.js +3 -15
  54. package/dist/cjs/renderer/SceneObject.js.map +1 -1
  55. package/dist/cjs/skin/SkinTextureCoordinates.js +115 -116
  56. package/dist/cjs/skin/SkinTextureCoordinates.js.map +1 -1
  57. package/dist/cjs/skin/Skins.js +112 -149
  58. package/dist/cjs/skin/Skins.js.map +1 -1
  59. package/dist/cjs/skin/scene/SkinObject.js +3 -14
  60. package/dist/cjs/skin/scene/SkinObject.js.map +1 -1
  61. package/dist/cjs/util/log.js +1 -1
  62. package/dist/cjs/util/log.js.map +1 -1
  63. package/dist/cjs/util/util.js +3 -14
  64. package/dist/cjs/util/util.js.map +1 -1
  65. package/dist/cjs/world/Chunk.js +56 -73
  66. package/dist/cjs/world/Chunk.js.map +1 -1
  67. package/dist/cjs/world/MineRenderWorld.js +34 -49
  68. package/dist/cjs/world/MineRenderWorld.js.map +1 -1
  69. package/dist/esm/UVMapper.js +189 -204
  70. package/dist/esm/UVMapper.js.map +1 -1
  71. package/dist/esm/assets/AssetKey.js +7 -8
  72. package/dist/esm/assets/AssetKey.js.map +1 -1
  73. package/dist/esm/assets/AssetLoader.js +24 -37
  74. package/dist/esm/assets/AssetLoader.js.map +1 -1
  75. package/dist/esm/assets/Assets.js +4 -17
  76. package/dist/esm/assets/Assets.js.map +1 -1
  77. package/dist/esm/assets/BlockStates.js +29 -48
  78. package/dist/esm/assets/BlockStates.js.map +1 -1
  79. package/dist/esm/assets/Entities.js +46 -67
  80. package/dist/esm/assets/Entities.js.map +1 -1
  81. package/dist/esm/assets/ModelTextures.js +26 -43
  82. package/dist/esm/assets/ModelTextures.js.map +1 -1
  83. package/dist/esm/assets/Models.js +40 -61
  84. package/dist/esm/assets/Models.js.map +1 -1
  85. package/dist/esm/assets/source/HostedAssetSource.js +63 -79
  86. package/dist/esm/assets/source/HostedAssetSource.js.map +1 -1
  87. package/dist/esm/assets/source/archive/ArchiveAssetSource.js +74 -91
  88. package/dist/esm/assets/source/archive/ArchiveAssetSource.js.map +1 -1
  89. package/dist/esm/assets/source/archive/BrowserArchiveProxy.js +9 -20
  90. package/dist/esm/assets/source/archive/BrowserArchiveProxy.js.map +1 -1
  91. package/dist/esm/cache/CacheKey.js +1 -2
  92. package/dist/esm/cache/CacheKey.js.map +1 -1
  93. package/dist/esm/cache/PersistentCache.js +7 -18
  94. package/dist/esm/cache/PersistentCache.js.map +1 -1
  95. package/dist/esm/entity/scene/EntityObject.js +23 -37
  96. package/dist/esm/entity/scene/EntityObject.js.map +1 -1
  97. package/dist/esm/image/ImageLoader.js +85 -118
  98. package/dist/esm/image/ImageLoader.js.map +1 -1
  99. package/dist/esm/inspector/SceneInspector.js +1 -2
  100. package/dist/esm/inspector/SceneInspector.js.map +1 -1
  101. package/dist/esm/instance/InstanceManager.js +18 -31
  102. package/dist/esm/instance/InstanceManager.js.map +1 -1
  103. package/dist/esm/model/ModelMerger.js +23 -36
  104. package/dist/esm/model/ModelMerger.js.map +1 -1
  105. package/dist/esm/model/block/scene/BlockObject.js +211 -234
  106. package/dist/esm/model/block/scene/BlockObject.js.map +1 -1
  107. package/dist/esm/model/multiblock/SchematicParser.js +4 -15
  108. package/dist/esm/model/multiblock/SchematicParser.js.map +1 -1
  109. package/dist/esm/model/multiblock/StructureParser.js +28 -40
  110. package/dist/esm/model/multiblock/StructureParser.js.map +1 -1
  111. package/dist/esm/model/scene/ModelObject.js +10 -25
  112. package/dist/esm/model/scene/ModelObject.js.map +1 -1
  113. package/dist/esm/nbt/NBTHelper.js +4 -15
  114. package/dist/esm/nbt/NBTHelper.js.map +1 -1
  115. package/dist/esm/renderer/MineRenderScene.js +53 -75
  116. package/dist/esm/renderer/MineRenderScene.js.map +1 -1
  117. package/dist/esm/renderer/Renderer.js +5 -8
  118. package/dist/esm/renderer/Renderer.js.map +1 -1
  119. package/dist/esm/renderer/SceneObject.js +3 -15
  120. package/dist/esm/renderer/SceneObject.js.map +1 -1
  121. package/dist/esm/skin/SkinTextureCoordinates.js +115 -116
  122. package/dist/esm/skin/SkinTextureCoordinates.js.map +1 -1
  123. package/dist/esm/skin/Skins.js +112 -149
  124. package/dist/esm/skin/Skins.js.map +1 -1
  125. package/dist/esm/skin/scene/SkinObject.js +3 -14
  126. package/dist/esm/skin/scene/SkinObject.js.map +1 -1
  127. package/dist/esm/util/log.js +1 -1
  128. package/dist/esm/util/log.js.map +1 -1
  129. package/dist/esm/util/util.js +3 -14
  130. package/dist/esm/util/util.js.map +1 -1
  131. package/dist/esm/world/Chunk.js +56 -73
  132. package/dist/esm/world/Chunk.js.map +1 -1
  133. package/dist/esm/world/MineRenderWorld.js +34 -49
  134. package/dist/esm/world/MineRenderWorld.js.map +1 -1
  135. package/package.json +5 -26
  136. package/src/model/scene/ModelObject.ts +0 -3
  137. package/src/nbt/NBTHelper.ts +1 -1
  138. package/src/renderer/Renderer.ts +2 -2
  139. package/src/skin/SkinTextureCoordinates.ts +129 -119
  140. package/src/world/Chunk.ts +0 -2
  141. package/tsconfig.json +2 -2
@@ -1,13 +1,4 @@
1
1
  "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
2
  Object.defineProperty(exports, "__esModule", { value: true });
12
3
  exports.MineRenderWorld = void 0;
13
4
  const three_1 = require("three");
@@ -38,50 +29,44 @@ class MineRenderWorld {
38
29
  this.validatePosBounds(posOrX);
39
30
  return chunk.getBlockAt(posOrX);
40
31
  }
41
- setBlockAt(posOrX, yOrBlock, z, block) {
42
- return __awaiter(this, void 0, void 0, function* () {
43
- if (typeof posOrX == "number") {
44
- return this.setBlockAt(new three_1.Vector3(posOrX, yOrBlock, z), block);
45
- }
46
- if ((0, Model_1.isTripleArray)(posOrX)) {
47
- return this.setBlockAt(new three_1.Vector3(posOrX[0], posOrX[1], posOrX[2]), yOrBlock);
48
- }
49
- this.validatePosBounds(posOrX);
50
- const chunk = this.getOrCreateChunkAt(posOrX);
51
- return chunk.setBlockAt(posOrX, yOrBlock);
52
- });
32
+ async setBlockAt(posOrX, yOrBlock, z, block) {
33
+ if (typeof posOrX == "number") {
34
+ return this.setBlockAt(new three_1.Vector3(posOrX, yOrBlock, z), block);
35
+ }
36
+ if ((0, Model_1.isTripleArray)(posOrX)) {
37
+ return this.setBlockAt(new three_1.Vector3(posOrX[0], posOrX[1], posOrX[2]), yOrBlock);
38
+ }
39
+ this.validatePosBounds(posOrX);
40
+ const chunk = this.getOrCreateChunkAt(posOrX);
41
+ return chunk.setBlockAt(posOrX, yOrBlock);
53
42
  }
54
- placeMultiBlock(multiblock, useBatches = true, executor = new BatchedExecutor_1.BatchedExecutor()) {
55
- return __awaiter(this, void 0, void 0, function* () {
56
- // preload blockstates
57
- const keys = new Set(multiblock.blocks.map(block => AssetKey_1.AssetKey.parse("blockstates", block.type)));
58
- yield BlockStates_1.BlockStates.getAll(keys);
59
- const place = (block) => __awaiter(this, void 0, void 0, function* () {
60
- if (useBatches && typeof executor !== "undefined") {
61
- yield new Promise((resolve, reject) => {
62
- executor.submit(() => {
63
- this.setBlockAt(block.position, block).then(resolve).catch(reject);
64
- });
43
+ async placeMultiBlock(multiblock, useBatches = true, executor = new BatchedExecutor_1.BatchedExecutor()) {
44
+ // preload blockstates
45
+ const keys = new Set(multiblock.blocks.map(block => AssetKey_1.AssetKey.parse("blockstates", block.type)));
46
+ await BlockStates_1.BlockStates.getAll(keys);
47
+ const place = async (block) => {
48
+ if (useBatches && typeof executor !== "undefined") {
49
+ await new Promise((resolve, reject) => {
50
+ executor.submit(() => {
51
+ this.setBlockAt(block.position, block).then(resolve).catch(reject);
65
52
  });
66
- }
67
- else {
68
- yield this.setBlockAt(block.position, block);
69
- }
70
- });
71
- for (let block of multiblock.blocks) {
72
- yield place(block);
53
+ });
73
54
  }
74
- });
75
- }
76
- clear() {
77
- return __awaiter(this, void 0, void 0, function* () {
78
- console.log("CHUNKS", this._chunks);
79
- for (let chunk of this._chunks.values()) {
80
- console.log("dispose chunk", chunk);
81
- yield (chunk === null || chunk === void 0 ? void 0 : chunk.dispose());
55
+ else {
56
+ await this.setBlockAt(block.position, block);
82
57
  }
83
- this._chunks.clear();
84
- });
58
+ };
59
+ for (let block of multiblock.blocks) {
60
+ await place(block);
61
+ }
62
+ }
63
+ async clear() {
64
+ console.log("CHUNKS", this._chunks);
65
+ for (let chunk of this._chunks.values()) {
66
+ console.log("dispose chunk", chunk);
67
+ await chunk?.dispose();
68
+ }
69
+ this._chunks.clear();
85
70
  }
86
71
  getOrCreateChunkAt(pos) {
87
72
  const key = this.worldPosToChunkKey(pos);
@@ -1 +1 @@
1
- {"version":3,"file":"MineRenderWorld.js","sourceRoot":"src/","sources":["world/MineRenderWorld.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MineRenderWorld.js","sourceRoot":"src/","sources":["world/MineRenderWorld.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,3 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
1
  import { Float32BufferAttribute, Vector2 } from "three";
11
2
  import { CUBE_FACES, CubeFace } from "./CubeFace";
12
3
  import { ModelTextures } from "./assets/ModelTextures";
@@ -131,12 +122,10 @@ export class UVMapper {
131
122
  static facesToUv(faces, originalTextureSize, actualTextureSize) {
132
123
  return new Float32BufferAttribute(this.facesToUvArray(faces, originalTextureSize, actualTextureSize), 2);
133
124
  }
134
- static getAtlas(model) {
135
- return __awaiter(this, void 0, void 0, function* () {
136
- const keyStr = model.key.serialize();
137
- return Caching.modelTextureAtlasCache.get(keyStr, k => {
138
- return this.createAtlas(model);
139
- });
125
+ static async getAtlas(model) {
126
+ const keyStr = model.key.serialize();
127
+ return Caching.modelTextureAtlasCache.get(keyStr, k => {
128
+ return this.createAtlas(model);
140
129
  });
141
130
  }
142
131
  static fillMissingTextureKeys(textures, target) {
@@ -204,210 +193,206 @@ export class UVMapper {
204
193
  }
205
194
  return [tl, tr, bl, br];
206
195
  }
207
- static createAtlas(originalModel) {
208
- var _a, _b;
209
- return __awaiter(this, void 0, void 0, function* () {
210
- const textureMap = {};
211
- const metaMap = {};
212
- const model = Object.assign({}, originalModel);
213
- const isItemModel = !("elements" in model);
214
- console.debug(p, "Creating Atlas for", model.key);
215
- if (model.textures) {
216
- const promises = [];
217
- const uniqueTextureNames = []; // TODO: make these actually unique
218
- const textureReferences = {};
219
- for (let textureKey in model.textures) {
220
- let textureValue = model.textures[textureKey];
221
- if (textureValue.startsWith("#")) {
222
- textureReferences[textureKey] = textureValue.substr(1);
196
+ static async createAtlas(originalModel) {
197
+ const textureMap = {};
198
+ const metaMap = {};
199
+ const model = { ...originalModel };
200
+ const isItemModel = !("elements" in model);
201
+ console.debug(p, "Creating Atlas for", model.key);
202
+ if (model.textures) {
203
+ const promises = [];
204
+ const uniqueTextureNames = []; // TODO: make these actually unique
205
+ const textureReferences = {};
206
+ for (let textureKey in model.textures) {
207
+ let textureValue = model.textures[textureKey];
208
+ if (textureValue.startsWith("#")) {
209
+ textureReferences[textureKey] = textureValue.substr(1);
210
+ }
211
+ else {
212
+ uniqueTextureNames.push(textureKey);
213
+ const assetKey = AssetKey.parse("textures", textureValue, model.key);
214
+ promises.push(ModelTextures.get(assetKey).then(asset => {
215
+ if (!asset) {
216
+ console.warn(p, "Missing texture", assetKey);
217
+ return;
218
+ }
219
+ textureMap[textureKey] = new WrappedImage(asset);
220
+ }));
221
+ promises.push(ModelTextures.getMeta(assetKey).then(meta => {
222
+ metaMap[textureKey] = meta;
223
+ }));
224
+ }
225
+ }
226
+ await Promise.all(promises);
227
+ const textureCount = uniqueTextureNames.length;
228
+ console.debug(p, "Creating Atlas for", textureCount, "textures");
229
+ // console.log(model.textures)
230
+ this.fillMissingTextureKeys(model.textures, textureMap);
231
+ this.fillMissingTextureKeys(model.textures, metaMap);
232
+ const sizes = {};
233
+ // Find largest texture dimensions
234
+ let maxWidth = 0;
235
+ let maxHeight = 0;
236
+ for (let textureKey of uniqueTextureNames) {
237
+ let texture = textureMap[textureKey];
238
+ if (!texture)
239
+ continue;
240
+ sizes[textureKey] = [texture.frameWidth, texture.frameHeight];
241
+ if (texture.frameWidth > maxWidth) {
242
+ maxWidth = texture.width;
243
+ }
244
+ if (texture.frameHeight > maxHeight) {
245
+ maxHeight = texture.frameHeight;
246
+ }
247
+ }
248
+ this.fillMissingTextureKeys(model.textures, sizes);
249
+ // console.log("sizes", sizes);
250
+ const s = (Math.ceil(Math.sqrt(textureCount + 1))); // +1 for transparency
251
+ const size = Math.ceil(s * maxWidth);
252
+ console.debug(p, "Atlas size:", size);
253
+ // console.log("size: " + size);
254
+ const squaredSize = size * size;
255
+ const missing = await ImageLoader.getData("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABAAQMAAACQp+OdAAAABlBMVEX/AP8AAACfphTyAAAAFUlEQVQoz2MIhQKGVVAwKjIqQrwIAHRz/wFI17TEAAAAAElFTkSuQmCC");
256
+ const empty = await ImageLoader.getData("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABAAQMAAACQp+OdAAAAA1BMVEUAAACnej3aAAAAAXRSTlMAQObYZgAAAA5JREFUKM9jGAWjgAIAAAJAAAFSSwuTAAAAAElFTkSuQmCC");
257
+ //TODO: add transparent texture and use as default uv
258
+ // Create image
259
+ const image = new CanvasImage(size, size);
260
+ image.putData(missing, 0, 0); // fill with invalid texture image
261
+ image.putData(empty, 0, 0, 0, 0, maxWidth, maxWidth); // add transparent section in the top-left corner
262
+ const positions = {};
263
+ let hasTransparency = false;
264
+ let hasAnimation = false;
265
+ const animatorFunctions = {};
266
+ // Draw all textures onto a single image
267
+ let tx = 1; // start one over to leave room for the transparent space
268
+ let ty = 0;
269
+ for (let textureIndex = 0; textureIndex < uniqueTextureNames.length; textureIndex++) {
270
+ let textureKey = uniqueTextureNames[textureIndex];
271
+ let texture = textureMap[textureKey];
272
+ let x = tx * maxWidth;
273
+ let y = ty * maxWidth;
274
+ if (texture) {
275
+ console.log(texture);
276
+ positions[textureKey] = [x, y];
277
+ image.putData(texture.data, x, y, 0, 0, maxWidth, maxWidth);
278
+ // console.log(image.toDataURL())
279
+ //TODO: only first frame for animated textures
280
+ if (texture.hasTransparency) {
281
+ hasTransparency = true;
223
282
  }
224
- else {
225
- uniqueTextureNames.push(textureKey);
226
- const assetKey = AssetKey.parse("textures", textureValue, model.key);
227
- promises.push(ModelTextures.get(assetKey).then(asset => {
228
- if (!asset) {
229
- console.warn(p, "Missing texture", assetKey);
230
- return;
283
+ console.log("texture", textureKey, "animated", texture.animated);
284
+ if (texture.animated) {
285
+ hasAnimation = true;
286
+ const meta = metaMap[textureKey];
287
+ const frameTime = meta?.animation?.frametime ?? 1;
288
+ console.log(meta);
289
+ console.log(frameTime);
290
+ let t = 0;
291
+ let f = 0;
292
+ animatorFunctions[textureKey] = () => {
293
+ // console.log("animating", textureKey)
294
+ //TODO: use mcmeta for frame count, delays, etc
295
+ //TODO: interpolate?
296
+ if (t++ >= frameTime) {
297
+ t = 0;
298
+ const frames = meta?.animation?.frames;
299
+ const frame = frames ? frames[f] : f; //TODO: frame.time support
300
+ image.putData(texture.getFrameSectionData(frame), x, y, 0, 0, maxWidth, maxWidth);
301
+ f++;
302
+ if (f >= (frames ? frames.length : texture.frameCount)) {
303
+ f = 0;
304
+ }
231
305
  }
232
- textureMap[textureKey] = new WrappedImage(asset);
233
- }));
234
- promises.push(ModelTextures.getMeta(assetKey).then(meta => {
235
- metaMap[textureKey] = meta;
236
- }));
306
+ };
237
307
  }
238
308
  }
239
- yield Promise.all(promises);
240
- const textureCount = uniqueTextureNames.length;
241
- console.debug(p, "Creating Atlas for", textureCount, "textures");
242
- // console.log(model.textures)
243
- this.fillMissingTextureKeys(model.textures, textureMap);
244
- this.fillMissingTextureKeys(model.textures, metaMap);
245
- const sizes = {};
246
- // Find largest texture dimensions
247
- let maxWidth = 0;
248
- let maxHeight = 0;
249
- for (let textureKey of uniqueTextureNames) {
250
- let texture = textureMap[textureKey];
251
- if (!texture)
252
- continue;
253
- sizes[textureKey] = [texture.frameWidth, texture.frameHeight];
254
- if (texture.frameWidth > maxWidth) {
255
- maxWidth = texture.width;
256
- }
257
- if (texture.frameHeight > maxHeight) {
258
- maxHeight = texture.frameHeight;
259
- }
309
+ tx++;
310
+ if (tx >= s) {
311
+ tx = 0;
312
+ ty++;
260
313
  }
261
- this.fillMissingTextureKeys(model.textures, sizes);
262
- // console.log("sizes", sizes);
263
- const s = (Math.ceil(Math.sqrt(textureCount + 1))); // +1 for transparency
264
- const size = Math.ceil(s * maxWidth);
265
- console.debug(p, "Atlas size:", size);
266
- // console.log("size: " + size);
267
- const squaredSize = size * size;
268
- const missing = yield ImageLoader.getData("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABAAQMAAACQp+OdAAAABlBMVEX/AP8AAACfphTyAAAAFUlEQVQoz2MIhQKGVVAwKjIqQrwIAHRz/wFI17TEAAAAAElFTkSuQmCC");
269
- const empty = yield ImageLoader.getData("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABAAQMAAACQp+OdAAAAA1BMVEUAAACnej3aAAAAAXRSTlMAQObYZgAAAA5JREFUKM9jGAWjgAIAAAJAAAFSSwuTAAAAAElFTkSuQmCC");
270
- //TODO: add transparent texture and use as default uv
271
- // Create image
272
- const image = new CanvasImage(size, size);
273
- image.putData(missing, 0, 0); // fill with invalid texture image
274
- image.putData(empty, 0, 0, 0, 0, maxWidth, maxWidth); // add transparent section in the top-left corner
275
- const positions = {};
276
- let hasTransparency = false;
277
- let hasAnimation = false;
278
- const animatorFunctions = {};
279
- // Draw all textures onto a single image
280
- let tx = 1; // start one over to leave room for the transparent space
281
- let ty = 0;
282
- for (let textureIndex = 0; textureIndex < uniqueTextureNames.length; textureIndex++) {
283
- let textureKey = uniqueTextureNames[textureIndex];
284
- let texture = textureMap[textureKey];
285
- let x = tx * maxWidth;
286
- let y = ty * maxWidth;
287
- if (texture) {
288
- console.log(texture);
289
- positions[textureKey] = [x, y];
290
- image.putData(texture.data, x, y, 0, 0, maxWidth, maxWidth);
291
- // console.log(image.toDataURL())
292
- //TODO: only first frame for animated textures
293
- if (texture.hasTransparency) {
294
- hasTransparency = true;
295
- }
296
- console.log("texture", textureKey, "animated", texture.animated);
297
- if (texture.animated) {
298
- hasAnimation = true;
299
- const meta = metaMap[textureKey];
300
- const frameTime = (_b = (_a = meta === null || meta === void 0 ? void 0 : meta.animation) === null || _a === void 0 ? void 0 : _a.frametime) !== null && _b !== void 0 ? _b : 1;
301
- console.log(meta);
302
- console.log(frameTime);
303
- let t = 0;
304
- let f = 0;
305
- animatorFunctions[textureKey] = () => {
306
- var _a;
307
- // console.log("animating", textureKey)
308
- //TODO: use mcmeta for frame count, delays, etc
309
- //TODO: interpolate?
310
- if (t++ >= frameTime) {
311
- t = 0;
312
- const frames = (_a = meta === null || meta === void 0 ? void 0 : meta.animation) === null || _a === void 0 ? void 0 : _a.frames;
313
- const frame = frames ? frames[f] : f; //TODO: frame.time support
314
- image.putData(texture.getFrameSectionData(frame), x, y, 0, 0, maxWidth, maxWidth);
315
- f++;
316
- if (f >= (frames ? frames.length : texture.frameCount)) {
317
- f = 0;
318
- }
319
- }
320
- };
321
- }
322
- }
323
- tx++;
324
- if (tx >= s) {
325
- tx = 0;
326
- ty++;
314
+ }
315
+ const atlasImageData = image.toDataURL();
316
+ console.log(p, "Atlas Image for", model.key, atlasImageData);
317
+ this.fillMissingTextureKeys(model.textures, positions);
318
+ // console.log("positions", positions);
319
+ if (isItemModel) {
320
+ console.debug(p, "Generating item model for", model);
321
+ model.elements = [];
322
+ for (let layerName of ModelGenerator.ITEM_LAYERS) {
323
+ const textureImage = textureMap[layerName];
324
+ if (textureImage) {
325
+ model.elements.push(...ModelGenerator.generateItemModel(textureImage.data, layerName));
327
326
  }
328
327
  }
329
- const atlasImageData = image.toDataURL();
330
- console.log(p, "Atlas Image for", model.key, atlasImageData);
331
- this.fillMissingTextureKeys(model.textures, positions);
332
- // console.log("positions", positions);
333
- if (isItemModel) {
334
- console.debug(p, "Generating item model for", model);
335
- model.elements = [];
336
- for (let layerName of ModelGenerator.ITEM_LAYERS) {
337
- const textureImage = textureMap[layerName];
338
- if (textureImage) {
339
- model.elements.push(...ModelGenerator.generateItemModel(textureImage.data, layerName));
340
- }
328
+ console.debug(p, "Item model elements", model.elements);
329
+ }
330
+ if (!model.elements) {
331
+ //TODO: default elements
332
+ }
333
+ // Adjust UV positions
334
+ if (model.elements) {
335
+ for (let elementIndex = 0; elementIndex < model.elements.length; elementIndex++) {
336
+ let element = model.elements[elementIndex];
337
+ let uv = [];
338
+ // Set default uvs to missing texture
339
+ for (let i = 0; i < CUBE_FACES.length; i++) {
340
+ this.setCubeFaceUvInArray(uv, i * 4, [0, 0, 8 / size, 8 / size]);
341
341
  }
342
- console.debug(p, "Item model elements", model.elements);
343
- }
344
- if (!model.elements) {
345
- //TODO: default elements
346
- }
347
- // Adjust UV positions
348
- if (model.elements) {
349
- for (let elementIndex = 0; elementIndex < model.elements.length; elementIndex++) {
350
- let element = model.elements[elementIndex];
351
- let uv = [];
352
- // Set default uvs to missing texture
353
- for (let i = 0; i < CUBE_FACES.length; i++) {
354
- this.setCubeFaceUvInArray(uv, i * 4, [0, 0, 8 / size, 8 / size]);
342
+ for (let faceIndex = 0; faceIndex < CUBE_FACES.length; faceIndex++) {
343
+ let faceName = CUBE_FACES[faceIndex];
344
+ // console.log(faceName)
345
+ let face = element.faces[faceName];
346
+ if (!face) {
347
+ // set uv transparent
348
+ this.setCubeFaceUvInArray(uv, faceIndex * 4, [0, 1, 8 / size, (size - 8) / size]);
349
+ continue;
355
350
  }
356
- for (let faceIndex = 0; faceIndex < CUBE_FACES.length; faceIndex++) {
357
- let faceName = CUBE_FACES[faceIndex];
358
- // console.log(faceName)
359
- let face = element.faces[faceName];
360
- if (!face) {
361
- // set uv transparent
362
- this.setCubeFaceUvInArray(uv, faceIndex * 4, [0, 1, 8 / size, (size - 8) / size]);
363
- continue;
364
- }
365
- if (!face.uv) {
366
- face.uv = this.getFallbackUv(element, faceName);
367
- }
368
- let faceTexture = face.texture;
369
- let texPosition;
370
- let texSize;
371
- if (faceTexture) {
372
- faceTexture = faceTexture.substr(1); // remove #
373
- texPosition = positions[faceTexture] || [0, 0];
374
- texSize = sizes[faceTexture] || [16, 16];
375
- }
376
- let texPosV = new Vector2(texPosition[0], texPosition[1]);
377
- const [tl, tr, bl, br] = this.expandAndRotateMcUvs(face.uv, face.rotation, texSize[0], texSize[1]);
378
- // move to atlas position
379
- tl.add(texPosV);
380
- tr.add(texPosV);
381
- bl.add(texPosV);
382
- br.add(texPosV);
383
- // divide to 0-1
384
- tl.divideScalar(size);
385
- tr.divideScalar(size);
386
- bl.divideScalar(size);
387
- br.divideScalar(size);
388
- // flip y coordinates
389
- tl.y = 1 - tl.y;
390
- tr.y = 1 - tr.y;
391
- bl.y = 1 - bl.y;
392
- br.y = 1 - br.y;
393
- //TODO: figure out how uv lock works
394
- let uvs = [tl, tr, bl, br];
395
- // console.log("uvs", uvs);
396
- this.setFaceUvInArrayV(uv, faceIndex * 4, uvs);
351
+ if (!face.uv) {
352
+ face.uv = this.getFallbackUv(element, faceName);
353
+ }
354
+ let faceTexture = face.texture;
355
+ let texPosition;
356
+ let texSize;
357
+ if (faceTexture) {
358
+ faceTexture = faceTexture.substr(1); // remove #
359
+ texPosition = positions[faceTexture] || [0, 0];
360
+ texSize = sizes[faceTexture] || [16, 16];
397
361
  }
398
- element.mappedUv = uv;
362
+ let texPosV = new Vector2(texPosition[0], texPosition[1]);
363
+ const [tl, tr, bl, br] = this.expandAndRotateMcUvs(face.uv, face.rotation, texSize[0], texSize[1]);
364
+ // move to atlas position
365
+ tl.add(texPosV);
366
+ tr.add(texPosV);
367
+ bl.add(texPosV);
368
+ br.add(texPosV);
369
+ // divide to 0-1
370
+ tl.divideScalar(size);
371
+ tr.divideScalar(size);
372
+ bl.divideScalar(size);
373
+ br.divideScalar(size);
374
+ // flip y coordinates
375
+ tl.y = 1 - tl.y;
376
+ tr.y = 1 - tr.y;
377
+ bl.y = 1 - bl.y;
378
+ br.y = 1 - br.y;
379
+ //TODO: figure out how uv lock works
380
+ let uvs = [tl, tr, bl, br];
381
+ // console.log("uvs", uvs);
382
+ this.setFaceUvInArrayV(uv, faceIndex * 4, uvs);
399
383
  }
384
+ element.mappedUv = uv;
400
385
  }
401
- else {
402
- //TODO: item model
403
- }
404
- return new TextureAtlas(model, image, sizes, positions, hasAnimation, animatorFunctions, hasTransparency);
405
386
  }
406
387
  else {
407
- console.warn(p, "Model does not have any textures", model);
388
+ //TODO: item model
408
389
  }
409
- return undefined;
410
- });
390
+ return new TextureAtlas(model, image, sizes, positions, hasAnimation, animatorFunctions, hasTransparency);
391
+ }
392
+ else {
393
+ console.warn(p, "Model does not have any textures", model);
394
+ }
395
+ return undefined;
411
396
  }
412
397
  }
413
398
  // Based on net.minecraft.client.renderer.block.model.BlockFaceUV