ruby_rpg 0.0.4 → 0.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (237) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +21 -21
  3. data/bin/build.bash +13 -13
  4. data/bin/import +44 -44
  5. data/glfw-3.3.9.bin.MACOS/LICENSE.md +23 -23
  6. data/glfw-3.3.9.bin.MACOS/README.md +5 -5
  7. data/glfw-3.3.9.bin.MACOS/docs/html/build_8dox.html +81 -81
  8. data/glfw-3.3.9.bin.MACOS/docs/html/build_guide.html +199 -199
  9. data/glfw-3.3.9.bin.MACOS/docs/html/compat_8dox.html +81 -81
  10. data/glfw-3.3.9.bin.MACOS/docs/html/compat_guide.html +153 -153
  11. data/glfw-3.3.9.bin.MACOS/docs/html/compile_8dox.html +81 -81
  12. data/glfw-3.3.9.bin.MACOS/docs/html/compile_guide.html +223 -223
  13. data/glfw-3.3.9.bin.MACOS/docs/html/context_8dox.html +81 -81
  14. data/glfw-3.3.9.bin.MACOS/docs/html/context_guide.html +259 -259
  15. data/glfw-3.3.9.bin.MACOS/docs/html/deprecated.html +88 -88
  16. data/glfw-3.3.9.bin.MACOS/docs/html/dir_08423ce7729c4554356a7de7171ba263.html +85 -85
  17. data/glfw-3.3.9.bin.MACOS/docs/html/dir_2dcebcdf14b42e92a6ed85c61bda6b9d.html +93 -93
  18. data/glfw-3.3.9.bin.MACOS/docs/html/dir_62ce056722ee97c199075aa1d6eca309.html +95 -95
  19. data/glfw-3.3.9.bin.MACOS/docs/html/dir_dddf4cf62655095a666cf715de3a31a2.html +91 -91
  20. data/glfw-3.3.9.bin.MACOS/docs/html/doc.svg +12 -12
  21. data/glfw-3.3.9.bin.MACOS/docs/html/docd.svg +12 -12
  22. data/glfw-3.3.9.bin.MACOS/docs/html/doxygen.css +1685 -1685
  23. data/glfw-3.3.9.bin.MACOS/docs/html/doxygen.svg +28 -28
  24. data/glfw-3.3.9.bin.MACOS/docs/html/dynsections.js +192 -192
  25. data/glfw-3.3.9.bin.MACOS/docs/html/extra.css +1 -1
  26. data/glfw-3.3.9.bin.MACOS/docs/html/files.html +91 -91
  27. data/glfw-3.3.9.bin.MACOS/docs/html/folderclosed.svg +11 -11
  28. data/glfw-3.3.9.bin.MACOS/docs/html/folderclosedd.svg +11 -11
  29. data/glfw-3.3.9.bin.MACOS/docs/html/folderopen.svg +17 -17
  30. data/glfw-3.3.9.bin.MACOS/docs/html/folderopend.svg +12 -12
  31. data/glfw-3.3.9.bin.MACOS/docs/html/glfw3_8h.html +1661 -1661
  32. data/glfw-3.3.9.bin.MACOS/docs/html/glfw3_8h_source.html +1175 -1175
  33. data/glfw-3.3.9.bin.MACOS/docs/html/glfw3native_8h.html +167 -167
  34. data/glfw-3.3.9.bin.MACOS/docs/html/glfw3native_8h_source.html +303 -303
  35. data/glfw-3.3.9.bin.MACOS/docs/html/group__buttons.html +282 -282
  36. data/glfw-3.3.9.bin.MACOS/docs/html/group__context.html +304 -304
  37. data/glfw-3.3.9.bin.MACOS/docs/html/group__errors.html +304 -304
  38. data/glfw-3.3.9.bin.MACOS/docs/html/group__gamepad__axes.html +202 -202
  39. data/glfw-3.3.9.bin.MACOS/docs/html/group__gamepad__buttons.html +410 -410
  40. data/glfw-3.3.9.bin.MACOS/docs/html/group__hat__state.html +234 -234
  41. data/glfw-3.3.9.bin.MACOS/docs/html/group__init.html +570 -570
  42. data/glfw-3.3.9.bin.MACOS/docs/html/group__input.html +2255 -2255
  43. data/glfw-3.3.9.bin.MACOS/docs/html/group__joysticks.html +362 -362
  44. data/glfw-3.3.9.bin.MACOS/docs/html/group__keys.html +2034 -2034
  45. data/glfw-3.3.9.bin.MACOS/docs/html/group__mods.html +198 -198
  46. data/glfw-3.3.9.bin.MACOS/docs/html/group__monitor.html +848 -848
  47. data/glfw-3.3.9.bin.MACOS/docs/html/group__native.html +812 -812
  48. data/glfw-3.3.9.bin.MACOS/docs/html/group__shapes.html +198 -198
  49. data/glfw-3.3.9.bin.MACOS/docs/html/group__vulkan.html +359 -359
  50. data/glfw-3.3.9.bin.MACOS/docs/html/group__window.html +3434 -3434
  51. data/glfw-3.3.9.bin.MACOS/docs/html/index.html +100 -100
  52. data/glfw-3.3.9.bin.MACOS/docs/html/input_8dox.html +81 -81
  53. data/glfw-3.3.9.bin.MACOS/docs/html/input_guide.html +570 -570
  54. data/glfw-3.3.9.bin.MACOS/docs/html/internal_8dox.html +81 -81
  55. data/glfw-3.3.9.bin.MACOS/docs/html/internals_guide.html +132 -132
  56. data/glfw-3.3.9.bin.MACOS/docs/html/intro_8dox.html +81 -81
  57. data/glfw-3.3.9.bin.MACOS/docs/html/intro_guide.html +351 -351
  58. data/glfw-3.3.9.bin.MACOS/docs/html/jquery.js +33 -33
  59. data/glfw-3.3.9.bin.MACOS/docs/html/main_8dox.html +81 -81
  60. data/glfw-3.3.9.bin.MACOS/docs/html/menu.js +136 -136
  61. data/glfw-3.3.9.bin.MACOS/docs/html/menudata.js +29 -29
  62. data/glfw-3.3.9.bin.MACOS/docs/html/minus.svg +8 -8
  63. data/glfw-3.3.9.bin.MACOS/docs/html/minusd.svg +8 -8
  64. data/glfw-3.3.9.bin.MACOS/docs/html/monitor_8dox.html +81 -81
  65. data/glfw-3.3.9.bin.MACOS/docs/html/monitor_guide.html +229 -229
  66. data/glfw-3.3.9.bin.MACOS/docs/html/moving_8dox.html +81 -81
  67. data/glfw-3.3.9.bin.MACOS/docs/html/moving_guide.html +374 -374
  68. data/glfw-3.3.9.bin.MACOS/docs/html/news.html +634 -634
  69. data/glfw-3.3.9.bin.MACOS/docs/html/news_8dox.html +81 -81
  70. data/glfw-3.3.9.bin.MACOS/docs/html/pages.html +99 -99
  71. data/glfw-3.3.9.bin.MACOS/docs/html/plus.svg +9 -9
  72. data/glfw-3.3.9.bin.MACOS/docs/html/plusd.svg +9 -9
  73. data/glfw-3.3.9.bin.MACOS/docs/html/quick_8dox.html +81 -81
  74. data/glfw-3.3.9.bin.MACOS/docs/html/quick_guide.html +397 -397
  75. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_0.js +5 -5
  76. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_1.js +4 -4
  77. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_10.js +65 -65
  78. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_11.js +26 -26
  79. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_12.js +44 -44
  80. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_13.js +34 -34
  81. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_14.js +12 -12
  82. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_15.js +52 -52
  83. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_16.js +69 -69
  84. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_17.js +51 -51
  85. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_18.js +14 -14
  86. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_19.js +36 -36
  87. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_1a.js +98 -98
  88. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_1b.js +12 -12
  89. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_2.js +6 -6
  90. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_3.js +9 -9
  91. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_4.js +57 -57
  92. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_5.js +22 -22
  93. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_6.js +103 -103
  94. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_7.js +23 -23
  95. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_8.js +35 -35
  96. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_9.js +63 -63
  97. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_a.js +505 -505
  98. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_b.js +24 -24
  99. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_c.js +50 -50
  100. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_d.js +17 -17
  101. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_e.js +12 -12
  102. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_f.js +35 -35
  103. data/glfw-3.3.9.bin.MACOS/docs/html/search/classes_0.js +7 -7
  104. data/glfw-3.3.9.bin.MACOS/docs/html/search/close.svg +18 -18
  105. data/glfw-3.3.9.bin.MACOS/docs/html/search/defines_0.js +34 -34
  106. data/glfw-3.3.9.bin.MACOS/docs/html/search/files_0.js +4 -4
  107. data/glfw-3.3.9.bin.MACOS/docs/html/search/files_1.js +6 -6
  108. data/glfw-3.3.9.bin.MACOS/docs/html/search/files_2.js +5 -5
  109. data/glfw-3.3.9.bin.MACOS/docs/html/search/files_3.js +6 -6
  110. data/glfw-3.3.9.bin.MACOS/docs/html/search/files_4.js +6 -6
  111. data/glfw-3.3.9.bin.MACOS/docs/html/search/files_5.js +4 -4
  112. data/glfw-3.3.9.bin.MACOS/docs/html/search/files_6.js +4 -4
  113. data/glfw-3.3.9.bin.MACOS/docs/html/search/files_7.js +4 -4
  114. data/glfw-3.3.9.bin.MACOS/docs/html/search/files_8.js +4 -4
  115. data/glfw-3.3.9.bin.MACOS/docs/html/search/functions_0.js +146 -146
  116. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_0.js +6 -6
  117. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_1.js +4 -4
  118. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_10.js +4 -4
  119. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_2.js +6 -6
  120. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_3.js +5 -5
  121. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_4.js +4 -4
  122. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_5.js +5 -5
  123. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_6.js +4 -4
  124. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_7.js +5 -5
  125. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_8.js +5 -5
  126. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_9.js +6 -6
  127. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_a.js +6 -6
  128. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_b.js +4 -4
  129. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_c.js +4 -4
  130. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_d.js +7 -7
  131. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_e.js +4 -4
  132. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_f.js +5 -5
  133. data/glfw-3.3.9.bin.MACOS/docs/html/search/mag.svg +24 -24
  134. data/glfw-3.3.9.bin.MACOS/docs/html/search/mag_d.svg +24 -24
  135. data/glfw-3.3.9.bin.MACOS/docs/html/search/mag_sel.svg +31 -31
  136. data/glfw-3.3.9.bin.MACOS/docs/html/search/mag_seld.svg +31 -31
  137. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_0.js +4 -4
  138. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_1.js +4 -4
  139. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_10.js +4 -4
  140. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_2.js +5 -5
  141. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_3.js +4 -4
  142. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_4.js +6 -6
  143. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_5.js +4 -4
  144. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_6.js +4 -4
  145. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_7.js +7 -7
  146. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_8.js +6 -6
  147. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_9.js +4 -4
  148. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_a.js +5 -5
  149. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_b.js +5 -5
  150. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_c.js +4 -4
  151. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_d.js +6 -6
  152. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_e.js +6 -6
  153. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_f.js +4 -4
  154. data/glfw-3.3.9.bin.MACOS/docs/html/search/search.css +291 -291
  155. data/glfw-3.3.9.bin.MACOS/docs/html/search/search.js +840 -840
  156. data/glfw-3.3.9.bin.MACOS/docs/html/search/searchdata.js +39 -39
  157. data/glfw-3.3.9.bin.MACOS/docs/html/search/typedefs_0.js +32 -32
  158. data/glfw-3.3.9.bin.MACOS/docs/html/search/variables_0.js +4 -4
  159. data/glfw-3.3.9.bin.MACOS/docs/html/search/variables_1.js +6 -6
  160. data/glfw-3.3.9.bin.MACOS/docs/html/search/variables_2.js +5 -5
  161. data/glfw-3.3.9.bin.MACOS/docs/html/search/variables_3.js +4 -4
  162. data/glfw-3.3.9.bin.MACOS/docs/html/search/variables_4.js +4 -4
  163. data/glfw-3.3.9.bin.MACOS/docs/html/search/variables_5.js +6 -6
  164. data/glfw-3.3.9.bin.MACOS/docs/html/search/variables_6.js +4 -4
  165. data/glfw-3.3.9.bin.MACOS/docs/html/search/variables_7.js +4 -4
  166. data/glfw-3.3.9.bin.MACOS/docs/html/spaces.svg +877 -877
  167. data/glfw-3.3.9.bin.MACOS/docs/html/struct_g_l_f_wgamepadstate.html +134 -134
  168. data/glfw-3.3.9.bin.MACOS/docs/html/struct_g_l_f_wgammaramp.html +170 -170
  169. data/glfw-3.3.9.bin.MACOS/docs/html/struct_g_l_f_wimage.html +151 -151
  170. data/glfw-3.3.9.bin.MACOS/docs/html/struct_g_l_f_wvidmode.html +204 -204
  171. data/glfw-3.3.9.bin.MACOS/docs/html/vulkan_8dox.html +81 -81
  172. data/glfw-3.3.9.bin.MACOS/docs/html/vulkan_guide.html +196 -196
  173. data/glfw-3.3.9.bin.MACOS/docs/html/window_8dox.html +81 -81
  174. data/glfw-3.3.9.bin.MACOS/docs/html/window_guide.html +763 -763
  175. data/glfw-3.3.9.bin.MACOS/include/GLFW/glfw3.h +5932 -5932
  176. data/glfw-3.3.9.bin.MACOS/include/GLFW/glfw3native.h +634 -634
  177. data/glfw-3.3.9.bin.MACOS/lib-arm64/libglfw.3.dylib +0 -0
  178. data/glfw-3.3.9.bin.MACOS/lib-universal/libglfw.3.dylib +0 -0
  179. data/glfw-3.3.9.bin.MACOS/lib-x86_64/libglfw.3.dylib +0 -0
  180. data/lib/engine/autoloader.rb +11 -11
  181. data/lib/engine/camera.rb +12 -12
  182. data/lib/engine/component.rb +63 -63
  183. data/lib/engine/components/audio_source.rb +41 -41
  184. data/lib/engine/components/direction_light.rb +22 -22
  185. data/lib/engine/components/font_renderer.rb +134 -134
  186. data/lib/engine/components/mesh_renderer.rb +31 -31
  187. data/lib/engine/components/orthographic_camera.rb +54 -54
  188. data/lib/engine/components/perspective_camera.rb +53 -53
  189. data/lib/engine/components/point_light.rb +23 -23
  190. data/lib/engine/components/sprite_renderer.rb +141 -141
  191. data/lib/engine/components/ui_font_renderer.rb +140 -140
  192. data/lib/engine/components/ui_sprite_clickbox.rb +62 -0
  193. data/lib/engine/components/ui_sprite_renderer.rb +101 -101
  194. data/lib/engine/compute_shader.rb +93 -0
  195. data/lib/engine/cursor.rb +43 -43
  196. data/lib/engine/debugging.rb +41 -41
  197. data/lib/engine/engine.rb +131 -131
  198. data/lib/engine/font.rb +74 -74
  199. data/lib/engine/game_object.rb +234 -234
  200. data/lib/engine/importers/font_importer.rb +69 -69
  201. data/lib/engine/importers/obj_file.rb +244 -244
  202. data/lib/engine/importers/obj_importer.rb +33 -33
  203. data/lib/engine/input.rb +105 -104
  204. data/lib/engine/material.rb +79 -79
  205. data/lib/engine/mesh.rb +43 -43
  206. data/lib/engine/path.rb +92 -92
  207. data/lib/engine/physics/collision.rb +12 -12
  208. data/lib/engine/physics/components/cube_collider.rb +6 -6
  209. data/lib/engine/physics/components/rigidbody.rb +103 -103
  210. data/lib/engine/physics/components/sphere_collider.rb +93 -93
  211. data/lib/engine/physics/physics_resolver.rb +37 -37
  212. data/lib/engine/polygon_mesh.rb +45 -45
  213. data/lib/engine/quaternion.rb +234 -234
  214. data/lib/engine/rendering/instance_renderer.rb +153 -153
  215. data/lib/engine/rendering/render_pipeline.rb +35 -35
  216. data/lib/engine/screenshoter.rb +34 -34
  217. data/lib/engine/shader.rb +119 -91
  218. data/lib/engine/shaders/colour_frag.glsl +8 -8
  219. data/lib/engine/shaders/colour_vertex.glsl +13 -13
  220. data/lib/engine/shaders/mesh_frag.glsl +102 -102
  221. data/lib/engine/shaders/mesh_vertex.glsl +25 -25
  222. data/lib/engine/shaders/skybox_frag.glsl +12 -12
  223. data/lib/engine/shaders/skybox_vert.glsl +14 -14
  224. data/lib/engine/shaders/sprite_frag.glsl +17 -17
  225. data/lib/engine/shaders/sprite_vertex.glsl +15 -15
  226. data/lib/engine/shaders/text_frag.glsl +15 -15
  227. data/lib/engine/shaders/text_vertex.glsl +31 -31
  228. data/lib/engine/shaders/ui_sprite_frag.glsl +15 -15
  229. data/lib/engine/shaders/ui_sprite_vertex.glsl +15 -15
  230. data/lib/engine/shaders/vertex_lit_frag.glsl +89 -89
  231. data/lib/engine/shaders/vertex_lit_vertex.glsl +28 -28
  232. data/lib/engine/tangent_calculator.rb +42 -42
  233. data/lib/engine/texture.rb +53 -53
  234. data/lib/engine/video_mode.rb +37 -37
  235. data/lib/engine/window.rb +126 -126
  236. data/lib/ruby_rpg.rb +58 -56
  237. metadata +5 -6
