main.ts 3.2 KB

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