util_clone.ts 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396
  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. u.image_uniform = units[i].image_uniform;
  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.geometry_shader = contexts[i].geometry_shader;
  191. c.shader_from_source = contexts[i].shader_from_source;
  192. c.blend_source = contexts[i].blend_source;
  193. c.blend_destination = contexts[i].blend_destination;
  194. c.blend_operation = contexts[i].blend_operation;
  195. c.alpha_blend_source = contexts[i].alpha_blend_source;
  196. c.alpha_blend_destination = contexts[i].alpha_blend_destination;
  197. c.alpha_blend_operation = contexts[i].alpha_blend_operation;
  198. c.color_writes_red = util_clone_bool_array(contexts[i].color_writes_red);
  199. c.color_writes_green = util_clone_bool_array(contexts[i].color_writes_green);
  200. c.color_writes_blue = util_clone_bool_array(contexts[i].color_writes_blue);
  201. c.color_writes_alpha = util_clone_bool_array(contexts[i].color_writes_alpha);
  202. c.color_attachments = util_clone_string_array(contexts[i].color_attachments);
  203. c.depth_attachment = contexts[i].depth_attachment;
  204. c.vertex_elements = util_clone_vertex_elements(contexts[i].vertex_elements);
  205. c.constants = util_clone_shader_consts(contexts[i].constants);
  206. c.texture_units = util_clone_tex_units(contexts[i].texture_units);
  207. array_push(r, c);
  208. }
  209. return r;
  210. }
  211. function util_clone_shader_data(s: shader_data_t): shader_data_t {
  212. if (s == null) {
  213. return null;
  214. }
  215. let r: shader_data_t = {};
  216. r.name = s.name;
  217. r.contexts = util_clone_shader_contexts(s.contexts);
  218. return r;
  219. }
  220. function util_clone_bind_constants(consts: bind_const_t[]): bind_const_t[] {
  221. if (consts == null) {
  222. return null;
  223. }
  224. let r: bind_const_t[] = [];
  225. for (let i: i32 = 0; i < consts.length; ++i) {
  226. let c: bind_const_t = {};
  227. c.name = consts[i].name;
  228. c.vec = util_clone_f32_array(consts[i].vec);
  229. array_push(r, c);
  230. }
  231. return r;
  232. }
  233. function util_clone_bind_textures(texs: bind_tex_t[]): bind_tex_t[] {
  234. if (texs == null) {
  235. return null;
  236. }
  237. let r: bind_tex_t[] = [];
  238. for (let i: i32 = 0; i < texs.length; ++i) {
  239. let t: bind_tex_t = {};
  240. t.name = texs[i].name;
  241. t.file = texs[i].file;
  242. t.u_addressing = texs[i].u_addressing;
  243. t.v_addressing = texs[i].v_addressing;
  244. t.min_filter = texs[i].min_filter;
  245. t.mag_filter = texs[i].mag_filter;
  246. t.mipmap_filter = texs[i].mipmap_filter;
  247. t.generate_mipmaps = texs[i].generate_mipmaps;
  248. t.mipmaps = util_clone_string_array(texs[i].mipmaps);
  249. array_push(r, t);
  250. }
  251. return r;
  252. }
  253. function util_clone_material_contexts(contexts: material_context_t[]): material_context_t[] {
  254. if (contexts == null) {
  255. return null;
  256. }
  257. let r: material_context_t[] = [];
  258. for (let i: i32 = 0; i < contexts.length; ++i) {
  259. let c: material_context_t = {};
  260. c.name = contexts[i].name;
  261. c.bind_constants = util_clone_bind_constants(contexts[i].bind_constants);
  262. c.bind_textures = util_clone_bind_textures(contexts[i].bind_textures);
  263. array_push(r, c);
  264. }
  265. return r;
  266. }
  267. function util_clone_material_data(m: material_data_t): material_data_t {
  268. if (m == null) {
  269. return null;
  270. }
  271. let r: material_data_t = {};
  272. r.name = m.name;
  273. r.shader = m.shader;
  274. r.contexts = util_clone_material_contexts(m.contexts);
  275. return r;
  276. }
  277. function util_clone_particle_refs(parts: particle_ref_t[]): particle_ref_t[] {
  278. if (parts == null) {
  279. return null;
  280. }
  281. let r: particle_ref_t[] = [];
  282. for (let i: i32 = 0; i < parts.length; ++i) {
  283. let p: particle_ref_t = {};
  284. p.name = parts[i].name;
  285. p.particle = parts[i].particle;
  286. p.seed = parts[i].seed;
  287. array_push(r, p);
  288. }
  289. return r;
  290. }
  291. function util_clone_particles(p: particles_t): particles_t {
  292. if (p == null) {
  293. return null;
  294. }
  295. let r: particles_t = {};
  296. r.refs = util_clone_particle_refs(p.refs);
  297. r.render_emitter = p.render_emitter;
  298. r.is_particle = p.is_particle;
  299. return r;
  300. }
  301. function util_clone_tracks(tracks: track_t[]): track_t[] {
  302. if (tracks == null) {
  303. return null;
  304. }
  305. let r: track_t[] = [];
  306. for (let i: i32 = 0; i < tracks.length; ++i) {
  307. let t: track_t = {};
  308. t.target = tracks[i].target;
  309. t.frames = util_clone_u32_array(tracks[i].frames);
  310. t.values = util_clone_f32_array(tracks[i].values);
  311. array_push(r, t);
  312. }
  313. return r;
  314. }
  315. function util_clone_anim(a: anim_t): anim_t {
  316. if (a == null) {
  317. return null;
  318. }
  319. let r: anim_t = {};
  320. r.object_actions = util_clone_string_array(a.object_actions);
  321. r.bone_actions = util_clone_string_array(a.bone_actions);
  322. r.parent_bone = a.parent_bone;
  323. r.parent_bone_tail = util_clone_f32_array(a.parent_bone_tail);
  324. r.parent_bone_tail_pose = util_clone_f32_array(a.parent_bone_tail_pose);
  325. r.parent_bone_connected = a.parent_bone_connected;
  326. r.tracks = util_clone_tracks(a.tracks);
  327. r.begin = a.begin;
  328. r.end = a.end;
  329. r.has_delta = a.has_delta;
  330. r.marker_frames = util_clone_u32_array(a.marker_frames);
  331. r.marker_names = util_clone_string_array(a.marker_names);
  332. return r;
  333. }
  334. function util_clone_obj(o: obj_t): obj_t {
  335. if (o == null) {
  336. return null;
  337. }
  338. let r: obj_t = {};
  339. r.name = o.name;
  340. r.type = o.type;
  341. r.data_ref = o.data_ref;
  342. r.transform = util_clone_f32_array(o.transform);
  343. r.dimensions = util_clone_f32_array(o.dimensions);
  344. r.visible = o.visible;
  345. r.spawn = o.spawn;
  346. r.particles = util_clone_particles(o.particles);
  347. r.anim = util_clone_anim(o.anim);
  348. r.material_refs = util_clone_string_array(o.material_refs);
  349. if (o.children != null) {
  350. r.children = [];
  351. for (let i: i32 = 0; i < o.children.length; ++i) {
  352. let c: obj_t = util_clone_obj(o.children[i]);
  353. array_push(r.children, c);
  354. }
  355. }
  356. return r;
  357. }
  358. function util_clone_swatch_color(s: swatch_color_t): swatch_color_t {
  359. let r: swatch_color_t = {};
  360. r.base = s.base;
  361. r.opacity = s.opacity;
  362. r.occlusion = s.occlusion;
  363. r.roughness = s.roughness;
  364. r.metallic = s.metallic;
  365. r.normal = s.normal;
  366. r.emission = s.emission;
  367. r.height = s.height;
  368. r.subsurface = s.subsurface;
  369. return r;
  370. }