data/lib/engine/input.rb CHANGED
@@ -1,104 +1,105 @@
1
- # frozen_string_literal: true
2
-
3
- module Engine
4
- class Input
5
- def self.init
6
- @key_callback = GLFW::create_callback(:GLFWkeyfun) do |window, key, scancode, action, mods|
7
- Input.key_callback(key, action)
8
- end
9
- GLFW.SetKeyCallback(Window.window, @key_callback)
10
-
11
- @cursor_pos_callback = GLFW::create_callback(:GLFWcursorposfun) do |window, x, y|
12
- Input.mouse_callback(x, y)
13
- end
14
- GLFW.SetCursorPosCallback(Window.window, @cursor_pos_callback)
15
-
16
- @mouse_button_callback = GLFW::create_callback(:GLFWmousebuttonfun) do |window, button, action, mods|
17
- Input.mouse_button_callback(button, action)
18
- end
19
- GLFW.SetMouseButtonCallback(Window.window, @mouse_button_callback)
20
- end
21
-
22
- def self.key?(key)
23
- keys[key] == :down || keys[key] == :held
24
- end
25
-
26
- def self.key_down?(key)
27
- keys[key] == :down
28
- end
29
-
30
- def self.key_up?(key)
31
- keys[key] == :up
32
- end
33
-
34
- def self.mouse_pos
35
- @mouse_pos
36
- end
37
-
38
- def self.mouse_delta
39
- return Vector[0, 0] if @old_mouse_pos.nil?
40
- return Vector[0, 0] unless @mouse_pos_updated
41
-
42
- @mouse_pos - @old_mouse_pos
43
- end
44
-
45
- def self._on_key_down(key)
46
- keys[key] = :down
47
- if key == GLFW::KEY_ESCAPE
48
- Engine.close
49
- end
50
-
51
- if key == GLFW::KEY_BACKSPACE
52
- Engine::Debugging.breakpoint { binding.pry }
53
- # Engine.breakpoint { debugger }
54
- end
55
-
56
- if key == GLFW::KEY_F
57
- Engine::Window.toggle_full_screen
58
- end
59
- end
60
-
61
- def self._on_key_up(key)
62
- keys[key] = :up
63
- end
64
-
65
- def self.key_callback(key, action)
66
- if action == GLFW::PRESS
67
- _on_key_down(key)
68
- elsif action == GLFW::RELEASE
69
- _on_key_up(key)
70
- end
71
- end
72
-
73
- def self.mouse_callback(x, y)
74
- @mouse_pos_updated = true
75
- @old_mouse_pos = @mouse_pos
76
- @mouse_pos = Vector[x, y]
77
- end
78
-
79
- def self.mouse_button_callback(button, action)
80
- if action == GLFW::PRESS
81
- keys[button] = :down
82
- elsif action == GLFW::RELEASE
83
- keys[button] = :up
84
- end
85
- end
86
-
87
- def self.update_key_states
88
- @mouse_pos_updated = false
89
- keys.each do |key, state|
90
- if state == :down
91
- keys[key] = :held
92
- elsif state == :up
93
- keys.delete(key)
94
- end
95
- end
96
- end
97
-
98
- private
99
-
100
- def self.keys
101
- @keys ||= {}
102
- end
103
- end
104
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Engine
4
+ class Input
5
+ def self.init
6
+ @key_callback = GLFW::create_callback(:GLFWkeyfun) do |window, key, scancode, action, mods|
7
+ Input.key_callback(key, action)
8
+ end
9
+ GLFW.SetKeyCallback(Window.window, @key_callback)
10
+
11
+ @cursor_pos_callback = GLFW::create_callback(:GLFWcursorposfun) do |window, x, y|
12
+ Input.mouse_callback(x, y)
13
+ end
14
+ GLFW.SetCursorPosCallback(Window.window, @cursor_pos_callback)
15
+
16
+ @mouse_button_callback = GLFW::create_callback(:GLFWmousebuttonfun) do |window, button, action, mods|
17
+ Input.mouse_button_callback(button, action)
18
+ end
19
+ GLFW.SetMouseButtonCallback(Window.window, @mouse_button_callback)
20
+ end
21
+
22
+ def self.key?(key)
23
+ keys[key] == :down || keys[key] == :held
24
+ end
25
+
26
+ def self.key_down?(key)
27
+ keys[key] == :down
28
+ end
29
+
30
+ def self.key_up?(key)
31
+ keys[key] == :up
32
+ end
33
+
34
+ def self.mouse_pos
35
+ @mouse_pos
36
+ end
37
+
38
+ def self.mouse_delta
39
+ return Vector[0, 0] if @old_mouse_pos.nil?
40
+ return Vector[0, 0] unless @mouse_pos_updated
41
+
42
+ @mouse_pos - @old_mouse_pos
43
+ end
44
+
45
+ def self._on_key_down(key)
46
+ keys[key] = :down
47
+ if key == GLFW::KEY_ESCAPE
48
+ Engine.close
49
+ end
50
+
51
+ if key == GLFW::KEY_BACKSPACE
52
+ Engine::Debugging.breakpoint { binding.pry }
53
+ # Engine.breakpoint { debugger }
54
+ end
55
+
56
+ if key == GLFW::KEY_F
57
+ Engine::Window.toggle_full_screen
58
+ end
59
+ end
60
+
61
+ def self._on_key_up(key)
62
+ keys[key] = :up
63
+ end
64
+
65
+ def self.key_callback(key, action)
66
+ if action == GLFW::PRESS
67
+ _on_key_down(key)
68
+ elsif action == GLFW::RELEASE
69
+ _on_key_up(key)
70
+ end
71
+ end
72
+
73
+ def self.mouse_callback(x, y)
74
+ @mouse_pos_updated = true
75
+ @old_mouse_pos = @mouse_pos
76
+ screen_height = Window.height
77
+ @mouse_pos = Vector[x, screen_height - y]
78
+ end
79
+
80
+ def self.mouse_button_callback(button, action)
81
+ if action == GLFW::PRESS
82
+ keys[button] = :down
83
+ elsif action == GLFW::RELEASE
84
+ keys[button] = :up
85
+ end
86
+ end
87
+
88
+ def self.update_key_states
89
+ @mouse_pos_updated = false
90
+ keys.each do |key, state|
91
+ if state == :down
92
+ keys[key] = :held
93
+ elsif state == :up
94
+ keys.delete(key)
95
+ end
96
+ end
97
+ end
98
+
99
+ private
100
+
101
+ def self.keys
102
+ @keys ||= {}
103
+ end
104
+ end
105
+ end
@@ -1,79 +1,79 @@
1
- # frozen_string_literal: true
2
-
3
- module Engine
4
- class Material
5
- attr_reader :shader
6
-
7
- def initialize(shader)
8
- @shader = shader
9
- end
10
-
11
- def set_mat4(name, value)
12
- mat4s[name] = value
13
- end
14
-
15
- def set_vec3(name, value)
16
- vec3s[name] = value
17
- end
18
-
19
- def set_vec4(name, value)
20
- vec4s[name] = value
21
- end
22
-
23
- def set_float(name, value)
24
- floats[name] = value
25
- end
26
-
27
- def set_texture(name, value)
28
- textures[name] = value
29
- end
30
-
31
- def update_shader
32
- shader.use
33
-
34
- mat4s.each do |name, value|
35
- shader.set_mat4(name, value)
36
- end
37
- vec3s.each do |name, value|
38
- shader.set_vec3(name, value)
39
- end
40
- vec4s.each do |name, value|
41
- shader.set_vec4(name, value)
42
- end
43
- floats.each do |name, value|
44
- shader.set_float(name, value)
45
- end
46
- textures.each.with_index do |(name, value), slot|
47
- GL.ActiveTexture(Object.const_get("GL::TEXTURE#{slot}"))
48
- if value
49
- GL.BindTexture(GL::TEXTURE_2D, value)
50
- else
51
- GL.BindTexture(GL::TEXTURE_2D, 0)
52
- end
53
- shader.set_int(name, slot)
54
- end
55
- end
56
-
57
- private
58
-
59
- def mat4s
60
- @mat4s ||= {}
61
- end
62
-
63
- def vec3s
64
- @vec3s ||= {}
65
- end
66
-
67
- def vec4s
68
- @vec4s ||= {}
69
- end
70
-
71
- def floats
72
- @floats ||= {}
73
- end
74
-
75
- def textures
76
- @textures ||= {}
77
- end
78
- end
79
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Engine
4
+ class Material
5
+ attr_reader :shader
6
+
7
+ def initialize(shader)
8
+ @shader = shader
9
+ end
10
+
11
+ def set_mat4(name, value)
12
+ mat4s[name] = value
13
+ end
14
+
15
+ def set_vec3(name, value)
16
+ vec3s[name] = value
17
+ end
18
+
19
+ def set_vec4(name, value)
20
+ vec4s[name] = value
21
+ end
22
+
23
+ def set_float(name, value)
24
+ floats[name] = value
25
+ end
26
+
27
+ def set_texture(name, value)
28
+ textures[name] = value
29
+ end
30
+
31
+ def update_shader
32
+ shader.use
33
+
34
+ mat4s.each do |name, value|
35
+ shader.set_mat4(name, value)
36
+ end
37
+ vec3s.each do |name, value|
38
+ shader.set_vec3(name, value)
39
+ end
40
+ vec4s.each do |name, value|
41
+ shader.set_vec4(name, value)
42
+ end
43
+ floats.each do |name, value|
44
+ shader.set_float(name, value)
45
+ end
46
+ textures.each.with_index do |(name, value), slot|
47
+ GL.ActiveTexture(Object.const_get("GL::TEXTURE#{slot}"))
48
+ if value
49
+ GL.BindTexture(GL::TEXTURE_2D, value)
50
+ else
51
+ GL.BindTexture(GL::TEXTURE_2D, 0)
52
+ end
53
+ shader.set_int(name, slot)
54
+ end
55
+ end
56
+
57
+ private
58
+
59
+ def mat4s
60
+ @mat4s ||= {}
61
+ end
62
+
63
+ def vec3s
64
+ @vec3s ||= {}
65
+ end
66
+
67
+ def vec4s
68
+ @vec4s ||= {}
69
+ end
70
+
71
+ def floats
72
+ @floats ||= {}
73
+ end
74
+
75
+ def textures
76
+ @textures ||= {}
77
+ end
78
+ end
79
+ end
data/lib/engine/mesh.rb CHANGED
@@ -1,43 +1,43 @@
1
- # frozen_string_literal: true
2
-
3
- module Engine
4
- class Mesh
5
- attr_reader :vertex_data, :index_data
6
- private_class_method :new
7
-
8
- def initialize(mesh_file)
9
- @vertex_data = Mesh.open_vertex(mesh_file)
10
- @index_data = Mesh.open_index(mesh_file)
11
- end
12
-
13
- def self.for(mesh_file)
14
- mesh_cache[mesh_file]
15
- end
16
-
17
- def self.mesh_cache
18
- @mesh_cache ||= Hash.new do |hash, key|
19
- hash[key] = new(key)
20
- end
21
- end
22
-
23
- def self.open_vertex(mesh_file)
24
- vertex_cache[File.join(GAME_DIR, "_imported", mesh_file + ".vertex_data")]
25
- end
26
-
27
- def self.vertex_cache
28
- @index_data_cache ||= Hash.new do |hash, key|
29
- hash[key] = File.readlines(key).reject{|l| l == ""}.map(&:to_f)
30
- end
31
- end
32
-
33
- def self.open_index(mesh_file)
34
- index_cache[File.join(GAME_DIR, "_imported", mesh_file + ".index_data")]
35
- end
36
-
37
- def self.index_cache
38
- @index_data_cache ||= Hash.new do |hash, key|
39
- hash[key] = File.readlines(key).reject{|l| l == ""}.map(&:to_i)
40
- end
41
- end
42
- end
43
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Engine
4
+ class Mesh
5
+ attr_reader :vertex_data, :index_data
6
+ private_class_method :new
7
+
8
+ def initialize(mesh_file)
9
+ @vertex_data = Mesh.open_vertex(mesh_file)
10
+ @index_data = Mesh.open_index(mesh_file)
11
+ end
12
+
13
+ def self.for(mesh_file)
14
+ mesh_cache[mesh_file]
15
+ end
16
+
17
+ def self.mesh_cache
18
+ @mesh_cache ||= Hash.new do |hash, key|
19
+ hash[key] = new(key)
20
+ end
21
+ end
22
+
23
+ def self.open_vertex(mesh_file)
24
+ vertex_cache[File.join(GAME_DIR, "_imported", mesh_file + ".vertex_data")]
25
+ end
26
+
27
+ def self.vertex_cache
28
+ @index_data_cache ||= Hash.new do |hash, key|
29
+ hash[key] = File.readlines(key).reject{|l| l == ""}.map(&:to_f)
30
+ end
31
+ end
32
+
33
+ def self.open_index(mesh_file)
34
+ index_cache[File.join(GAME_DIR, "_imported", mesh_file + ".index_data")]
35
+ end
36
+
37
+ def self.index_cache
38
+ @index_data_cache ||= Hash.new do |hash, key|
39
+ hash[key] = File.readlines(key).reject{|l| l == ""}.map(&:to_i)
40
+ end
41
+ end
42
+ end
43
+ end
data/lib/engine/path.rb CHANGED
@@ -1,92 +1,92 @@
1
- # frozen_string_literal: true
2
-
3
- module Engine
4
- class NoEarsException < StandardError; end
5
-
6
- class Path
7
- attr_reader :points
8
-
9
- def initialize(points)
10
- optimised_points = remove_colinear(points)
11
- if optimised_points.length <= 3
12
- @points = points
13
- else
14
- @points = optimised_points
15
- end
16
- #@points = points
17
- end
18
-
19
- def point_string(p)
20
- "#{20 * (p[0] + 3)}, #{50 * (p[1] + 2)}"
21
- end
22
-
23
- def length
24
- points.length
25
- end
26
-
27
- def find_ear
28
- triangles = points.map.with_index do |point, i|
29
- a = points[i - 1]
30
- b = point
31
- c = points[(i + 1) % points.length]
32
- [a, b, c]
33
- end
34
-
35
- triangles.each do |triangle|
36
- if is_ear?(triangle)
37
- new_points = points.reject { |point| point == triangle[1] }
38
- return triangle, Path.new(new_points)
39
- end
40
- end
41
- raise NoEarsException
42
- end
43
-
44
- def is_ear?(triangle)
45
- return false unless clockwise?(triangle)
46
- points.each do |point|
47
- next if triangle.include?(point)
48
- return false if point_in_triangle?(point, triangle)
49
- end
50
- true
51
- end
52
-
53
- private
54
-
55
- def remove_colinear(points)
56
- points.reject.with_index do |point, i|
57
- a = points[i - 1]
58
- b = point
59
- c = points[(i + 1) % points.length]
60
-
61
- cross_product(a, b, c).zero?
62
- end
63
- end
64
-
65
- def anti_clockwise?(triangle)
66
- a, b, c = triangle
67
- cross_product = (b[0] - a[0]) * (c[1] - a[1]) - (b[1] - a[1]) * (c[0] - a[0])
68
- cross_product > 0
69
- end
70
-
71
- def clockwise?(triangle)
72
- !anti_clockwise?(triangle)
73
- end
74
-
75
- def point_in_triangle?(point, triangle)
76
- a, b, c = triangle
77
- pab = cross_product(point, a, b)
78
- pbc = cross_product(point, b, c)
79
- pca = cross_product(point, c, a)
80
-
81
- same_sign?(pab, pbc) && same_sign?(pbc, pca)
82
- end
83
-
84
- def cross_product(a, b, c)
85
- (b[0] - a[0]) * (c[1] - a[1]) - (b[1] - a[1]) * (c[0] - a[0])
86
- end
87
-
88
- def same_sign?(a, b)
89
- a.negative? == b.negative?
90
- end
91
- end
92
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Engine
4
+ class NoEarsException < StandardError; end
5
+
6
+ class Path
7
+ attr_reader :points
8
+
9
+ def initialize(points)
10
+ optimised_points = remove_colinear(points)
11
+ if optimised_points.length <= 3
12
+ @points = points
13
+ else
14
+ @points = optimised_points
15
+ end
16
+ #@points = points
17
+ end
18
+
19
+ def point_string(p)
20
+ "#{20 * (p[0] + 3)}, #{50 * (p[1] + 2)}"
21
+ end
22
+
23
+ def length
24
+ points.length
25
+ end
26
+
27
+ def find_ear
28
+ triangles = points.map.with_index do |point, i|
29
+ a = points[i - 1]
30
+ b = point
31
+ c = points[(i + 1) % points.length]
32
+ [a, b, c]
33
+ end
34
+
35
+ triangles.each do |triangle|
36
+ if is_ear?(triangle)
37
+ new_points = points.reject { |point| point == triangle[1] }
38
+ return triangle, Path.new(new_points)
39
+ end
40
+ end
41
+ raise NoEarsException
42
+ end
43
+
44
+ def is_ear?(triangle)
45
+ return false unless clockwise?(triangle)
46
+ points.each do |point|
47
+ next if triangle.include?(point)
48
+ return false if point_in_triangle?(point, triangle)
49
+ end
50
+ true
51
+ end
52
+
53
+ private
54
+
55
+ def remove_colinear(points)
56
+ points.reject.with_index do |point, i|
57
+ a = points[i - 1]
58
+ b = point
59
+ c = points[(i + 1) % points.length]
60
+
61
+ cross_product(a, b, c).zero?
62
+ end
63
+ end
64
+
65
+ def anti_clockwise?(triangle)
66
+ a, b, c = triangle
67
+ cross_product = (b[0] - a[0]) * (c[1] - a[1]) - (b[1] - a[1]) * (c[0] - a[0])
68
+ cross_product > 0
69
+ end
70
+
71
+ def clockwise?(triangle)
72
+ !anti_clockwise?(triangle)
73
+ end
74
+
75
+ def point_in_triangle?(point, triangle)
76
+ a, b, c = triangle
77
+ pab = cross_product(point, a, b)
78
+ pbc = cross_product(point, b, c)
79
+ pca = cross_product(point, c, a)
80
+
81
+ same_sign?(pab, pbc) && same_sign?(pbc, pca)
82
+ end
83
+
84
+ def cross_product(a, b, c)
85
+ (b[0] - a[0]) * (c[1] - a[1]) - (b[1] - a[1]) * (c[0] - a[0])
86
+ end
87
+
88
+ def same_sign?(a, b)
89
+ a.negative? == b.negative?
90
+ end
91
+ end
92
+ end
@@ -1,12 +1,12 @@
1
- # frozen_string_literal: true
2
-
3
- module Engine::Physics
4
- class Collision
5
- attr_accessor :impulse, :point
6
-
7
- def initialize(impulse, point)
8
- @impulse = impulse
9
- @point = point
10
- end
11
- end
12
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Engine::Physics
4
+ class Collision
5
+ attr_accessor :impulse, :point
6
+
7
+ def initialize(impulse, point)
8
+ @impulse = impulse
9
+ @point = point
10
+ end
11
+ end
12
+ end
@@ -1,6 +1,6 @@
1
- # frozen_string_literal: true
2
-
3
- module Engine::Physics::Components
4
- class CubeCollider < Engine::Component
5
- end
6
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Engine::Physics::Components
4
+ class CubeCollider < Engine::Component
5
+ end
6
+ end