main.ts 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. // ../../make --run
  2. ///include "../../sources/libs/asim.h"
  3. let body: any;
  4. function main() {
  5. let ops: iron_window_options_t = {
  6. title: "Empty",
  7. width: 1280,
  8. height: 720,
  9. x: -1,
  10. y: -1,
  11. features: window_features_t.RESIZABLE | window_features_t.MINIMIZABLE | window_features_t.MAXIMIZABLE,
  12. mode: window_mode_t.WINDOWED,
  13. frequency: 60,
  14. vsync: true,
  15. depth_bits: 32
  16. };
  17. sys_start(ops);
  18. ready();
  19. }
  20. function render_commands() {
  21. render_path_set_target("", null, null, clear_flag_t.COLOR | clear_flag_t.DEPTH, 0xff6495ed, 1.0);
  22. render_path_draw_meshes("mesh");
  23. }
  24. function ready() {
  25. render_path_commands = render_commands;
  26. let scene: scene_t = {
  27. name: "Scene",
  28. objects: [
  29. {
  30. name: "Cube",
  31. type: "mesh_object",
  32. data_ref: "cube.arm/Cube",
  33. material_refs: ["MyMaterial"],
  34. visible: true,
  35. spawn: true
  36. },
  37. {
  38. name: "Sphere",
  39. type: "mesh_object",
  40. data_ref: "sphere.arm/Sphere",
  41. material_refs: ["MyMaterial"],
  42. visible: true,
  43. spawn: true
  44. },
  45. {
  46. name: "Camera",
  47. type: "camera_object",
  48. data_ref: "MyCamera",
  49. visible: true,
  50. spawn: true
  51. }
  52. ],
  53. camera_datas: [
  54. {
  55. name: "MyCamera",
  56. near_plane: 0.1,
  57. far_plane: 100.0,
  58. fov: 0.85
  59. }
  60. ],
  61. camera_ref: "Camera",
  62. material_datas: [
  63. {
  64. name: "MyMaterial",
  65. shader: "MyShader",
  66. contexts: [
  67. {
  68. name: "mesh",
  69. bind_textures: [
  70. {
  71. name: "my_texture",
  72. file: "texture.k"
  73. }
  74. ]
  75. }
  76. ]
  77. }
  78. ],
  79. shader_datas: [
  80. {
  81. name: "MyShader",
  82. contexts: [
  83. {
  84. name: "mesh",
  85. vertex_shader: "mesh.vert",
  86. fragment_shader: "mesh.frag",
  87. compare_mode: "less",
  88. cull_mode: "clockwise",
  89. depth_write: true,
  90. vertex_elements: [
  91. {
  92. name: "pos",
  93. data: "short4norm"
  94. },
  95. {
  96. name: "nor",
  97. data: "short2norm"
  98. },
  99. {
  100. name: "tex",
  101. data: "short2norm"
  102. }
  103. ],
  104. constants: [
  105. {
  106. name: "WVP",
  107. type: "mat4",
  108. link: "_world_view_proj_matrix"
  109. }
  110. ],
  111. texture_units: [
  112. {
  113. name: "my_texture"
  114. }
  115. ]
  116. }
  117. ]
  118. }
  119. ]
  120. };
  121. map_set(data_cached_scene_raws, scene.name, scene);
  122. // Instantiate scene
  123. scene_create(scene);
  124. scene_ready();
  125. }
  126. function scene_ready() {
  127. // Set camera
  128. let t: transform_t = scene_camera.base.transform;
  129. t.loc = vec4_create(0, -10, 0);
  130. t.rot = quat_from_to(vec4_create(0, 0, 1), vec4_create(0, -1, 0));
  131. transform_build_matrix(t);
  132. sys_notify_on_update(scene_update);
  133. let cube: object_t = scene_get_child("Cube");
  134. let mesh: mesh_object_t = cube.ext;
  135. asim_world_create();
  136. body = asim_body_create(1, 1, 1, 1, 1, 0, 0, 5, null, null, 1);
  137. asim_body_create(0, 1, 1, 1, 1, 0, 0, 0, mesh.data.vertex_arrays[0].values, mesh.data.index_array, mesh.data.scale_pos);
  138. }
  139. function scene_update() {
  140. asim_world_update(sys_delta());
  141. camera_update();
  142. if (keyboard_started("space")) {
  143. asim_body_sync_transform(body, vec4_create(0, 0, 5), quat_create(0, 0, 0, 1));
  144. }
  145. let sphere: object_t = scene_get_child("Sphere");
  146. let t: transform_t = sphere.transform;
  147. asim_body_get_pos(body, ADDRESS(t.loc));
  148. transform_build_matrix(t);
  149. }
  150. function tr(id: string, vars: map_t<string, string> = null): string {}