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
File without changes
File without changes
File without changes
@@ -1,11 +1,11 @@
1
- # frozen_string_literal: true
2
-
3
- module Engine
4
- module AutoLoader
5
- def self.load(load_path = nil)
6
- base_dir = File.expand_path(load_path || File.dirname($PROGRAM_NAME))
7
- Dir[File.join(base_dir, "components", "**/*.rb")].each { |file| require file }
8
- Dir[File.join(base_dir, "game_objects", "**/*.rb")].each { |file| require file }
9
- end
10
- end
11
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Engine
4
+ module AutoLoader
5
+ def self.load(load_path = nil)
6
+ base_dir = File.expand_path(load_path || File.dirname($PROGRAM_NAME))
7
+ Dir[File.join(base_dir, "components", "**/*.rb")].each { |file| require file }
8
+ Dir[File.join(base_dir, "game_objects", "**/*.rb")].each { |file| require file }
9
+ end
10
+ end
11
+ end
data/lib/engine/camera.rb CHANGED
@@ -1,13 +1,13 @@
1
- # frozen_string_literal: true
2
-
3
- module Engine
4
- class Camera
5
- def self.instance
6
- @instance
7
- end
8
-
9
- def self.instance=(new_instance)
10
- @instance = new_instance
11
- end
12
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Engine
4
+ class Camera
5
+ def self.instance
6
+ @instance
7
+ end
8
+
9
+ def self.instance=(new_instance)
10
+ @instance = new_instance
11
+ end
12
+ end
13
13
  end
