Files
armorpaint/Assets/plugins/dev/converter.js
T
Lubos Lenco b96d891e2b Cleanup
2021-07-03 12:53:26 +02:00

65 lines
2.0 KiB
JavaScript

let plugin = new arm.Plugin();
let h1 = new zui.Handle();
plugin.drawUI = function(ui) {
if (ui.panel(h1, "Converter")) {
ui.row([1/2, 1/2]);
if (ui.button(".arm to .json")) {
arm.UIFiles.show("arm", false, true, function(path) {
iron.Data.getBlob(path, function(b) {
let parsed = iron.ArmPack.decode(b.bytes);
let out = core.Bytes.ofString(core.Json.stringify(parsed, function(key, value) {
if (core.StdIs(value, Float32Array)) {
let ar = Array.from(value);
ar.unshift(0); // Annotate array type
return ar;
}
else if (core.StdIs(value, Uint32Array)) {
let ar = Array.from(value);
ar.unshift(1);
return ar;
}
else if (core.StdIs(value, Int16Array)) {
let ar = Array.from(value);
ar.unshift(2);
return ar;
}
return value;
}, " ")).b.bufferValue;
Krom.fileSaveBytes(path.substr(0, path.length - 3) + "json", out);
});
});
}
if (ui.button(".json to .arm")) {
arm.UIFiles.show("json", false, true, function(path) {
iron.Data.getBlob(path, function(b) {
let parsed = core.Json.parse(b.toString());
function iterate(d) {
for (const n of core.ReflectFields(d)) {
let v = core.ReflectField(d, n);
if (core.StdIs(v, Array)) {
if (core.StdIs(v[0], Number)) {
console.log(n);
let ar = null;
if (v[0] === 0) ar = new Float32Array(v.length - 1);
else if (v[0] === 1) ar = new Uint32Array(v.length - 1);
else if (v[0] === 2) ar = new Int16Array(v.length - 1);
for (let i = 0; i < v.length - 1; ++i) ar[i] = v[i + 1];
core.ReflectSetField(d, n, ar);
}
else for (const e of v) if (typeof e === 'object') iterate(e);
}
else if (typeof v === 'object') iterate(v);
}
}
iterate(parsed);
let out = iron.ArmPack.encode(parsed);
Krom.fileSaveBytes(path.substr(0, path.length - 4) + "arm", out.b.bufferValue, out.length + 1);
});
});
}
}
}