converter.js 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. let plugin = new arm.Plugin();
  2. let h1 = new zui.Handle();
  3. plugin.drawUI = function(ui) {
  4. if (ui.panel(h1, "Converter")) {
  5. ui.row([1/2, 1/2]);
  6. if (ui.button(".arm to .json")) {
  7. arm.UIFiles.show("arm", false, true, function(path) {
  8. iron.Data.getBlob(path, function(b) {
  9. let parsed = iron.ArmPack.decode(b.bytes);
  10. let out = core.Bytes.ofString(core.Json.stringify(parsed, function(key, value) {
  11. if (core.StdIs(value, Float32Array)) {
  12. let ar = Array.from(value);
  13. ar.unshift(0); // Annotate array type
  14. return ar;
  15. }
  16. else if (core.StdIs(value, Uint32Array)) {
  17. let ar = Array.from(value);
  18. ar.unshift(1);
  19. return ar;
  20. }
  21. else if (core.StdIs(value, Int16Array)) {
  22. let ar = Array.from(value);
  23. ar.unshift(2);
  24. return ar;
  25. }
  26. return value;
  27. }, " ")).b.bufferValue;
  28. Krom.fileSaveBytes(path.substr(0, path.length - 3) + "json", out);
  29. });
  30. });
  31. }
  32. if (ui.button(".json to .arm")) {
  33. arm.UIFiles.show("json", false, true, function(path) {
  34. iron.Data.getBlob(path, function(b) {
  35. let parsed = core.Json.parse(b.toString());
  36. function iterate(d) {
  37. for (const n of core.ReflectFields(d)) {
  38. let v = core.ReflectField(d, n);
  39. if (core.StdIs(v, Array)) {
  40. if (core.StdIs(v[0], Number)) {
  41. console.log(n);
  42. let ar = null;
  43. if (v[0] === 0) ar = new Float32Array(v.length - 1);
  44. else if (v[0] === 1) ar = new Uint32Array(v.length - 1);
  45. else if (v[0] === 2) ar = new Int16Array(v.length - 1);
  46. for (let i = 0; i < v.length - 1; ++i) ar[i] = v[i + 1];
  47. core.ReflectSetField(d, n, ar);
  48. }
  49. else for (const e of v) if (typeof e === 'object') iterate(e);
  50. }
  51. else if (typeof v === 'object') iterate(v);
  52. }
  53. }
  54. iterate(parsed);
  55. let out = iron.ArmPack.encode(parsed);
  56. Krom.fileSaveBytes(path.substr(0, path.length - 4) + "arm", out.b.bufferValue, out.length + 1);
  57. });
  58. });
  59. }
  60. }
  61. }