@@ -1,63 +1,63 @@
1
- module Engine
2
- class Component
3
- def self.method_added(name)
4
- @methods ||= Set.new
5
- return if name == :initialize || name == :destroyed?
6
- @methods.add(name)
7
- end
8
-
9
- attr_reader :game_object
10
-
11
- def renderer?
12
- false
13
- end
14
-
15
- def ui_renderer?
16
- false
17
- end
18
-
19
- def set_game_object(game_object)
20
- @game_object = game_object
21
- end
22
-
23
- def start
24
- end
25
-
26
- def update(delta_time) end
27
-
28
- def destroyed?
29
- @destroyed || false
30
- end
31
-
32
- def destroy!
33
- Component.destroyed_components << self unless @destroyed
34
- destroy unless @destroyed
35
- @destroyed = true
36
- end
37
-
38
- def _erase!
39
- game_object.components.delete(self)
40
- class_name = self.class.name.split('::').last
41
- self.class.instance_variable_get(:@methods).each do |method|
42
- singleton_class.send(:undef_method, method)
43
- singleton_class.send(:define_method, method) do |*args, **kwargs|
44
- raise "This #{class_name} has been destroyed but you are still trying to access #{method}"
45
- end
46
- end
47
- end
48
-
49
- def self.erase_destroyed_components
50
- destroyed_components.each do |object|
51
- object._erase!
52
- end
53
- @destroyed_components = []
54
- end
55
-
56
- def destroy
57
- end
58
-
59
- def self.destroyed_components
60
- @destroyed_components ||= []
61
- end
62
- end
63
- end
1
+ module Engine
2
+ class Component
3
+ def self.method_added(name)
4
+ @methods ||= Set.new
5
+ return if name == :initialize || name == :destroyed?
6
+ @methods.add(name)
7
+ end
8
+
9
+ attr_reader :game_object
10
+
11
+ def renderer?
12
+ false
13
+ end
14
+
15
+ def ui_renderer?
16
+ false
17
+ end
18
+
19
+ def set_game_object(game_object)
20
+ @game_object = game_object
21
+ end
22
+
23
+ def start
24
+ end
25
+
26
+ def update(delta_time) end
27
+
28
+ def destroyed?
29
+ @destroyed || false
30
+ end
31
+
32
+ def destroy!
33
+ Component.destroyed_components << self unless @destroyed
34
+ destroy unless @destroyed
35
+ @destroyed = true
36
+ end
37
+
38
+ def _erase!
39
+ game_object.components.delete(self)
40
+ class_name = self.class.name.split('::').last
41
+ self.class.instance_variable_get(:@methods).each do |method|
42
+ singleton_class.send(:undef_method, method)
43
+ singleton_class.send(:define_method, method) do |*args, **kwargs|
44
+ raise "This #{class_name} has been destroyed but you are still trying to access #{method}"
45
+ end
46
+ end
47
+ end
48
+
49
+ def self.erase_destroyed_components
50
+ destroyed_components.each do |object|
51
+ object._erase!
52
+ end
53
+ @destroyed_components = []
54
+ end
55
+
56
+ def destroy
57
+ end
58
+
59
+ def self.destroyed_components
60
+ @destroyed_components ||= []
61
+ end
62
+ end
63
+ end
@@ -1,41 +1,41 @@
1
- # frozen_string_literal: true
2
-
3
- module Engine::Components
4
- class AudioSource < Engine::Component
5
- def initialize(clip, radius: 1000)
6
- @clip = clip
7
- @radius = radius
8
- @source = NativeAudio::AudioSource.new(clip)
9
- end
10
-
11
- def play
12
- @source.play
13
- end
14
-
15
- def stop
16
- @source.stop
17
- end
18
-
19
- def pause
20
- @source.pause
21
- end
22
-
23
- def resume
24
- @source.resume
25
- end
26
-
27
- def volume=(volume)
28
- @source.set_volume(volume)
29
- end
30
-
31
- def update(delta_time)
32
- camera = Engine::Camera.instance
33
- local_pos = camera.game_object.world_to_local_coordinate(game_object.pos)
34
- angle = Math.atan2(local_pos[0], -local_pos[2]) * 180 / Math::PI
35
- angle = (angle + 360) % 360
36
- distance = (local_pos.magnitude * 255 / @radius).clamp(0, 255)
37
-
38
- @source.set_pos(angle, distance)
39
- end
40
- end
41
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Engine::Components
4
+ class AudioSource < Engine::Component
5
+ def initialize(clip, radius: 1000)
6
+ @clip = clip
7
+ @radius = radius
8
+ @source = NativeAudio::AudioSource.new(clip)
9
+ end
10
+
11
+ def play
12
+ @source.play
13
+ end
14
+
15
+ def stop
16
+ @source.stop
17
+ end
18
+
19
+ def pause
20
+ @source.pause
21
+ end
22
+
23
+ def resume
24
+ @source.resume
25
+ end
26
+
27
+ def volume=(volume)
28
+ @source.set_volume(volume)
29
+ end
30
+
31
+ def update(delta_time)
32
+ camera = Engine::Camera.instance
33
+ local_pos = camera.game_object.world_to_local_coordinate(game_object.pos)
34
+ angle = Math.atan2(local_pos[0], -local_pos[2]) * 180 / Math::PI
35
+ angle = (angle + 360) % 360
36
+ distance = (local_pos.magnitude * 255 / @radius).clamp(0, 255)
37
+
38
+ @source.set_pos(angle, distance)
39
+ end
40
+ end
41
+ end
@@ -1,23 +1,23 @@
1
- # frozen_string_literal: true
2
-
3
- module Engine::Components
4
- class DirectionLight < Engine::Component
5
- attr_accessor :colour
6
-
7
- def initialize(colour: [1.0, 1.0, 1.0])
8
- @colour = colour
9
- end
10
-
11
- def start
12
- DirectionLight.direction_lights << self
13
- end
14
-
15
- def destroy!
16
- DirectionLight.direction_lights.delete(self)
17
- end
18
-
19
- def self.direction_lights
20
- @direction_lights ||= []
21
- end
22
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Engine::Components
4
+ class DirectionLight < Engine::Component
5
+ attr_accessor :colour
6
+
7
+ def initialize(colour: [1.0, 1.0, 1.0])
8
+ @colour = colour
9
+ end
10
+
11
+ def start
12
+ DirectionLight.direction_lights << self
13
+ end
14
+
15
+ def destroy!
16
+ DirectionLight.direction_lights.delete(self)
17
+ end
18
+
19
+ def self.direction_lights
20
+ @direction_lights ||= []
21
+ end
22
+ end
23
23
  end
