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/cursor.rb CHANGED
@@ -1,43 +1,43 @@
1
- # frozen_string_literal: true
2
-
3
- module Engine
4
- class Cursor
5
- class << self
6
-
7
- def supported_modes
8
- {
9
- :enable => GLFW::CURSOR_NORMAL,
10
- :disable => GLFW::CURSOR_DISABLED,
11
- :hide => GLFW::CURSOR_HIDDEN
12
- }
13
- end
14
-
15
- def enable
16
- set_input_mode(:enable)
17
- end
18
-
19
- def disable
20
- set_input_mode(:disable)
21
- end
22
-
23
- def hide
24
- set_input_mode(:hide)
25
- end
26
-
27
- # Expects a symbol present in supported_modes, e.g. ':hide'
28
- def set_input_mode(mode)
29
- GLFW.SetInputMode(Window.window, GLFW::CURSOR, supported_modes[mode])
30
- end
31
-
32
- # Returns a symbol from the supported_modes, e.g. ':hide'
33
- def get_input_mode
34
- supported_modes.key(GLFW.GetInputMode(Window.window, GLFW::CURSOR))
35
- end
36
-
37
- # Expects a symbol present in supported_modes, e.g. ':hide'
38
- def restore_input_mode(original_mode)
39
- set_input_mode(original_mode)
40
- end
41
- end
42
- end
43
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Engine
4
+ class Cursor
5
+ class << self
6
+
7
+ def supported_modes
8
+ {
9
+ :enable => GLFW::CURSOR_NORMAL,
10
+ :disable => GLFW::CURSOR_DISABLED,
11
+ :hide => GLFW::CURSOR_HIDDEN
12
+ }
13
+ end
14
+
15
+ def enable
16
+ set_input_mode(:enable)
17
+ end
18
+
19
+ def disable
20
+ set_input_mode(:disable)
21
+ end
22
+
23
+ def hide
24
+ set_input_mode(:hide)
25
+ end
26
+
27
+ # Expects a symbol present in supported_modes, e.g. ':hide'
28
+ def set_input_mode(mode)
29
+ GLFW.SetInputMode(Window.window, GLFW::CURSOR, supported_modes[mode])
30
+ end
31
+
32
+ # Returns a symbol from the supported_modes, e.g. ':hide'
33
+ def get_input_mode
34
+ supported_modes.key(GLFW.GetInputMode(Window.window, GLFW::CURSOR))
35
+ end
36
+
37
+ # Expects a symbol present in supported_modes, e.g. ':hide'
38
+ def restore_input_mode(original_mode)
39
+ set_input_mode(original_mode)
40
+ end
41
+ end
42
+ end
43
+ end
@@ -1,41 +1,41 @@
1
- # frozen_string_literal: true
2
-
3
- module Engine
4
- module Debugging
5
-
6
- # Hit a breakpoint within the context of where the breakpoint is defined, assuming a block is passed
7
- # with a `binding.pry` (or an alternative debugger), otherwise hit a breakpoint within this method.
8
- def self.breakpoint(&block)
9
- orig_fullscreen = Window.full_screen?
10
- if orig_fullscreen
11
- Window.set_to_windowed
12
- GLFW.PollEvents # Required to trigger the switch from fullscreen to windowed within this breakpoint
13
- end
14
-
15
- orig_cursor_mode = Cursor.get_input_mode
16
- Cursor.enable
17
-
18
- block_given? ? yield : binding.pry
19
- Cursor.restore_input_mode(orig_cursor_mode)
20
- Window.set_to_full_screen if orig_fullscreen
21
- Window.focus_window
22
-
23
- # Reset the time, otherwise delta_time will be off for the next frame, and teleporting occurs
24
- @time = Time.now
25
- end
26
-
27
- def self.debug_opengl_call
28
- errors = []
29
- until GL.GetError == 0; end
30
- yield
31
- until (error = GL.GetError) == 0
32
- errors += error.to_s(16)
33
- end
34
- end
35
-
36
- def self.print_opengl_version
37
- puts "OpenGL Version: #{GL.GetString(GL::VERSION)}"
38
- puts "GLSL Version: #{GL.GetString(GL::SHADING_LANGUAGE_VERSION)}"
39
- end
40
- end
41
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Engine
4
+ module Debugging
5
+
6
+ # Hit a breakpoint within the context of where the breakpoint is defined, assuming a block is passed
7
+ # with a `binding.pry` (or an alternative debugger), otherwise hit a breakpoint within this method.
8
+ def self.breakpoint(&block)
9
+ orig_fullscreen = Window.full_screen?
10
+ if orig_fullscreen
11
+ Window.set_to_windowed
12
+ GLFW.PollEvents # Required to trigger the switch from fullscreen to windowed within this breakpoint
13
+ end
14
+
15
+ orig_cursor_mode = Cursor.get_input_mode
16
+ Cursor.enable
17
+
18
+ block_given? ? yield : binding.pry
19
+ Cursor.restore_input_mode(orig_cursor_mode)
20
+ Window.set_to_full_screen if orig_fullscreen
21
+ Window.focus_window
22
+
23
+ # Reset the time, otherwise delta_time will be off for the next frame, and teleporting occurs
24
+ @time = Time.now
25
+ end
26
+
27
+ def self.debug_opengl_call
28
+ errors = []
29
+ until GL.GetError == 0; end
30
+ yield
31
+ until (error = GL.GetError) == 0
32
+ errors += error.to_s(16)
33
+ end
34
+ end
35
+
36
+ def self.print_opengl_version
37
+ puts "OpenGL Version: #{GL.GetString(GL::VERSION)}"
38
+ puts "GLSL Version: #{GL.GetString(GL::SHADING_LANGUAGE_VERSION)}"
39
+ end
40
+ end
41
+ end
data/lib/engine/engine.rb CHANGED
@@ -1,131 +1,131 @@
1
- # frozen_string_literal: true
2
-
3
- GAME_DIR = File.expand_path(File.dirname($PROGRAM_NAME))
4
-
5
- module Engine
6
- def self.start(&first_frame_block)
7
- Engine::AutoLoader.load
8
- return if ENV["BUILDING"] == "true"
9
-
10
- open_window
11
- main_game_loop(&first_frame_block)
12
- terminate
13
- end
14
-
15
- def self.engine_started?
16
- @engine_started
17
- end
18
-
19
- def self.open_window
20
- @old_time = Time.now
21
- @time = Time.now
22
-
23
- Window.create_window
24
- GLFW.MakeContextCurrent(Window.window)
25
-
26
- Input.init
27
- GL.load_lib
28
-
29
- set_opengl_blend_mode
30
- @engine_started = true
31
- GL.ClearColor(0.0, 0.0, 0.0, 1.0)
32
-
33
- GL.Enable(GL::CULL_FACE)
34
- GL.CullFace(GL::BACK)
35
-
36
- GLFW.SwapInterval(0)
37
- end
38
-
39
- def self.main_game_loop(&first_frame_block)
40
- @game_stopped = false
41
- @old_time = Time.now
42
- @time = Time.now
43
- @fps = 0
44
- Window.get_framebuffer_size
45
- GL.Clear(GL::COLOR_BUFFER_BIT | GL::DEPTH_BUFFER_BIT)
46
-
47
- until GLFW.WindowShouldClose(Window.window) == GLFW::TRUE || @game_stopped
48
- if first_frame_block
49
- first_frame_block.call
50
- first_frame_block = nil
51
- end
52
-
53
- @old_time = @time || Time.now
54
- @time = Time.now
55
- delta_time = @time - @old_time
56
-
57
- print_fps(delta_time)
58
- Physics::PhysicsResolver.resolve
59
- GameObject.update_all(delta_time)
60
-
61
- @swap_buffers_promise.wait! if @swap_buffers_promise
62
- GL.Clear(GL::COLOR_BUFFER_BIT | GL::DEPTH_BUFFER_BIT)
63
- GL.Enable(GL::DEPTH_TEST)
64
- GL.DepthFunc(GL::LESS)
65
-
66
- Rendering::RenderPipeline.draw unless @game_stopped
67
- GL.Disable(GL::DEPTH_TEST)
68
- GameObject.render_ui(delta_time)
69
-
70
- if Screenshoter.scheduled_screenshot
71
- Screenshoter.take_screenshot
72
- end
73
-
74
- Window.get_framebuffer_size
75
-
76
- if OS.windows?
77
- GLFW.SwapBuffers(Window.window)
78
- else
79
- @swap_buffers_promise = Concurrent::Promise.new do
80
- GLFW.SwapBuffers(Window.window)
81
- end
82
- @swap_buffers_promise.execute
83
- end
84
-
85
- Engine::Input.update_key_states
86
- GLFW.PollEvents
87
- end
88
- end
89
-
90
- def self.fps
91
- @fps
92
- end
93
-
94
- def self.close
95
- GameObject.destroy_all
96
- Component.erase_destroyed_components
97
- GameObject.erase_destroyed_objects
98
- GLFW.SetWindowShouldClose(Window.window, 1)
99
- end
100
-
101
- def self.stop_game
102
- @game_stopped = true
103
- @swap_buffers_promise.wait! if @swap_buffers_promise && !@swap_buffers_promise.complete?
104
- GameObject.destroy_all
105
- Component.erase_destroyed_components
106
- GameObject.erase_destroyed_objects
107
- end
108
-
109
- private
110
-
111
- def self.terminate
112
- GLFW.DestroyWindow(Window.window)
113
- GLFW.Terminate
114
- end
115
-
116
- def self.print_fps(delta_time)
117
- @time_since_last_fps_print = (@time_since_last_fps_print || 0) + delta_time
118
- @frame = (@frame || 0) + 1
119
- if @time_since_last_fps_print > 1
120
- @fps = @frame / @time_since_last_fps_print
121
- puts "FPS: #{@fps}"
122
- @time_since_last_fps_print = 0
123
- @frame = 0
124
- end
125
- end
126
-
127
- def self.set_opengl_blend_mode
128
- GL.Enable(GL::BLEND)
129
- GL.BlendFunc(GL::SRC_ALPHA, GL::ONE_MINUS_SRC_ALPHA)
130
- end
131
- end
1
+ # frozen_string_literal: true
2
+
3
+ GAME_DIR = File.expand_path(File.dirname($PROGRAM_NAME))
4
+
5
+ module Engine
6
+ def self.start(&first_frame_block)
7
+ Engine::AutoLoader.load
8
+ return if ENV["BUILDING"] == "true"
9
+
10
+ open_window
11
+ main_game_loop(&first_frame_block)
12
+ terminate
13
+ end
14
+
15
+ def self.engine_started?
16
+ @engine_started
17
+ end
18
+
19
+ def self.open_window
20
+ @old_time = Time.now
21
+ @time = Time.now
22
+
23
+ Window.create_window
24
+ GLFW.MakeContextCurrent(Window.window)
25
+
26
+ Input.init
27
+ GL.load_lib
28
+
29
+ set_opengl_blend_mode
30
+ @engine_started = true
31
+ GL.ClearColor(0.0, 0.0, 0.0, 1.0)
32
+
33
+ GL.Enable(GL::CULL_FACE)
34
+ GL.CullFace(GL::BACK)
35
+
36
+ GLFW.SwapInterval(0)
37
+ end
38
+
39
+ def self.main_game_loop(&first_frame_block)
40
+ @game_stopped = false
41
+ @old_time = Time.now
42
+ @time = Time.now
43
+ @fps = 0
44
+ Window.get_framebuffer_size
45
+ GL.Clear(GL::COLOR_BUFFER_BIT | GL::DEPTH_BUFFER_BIT)
46
+
47
+ until GLFW.WindowShouldClose(Window.window) == GLFW::TRUE || @game_stopped
48
+ if first_frame_block
49
+ first_frame_block.call
50
+ first_frame_block = nil
51
+ end
52
+
53
+ @old_time = @time || Time.now
54
+ @time = Time.now
55
+ delta_time = @time - @old_time
56
+
57
+ print_fps(delta_time)
58
+ Physics::PhysicsResolver.resolve
59
+ GameObject.update_all(delta_time)
60
+
61
+ @swap_buffers_promise.wait! if @swap_buffers_promise
62
+ GL.Clear(GL::COLOR_BUFFER_BIT | GL::DEPTH_BUFFER_BIT)
63
+ GL.Enable(GL::DEPTH_TEST)
64
+ GL.DepthFunc(GL::LESS)
65
+
66
+ Rendering::RenderPipeline.draw unless @game_stopped
67
+ GL.Disable(GL::DEPTH_TEST)
68
+ GameObject.render_ui(delta_time)
69
+
70
+ if Screenshoter.scheduled_screenshot
71
+ Screenshoter.take_screenshot
72
+ end
73
+
74
+ Window.get_framebuffer_size
75
+
76
+ if OS.windows?
77
+ GLFW.SwapBuffers(Window.window)
78
+ else
79
+ @swap_buffers_promise = Concurrent::Promise.new do
80
+ GLFW.SwapBuffers(Window.window)
81
+ end
82
+ @swap_buffers_promise.execute
83
+ end
84
+
85
+ Engine::Input.update_key_states
86
+ GLFW.PollEvents
87
+ end
88
+ end
89
+
90
+ def self.fps
91
+ @fps
92
+ end
93
+
94
+ def self.close
95
+ GameObject.destroy_all
96
+ Component.erase_destroyed_components
97
+ GameObject.erase_destroyed_objects
98
+ GLFW.SetWindowShouldClose(Window.window, 1)
99
+ end
100
+
101
+ def self.stop_game
102
+ @game_stopped = true
103
+ @swap_buffers_promise.wait! if @swap_buffers_promise && !@swap_buffers_promise.complete?
104
+ GameObject.destroy_all
105
+ Component.erase_destroyed_components
106
+ GameObject.erase_destroyed_objects
107
+ end
108
+
109
+ private
110
+
111
+ def self.terminate
112
+ GLFW.DestroyWindow(Window.window)
113
+ GLFW.Terminate
114
+ end
115
+
116
+ def self.print_fps(delta_time)
117
+ @time_since_last_fps_print = (@time_since_last_fps_print || 0) + delta_time
118
+ @frame = (@frame || 0) + 1
119
+ if @time_since_last_fps_print > 1
120
+ @fps = @frame / @time_since_last_fps_print
121
+ puts "FPS: #{@fps}"
122
+ @time_since_last_fps_print = 0
123
+ @frame = 0
124
+ end
125
+ end
126
+
127
+ def self.set_opengl_blend_mode
128
+ GL.Enable(GL::BLEND)
129
+ GL.BlendFunc(GL::SRC_ALPHA, GL::ONE_MINUS_SRC_ALPHA)
130
+ end
131
+ end
data/lib/engine/font.rb CHANGED
@@ -1,74 +1,74 @@
1
- # frozen_string_literal: true
2
-
3
- require "json"
4
-
5
- module Engine
6
- class Font
7
- TEXTURE_SIZE = 1024
8
- GLYPH_COUNT = 16
9
- CELL_SIZE = TEXTURE_SIZE / GLYPH_COUNT
10
-
11
- def initialize(font_file_path)
12
- @font_file_path = font_file_path
13
- end
14
-
15
- def texture
16
- @texture ||=
17
- begin
18
- path = File.join("_imported", @font_file_path.gsub(".ttf", ".png"))
19
- Engine::Texture.for(path)
20
- end
21
- end
22
-
23
- def vertex_data(string)
24
- text_indices = string_indices(string)
25
- offsets = string_offsets(string)
26
- text_indices.zip(offsets).flatten
27
- end
28
-
29
- def string_indices(string)
30
- string.chars.reject{|c| c == "\n"}.map { |char| index_table[char] }
31
- end
32
-
33
- def string_offsets(string)
34
- offsets = []
35
- scale_factor = 1 / (1024.0 * 2)
36
- horizontal_offset = 0.0
37
- vertical_offset = 0.0
38
- font_path = File.expand_path(File.join(GAME_DIR, "_imported", @font_file_path.gsub(".ttf", ".json")))
39
- font_metrics = JSON.parse File.read(font_path)
40
- string.chars.each do |char|
41
- if char == "\n"
42
- vertical_offset -= 1.0
43
- horizontal_offset = 0.0
44
- next
45
- end
46
- offsets << [horizontal_offset, vertical_offset]
47
- horizontal_offset += 30 * scale_factor * font_metrics[index_table[char].to_s]["width"]
48
- end
49
- offsets
50
- end
51
-
52
- private
53
-
54
- def character(index)
55
- (index + 1).chr
56
- end
57
-
58
- def index_table
59
- @index_table ||=
60
- begin
61
- hash = {}
62
- GLYPH_COUNT.times do |x|
63
- GLYPH_COUNT.times.each do |y|
64
- index = x * GLYPH_COUNT + y
65
- next if index >= 255
66
- character = character(index)
67
- hash[character] = index
68
- end
69
- end
70
- hash
71
- end
72
- end
73
- end
74
- end
1
+ # frozen_string_literal: true
2
+
3
+ require "json"
4
+
5
+ module Engine
6
+ class Font
7
+ TEXTURE_SIZE = 1024
8
+ GLYPH_COUNT = 16
9
+ CELL_SIZE = TEXTURE_SIZE / GLYPH_COUNT
10
+
11
+ def initialize(font_file_path)
12
+ @font_file_path = font_file_path
13
+ end
14
+
15
+ def texture
16
+ @texture ||=
17
+ begin
18
+ path = File.join("_imported", @font_file_path.gsub(".ttf", ".png"))
19
+ Engine::Texture.for(path)
20
+ end
21
+ end
22
+
23
+ def vertex_data(string)
24
+ text_indices = string_indices(string)
25
+ offsets = string_offsets(string)
26
+ text_indices.zip(offsets).flatten
27
+ end
28
+
29
+ def string_indices(string)
30
+ string.chars.reject{|c| c == "\n"}.map { |char| index_table[char] }
31
+ end
32
+
33
+ def string_offsets(string)
34
+ offsets = []
35
+ scale_factor = 1 / (1024.0 * 2)
36
+ horizontal_offset = 0.0
37
+ vertical_offset = 0.0
38
+ font_path = File.expand_path(File.join(GAME_DIR, "_imported", @font_file_path.gsub(".ttf", ".json")))
39
+ font_metrics = JSON.parse File.read(font_path)
40
+ string.chars.each do |char|
41
+ if char == "\n"
42
+ vertical_offset -= 1.0
43
+ horizontal_offset = 0.0
44
+ next
45
+ end
46
+ offsets << [horizontal_offset, vertical_offset]
47
+ horizontal_offset += 30 * scale_factor * font_metrics[index_table[char].to_s]["width"]
48
+ end
49
+ offsets
50
+ end
51
+
52
+ private
53
+
54
+ def character(index)
55
+ (index + 1).chr
56
+ end
57
+
58
+ def index_table
59
+ @index_table ||=
60
+ begin
61
+ hash = {}
62
+ GLYPH_COUNT.times do |x|
63
+ GLYPH_COUNT.times.each do |y|
64
+ index = x * GLYPH_COUNT + y
65
+ next if index >= 255
66
+ character = character(index)
67
+ hash[character] = index
68
+ end
69
+ end
70
+ hash
71
+ end
72
+ end
73
+ end
74
+ end