converter.js 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. let plugin = plugin_create();
  2. let h1 = zui_handle_create();
  3. plugin.draw_ui = function(ui) {
  4. if (zui_panel(h1, "Converter")) {
  5. zui_row([1/2, 1/2]);
  6. if (zui_button(".arm to .json")) {
  7. ui_files_show("arm", false, true, function(path) {
  8. let b = data_get_blob(path);
  9. let parsed = armpack_decode(b);
  10. let out = sys_string_to_buffer(JSON.stringify(parsed, function(key, value) {
  11. if (value.constructor.name === "Float32Array") {
  12. let ar = Array.from(value);
  13. ar.unshift(0); // Annotate array type
  14. return ar;
  15. }
  16. else if (value.constructor.name === "Uint32Array") {
  17. let ar = Array.from(value);
  18. ar.unshift(1);
  19. return ar;
  20. }
  21. else if (value.constructor.name === "Int16Array") {
  22. let ar = Array.from(value);
  23. ar.unshift(2);
  24. return ar;
  25. }
  26. return value;
  27. }, " "));
  28. krom_file_save_bytes(path.substr(0, path.length - 3) + "json", out);
  29. });
  30. }
  31. if (zui_button(".json to .arm")) {
  32. ui_files_show("json", false, true, function(path) {
  33. let b = data_get_blob(path);
  34. let parsed = json_parse(sys_buffer_to_string(b));
  35. function iterate(d) {
  36. for (const n of ReflectFields(d)) {
  37. let v = ReflectField(d, n);
  38. if (v.constructor.name === "Array") {
  39. if (v[0].constructor.name === "Number") {
  40. let ar = null;
  41. if (v[0] === 0) {
  42. ar = new Float32Array(v.length - 1);
  43. }
  44. else if (v[0] === 1) {
  45. ar = new Uint32Array(v.length - 1);
  46. }
  47. else if (v[0] === 2) {
  48. ar = new Int16Array(v.length - 1);
  49. }
  50. for (let i = 0; i < v.length - 1; ++i) {
  51. ar[i] = v[i + 1];
  52. }
  53. ReflectSetField(d, n, ar);
  54. }
  55. else {
  56. for (const e of v) {
  57. if (typeof e === 'object') {
  58. iterate(e);
  59. }
  60. }
  61. }
  62. }
  63. else if (typeof v === 'object') {
  64. iterate(v);
  65. }
  66. }
  67. }
  68. iterate(parsed);
  69. let out = armpack_encode(parsed);
  70. krom_file_save_bytes(path.substr(0, path.length - 4) + "arm", out, out.byteLength + 1);
  71. });
  72. }
  73. }
  74. }