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
@@ -1,54 +1,54 @@
1
- # frozen_string_literal: true
2
-
3
- module Engine::Components
4
- class OrthographicCamera < Engine::Component
5
-
6
- def initialize(width:, height:, far:)
7
- @width = width
8
- @height = height
9
- @far = far
10
- @near = 0
11
-
12
- Engine::Camera.instance = self
13
- end
14
-
15
- def destroy
16
- Engine::Camera.instance = nil if Engine::Camera.instance == self
17
- end
18
-
19
- def matrix
20
- @matrix ||=
21
- begin
22
- camera_pos = game_object.pos - game_object.forward * (@far / 2)
23
- Matrix[
24
- [right[0], up[0], -front[0], 0],
25
- [right[1], up[1], -front[1], 0],
26
- [right[2], up[2], -front[2], 0],
27
- [-camera_pos.dot(right), -camera_pos.dot(up), camera_pos.dot(front), 1]
28
- ]
29
- end
30
- end
31
-
32
- def update(delta_time)
33
- @right = nil if game_object.rotation != @rotation
34
- @up = nil if game_object.rotation != @rotation
35
- @front = nil if game_object.rotation != @rotation
36
- @matrix = nil if game_object.rotation.dup != @rotation
37
- @rotation = game_object.rotation.dup
38
- end
39
-
40
- private
41
-
42
- def right
43
- @right ||= game_object.right / (@width / 2)
44
- end
45
-
46
- def up
47
- @up ||= game_object.up / (@height / 2)
48
- end
49
-
50
- def front
51
- @front ||= game_object.forward / (@far / 2)
52
- end
53
- end
54
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Engine::Components
4
+ class OrthographicCamera < Engine::Component
5
+
6
+ def initialize(width:, height:, far:)
7
+ @width = width
8
+ @height = height
9
+ @far = far
10
+ @near = 0
11
+
12
+ Engine::Camera.instance = self
13
+ end
14
+
15
+ def destroy
16
+ Engine::Camera.instance = nil if Engine::Camera.instance == self
17
+ end
18
+
19
+ def matrix
20
+ @matrix ||=
21
+ begin
22
+ camera_pos = game_object.pos - game_object.forward * (@far / 2)
23
+ Matrix[
24
+ [right[0], up[0], -front[0], 0],
25
+ [right[1], up[1], -front[1], 0],
26
+ [right[2], up[2], -front[2], 0],
27
+ [-camera_pos.dot(right), -camera_pos.dot(up), camera_pos.dot(front), 1]
28
+ ]
29
+ end
30
+ end
31
+
32
+ def update(delta_time)
33
+ @right = nil if game_object.rotation != @rotation
34
+ @up = nil if game_object.rotation != @rotation
35
+ @front = nil if game_object.rotation != @rotation
36
+ @matrix = nil if game_object.rotation.dup != @rotation
37
+ @rotation = game_object.rotation.dup
38
+ end
39
+
40
+ private
41
+
42
+ def right
43
+ @right ||= game_object.right / (@width / 2)
44
+ end
45
+
46
+ def up
47
+ @up ||= game_object.up / (@height / 2)
48
+ end
49
+
50
+ def front
51
+ @front ||= game_object.forward / (@far / 2)
52
+ end
53
+ end
54
+ end
@@ -1,53 +1,53 @@
1
- # frozen_string_literal: true
2
-
3
- module Engine::Components
4
- class PerspectiveCamera < Engine::Component
5
- def initialize(fov:, aspect:, near:, far:)
6
- @fov = fov
7
- @aspect = aspect
8
- @near = near
9
- @far = far
10
-
11
- Engine::Camera.instance = self
12
- end
13
-
14
- def destroy
15
- Engine::Camera.instance = nil if Engine::Camera.instance == self
16
- end
17
-
18
- def matrix
19
- @matrix ||=
20
- begin
21
- right = game_object.right
22
- up = game_object.up
23
- forward = game_object.forward
24
-
25
- transformation_matrix = Matrix[
26
- [right[0], right[1], right[2], -right.dot(game_object.pos)],
27
- [up[0], up[1], up[2], -up.dot(game_object.pos)],
28
- [forward[0], forward[1], forward[2], -forward.dot(game_object.pos)],
29
- [0, 0, 0, 1]
30
- ]
31
-
32
- (projection * transformation_matrix).transpose
33
- end
34
- end
35
-
36
- def projection
37
- fov = @fov * Math::PI / 180
38
- Matrix[
39
- [1 / (Math.tan(fov / 2) * @aspect), 0, 0, 0],
40
- [0, 1 / Math.tan(fov / 2), 0, 0],
41
- [0, 0, (@far + @near) / (@near - @far), 2 * @far * @near / (@near - @far)],
42
- [0, 0, -1, 0]
43
- ]
44
- end
45
-
46
- def update(delta_time)
47
- @matrix = nil if game_object.rotation != @rotation || game_object.pos != @pos || game_object.scale != @scale
48
- @rotation = game_object.rotation.dup
49
- @pos = game_object.pos.dup
50
- @scale = game_object.scale.dup
51
- end
52
- end
53
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Engine::Components
4
+ class PerspectiveCamera < Engine::Component
5
+ def initialize(fov:, aspect:, near:, far:)
6
+ @fov = fov
7
+ @aspect = aspect
8
+ @near = near
9
+ @far = far
10
+
11
+ Engine::Camera.instance = self
12
+ end
13
+
14
+ def destroy
15
+ Engine::Camera.instance = nil if Engine::Camera.instance == self
16
+ end
17
+
18
+ def matrix
19
+ @matrix ||=
20
+ begin
21
+ right = game_object.right
22
+ up = game_object.up
23
+ forward = game_object.forward
24
+
25
+ transformation_matrix = Matrix[
26
+ [right[0], right[1], right[2], -right.dot(game_object.pos)],
27
+ [up[0], up[1], up[2], -up.dot(game_object.pos)],
28
+ [forward[0], forward[1], forward[2], -forward.dot(game_object.pos)],
29
+ [0, 0, 0, 1]
30
+ ]
31
+
32
+ (projection * transformation_matrix).transpose
33
+ end
34
+ end
35
+
36
+ def projection
37
+ fov = @fov * Math::PI / 180
38
+ Matrix[
39
+ [1 / (Math.tan(fov / 2) * @aspect), 0, 0, 0],
40
+ [0, 1 / Math.tan(fov / 2), 0, 0],
41
+ [0, 0, (@far + @near) / (@near - @far), 2 * @far * @near / (@near - @far)],
42
+ [0, 0, -1, 0]
43
+ ]
44
+ end
45
+
46
+ def update(delta_time)
47
+ @matrix = nil if game_object.rotation != @rotation || game_object.pos != @pos || game_object.scale != @scale
48
+ @rotation = game_object.rotation.dup
49
+ @pos = game_object.pos.dup
50
+ @scale = game_object.scale.dup
51
+ end
52
+ end
53
+ end
@@ -1,24 +1,24 @@
1
- # frozen_string_literal: true
2
-
3
- module Engine::Components
4
- class PointLight < Engine::Component
5
- attr_accessor :range, :colour
6
-
7
- def initialize(range: 300, colour: [1.0, 1.0, 1.0])
8
- @range = range
9
- @colour = colour
10
- end
11
-
12
- def start
13
- PointLight.point_lights << self
14
- end
15
-
16
- def destroy!
17
- PointLight.point_lights.delete(self)
18
- end
19
-
20
- def self.point_lights
21
- @point_lights ||= []
22
- end
23
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Engine::Components
4
+ class PointLight < Engine::Component
5
+ attr_accessor :range, :colour
6
+
7
+ def initialize(range: 300, colour: [1.0, 1.0, 1.0])
8
+ @range = range
9
+ @colour = colour
10
+ end
11
+
12
+ def start
13
+ PointLight.point_lights << self
14
+ end
15
+
16
+ def destroy!
17
+ PointLight.point_lights.delete(self)
18
+ end
19
+
20
+ def self.point_lights
21
+ @point_lights ||= []
22
+ end
23
+ end
24
24
  end
