WIP side-loaded preview scenes

This commit is contained in:
JannisX11 2023-06-18 22:54:10 +02:00
parent 3a4bb9ddf0
commit cf959c6df3
4 changed files with 129 additions and 39 deletions

View File

@ -1,9 +1,24 @@
class PreviewScene {
constructor(id, data) {
constructor(id, data = 0) {
PreviewScene.scenes[id] = this;
this.id = id;
this.loaded = false;
this.name = tl(data.name || `preview_scene.${id}`);
this.light_color = {r: 1, g: 1, b: 1};
this.light_side = 0;
this.condition;
this.preview_models = [];
if (data) this.extend(data);
PreviewScene.select_options[id] = this.name;
}
extend(data) {
this.loaded = data.lazy_load_from_web ? false : true;
this.name = tl(data.name || `preview_scene.${this.id}`);
if (data.description) {
this.description = tl(data.description);
} else {
@ -11,18 +26,32 @@ class PreviewScene {
this.description = tl('action.'+this.id+'.desc')
if (this.description == key) this.description = '';
}
this.light_color = data.light_color || {r: 1, g: 1, b: 1};
this.light_side = data.light_side || 0;
if (data.light_color) this.light_color = data.light_color;
if (data.light_sid) this.light_side = data.light_sid;
this.condition = data.condition;
this.preview_models = (!data.preview_models) ? [] : data.preview_models.map(model => {
if (typeof model == 'string') return PreviewModel.models[model];
if (model instanceof PreviewModel && typeof model == 'object') {
model = new PreviewModel(model.id || this.id, model);
}
return model;
})
PreviewScene.select_options[id] = this.name;
}
select() {
async lazyLoadFromWeb() {
this.loaded = true;
let response = await fetch(`./minecraft_snowy_tundra.json`);
if (!response.ok) {
console.log(response)
return;
}
let json = await response.json();
this.extend(json);yy
}
async select() {
if (!this.loaded) {
await this.lazyLoadFromWeb()
}
if (PreviewScene.active) PreviewScene.active.unselect();
this.preview_models.forEach(model => {
model.enable();
@ -858,6 +887,9 @@ new PreviewScene('studio', {
light_side: 1,
preview_models: ['studio']
});
new PreviewScene('landscape', {
light_color: {r: 1, g: 1, b: 1}
});
new PreviewScene('minecraft_overworld', {
preview_models: ['minecraft_overworld']
});
@ -872,18 +904,38 @@ new PreviewScene('minecraft_end', {
});
new PreviewScene('minecraft_snowy_tundra').lazyLoadFromWeb();
BARS.defineActions(function() {
new BarSelect('preview_scene', {
new Action('preview_scene', {
category: 'view',
value: 'none',
options: PreviewScene.select_options,
onChange() {
icon: 'nature_people',
click(event) {
new Menu(this.children).show(event.target);
},
/*onChange() {
let scene = PreviewScene.scenes[this.value];
if (scene) {
scene.select();
} else if (PreviewScene.active) {
PreviewScene.active.unselect();
}
}
},*/
children: [
{name: 'Studio'},
{name: 'Landscape'},
'_',
{name: 'Minecraft Player', icon: 'check_box_outline_blank'},
{name: 'Overworld'},
{name: 'Snowy Tundra'},
{name: 'Lush Caves'},
{name: 'Deep Dark'},
{name: 'Nether'},
{name: 'Basalt Deltas'},
{name: 'Soul Sand Valley'},
{name: 'The End'},
{name: 'Overworld'},
]
})
})

View File

@ -0,0 +1,38 @@
{
"light_color": {"r": 1.04, "g": 1.03, "b": 1.1},
"light_side": 1,
"preview_models": [
{
"id": "minecraft_snowy_tundra",
"texture": "./assets/preview_scenes/mc_end.png",
"texture_size": [16, 16],
"color": "#6f8377",
"cubes": [
{"position": [-8, -16, -8], "size": [16, 16, 16], "faces": "solid_uv"},
{"position": [8, -16, 8], "size": [16, 16, 16], "faces": "solid_uv"},
{"position": [8, -16, -8], "size": [16, 16, 16], "faces": "solid_uv"},
{"position": [-8, -16, 8], "size": [16, 16, 16], "faces": "solid_uv"},
{"position": [-24, -16, -24], "size": [16, 16, 16], "faces": "solid_uv"},
{"position": [-24, -16, -8], "size": [16, 16, 16], "faces": "solid_uv"},
{"position": [-8, -16, -24], "size": [16, 16, 16], "faces": "solid_uv"},
{"position": [-24, -32, 8], "size": [16, 16, 16], "faces": "solid_uv"},
{"position": [8, -32, -24], "size": [16, 16, 16], "faces": "solid_uv"},
{"position": [8, -32, -40], "size": [16, 16, 16], "faces": "solid_uv"},
{"position": [-8, -32, -40], "size": [16, 16, 16], "faces": "solid_uv"},
{"position": [-24, -32, -40], "size": [16, 16, 16], "faces": "solid_uv"},
{"position": [8, -32, 24], "size": [16, 16, 16], "faces": "solid_uv"},
{"position": [-8, -32, 24], "size": [16, 16, 16], "faces": "solid_uv"},
{"position": [-24, -32, 24], "size": [16, 16, 16], "faces": "solid_uv"},
{"position": [-40, -32, -24], "size": [16, 16, 16], "faces": "solid_uv"},
{"position": [-40, -32, -8], "size": [16, 16, 16], "faces": "solid_uv"},
{"position": [-40, -32, 8], "size": [16, 16, 16], "faces": "solid_uv"},
{"position": [24, -32, -24], "size": [16, 16, 16], "faces": "solid_uv"},
{"position": [24, -32, -8], "size": [16, 16, 16], "faces": "solid_uv"},
{"position": [24, -32, 8], "size": [16, 16, 16], "faces": "solid_uv"}
]
}
]
}

54
package-lock.json generated
View File

@ -1,6 +1,6 @@
{
"name": "Blockbench",
"version": "4.7.1",
"version": "4.7.4",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
@ -2292,19 +2292,19 @@
"buffer-crc32": {
"version": "0.2.13",
"resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
"integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==",
"integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=",
"dev": true
},
"buffer-equal": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz",
"integrity": "sha512-tcBWO2Dl4e7Asr9hTGcpVrCe+F7DubpmqWCTbj4FHLmjqO2hIaC383acQubWtRJhdceqs5uBHs6Es+Sk//RKiQ==",
"integrity": "sha1-WWFrSYME1Var1GaWayLu2j7KX74=",
"dev": true
},
"buffer-fill": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz",
"integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==",
"integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=",
"dev": true
},
"buffer-from": {
@ -2465,7 +2465,7 @@
"chromium-pickle-js": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz",
"integrity": "sha512-1R5Fho+jBq0DDydt+/vHWj5KJNJCKdARKOCwZUen84I5BreWoLqRLANH1U87eJy1tiASPtMnGqJJq0ZsLoRPOw==",
"integrity": "sha1-BKEGZywYsIWrd02YPfo+oTjyIgU=",
"dev": true
},
"ci-info": {
@ -2529,7 +2529,7 @@
"colors": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
"integrity": "sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==",
"integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=",
"dev": true
},
"combined-stream": {
@ -2556,7 +2556,7 @@
"compare-version": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/compare-version/-/compare-version-0.1.2.tgz",
"integrity": "sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A==",
"integrity": "sha1-AWLsLZNR9d3VmpICy6k1NmpyUIA=",
"dev": true
},
"concat-map": {
@ -2620,7 +2620,7 @@
"core-util-is": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
"integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==",
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
"dev": true,
"optional": true
},
@ -2732,7 +2732,7 @@
"commander": {
"version": "2.9.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz",
"integrity": "sha512-bmkUukX8wAOjHdN26xj5c4ctEV22TQ7dQYhSmuckKhToXrkUn0iIaolHdIxYYqD55nhpSPA9zPQ1yP57GdXP2A==",
"integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=",
"dev": true,
"requires": {
"graceful-readlink": ">= 1.0.0"
@ -3329,7 +3329,7 @@
"fd-slicer": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
"integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==",
"integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=",
"dev": true,
"requires": {
"pend": "~1.2.0"
@ -3596,7 +3596,7 @@
"graceful-readlink": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz",
"integrity": "sha512-8tLu60LgxF6XpdbK8OW3FA+IfTNBn1ZHGHKF4KQbEeSkajYw5PlYJcKluntgegDPTg8UkHjpet1T82vk6TQ68w==",
"integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=",
"dev": true
},
"has": {
@ -3829,7 +3829,7 @@
"is-module": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz",
"integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==",
"integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=",
"dev": true
},
"is-negative-zero": {
@ -3869,7 +3869,7 @@
"is-regexp": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz",
"integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==",
"integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=",
"dev": true
},
"is-shared-array-buffer": {
@ -4002,7 +4002,7 @@
"json-stringify-safe": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
"integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==",
"integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
"dev": true,
"optional": true
},
@ -4018,7 +4018,7 @@
"jsonfile": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
"integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==",
"integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
"dev": true,
"requires": {
"graceful-fs": "^4.1.6"
@ -4080,7 +4080,7 @@
"lodash.debounce": {
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
"integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==",
"integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=",
"dev": true
},
"lodash.escaperegexp": {
@ -4091,12 +4091,12 @@
"lodash.isequal": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
"integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ=="
"integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA="
},
"lodash.sortby": {
"version": "4.7.0",
"resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
"integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==",
"integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=",
"dev": true
},
"lowercase-keys": {
@ -4364,7 +4364,7 @@
"pend": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
"integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==",
"integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=",
"dev": true
},
"picocolors": {
@ -4555,7 +4555,7 @@
"require-directory": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
"integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
"integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
"dev": true
},
"require-from-string": {
@ -4714,7 +4714,7 @@
"semver-compare": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz",
"integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==",
"integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=",
"dev": true,
"optional": true
},
@ -4930,7 +4930,7 @@
"is-obj": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
"integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==",
"integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=",
"dev": true
}
}
@ -5196,13 +5196,13 @@
"to-fast-properties": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
"integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
"integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
"dev": true
},
"tr46": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz",
"integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==",
"integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=",
"dev": true,
"requires": {
"punycode": "^2.1.0"
@ -5211,7 +5211,7 @@
"truncate-utf8-bytes": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz",
"integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==",
"integrity": "sha1-QFkjkJWS1W94pYGENLC3hInKXys=",
"dev": true,
"requires": {
"utf8-byte-length": "^1.0.1"
@ -5327,7 +5327,7 @@
"utf8-byte-length": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz",
"integrity": "sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==",
"integrity": "sha1-9F8VDExm7uloGGUFq5P8u4rWv2E=",
"dev": true
},
"v8-compile-cache": {
@ -5821,7 +5821,7 @@
"yauzl": {
"version": "2.10.0",
"resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
"integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==",
"integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=",
"dev": true,
"requires": {
"buffer-crc32": "~0.2.3",

File diff suppressed because one or more lines are too long