@@ -1,134 +1,134 @@
1
- module Engine::Components
2
- class FontRenderer < Engine::Component
3
- attr_reader :mesh, :texture
4
-
5
- def renderer?
6
- true
7
- end
8
-
9
- def initialize(font, string)
10
- @mesh = Engine::PolygonMesh.new([Vector[-0.5, 0.5], Vector[0.5, 0.5], Vector[0.5, -0.5], Vector[-0.5, -0.5]], [[0, 0], [1, 0], [1, 1], [0, 1]])
11
- @texture = font.texture.texture
12
- @string = string
13
- @font = font
14
- end
15
-
16
- def start
17
- setup_vertex_attribute_buffer
18
- setup_vertex_buffer
19
- setup_index_buffer
20
- end
21
-
22
- def update_string(string)
23
- @string = string
24
- update_vbo_buf
25
- end
26
-
27
- def update(delta_time)
28
- shader.use
29
- GL.BindVertexArray(@vao)
30
- GL.BindBuffer(GL::ELEMENT_ARRAY_BUFFER, @ebo)
31
-
32
- set_shader_per_frame_data
33
-
34
- GL.DrawElementsInstanced(GL::TRIANGLES, mesh.index_data.length, GL::UNSIGNED_INT, 0, @string.length)
35
- GL.BindVertexArray(0)
36
- GL.BindBuffer(GL::ELEMENT_ARRAY_BUFFER, 0)
37
- end
38
-
39
- private
40
-
41
- def shader
42
- @shader ||= Engine::Shader.new('./shaders/text_vertex.glsl', './shaders/text_frag.glsl')
43
- end
44
-
45
- def set_shader_per_frame_data
46
- set_shader_camera_matrix
47
- set_shader_model_matrix
48
- set_shader_texture
49
- end
50
-
51
- def set_shader_model_matrix
52
- shader.set_mat4("model", game_object.model_matrix)
53
- end
54
-
55
- def set_shader_texture
56
- GL.ActiveTexture(GL::TEXTURE0)
57
- GL.BindTexture(GL::TEXTURE_2D, texture)
58
- shader.set_int("fontTexture", 0)
59
- end
60
-
61
- def set_shader_camera_matrix
62
- shader.set_mat4("camera", Engine::Camera.instance.matrix)
63
- end
64
-
65
- def setup_index_buffer
66
- indices = mesh.index_data
67
-
68
- ebo_buf = ' ' * 4
69
- GL.GenBuffers(1, ebo_buf)
70
- @ebo = ebo_buf.unpack('L')[0]
71
- GL.BindBuffer(GL::ELEMENT_ARRAY_BUFFER, @ebo)
72
- GL.BufferData(
73
- GL::ELEMENT_ARRAY_BUFFER, indices.length * Fiddle::SIZEOF_INT,
74
- indices.pack('I*'), GL::STATIC_DRAW
75
- )
76
- end
77
-
78
- def setup_vertex_attribute_buffer
79
- vao_buf = ' ' * 4
80
- GL.GenVertexArrays(1, vao_buf)
81
- @vao = vao_buf.unpack('L')[0]
82
- GL.BindVertexArray(@vao)
83
- end
84
-
85
- def setup_vertex_buffer
86
- vbo_buf = ' ' * 4
87
- GL.GenBuffers(1, vbo_buf)
88
- vbo = vbo_buf.unpack('L')[0]
89
- points = mesh.vertex_data
90
-
91
- GL.BindBuffer(GL::ARRAY_BUFFER, vbo)
92
- GL.BufferData(
93
- GL::ARRAY_BUFFER, @mesh.vertex_data.length * Fiddle::SIZEOF_FLOAT,
94
- points.pack('F*'), GL::STATIC_DRAW
95
- )
96
-
97
- GL.VertexAttribPointer(0, 3, GL::FLOAT, GL::FALSE, 5 * Fiddle::SIZEOF_FLOAT, 0)
98
- GL.VertexAttribPointer(1, 2, GL::FLOAT, GL::FALSE, 5 * Fiddle::SIZEOF_FLOAT, 3 * Fiddle::SIZEOF_FLOAT)
99
- GL.EnableVertexAttribArray(0)
100
- GL.EnableVertexAttribArray(1)
101
-
102
- generate_instance_vbo_buf
103
- end
104
-
105
- def generate_instance_vbo_buf
106
- @instance_vbo = set_instance_vbo_buf
107
- update_vbo_buf
108
- end
109
-
110
- def set_instance_vbo_buf
111
- instance_vbo_buf = ' ' * 4
112
- GL.GenBuffers(1, instance_vbo_buf)
113
- instance_vbo_buf.unpack('L')[0]
114
- end
115
-
116
- def update_vbo_buf
117
- vertex_data = @font.vertex_data(@string)
118
- string_length = @string.chars.reject{|c| c == "\n"}.length
119
-
120
- GL.BindBuffer(GL::ARRAY_BUFFER, @instance_vbo)
121
- vertex_size = Fiddle::SIZEOF_INT + (Fiddle::SIZEOF_FLOAT * 2)
122
- GL.BufferData(
123
- GL::ARRAY_BUFFER, string_length * vertex_size,
124
- vertex_data.pack('IFF' * string_length), GL::STATIC_DRAW
125
- )
126
- GL.VertexAttribIPointer(2, 1, GL::INT, vertex_size, 0)
127
- GL.VertexAttribPointer(3, 2, GL::FLOAT, GL::FALSE, vertex_size, Fiddle::SIZEOF_INT)
128
- GL.EnableVertexAttribArray(2)
129
- GL.EnableVertexAttribArray(3)
130
- GL.VertexAttribDivisor(2, 1)
131
- GL.VertexAttribDivisor(3, 1)
132
- end
133
- end
134
- end
1
+ module Engine::Components
2
+ class FontRenderer < Engine::Component
3
+ attr_reader :mesh, :texture
4
+
5
+ def renderer?
6
+ true
7
+ end
8
+
9
+ def initialize(font, string)
10
+ @mesh = Engine::PolygonMesh.new([Vector[-0.5, 0.5], Vector[0.5, 0.5], Vector[0.5, -0.5], Vector[-0.5, -0.5]], [[0, 0], [1, 0], [1, 1], [0, 1]])
11
+ @texture = font.texture.texture
12
+ @string = string
13
+ @font = font
14
+ end
15
+
16
+ def start
17
+ setup_vertex_attribute_buffer
18
+ setup_vertex_buffer
19
+ setup_index_buffer
20
+ end
21
+
22
+ def update_string(string)
23
+ @string = string
24
+ update_vbo_buf
25
+ end
26
+
27
+ def update(delta_time)
28
+ shader.use
29
+ GL.BindVertexArray(@vao)
30
+ GL.BindBuffer(GL::ELEMENT_ARRAY_BUFFER, @ebo)
31
+
32
+ set_shader_per_frame_data
33
+
34
+ GL.DrawElementsInstanced(GL::TRIANGLES, mesh.index_data.length, GL::UNSIGNED_INT, 0, @string.length)
35
+ GL.BindVertexArray(0)
36
+ GL.BindBuffer(GL::ELEMENT_ARRAY_BUFFER, 0)
37
+ end
38
+
39
+ private
40
+
41
+ def shader
42
+ @shader ||= Engine::Shader.text
43
+ end
44
+
45
+ def set_shader_per_frame_data
46
+ set_shader_camera_matrix
47
+ set_shader_model_matrix
48
+ set_shader_texture
49
+ end
50
+
51
+ def set_shader_model_matrix
52
+ shader.set_mat4("model", game_object.model_matrix)
53
+ end
54
+
55
+ def set_shader_texture
56
+ GL.ActiveTexture(GL::TEXTURE0)
57
+ GL.BindTexture(GL::TEXTURE_2D, texture)
58
+ shader.set_int("fontTexture", 0)
59
+ end
60
+
61
+ def set_shader_camera_matrix
62
+ shader.set_mat4("camera", Engine::Camera.instance.matrix)
63
+ end
64
+
65
+ def setup_index_buffer
66
+ indices = mesh.index_data
67
+
68
+ ebo_buf = ' ' * 4
69
+ GL.GenBuffers(1, ebo_buf)
70
+ @ebo = ebo_buf.unpack('L')[0]
71
+ GL.BindBuffer(GL::ELEMENT_ARRAY_BUFFER, @ebo)
72
+ GL.BufferData(
73
+ GL::ELEMENT_ARRAY_BUFFER, indices.length * Fiddle::SIZEOF_INT,
74
+ indices.pack('I*'), GL::STATIC_DRAW
75
+ )
76
+ end
77
+
78
+ def setup_vertex_attribute_buffer
79
+ vao_buf = ' ' * 4
80
+ GL.GenVertexArrays(1, vao_buf)
81
+ @vao = vao_buf.unpack('L')[0]
82
+ GL.BindVertexArray(@vao)
83
+ end
84
+
85
+ def setup_vertex_buffer
86
+ vbo_buf = ' ' * 4
87
+ GL.GenBuffers(1, vbo_buf)
88
+ vbo = vbo_buf.unpack('L')[0]
89
+ points = mesh.vertex_data
90
+
91
+ GL.BindBuffer(GL::ARRAY_BUFFER, vbo)
92
+ GL.BufferData(
93
+ GL::ARRAY_BUFFER, @mesh.vertex_data.length * Fiddle::SIZEOF_FLOAT,
94
+ points.pack('F*'), GL::STATIC_DRAW
95
+ )
96
+
97
+ GL.VertexAttribPointer(0, 3, GL::FLOAT, GL::FALSE, 5 * Fiddle::SIZEOF_FLOAT, 0)
98
+ GL.VertexAttribPointer(1, 2, GL::FLOAT, GL::FALSE, 5 * Fiddle::SIZEOF_FLOAT, 3 * Fiddle::SIZEOF_FLOAT)
99
+ GL.EnableVertexAttribArray(0)
100
+ GL.EnableVertexAttribArray(1)
101
+
102
+ generate_instance_vbo_buf
103
+ end
104
+
105
+ def generate_instance_vbo_buf
106
+ @instance_vbo = set_instance_vbo_buf
107
+ update_vbo_buf
108
+ end
109
+
110
+ def set_instance_vbo_buf
111
+ instance_vbo_buf = ' ' * 4
112
+ GL.GenBuffers(1, instance_vbo_buf)
113
+ instance_vbo_buf.unpack('L')[0]
114
+ end
115
+
116
+ def update_vbo_buf
117
+ vertex_data = @font.vertex_data(@string)
118
+ string_length = @string.chars.reject{|c| c == "\n"}.length
119
+
120
+ GL.BindBuffer(GL::ARRAY_BUFFER, @instance_vbo)
121
+ vertex_size = Fiddle::SIZEOF_INT + (Fiddle::SIZEOF_FLOAT * 2)
122
+ GL.BufferData(
123
+ GL::ARRAY_BUFFER, string_length * vertex_size,
124
+ vertex_data.pack('IFF' * string_length), GL::STATIC_DRAW
125
+ )
126
+ GL.VertexAttribIPointer(2, 1, GL::INT, vertex_size, 0)
127
+ GL.VertexAttribPointer(3, 2, GL::FLOAT, GL::FALSE, vertex_size, Fiddle::SIZEOF_INT)
128
+ GL.EnableVertexAttribArray(2)
129
+ GL.EnableVertexAttribArray(3)
130
+ GL.VertexAttribDivisor(2, 1)
131
+ GL.VertexAttribDivisor(3, 1)
132
+ end
133
+ end
134
+ end
@@ -1,31 +1,31 @@
1
- # frozen_string_literal: true
2
-
3
- module Engine::Components
4
- class MeshRenderer < Engine::Component
5
- attr_reader :mesh, :material, :static
6
-
7
- def initialize(mesh, material, static: false)
8
- @mesh = mesh
9
- @material = material
10
- @static = static
11
- end
12
-
13
- def renderer?
14
- true
15
- end
16
-
17
- def start
18
- Rendering::RenderPipeline.add_instance(self)
19
- end
20
-
21
- def update(delta_time)
22
- unless static
23
- Rendering::RenderPipeline.update_instance(self)
24
- end
25
- end
26
-
27
- def destroy
28
- Rendering::RenderPipeline.remove_instance(self)
29
- end
30
- end
31
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Engine::Components
4
+ class MeshRenderer < Engine::Component
5
+ attr_reader :mesh, :material, :static
6
+
7
+ def initialize(mesh, material, static: false)
8
+ @mesh = mesh
9
+ @material = material
10
+ @static = static
11
+ end
12
+
13
+ def renderer?
14
+ true
15
+ end
16
+
17
+ def start
18
+ Rendering::RenderPipeline.add_instance(self)
19
+ end
20
+
21
+ def update(delta_time)
22
+ unless static
23
+ Rendering::RenderPipeline.update_instance(self)
24
+ end
25
+ end
26
+
27
+ def destroy
28
+ Rendering::RenderPipeline.remove_instance(self)
29
+ end
30
+ end
31
+ end