util_clone.ts 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358
  1. function util_clone_f32_array(f32a: f32_array_t): f32_array_t {
  2. if (f32a == null) {
  3. return null;
  4. }
  5. return f32_array_create_from_array(f32a);
  6. }
  7. function util_clone_u32_array(u32a: u32_array_t): u32_array_t {
  8. if (u32a == null) {
  9. return null;
  10. }
  11. return u32_array_create_from_array(u32a);
  12. }
  13. function util_clone_u8_array(u8a: u8_array_t): u8_array_t {
  14. if (u8a == null) {
  15. return null;
  16. }
  17. return u8_array_create_from_array(u8a);
  18. }
  19. function util_clone_string_array(a: string[]): string[] {
  20. if (a == null) {
  21. return null;
  22. }
  23. let r: string[] = [];
  24. for (let i: i32 = 0; i < a.length; ++i) {
  25. let s: string = a[i];
  26. array_push(r, s);
  27. }
  28. return r;
  29. }
  30. function util_clone_bool_array(a: bool[]): bool[] {
  31. if (a == null) {
  32. return null;
  33. }
  34. let r: bool[] = [];
  35. for (let i: i32 = 0; i < a.length; ++i) {
  36. let s: bool = a[i];
  37. array_push(r, s);
  38. }
  39. return r;
  40. }
  41. function util_clone_canvas_sockets(sockets: ui_node_socket_t[]): ui_node_socket_t[] {
  42. if (sockets == null) {
  43. return null;
  44. }
  45. let r: ui_node_socket_t[] = [];
  46. for (let i: i32 = 0; i < sockets.length; ++i) {
  47. let s: ui_node_socket_t = {};
  48. s.id = sockets[i].id;;
  49. s.node_id = sockets[i].node_id;
  50. s.name = sockets[i].name;
  51. s.type = sockets[i].type;
  52. s.color = sockets[i].color;
  53. s.default_value = util_clone_f32_array(sockets[i].default_value);
  54. s.min = sockets[i].min;
  55. s.max = sockets[i].max;
  56. s.precision = sockets[i].precision;
  57. s.display = sockets[i].display;
  58. array_push(r, s);
  59. }
  60. return r;
  61. }
  62. function util_clone_canvas_buttons(buttons: ui_node_button_t[]): ui_node_button_t[] {
  63. if (buttons == null) {
  64. return null;
  65. }
  66. let r: ui_node_button_t[] = [];
  67. for (let i: i32 = 0; i < buttons.length; ++i) {
  68. let b: ui_node_button_t = {};
  69. b.name = buttons[i].name;
  70. b.type = buttons[i].type;
  71. b.output = buttons[i].output;
  72. b.default_value = util_clone_f32_array(buttons[i].default_value);
  73. b.data = util_clone_u8_array(buttons[i].data);
  74. b.min = buttons[i].min;
  75. b.max = buttons[i].max;
  76. b.precision = buttons[i].precision;
  77. b.height = buttons[i].height;
  78. array_push(r, b);
  79. }
  80. return r;
  81. }
  82. function util_clone_canvas_node(n: ui_node_t): ui_node_t {
  83. if (n == null) {
  84. return null;
  85. }
  86. let r: ui_node_t = {};
  87. r.id = n.id;
  88. r.name = n.name;
  89. r.type = n.type;
  90. r.x = n.x;
  91. r.y = n.y;
  92. r.color = n.color;
  93. r.inputs = util_clone_canvas_sockets(n.inputs);
  94. r.outputs = util_clone_canvas_sockets(n.outputs);
  95. r.buttons = util_clone_canvas_buttons(n.buttons);
  96. r.width = n.width;
  97. return r;
  98. }
  99. function util_clone_canvas_nodes(nodes: ui_node_t[]): ui_node_t[] {
  100. if (nodes == null) {
  101. return null;
  102. }
  103. let r: ui_node_t[] = [];
  104. for (let i: i32 = 0; i < nodes.length; ++i) {
  105. let n: ui_node_t = util_clone_canvas_node(nodes[i]);
  106. array_push(r, n);
  107. }
  108. return r;
  109. }
  110. function util_clone_canvas_links(links: ui_node_link_t[]): ui_node_link_t[] {
  111. if (links == null) {
  112. return null;
  113. }
  114. let r: ui_node_link_t[] = [];
  115. for (let i: i32 = 0; i < links.length; ++i) {
  116. let l: ui_node_link_t = {};
  117. l.id = links[i].id;
  118. l.from_id = links[i].from_id;
  119. l.from_socket = links[i].from_socket;
  120. l.to_id = links[i].to_id;
  121. l.to_socket = links[i].to_socket;
  122. array_push(r, l);
  123. }
  124. return r;
  125. }
  126. function util_clone_canvas(c: ui_node_canvas_t): ui_node_canvas_t {
  127. if (c == null) {
  128. return null;
  129. }
  130. let r: ui_node_canvas_t = {};
  131. r.name = c.name;
  132. r.nodes = util_clone_canvas_nodes(c.nodes);
  133. r.links = util_clone_canvas_links(c.links);
  134. return r;
  135. }
  136. function util_clone_vertex_elements(elems: vertex_element_t[]): vertex_element_t[] {
  137. if (elems == null) {
  138. return null;
  139. }
  140. let r: vertex_element_t[] = [];
  141. for (let i: i32 = 0; i < elems.length; ++i) {
  142. let e: vertex_element_t = {};
  143. e.name = elems[i].name;
  144. e.data = elems[i].data;
  145. array_push(r, e);
  146. }
  147. return r;
  148. }
  149. function util_clone_shader_consts(consts: shader_const_t[]): shader_const_t[] {
  150. if (consts == null) {
  151. return null;
  152. }
  153. let r: shader_const_t[] = [];
  154. for (let i: i32 = 0; i < consts.length; ++i) {
  155. let s: shader_const_t = {};
  156. s.name = consts[i].name;
  157. s.type = consts[i].type;
  158. s.link = consts[i].link;
  159. array_push(r, s);
  160. }
  161. return r;
  162. }
  163. function util_clone_tex_units(units: tex_unit_t[]): tex_unit_t[] {
  164. if (units == null) {
  165. return null;
  166. }
  167. let r: tex_unit_t[] = [];
  168. for (let i: i32 = 0; i < units.length; ++i) {
  169. let u: tex_unit_t = {};
  170. u.name = units[i].name;
  171. u.link = units[i].link;
  172. array_push(r, u);
  173. }
  174. return r;
  175. }
  176. function util_clone_shader_contexts(contexts: shader_context_t[]): shader_context_t[] {
  177. if (contexts == null) {
  178. return null;
  179. }
  180. let r: shader_context_t[] = [];
  181. for (let i: i32 = 0; i < contexts.length; ++i) {
  182. let c: shader_context_t = {};
  183. c.name = contexts[i].name;
  184. c.depth_write = contexts[i].depth_write;
  185. c.compare_mode = contexts[i].compare_mode;
  186. c.cull_mode = contexts[i].cull_mode;
  187. c.vertex_shader = contexts[i].vertex_shader;
  188. c.fragment_shader = contexts[i].fragment_shader;
  189. c.shader_from_source = contexts[i].shader_from_source;
  190. c.blend_source = contexts[i].blend_source;
  191. c.blend_destination = contexts[i].blend_destination;
  192. c.alpha_blend_source = contexts[i].alpha_blend_source;
  193. c.alpha_blend_destination = contexts[i].alpha_blend_destination;
  194. c.color_writes_red = util_clone_bool_array(contexts[i].color_writes_red);
  195. c.color_writes_green = util_clone_bool_array(contexts[i].color_writes_green);
  196. c.color_writes_blue = util_clone_bool_array(contexts[i].color_writes_blue);
  197. c.color_writes_alpha = util_clone_bool_array(contexts[i].color_writes_alpha);
  198. c.color_attachments = util_clone_string_array(contexts[i].color_attachments);
  199. c.depth_attachment = contexts[i].depth_attachment;
  200. c.vertex_elements = util_clone_vertex_elements(contexts[i].vertex_elements);
  201. c.constants = util_clone_shader_consts(contexts[i].constants);
  202. c.texture_units = util_clone_tex_units(contexts[i].texture_units);
  203. array_push(r, c);
  204. }
  205. return r;
  206. }
  207. function util_clone_shader_data(s: shader_data_t): shader_data_t {
  208. if (s == null) {
  209. return null;
  210. }
  211. let r: shader_data_t = {};
  212. r.name = s.name;
  213. r.contexts = util_clone_shader_contexts(s.contexts);
  214. return r;
  215. }
  216. function util_clone_bind_constants(consts: bind_const_t[]): bind_const_t[] {
  217. if (consts == null) {
  218. return null;
  219. }
  220. let r: bind_const_t[] = [];
  221. for (let i: i32 = 0; i < consts.length; ++i) {
  222. let c: bind_const_t = {};
  223. c.name = consts[i].name;
  224. c.vec = util_clone_f32_array(consts[i].vec);
  225. array_push(r, c);
  226. }
  227. return r;
  228. }
  229. function util_clone_bind_textures(texs: bind_tex_t[]): bind_tex_t[] {
  230. if (texs == null) {
  231. return null;
  232. }
  233. let r: bind_tex_t[] = [];
  234. for (let i: i32 = 0; i < texs.length; ++i) {
  235. let t: bind_tex_t = {};
  236. t.name = texs[i].name;
  237. t.file = texs[i].file;
  238. array_push(r, t);
  239. }
  240. return r;
  241. }
  242. function util_clone_material_contexts(contexts: material_context_t[]): material_context_t[] {
  243. if (contexts == null) {
  244. return null;
  245. }
  246. let r: material_context_t[] = [];
  247. for (let i: i32 = 0; i < contexts.length; ++i) {
  248. let c: material_context_t = {};
  249. c.name = contexts[i].name;
  250. c.bind_constants = util_clone_bind_constants(contexts[i].bind_constants);
  251. c.bind_textures = util_clone_bind_textures(contexts[i].bind_textures);
  252. array_push(r, c);
  253. }
  254. return r;
  255. }
  256. function util_clone_material_data(m: material_data_t): material_data_t {
  257. if (m == null) {
  258. return null;
  259. }
  260. let r: material_data_t = {};
  261. r.name = m.name;
  262. r.shader = m.shader;
  263. r.contexts = util_clone_material_contexts(m.contexts);
  264. return r;
  265. }
  266. function util_clone_tracks(tracks: track_t[]): track_t[] {
  267. if (tracks == null) {
  268. return null;
  269. }
  270. let r: track_t[] = [];
  271. for (let i: i32 = 0; i < tracks.length; ++i) {
  272. let t: track_t = {};
  273. t.target = tracks[i].target;
  274. t.frames = util_clone_u32_array(tracks[i].frames);
  275. t.values = util_clone_f32_array(tracks[i].values);
  276. array_push(r, t);
  277. }
  278. return r;
  279. }
  280. function util_clone_anim(a: anim_t): anim_t {
  281. if (a == null) {
  282. return null;
  283. }
  284. let r: anim_t = {};
  285. r.object_actions = util_clone_string_array(a.object_actions);
  286. r.bone_actions = util_clone_string_array(a.bone_actions);
  287. r.parent_bone = a.parent_bone;
  288. r.parent_bone_tail = util_clone_f32_array(a.parent_bone_tail);
  289. r.parent_bone_tail_pose = util_clone_f32_array(a.parent_bone_tail_pose);
  290. r.parent_bone_connected = a.parent_bone_connected;
  291. r.tracks = util_clone_tracks(a.tracks);
  292. r.begin = a.begin;
  293. r.end = a.end;
  294. r.has_delta = a.has_delta;
  295. r.marker_frames = util_clone_u32_array(a.marker_frames);
  296. r.marker_names = util_clone_string_array(a.marker_names);
  297. return r;
  298. }
  299. function util_clone_obj(o: obj_t): obj_t {
  300. if (o == null) {
  301. return null;
  302. }
  303. let r: obj_t = {};
  304. r.name = o.name;
  305. r.type = o.type;
  306. r.data_ref = o.data_ref;
  307. r.transform = util_clone_f32_array(o.transform);
  308. r.dimensions = util_clone_f32_array(o.dimensions);
  309. r.visible = o.visible;
  310. r.spawn = o.spawn;
  311. r.anim = util_clone_anim(o.anim);
  312. r.material_refs = util_clone_string_array(o.material_refs);
  313. if (o.children != null) {
  314. r.children = [];
  315. for (let i: i32 = 0; i < o.children.length; ++i) {
  316. let c: obj_t = util_clone_obj(o.children[i]);
  317. array_push(r.children, c);
  318. }
  319. }
  320. return r;
  321. }
  322. function util_clone_swatch_color(s: swatch_color_t): swatch_color_t {
  323. let r: swatch_color_t = {};
  324. r.base = s.base;
  325. r.opacity = s.opacity;
  326. r.occlusion = s.occlusion;
  327. r.roughness = s.roughness;
  328. r.metallic = s.metallic;
  329. r.normal = s.normal;
  330. r.emission = s.emission;
  331. r.height = s.height;
  332. r.subsurface = s.subsurface;
  333. return r;
  334. }