@@ -1,141 +1,141 @@
1
- # frozen_string_literal: true
2
-
3
- module Engine::Components
4
- class SpriteRenderer < Engine::Component
5
- attr_reader :v1, :v2, :v3, :v4, :texture, :frame_coords, :frame_rate, :loop
6
- attr_accessor :colour
7
-
8
- def renderer?
9
- true
10
- end
11
-
12
- def initialize(tl, tr, br, bl, texture, frame_coords = nil, frame_rate = nil, loop = true, colour = { r: 1, g: 1, b: 1.0 })
13
- @v1 = tl
14
- @v2 = tr
15
- @v3 = br
16
- @v4 = bl
17
- @texture = texture
18
- @colour = colour
19
- @frame_coords = frame_coords || [{ tl: Vector[0, 0], width: 1, height: 1 }]
20
- @frame_rate = frame_rate || 1
21
- @loop = loop
22
- end
23
-
24
- def start
25
- @start_time = Time.now
26
-
27
- setup_vertex_attribute_buffer
28
- setup_vertex_buffer
29
- setup_index_buffer
30
- end
31
-
32
- def update(delta_time)
33
- shader.use
34
- GL.BindVertexArray(@vao)
35
- GL.BindBuffer(GL::ELEMENT_ARRAY_BUFFER, @ebo)
36
-
37
- set_shader_per_frame_data
38
-
39
- GL.DrawElements(GL::TRIANGLES, 6, GL::UNSIGNED_INT, 0)
40
- GL.BindVertexArray(0)
41
- GL.BindBuffer(GL::ELEMENT_ARRAY_BUFFER, 0)
42
- end
43
-
44
- private
45
-
46
- def shader
47
- @shader ||= Engine::Shader.new('./shaders/sprite_vertex.glsl', './shaders/sprite_frag.glsl')
48
- end
49
-
50
- def set_shader_per_frame_data
51
- set_shader_camera_matrix
52
- set_shader_model_matrix
53
- set_shader_texture
54
- set_shader_sprite_colour
55
- set_shader_frame_data
56
- end
57
-
58
- def set_shader_frame_data
59
- current_frame_index = (Time.now - @start_time) * @frame_rate
60
- current_frame_index = if @loop
61
- current_frame_index.to_i % @frame_coords.length
62
- else
63
- [@frame_coords.length - 1, current_frame_index.to_i].min
64
- end
65
-
66
- current_frame_coords =
67
- [
68
- @frame_coords[current_frame_index][:tl][0],
69
- @frame_coords[current_frame_index][:tl][1],
70
- @frame_coords[current_frame_index][:width],
71
- @frame_coords[current_frame_index][:height]
72
- ]
73
- shader.set_vec4("frameCoords", current_frame_coords)
74
- end
75
-
76
- def set_shader_sprite_colour
77
- shader.set_vec3("spriteColor", colour)
78
- end
79
-
80
- def set_shader_texture
81
- GL.ActiveTexture(GL::TEXTURE0)
82
- GL.BindTexture(GL::TEXTURE_2D, texture)
83
- shader.set_int("image", 0)
84
- end
85
-
86
- def set_shader_model_matrix
87
- shader.set_mat4("model", game_object.model_matrix)
88
- end
89
-
90
- def set_shader_camera_matrix
91
- camera_matrix = Engine::Camera.instance.matrix
92
- shader.set_mat4("camera", camera_matrix)
93
- end
94
-
95
- def setup_index_buffer
96
- indices = [
97
- 0, 2, 1,
98
- 2, 0, 3
99
- ]
100
-
101
- ebo_buf = ' ' * 4
102
- GL.GenBuffers(1, ebo_buf)
103
- @ebo = ebo_buf.unpack('L')[0]
104
- GL.BindBuffer(GL::ELEMENT_ARRAY_BUFFER, @ebo)
105
- GL.BufferData(
106
- GL::ELEMENT_ARRAY_BUFFER, 6 * Fiddle::SIZEOF_INT,
107
- indices.pack('I*'), GL::STATIC_DRAW
108
- )
109
- end
110
-
111
- def setup_vertex_attribute_buffer
112
- va0_buf = ' ' * 4
113
- GL.GenVertexArrays(1, va0_buf)
114
- @vao = va0_buf.unpack('L')[0]
115
- GL.BindVertexArray(@vao)
116
- end
117
-
118
- def setup_vertex_buffer
119
- vbo_buf = ' ' * 4
120
- GL.GenBuffers(1, vbo_buf)
121
- vbo = vbo_buf.unpack('L')[0]
122
- points = [
123
- v1[0], v1[1], 0, 0, 0,
124
- v2[0], v2[1], 0, 1, 0,
125
- v3[0], v3[1], 0, 1, 1,
126
- v4[0], v4[1], 0, 0, 1
127
- ]
128
-
129
- GL.BindBuffer(GL::ARRAY_BUFFER, vbo)
130
- GL.BufferData(
131
- GL::ARRAY_BUFFER, 4 * 5 * Fiddle::SIZEOF_FLOAT,
132
- points.pack('F*'), GL::STATIC_DRAW
133
- )
134
-
135
- GL.VertexAttribPointer(0, 3, GL::FLOAT, GL::FALSE, 5 * Fiddle::SIZEOF_FLOAT, 0)
136
- GL.VertexAttribPointer(1, 2, GL::FLOAT, GL::FALSE, 5 * Fiddle::SIZEOF_FLOAT, 3 * Fiddle::SIZEOF_FLOAT)
137
- GL.EnableVertexAttribArray(0)
138
- GL.EnableVertexAttribArray(1)
139
- end
140
- end
141
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Engine::Components
4
+ class SpriteRenderer < Engine::Component
5
+ attr_reader :v1, :v2, :v3, :v4, :texture, :frame_coords, :frame_rate, :loop
6
+ attr_accessor :colour
7
+
8
+ def renderer?
9
+ true
10
+ end
11
+
12
+ def initialize(tl, tr, br, bl, texture, frame_coords = nil, frame_rate = nil, loop = true, colour = { r: 1, g: 1, b: 1.0 })
13
+ @v1 = tl
14
+ @v2 = tr
15
+ @v3 = br
16
+ @v4 = bl
17
+ @texture = texture
18
+ @colour = colour
19
+ @frame_coords = frame_coords || [{ tl: Vector[0, 0], width: 1, height: 1 }]
20
+ @frame_rate = frame_rate || 1
21
+ @loop = loop
22
+ end
23
+
24
+ def start
25
+ @start_time = Time.now
26
+
27
+ setup_vertex_attribute_buffer
28
+ setup_vertex_buffer
29
+ setup_index_buffer
30
+ end
31
+
32
+ def update(delta_time)
33
+ shader.use
34
+ GL.BindVertexArray(@vao)
35
+ GL.BindBuffer(GL::ELEMENT_ARRAY_BUFFER, @ebo)
36
+
37
+ set_shader_per_frame_data
38
+
39
+ GL.DrawElements(GL::TRIANGLES, 6, GL::UNSIGNED_INT, 0)
40
+ GL.BindVertexArray(0)
41
+ GL.BindBuffer(GL::ELEMENT_ARRAY_BUFFER, 0)
42
+ end
43
+
44
+ private
45
+
46
+ def shader
47
+ @shader ||= Engine::Shader.sprite
48
+ end
49
+
50
+ def set_shader_per_frame_data
51
+ set_shader_camera_matrix
52
+ set_shader_model_matrix
53
+ set_shader_texture
54
+ set_shader_sprite_colour
55
+ set_shader_frame_data
56
+ end
57
+
58
+ def set_shader_frame_data
59
+ current_frame_index = (Time.now - @start_time) * @frame_rate
60
+ current_frame_index = if @loop
61
+ current_frame_index.to_i % @frame_coords.length
62
+ else
63
+ [@frame_coords.length - 1, current_frame_index.to_i].min
64
+ end
65
+
66
+ current_frame_coords =
67
+ [
68
+ @frame_coords[current_frame_index][:tl][0],
69
+ @frame_coords[current_frame_index][:tl][1],
70
+ @frame_coords[current_frame_index][:width],
71
+ @frame_coords[current_frame_index][:height]
72
+ ]
73
+ shader.set_vec4("frameCoords", current_frame_coords)
74
+ end
75
+
76
+ def set_shader_sprite_colour
77
+ shader.set_vec3("spriteColor", colour)
78
+ end
79
+
80
+ def set_shader_texture
81
+ GL.ActiveTexture(GL::TEXTURE0)
82
+ GL.BindTexture(GL::TEXTURE_2D, texture)
83
+ shader.set_int("image", 0)
84
+ end
85
+
86
+ def set_shader_model_matrix
87
+ shader.set_mat4("model", game_object.model_matrix)
88
+ end
89
+
90
+ def set_shader_camera_matrix
91
+ camera_matrix = Engine::Camera.instance.matrix
92
+ shader.set_mat4("camera", camera_matrix)
93
+ end
94
+
95
+ def setup_index_buffer
96
+ indices = [
97
+ 0, 2, 1,
98
+ 2, 0, 3
99
+ ]
100
+
101
+ ebo_buf = ' ' * 4
102
+ GL.GenBuffers(1, ebo_buf)
103
+ @ebo = ebo_buf.unpack('L')[0]
104
+ GL.BindBuffer(GL::ELEMENT_ARRAY_BUFFER, @ebo)
105
+ GL.BufferData(
106
+ GL::ELEMENT_ARRAY_BUFFER, 6 * Fiddle::SIZEOF_INT,
107
+ indices.pack('I*'), GL::STATIC_DRAW
108
+ )
109
+ end
110
+
111
+ def setup_vertex_attribute_buffer
112
+ va0_buf = ' ' * 4
113
+ GL.GenVertexArrays(1, va0_buf)
114
+ @vao = va0_buf.unpack('L')[0]
115
+ GL.BindVertexArray(@vao)
116
+ end
117
+
118
+ def setup_vertex_buffer
119
+ vbo_buf = ' ' * 4
120
+ GL.GenBuffers(1, vbo_buf)
121
+ vbo = vbo_buf.unpack('L')[0]
122
+ points = [
123
+ v1[0], v1[1], 0, 0, 0,
124
+ v2[0], v2[1], 0, 1, 0,
125
+ v3[0], v3[1], 0, 1, 1,
126
+ v4[0], v4[1], 0, 0, 1
127
+ ]
128
+
129
+ GL.BindBuffer(GL::ARRAY_BUFFER, vbo)
130
+ GL.BufferData(
131
+ GL::ARRAY_BUFFER, 4 * 5 * Fiddle::SIZEOF_FLOAT,
132
+ points.pack('F*'), GL::STATIC_DRAW
133
+ )
134
+
135
+ GL.VertexAttribPointer(0, 3, GL::FLOAT, GL::FALSE, 5 * Fiddle::SIZEOF_FLOAT, 0)
136
+ GL.VertexAttribPointer(1, 2, GL::FLOAT, GL::FALSE, 5 * Fiddle::SIZEOF_FLOAT, 3 * Fiddle::SIZEOF_FLOAT)
137
+ GL.EnableVertexAttribArray(0)
138
+ GL.EnableVertexAttribArray(1)
139
+ end
140
+ end
141
+ end