util_clone.ts 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354
  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. r.flags = n.flags;
  98. return r;
  99. }
  100. function util_clone_canvas_nodes(nodes: ui_node_t[]): ui_node_t[] {
  101. if (nodes == null) {
  102. return null;
  103. }
  104. let r: ui_node_t[] = [];
  105. for (let i: i32 = 0; i < nodes.length; ++i) {
  106. let n: ui_node_t = util_clone_canvas_node(nodes[i]);
  107. array_push(r, n);
  108. }
  109. return r;
  110. }
  111. function util_clone_canvas_links(links: ui_node_link_t[]): ui_node_link_t[] {
  112. if (links == null) {
  113. return null;
  114. }
  115. let r: ui_node_link_t[] = [];
  116. for (let i: i32 = 0; i < links.length; ++i) {
  117. let l: ui_node_link_t = {};
  118. l.id = links[i].id;
  119. l.from_id = links[i].from_id;
  120. l.from_socket = links[i].from_socket;
  121. l.to_id = links[i].to_id;
  122. l.to_socket = links[i].to_socket;
  123. array_push(r, l);
  124. }
  125. return r;
  126. }
  127. function util_clone_canvas(c: ui_node_canvas_t): ui_node_canvas_t {
  128. if (c == null) {
  129. return null;
  130. }
  131. let r: ui_node_canvas_t = {};
  132. r.name = c.name;
  133. r.nodes = util_clone_canvas_nodes(c.nodes);
  134. r.links = util_clone_canvas_links(c.links);
  135. return r;
  136. }
  137. function util_clone_vertex_elements(elems: vertex_element_t[]): vertex_element_t[] {
  138. if (elems == null) {
  139. return null;
  140. }
  141. let r: vertex_element_t[] = [];
  142. for (let i: i32 = 0; i < elems.length; ++i) {
  143. let e: vertex_element_t = {};
  144. e.name = elems[i].name;
  145. e.data = elems[i].data;
  146. array_push(r, e);
  147. }
  148. return r;
  149. }
  150. function util_clone_shader_consts(consts: shader_const_t[]): shader_const_t[] {
  151. if (consts == null) {
  152. return null;
  153. }
  154. let r: shader_const_t[] = [];
  155. for (let i: i32 = 0; i < consts.length; ++i) {
  156. let s: shader_const_t = {};
  157. s.name = consts[i].name;
  158. s.type = consts[i].type;
  159. s.link = consts[i].link;
  160. array_push(r, s);
  161. }
  162. return r;
  163. }
  164. function util_clone_tex_units(units: tex_unit_t[]): tex_unit_t[] {
  165. if (units == null) {
  166. return null;
  167. }
  168. let r: tex_unit_t[] = [];
  169. for (let i: i32 = 0; i < units.length; ++i) {
  170. let u: tex_unit_t = {};
  171. u.name = units[i].name;
  172. u.link = units[i].link;
  173. array_push(r, u);
  174. }
  175. return r;
  176. }
  177. function util_clone_shader_contexts(contexts: shader_context_t[]): shader_context_t[] {
  178. if (contexts == null) {
  179. return null;
  180. }
  181. let r: shader_context_t[] = [];
  182. for (let i: i32 = 0; i < contexts.length; ++i) {
  183. let c: shader_context_t = {};
  184. c.name = contexts[i].name;
  185. c.depth_write = contexts[i].depth_write;
  186. c.compare_mode = contexts[i].compare_mode;
  187. c.cull_mode = contexts[i].cull_mode;
  188. c.vertex_shader = contexts[i].vertex_shader;
  189. c.fragment_shader = contexts[i].fragment_shader;
  190. c.shader_from_source = contexts[i].shader_from_source;
  191. c.blend_source = contexts[i].blend_source;
  192. c.blend_destination = contexts[i].blend_destination;
  193. c.alpha_blend_source = contexts[i].alpha_blend_source;
  194. c.alpha_blend_destination = contexts[i].alpha_blend_destination;
  195. c.color_writes_red = util_clone_bool_array(contexts[i].color_writes_red);
  196. c.color_writes_green = util_clone_bool_array(contexts[i].color_writes_green);
  197. c.color_writes_blue = util_clone_bool_array(contexts[i].color_writes_blue);
  198. c.color_writes_alpha = util_clone_bool_array(contexts[i].color_writes_alpha);
  199. c.color_attachments = util_clone_string_array(contexts[i].color_attachments);
  200. c.depth_attachment = contexts[i].depth_attachment;
  201. c.vertex_elements = util_clone_vertex_elements(contexts[i].vertex_elements);
  202. c.constants = util_clone_shader_consts(contexts[i].constants);
  203. c.texture_units = util_clone_tex_units(contexts[i].texture_units);
  204. array_push(r, c);
  205. }
  206. return r;
  207. }
  208. function util_clone_shader_data(s: shader_data_t): shader_data_t {
  209. if (s == null) {
  210. return null;
  211. }
  212. let r: shader_data_t = {};
  213. r.name = s.name;
  214. r.contexts = util_clone_shader_contexts(s.contexts);
  215. return r;
  216. }
  217. function util_clone_bind_constants(consts: bind_const_t[]): bind_const_t[] {
  218. if (consts == null) {
  219. return null;
  220. }
  221. let r: bind_const_t[] = [];
  222. for (let i: i32 = 0; i < consts.length; ++i) {
  223. let c: bind_const_t = {};
  224. c.name = consts[i].name;
  225. c.vec = util_clone_f32_array(consts[i].vec);
  226. array_push(r, c);
  227. }
  228. return r;
  229. }
  230. function util_clone_bind_textures(texs: bind_tex_t[]): bind_tex_t[] {
  231. if (texs == null) {
  232. return null;
  233. }
  234. let r: bind_tex_t[] = [];
  235. for (let i: i32 = 0; i < texs.length; ++i) {
  236. let t: bind_tex_t = {};
  237. t.name = texs[i].name;
  238. t.file = texs[i].file;
  239. array_push(r, t);
  240. }
  241. return r;
  242. }
  243. function util_clone_material_contexts(contexts: material_context_t[]): material_context_t[] {
  244. if (contexts == null) {
  245. return null;
  246. }
  247. let r: material_context_t[] = [];
  248. for (let i: i32 = 0; i < contexts.length; ++i) {
  249. let c: material_context_t = {};
  250. c.name = contexts[i].name;
  251. c.bind_constants = util_clone_bind_constants(contexts[i].bind_constants);
  252. c.bind_textures = util_clone_bind_textures(contexts[i].bind_textures);
  253. array_push(r, c);
  254. }
  255. return r;
  256. }
  257. function util_clone_material_data(m: material_data_t): material_data_t {
  258. if (m == null) {
  259. return null;
  260. }
  261. let r: material_data_t = {};
  262. r.name = m.name;
  263. r.shader = m.shader;
  264. r.contexts = util_clone_material_contexts(m.contexts);
  265. return r;
  266. }
  267. function util_clone_tracks(tracks: track_t[]): track_t[] {
  268. if (tracks == null) {
  269. return null;
  270. }
  271. let r: track_t[] = [];
  272. for (let i: i32 = 0; i < tracks.length; ++i) {
  273. let t: track_t = {};
  274. t.target = tracks[i].target;
  275. t.frames = util_clone_u32_array(tracks[i].frames);
  276. t.values = util_clone_f32_array(tracks[i].values);
  277. array_push(r, t);
  278. }
  279. return r;
  280. }
  281. function util_clone_anim(a: anim_t): anim_t {
  282. if (a == null) {
  283. return null;
  284. }
  285. let r: anim_t = {};
  286. r.object_actions = util_clone_string_array(a.object_actions);
  287. r.tracks = util_clone_tracks(a.tracks);
  288. r.begin = a.begin;
  289. r.end = a.end;
  290. r.has_delta = a.has_delta;
  291. r.marker_frames = util_clone_u32_array(a.marker_frames);
  292. r.marker_names = util_clone_string_array(a.marker_names);
  293. return r;
  294. }
  295. function util_clone_obj(o: obj_t): obj_t {
  296. if (o == null) {
  297. return null;
  298. }
  299. let r: obj_t = {};
  300. r.name = o.name;
  301. r.type = o.type;
  302. r.data_ref = o.data_ref;
  303. r.transform = util_clone_f32_array(o.transform);
  304. r.dimensions = util_clone_f32_array(o.dimensions);
  305. r.visible = o.visible;
  306. r.spawn = o.spawn;
  307. r.anim = util_clone_anim(o.anim);
  308. r.material_ref = o.material_ref;
  309. if (o.children != null) {
  310. r.children = [];
  311. for (let i: i32 = 0; i < o.children.length; ++i) {
  312. let c: obj_t = util_clone_obj(o.children[i]);
  313. array_push(r.children, c);
  314. }
  315. }
  316. return r;
  317. }
  318. function util_clone_swatch_color(s: swatch_color_t): swatch_color_t {
  319. let r: swatch_color_t = {};
  320. r.base = s.base;
  321. r.opacity = s.opacity;
  322. r.occlusion = s.occlusion;
  323. r.roughness = s.roughness;
  324. r.metallic = s.metallic;
  325. r.normal = s.normal;
  326. r.emission = s.emission;
  327. r.height = s.height;
  328. r.subsurface = s.subsurface;
  329. return r;
  330. }