ruby_rpg 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (483) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +19 -0
  3. data/glfw-3.3.9.bin.MACOS/LICENSE.md +23 -0
  4. data/glfw-3.3.9.bin.MACOS/README.md +5 -0
  5. data/glfw-3.3.9.bin.MACOS/docs/html/bc_s.png +0 -0
  6. data/glfw-3.3.9.bin.MACOS/docs/html/bc_sd.png +0 -0
  7. data/glfw-3.3.9.bin.MACOS/docs/html/build_8dox.html +81 -0
  8. data/glfw-3.3.9.bin.MACOS/docs/html/build_guide.html +199 -0
  9. data/glfw-3.3.9.bin.MACOS/docs/html/closed.png +0 -0
  10. data/glfw-3.3.9.bin.MACOS/docs/html/compat_8dox.html +81 -0
  11. data/glfw-3.3.9.bin.MACOS/docs/html/compat_guide.html +153 -0
  12. data/glfw-3.3.9.bin.MACOS/docs/html/compile_8dox.html +81 -0
  13. data/glfw-3.3.9.bin.MACOS/docs/html/compile_guide.html +223 -0
  14. data/glfw-3.3.9.bin.MACOS/docs/html/context_8dox.html +81 -0
  15. data/glfw-3.3.9.bin.MACOS/docs/html/context_guide.html +259 -0
  16. data/glfw-3.3.9.bin.MACOS/docs/html/deprecated.html +88 -0
  17. data/glfw-3.3.9.bin.MACOS/docs/html/dir_08423ce7729c4554356a7de7171ba263.html +85 -0
  18. data/glfw-3.3.9.bin.MACOS/docs/html/dir_2dcebcdf14b42e92a6ed85c61bda6b9d.html +93 -0
  19. data/glfw-3.3.9.bin.MACOS/docs/html/dir_62ce056722ee97c199075aa1d6eca309.html +95 -0
  20. data/glfw-3.3.9.bin.MACOS/docs/html/dir_dddf4cf62655095a666cf715de3a31a2.html +91 -0
  21. data/glfw-3.3.9.bin.MACOS/docs/html/doc.svg +12 -0
  22. data/glfw-3.3.9.bin.MACOS/docs/html/docd.svg +12 -0
  23. data/glfw-3.3.9.bin.MACOS/docs/html/doxygen.css +1685 -0
  24. data/glfw-3.3.9.bin.MACOS/docs/html/doxygen.svg +28 -0
  25. data/glfw-3.3.9.bin.MACOS/docs/html/dynsections.js +192 -0
  26. data/glfw-3.3.9.bin.MACOS/docs/html/extra.css +1 -0
  27. data/glfw-3.3.9.bin.MACOS/docs/html/files.html +91 -0
  28. data/glfw-3.3.9.bin.MACOS/docs/html/folderclosed.svg +11 -0
  29. data/glfw-3.3.9.bin.MACOS/docs/html/folderclosedd.svg +11 -0
  30. data/glfw-3.3.9.bin.MACOS/docs/html/folderopen.svg +17 -0
  31. data/glfw-3.3.9.bin.MACOS/docs/html/folderopend.svg +12 -0
  32. data/glfw-3.3.9.bin.MACOS/docs/html/glfw3_8h.html +1661 -0
  33. data/glfw-3.3.9.bin.MACOS/docs/html/glfw3_8h_source.html +1175 -0
  34. data/glfw-3.3.9.bin.MACOS/docs/html/glfw3native_8h.html +167 -0
  35. data/glfw-3.3.9.bin.MACOS/docs/html/glfw3native_8h_source.html +303 -0
  36. data/glfw-3.3.9.bin.MACOS/docs/html/group__buttons.html +282 -0
  37. data/glfw-3.3.9.bin.MACOS/docs/html/group__context.html +304 -0
  38. data/glfw-3.3.9.bin.MACOS/docs/html/group__errors.html +304 -0
  39. data/glfw-3.3.9.bin.MACOS/docs/html/group__gamepad__axes.html +202 -0
  40. data/glfw-3.3.9.bin.MACOS/docs/html/group__gamepad__buttons.html +410 -0
  41. data/glfw-3.3.9.bin.MACOS/docs/html/group__hat__state.html +234 -0
  42. data/glfw-3.3.9.bin.MACOS/docs/html/group__init.html +570 -0
  43. data/glfw-3.3.9.bin.MACOS/docs/html/group__input.html +2255 -0
  44. data/glfw-3.3.9.bin.MACOS/docs/html/group__joysticks.html +362 -0
  45. data/glfw-3.3.9.bin.MACOS/docs/html/group__keys.html +2034 -0
  46. data/glfw-3.3.9.bin.MACOS/docs/html/group__mods.html +198 -0
  47. data/glfw-3.3.9.bin.MACOS/docs/html/group__monitor.html +848 -0
  48. data/glfw-3.3.9.bin.MACOS/docs/html/group__native.html +812 -0
  49. data/glfw-3.3.9.bin.MACOS/docs/html/group__shapes.html +198 -0
  50. data/glfw-3.3.9.bin.MACOS/docs/html/group__vulkan.html +359 -0
  51. data/glfw-3.3.9.bin.MACOS/docs/html/group__window.html +3434 -0
  52. data/glfw-3.3.9.bin.MACOS/docs/html/index.html +100 -0
  53. data/glfw-3.3.9.bin.MACOS/docs/html/input_8dox.html +81 -0
  54. data/glfw-3.3.9.bin.MACOS/docs/html/input_guide.html +570 -0
  55. data/glfw-3.3.9.bin.MACOS/docs/html/internal_8dox.html +81 -0
  56. data/glfw-3.3.9.bin.MACOS/docs/html/internals_guide.html +132 -0
  57. data/glfw-3.3.9.bin.MACOS/docs/html/intro_8dox.html +81 -0
  58. data/glfw-3.3.9.bin.MACOS/docs/html/intro_guide.html +351 -0
  59. data/glfw-3.3.9.bin.MACOS/docs/html/jquery.js +34 -0
  60. data/glfw-3.3.9.bin.MACOS/docs/html/main_8dox.html +81 -0
  61. data/glfw-3.3.9.bin.MACOS/docs/html/menu.js +136 -0
  62. data/glfw-3.3.9.bin.MACOS/docs/html/menudata.js +29 -0
  63. data/glfw-3.3.9.bin.MACOS/docs/html/minus.svg +8 -0
  64. data/glfw-3.3.9.bin.MACOS/docs/html/minusd.svg +8 -0
  65. data/glfw-3.3.9.bin.MACOS/docs/html/monitor_8dox.html +81 -0
  66. data/glfw-3.3.9.bin.MACOS/docs/html/monitor_guide.html +229 -0
  67. data/glfw-3.3.9.bin.MACOS/docs/html/moving_8dox.html +81 -0
  68. data/glfw-3.3.9.bin.MACOS/docs/html/moving_guide.html +374 -0
  69. data/glfw-3.3.9.bin.MACOS/docs/html/nav_f.png +0 -0
  70. data/glfw-3.3.9.bin.MACOS/docs/html/nav_fd.png +0 -0
  71. data/glfw-3.3.9.bin.MACOS/docs/html/nav_g.png +0 -0
  72. data/glfw-3.3.9.bin.MACOS/docs/html/nav_h.png +0 -0
  73. data/glfw-3.3.9.bin.MACOS/docs/html/nav_hd.png +0 -0
  74. data/glfw-3.3.9.bin.MACOS/docs/html/news.html +634 -0
  75. data/glfw-3.3.9.bin.MACOS/docs/html/news_8dox.html +81 -0
  76. data/glfw-3.3.9.bin.MACOS/docs/html/open.png +0 -0
  77. data/glfw-3.3.9.bin.MACOS/docs/html/pages.html +99 -0
  78. data/glfw-3.3.9.bin.MACOS/docs/html/plus.svg +9 -0
  79. data/glfw-3.3.9.bin.MACOS/docs/html/plusd.svg +9 -0
  80. data/glfw-3.3.9.bin.MACOS/docs/html/quick_8dox.html +81 -0
  81. data/glfw-3.3.9.bin.MACOS/docs/html/quick_guide.html +397 -0
  82. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_0.js +5 -0
  83. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_1.js +4 -0
  84. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_10.js +65 -0
  85. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_11.js +26 -0
  86. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_12.js +44 -0
  87. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_13.js +34 -0
  88. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_14.js +12 -0
  89. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_15.js +52 -0
  90. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_16.js +69 -0
  91. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_17.js +51 -0
  92. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_18.js +14 -0
  93. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_19.js +36 -0
  94. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_1a.js +98 -0
  95. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_1b.js +12 -0
  96. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_2.js +6 -0
  97. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_3.js +9 -0
  98. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_4.js +57 -0
  99. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_5.js +22 -0
  100. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_6.js +103 -0
  101. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_7.js +23 -0
  102. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_8.js +35 -0
  103. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_9.js +63 -0
  104. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_a.js +505 -0
  105. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_b.js +24 -0
  106. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_c.js +50 -0
  107. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_d.js +17 -0
  108. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_e.js +12 -0
  109. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_f.js +35 -0
  110. data/glfw-3.3.9.bin.MACOS/docs/html/search/classes_0.js +7 -0
  111. data/glfw-3.3.9.bin.MACOS/docs/html/search/close.svg +18 -0
  112. data/glfw-3.3.9.bin.MACOS/docs/html/search/defines_0.js +34 -0
  113. data/glfw-3.3.9.bin.MACOS/docs/html/search/files_0.js +4 -0
  114. data/glfw-3.3.9.bin.MACOS/docs/html/search/files_1.js +6 -0
  115. data/glfw-3.3.9.bin.MACOS/docs/html/search/files_2.js +5 -0
  116. data/glfw-3.3.9.bin.MACOS/docs/html/search/files_3.js +6 -0
  117. data/glfw-3.3.9.bin.MACOS/docs/html/search/files_4.js +6 -0
  118. data/glfw-3.3.9.bin.MACOS/docs/html/search/files_5.js +4 -0
  119. data/glfw-3.3.9.bin.MACOS/docs/html/search/files_6.js +4 -0
  120. data/glfw-3.3.9.bin.MACOS/docs/html/search/files_7.js +4 -0
  121. data/glfw-3.3.9.bin.MACOS/docs/html/search/files_8.js +4 -0
  122. data/glfw-3.3.9.bin.MACOS/docs/html/search/functions_0.js +146 -0
  123. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_0.js +6 -0
  124. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_1.js +4 -0
  125. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_10.js +4 -0
  126. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_2.js +6 -0
  127. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_3.js +5 -0
  128. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_4.js +4 -0
  129. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_5.js +5 -0
  130. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_6.js +4 -0
  131. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_7.js +5 -0
  132. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_8.js +5 -0
  133. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_9.js +6 -0
  134. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_a.js +6 -0
  135. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_b.js +4 -0
  136. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_c.js +4 -0
  137. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_d.js +7 -0
  138. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_e.js +4 -0
  139. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_f.js +5 -0
  140. data/glfw-3.3.9.bin.MACOS/docs/html/search/mag.svg +24 -0
  141. data/glfw-3.3.9.bin.MACOS/docs/html/search/mag_d.svg +24 -0
  142. data/glfw-3.3.9.bin.MACOS/docs/html/search/mag_sel.svg +31 -0
  143. data/glfw-3.3.9.bin.MACOS/docs/html/search/mag_seld.svg +31 -0
  144. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_0.js +4 -0
  145. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_1.js +4 -0
  146. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_10.js +4 -0
  147. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_2.js +5 -0
  148. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_3.js +4 -0
  149. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_4.js +6 -0
  150. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_5.js +4 -0
  151. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_6.js +4 -0
  152. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_7.js +7 -0
  153. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_8.js +6 -0
  154. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_9.js +4 -0
  155. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_a.js +5 -0
  156. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_b.js +5 -0
  157. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_c.js +4 -0
  158. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_d.js +6 -0
  159. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_e.js +6 -0
  160. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_f.js +4 -0
  161. data/glfw-3.3.9.bin.MACOS/docs/html/search/search.css +291 -0
  162. data/glfw-3.3.9.bin.MACOS/docs/html/search/search.js +840 -0
  163. data/glfw-3.3.9.bin.MACOS/docs/html/search/searchdata.js +39 -0
  164. data/glfw-3.3.9.bin.MACOS/docs/html/search/typedefs_0.js +32 -0
  165. data/glfw-3.3.9.bin.MACOS/docs/html/search/variables_0.js +4 -0
  166. data/glfw-3.3.9.bin.MACOS/docs/html/search/variables_1.js +6 -0
  167. data/glfw-3.3.9.bin.MACOS/docs/html/search/variables_2.js +5 -0
  168. data/glfw-3.3.9.bin.MACOS/docs/html/search/variables_3.js +4 -0
  169. data/glfw-3.3.9.bin.MACOS/docs/html/search/variables_4.js +4 -0
  170. data/glfw-3.3.9.bin.MACOS/docs/html/search/variables_5.js +6 -0
  171. data/glfw-3.3.9.bin.MACOS/docs/html/search/variables_6.js +4 -0
  172. data/glfw-3.3.9.bin.MACOS/docs/html/search/variables_7.js +4 -0
  173. data/glfw-3.3.9.bin.MACOS/docs/html/spaces.svg +877 -0
  174. data/glfw-3.3.9.bin.MACOS/docs/html/splitbar.png +0 -0
  175. data/glfw-3.3.9.bin.MACOS/docs/html/splitbard.png +0 -0
  176. data/glfw-3.3.9.bin.MACOS/docs/html/struct_g_l_f_wgamepadstate.html +134 -0
  177. data/glfw-3.3.9.bin.MACOS/docs/html/struct_g_l_f_wgammaramp.html +170 -0
  178. data/glfw-3.3.9.bin.MACOS/docs/html/struct_g_l_f_wimage.html +151 -0
  179. data/glfw-3.3.9.bin.MACOS/docs/html/struct_g_l_f_wvidmode.html +204 -0
  180. data/glfw-3.3.9.bin.MACOS/docs/html/sync_off.png +0 -0
  181. data/glfw-3.3.9.bin.MACOS/docs/html/sync_on.png +0 -0
  182. data/glfw-3.3.9.bin.MACOS/docs/html/tab_a.png +0 -0
  183. data/glfw-3.3.9.bin.MACOS/docs/html/tab_ad.png +0 -0
  184. data/glfw-3.3.9.bin.MACOS/docs/html/tab_b.png +0 -0
  185. data/glfw-3.3.9.bin.MACOS/docs/html/tab_bd.png +0 -0
  186. data/glfw-3.3.9.bin.MACOS/docs/html/tab_h.png +0 -0
  187. data/glfw-3.3.9.bin.MACOS/docs/html/tab_hd.png +0 -0
  188. data/glfw-3.3.9.bin.MACOS/docs/html/tab_s.png +0 -0
  189. data/glfw-3.3.9.bin.MACOS/docs/html/tab_sd.png +0 -0
  190. data/glfw-3.3.9.bin.MACOS/docs/html/tabs.css +1 -0
  191. data/glfw-3.3.9.bin.MACOS/docs/html/vulkan_8dox.html +81 -0
  192. data/glfw-3.3.9.bin.MACOS/docs/html/vulkan_guide.html +196 -0
  193. data/glfw-3.3.9.bin.MACOS/docs/html/window_8dox.html +81 -0
  194. data/glfw-3.3.9.bin.MACOS/docs/html/window_guide.html +763 -0
  195. data/glfw-3.3.9.bin.MACOS/include/GLFW/glfw3.h +5932 -0
  196. data/glfw-3.3.9.bin.MACOS/include/GLFW/glfw3native.h +634 -0
  197. data/glfw-3.3.9.bin.MACOS/lib-arm64/libglfw.3.dylib +0 -0
  198. data/glfw-3.3.9.bin.MACOS/lib-arm64/libglfw3.a +0 -0
  199. data/glfw-3.3.9.bin.MACOS/lib-universal/libglfw.3.dylib +0 -0
  200. data/glfw-3.3.9.bin.MACOS/lib-universal/libglfw3.a +0 -0
  201. data/glfw-3.3.9.bin.MACOS/lib-x86_64/libglfw.3.dylib +0 -0
  202. data/glfw-3.3.9.bin.MACOS/lib-x86_64/libglfw3.a +0 -0
  203. data/glfw-3.4.bin.WIN64/LICENSE.md +23 -0
  204. data/glfw-3.4.bin.WIN64/README.md +70 -0
  205. data/glfw-3.4.bin.WIN64/docs/html/bc_s.png +0 -0
  206. data/glfw-3.4.bin.WIN64/docs/html/bc_sd.png +0 -0
  207. data/glfw-3.4.bin.WIN64/docs/html/build_8md.html +81 -0
  208. data/glfw-3.4.bin.WIN64/docs/html/build_guide.html +217 -0
  209. data/glfw-3.4.bin.WIN64/docs/html/closed.png +0 -0
  210. data/glfw-3.4.bin.WIN64/docs/html/compat_8md.html +81 -0
  211. data/glfw-3.4.bin.WIN64/docs/html/compat_guide.html +156 -0
  212. data/glfw-3.4.bin.WIN64/docs/html/compile_8md.html +81 -0
  213. data/glfw-3.4.bin.WIN64/docs/html/compile_guide.html +219 -0
  214. data/glfw-3.4.bin.WIN64/docs/html/context_8md.html +81 -0
  215. data/glfw-3.4.bin.WIN64/docs/html/context_guide.html +258 -0
  216. data/glfw-3.4.bin.WIN64/docs/html/deprecated.html +88 -0
  217. data/glfw-3.4.bin.WIN64/docs/html/dir_13577e2d8b9423099662de029791bd7d.html +93 -0
  218. data/glfw-3.4.bin.WIN64/docs/html/dir_7f92719a7fe62e5b064f87d7a3c220b1.html +95 -0
  219. data/glfw-3.4.bin.WIN64/docs/html/dir_a788ef6c2b1e5b367804e0b6ccfd6f11.html +85 -0
  220. data/glfw-3.4.bin.WIN64/docs/html/dir_b11153cd0f4fd04a7564cc166f482635.html +91 -0
  221. data/glfw-3.4.bin.WIN64/docs/html/doc.svg +12 -0
  222. data/glfw-3.4.bin.WIN64/docs/html/docd.svg +12 -0
  223. data/glfw-3.4.bin.WIN64/docs/html/doxygen.css +1685 -0
  224. data/glfw-3.4.bin.WIN64/docs/html/doxygen.svg +28 -0
  225. data/glfw-3.4.bin.WIN64/docs/html/dynsections.js +192 -0
  226. data/glfw-3.4.bin.WIN64/docs/html/extra.css +2 -0
  227. data/glfw-3.4.bin.WIN64/docs/html/files.html +91 -0
  228. data/glfw-3.4.bin.WIN64/docs/html/folderclosed.svg +11 -0
  229. data/glfw-3.4.bin.WIN64/docs/html/folderclosedd.svg +11 -0
  230. data/glfw-3.4.bin.WIN64/docs/html/folderopen.svg +17 -0
  231. data/glfw-3.4.bin.WIN64/docs/html/folderopend.svg +12 -0
  232. data/glfw-3.4.bin.WIN64/docs/html/glfw3_8h.html +1910 -0
  233. data/glfw-3.4.bin.WIN64/docs/html/glfw3_8h_source.html +1260 -0
  234. data/glfw-3.4.bin.WIN64/docs/html/glfw3native_8h.html +170 -0
  235. data/glfw-3.4.bin.WIN64/docs/html/glfw3native_8h_source.html +306 -0
  236. data/glfw-3.4.bin.WIN64/docs/html/group__buttons.html +282 -0
  237. data/glfw-3.4.bin.WIN64/docs/html/group__context.html +304 -0
  238. data/glfw-3.4.bin.WIN64/docs/html/group__errors.html +384 -0
  239. data/glfw-3.4.bin.WIN64/docs/html/group__gamepad__axes.html +202 -0
  240. data/glfw-3.4.bin.WIN64/docs/html/group__gamepad__buttons.html +410 -0
  241. data/glfw-3.4.bin.WIN64/docs/html/group__hat__state.html +234 -0
  242. data/glfw-3.4.bin.WIN64/docs/html/group__init.html +1015 -0
  243. data/glfw-3.4.bin.WIN64/docs/html/group__input.html +2285 -0
  244. data/glfw-3.4.bin.WIN64/docs/html/group__joysticks.html +362 -0
  245. data/glfw-3.4.bin.WIN64/docs/html/group__keys.html +2034 -0
  246. data/glfw-3.4.bin.WIN64/docs/html/group__mods.html +198 -0
  247. data/glfw-3.4.bin.WIN64/docs/html/group__monitor.html +849 -0
  248. data/glfw-3.4.bin.WIN64/docs/html/group__native.html +837 -0
  249. data/glfw-3.4.bin.WIN64/docs/html/group__shapes.html +337 -0
  250. data/glfw-3.4.bin.WIN64/docs/html/group__vulkan.html +361 -0
  251. data/glfw-3.4.bin.WIN64/docs/html/group__window.html +3608 -0
  252. data/glfw-3.4.bin.WIN64/docs/html/index.html +100 -0
  253. data/glfw-3.4.bin.WIN64/docs/html/input_8md.html +81 -0
  254. data/glfw-3.4.bin.WIN64/docs/html/input_guide.html +576 -0
  255. data/glfw-3.4.bin.WIN64/docs/html/internal_8md.html +81 -0
  256. data/glfw-3.4.bin.WIN64/docs/html/internals_guide.html +135 -0
  257. data/glfw-3.4.bin.WIN64/docs/html/intro_8md.html +81 -0
  258. data/glfw-3.4.bin.WIN64/docs/html/intro_guide.html +429 -0
  259. data/glfw-3.4.bin.WIN64/docs/html/jquery.js +34 -0
  260. data/glfw-3.4.bin.WIN64/docs/html/main_8md.html +81 -0
  261. data/glfw-3.4.bin.WIN64/docs/html/menu.js +136 -0
  262. data/glfw-3.4.bin.WIN64/docs/html/menudata.js +30 -0
  263. data/glfw-3.4.bin.WIN64/docs/html/minus.svg +8 -0
  264. data/glfw-3.4.bin.WIN64/docs/html/minusd.svg +8 -0
  265. data/glfw-3.4.bin.WIN64/docs/html/monitor_8md.html +81 -0
  266. data/glfw-3.4.bin.WIN64/docs/html/monitor_guide.html +228 -0
  267. data/glfw-3.4.bin.WIN64/docs/html/moving_8md.html +81 -0
  268. data/glfw-3.4.bin.WIN64/docs/html/moving_guide.html +360 -0
  269. data/glfw-3.4.bin.WIN64/docs/html/nav_f.png +0 -0
  270. data/glfw-3.4.bin.WIN64/docs/html/nav_fd.png +0 -0
  271. data/glfw-3.4.bin.WIN64/docs/html/nav_g.png +0 -0
  272. data/glfw-3.4.bin.WIN64/docs/html/nav_h.png +0 -0
  273. data/glfw-3.4.bin.WIN64/docs/html/nav_hd.png +0 -0
  274. data/glfw-3.4.bin.WIN64/docs/html/news.html +336 -0
  275. data/glfw-3.4.bin.WIN64/docs/html/news_8md.html +81 -0
  276. data/glfw-3.4.bin.WIN64/docs/html/open.png +0 -0
  277. data/glfw-3.4.bin.WIN64/docs/html/pages.html +99 -0
  278. data/glfw-3.4.bin.WIN64/docs/html/plus.svg +9 -0
  279. data/glfw-3.4.bin.WIN64/docs/html/plusd.svg +9 -0
  280. data/glfw-3.4.bin.WIN64/docs/html/quick_8md.html +81 -0
  281. data/glfw-3.4.bin.WIN64/docs/html/quick_guide.html +406 -0
  282. data/glfw-3.4.bin.WIN64/docs/html/search/all_0.js +4 -0
  283. data/glfw-3.4.bin.WIN64/docs/html/search/all_1.js +4 -0
  284. data/glfw-3.4.bin.WIN64/docs/html/search/all_10.js +13 -0
  285. data/glfw-3.4.bin.WIN64/docs/html/search/all_11.js +11 -0
  286. data/glfw-3.4.bin.WIN64/docs/html/search/all_12.js +26 -0
  287. data/glfw-3.4.bin.WIN64/docs/html/search/all_13.js +51 -0
  288. data/glfw-3.4.bin.WIN64/docs/html/search/all_14.js +22 -0
  289. data/glfw-3.4.bin.WIN64/docs/html/search/all_15.js +35 -0
  290. data/glfw-3.4.bin.WIN64/docs/html/search/all_16.js +29 -0
  291. data/glfw-3.4.bin.WIN64/docs/html/search/all_17.js +8 -0
  292. data/glfw-3.4.bin.WIN64/docs/html/search/all_18.js +44 -0
  293. data/glfw-3.4.bin.WIN64/docs/html/search/all_19.js +60 -0
  294. data/glfw-3.4.bin.WIN64/docs/html/search/all_1a.js +39 -0
  295. data/glfw-3.4.bin.WIN64/docs/html/search/all_1b.js +8 -0
  296. data/glfw-3.4.bin.WIN64/docs/html/search/all_1c.js +32 -0
  297. data/glfw-3.4.bin.WIN64/docs/html/search/all_1d.js +84 -0
  298. data/glfw-3.4.bin.WIN64/docs/html/search/all_1e.js +13 -0
  299. data/glfw-3.4.bin.WIN64/docs/html/search/all_1f.js +4 -0
  300. data/glfw-3.4.bin.WIN64/docs/html/search/all_2.js +5 -0
  301. data/glfw-3.4.bin.WIN64/docs/html/search/all_3.js +4 -0
  302. data/glfw-3.4.bin.WIN64/docs/html/search/all_4.js +4 -0
  303. data/glfw-3.4.bin.WIN64/docs/html/search/all_5.js +4 -0
  304. data/glfw-3.4.bin.WIN64/docs/html/search/all_6.js +4 -0
  305. data/glfw-3.4.bin.WIN64/docs/html/search/all_7.js +58 -0
  306. data/glfw-3.4.bin.WIN64/docs/html/search/all_8.js +21 -0
  307. data/glfw-3.4.bin.WIN64/docs/html/search/all_9.js +82 -0
  308. data/glfw-3.4.bin.WIN64/docs/html/search/all_a.js +20 -0
  309. data/glfw-3.4.bin.WIN64/docs/html/search/all_b.js +26 -0
  310. data/glfw-3.4.bin.WIN64/docs/html/search/all_c.js +35 -0
  311. data/glfw-3.4.bin.WIN64/docs/html/search/all_d.js +555 -0
  312. data/glfw-3.4.bin.WIN64/docs/html/search/all_e.js +23 -0
  313. data/glfw-3.4.bin.WIN64/docs/html/search/all_f.js +40 -0
  314. data/glfw-3.4.bin.WIN64/docs/html/search/classes_0.js +8 -0
  315. data/glfw-3.4.bin.WIN64/docs/html/search/close.svg +18 -0
  316. data/glfw-3.4.bin.WIN64/docs/html/search/defines_0.js +43 -0
  317. data/glfw-3.4.bin.WIN64/docs/html/search/files_0.js +4 -0
  318. data/glfw-3.4.bin.WIN64/docs/html/search/files_1.js +6 -0
  319. data/glfw-3.4.bin.WIN64/docs/html/search/files_2.js +5 -0
  320. data/glfw-3.4.bin.WIN64/docs/html/search/files_3.js +6 -0
  321. data/glfw-3.4.bin.WIN64/docs/html/search/files_4.js +6 -0
  322. data/glfw-3.4.bin.WIN64/docs/html/search/files_5.js +4 -0
  323. data/glfw-3.4.bin.WIN64/docs/html/search/files_6.js +4 -0
  324. data/glfw-3.4.bin.WIN64/docs/html/search/files_7.js +4 -0
  325. data/glfw-3.4.bin.WIN64/docs/html/search/files_8.js +4 -0
  326. data/glfw-3.4.bin.WIN64/docs/html/search/functions_0.js +152 -0
  327. data/glfw-3.4.bin.WIN64/docs/html/search/groups_0.js +6 -0
  328. data/glfw-3.4.bin.WIN64/docs/html/search/groups_1.js +4 -0
  329. data/glfw-3.4.bin.WIN64/docs/html/search/groups_10.js +4 -0
  330. data/glfw-3.4.bin.WIN64/docs/html/search/groups_2.js +6 -0
  331. data/glfw-3.4.bin.WIN64/docs/html/search/groups_3.js +5 -0
  332. data/glfw-3.4.bin.WIN64/docs/html/search/groups_4.js +4 -0
  333. data/glfw-3.4.bin.WIN64/docs/html/search/groups_5.js +5 -0
  334. data/glfw-3.4.bin.WIN64/docs/html/search/groups_6.js +4 -0
  335. data/glfw-3.4.bin.WIN64/docs/html/search/groups_7.js +5 -0
  336. data/glfw-3.4.bin.WIN64/docs/html/search/groups_8.js +5 -0
  337. data/glfw-3.4.bin.WIN64/docs/html/search/groups_9.js +6 -0
  338. data/glfw-3.4.bin.WIN64/docs/html/search/groups_a.js +6 -0
  339. data/glfw-3.4.bin.WIN64/docs/html/search/groups_b.js +4 -0
  340. data/glfw-3.4.bin.WIN64/docs/html/search/groups_c.js +4 -0
  341. data/glfw-3.4.bin.WIN64/docs/html/search/groups_d.js +7 -0
  342. data/glfw-3.4.bin.WIN64/docs/html/search/groups_e.js +4 -0
  343. data/glfw-3.4.bin.WIN64/docs/html/search/groups_f.js +5 -0
  344. data/glfw-3.4.bin.WIN64/docs/html/search/mag.svg +24 -0
  345. data/glfw-3.4.bin.WIN64/docs/html/search/mag_d.svg +24 -0
  346. data/glfw-3.4.bin.WIN64/docs/html/search/mag_sel.svg +31 -0
  347. data/glfw-3.4.bin.WIN64/docs/html/search/mag_seld.svg +31 -0
  348. data/glfw-3.4.bin.WIN64/docs/html/search/pages_0.js +4 -0
  349. data/glfw-3.4.bin.WIN64/docs/html/search/pages_1.js +5 -0
  350. data/glfw-3.4.bin.WIN64/docs/html/search/pages_10.js +5 -0
  351. data/glfw-3.4.bin.WIN64/docs/html/search/pages_11.js +4 -0
  352. data/glfw-3.4.bin.WIN64/docs/html/search/pages_2.js +4 -0
  353. data/glfw-3.4.bin.WIN64/docs/html/search/pages_3.js +5 -0
  354. data/glfw-3.4.bin.WIN64/docs/html/search/pages_4.js +4 -0
  355. data/glfw-3.4.bin.WIN64/docs/html/search/pages_5.js +6 -0
  356. data/glfw-3.4.bin.WIN64/docs/html/search/pages_6.js +4 -0
  357. data/glfw-3.4.bin.WIN64/docs/html/search/pages_7.js +5 -0
  358. data/glfw-3.4.bin.WIN64/docs/html/search/pages_8.js +7 -0
  359. data/glfw-3.4.bin.WIN64/docs/html/search/pages_9.js +7 -0
  360. data/glfw-3.4.bin.WIN64/docs/html/search/pages_a.js +4 -0
  361. data/glfw-3.4.bin.WIN64/docs/html/search/pages_b.js +5 -0
  362. data/glfw-3.4.bin.WIN64/docs/html/search/pages_c.js +4 -0
  363. data/glfw-3.4.bin.WIN64/docs/html/search/pages_d.js +4 -0
  364. data/glfw-3.4.bin.WIN64/docs/html/search/pages_e.js +6 -0
  365. data/glfw-3.4.bin.WIN64/docs/html/search/pages_f.js +6 -0
  366. data/glfw-3.4.bin.WIN64/docs/html/search/search.css +291 -0
  367. data/glfw-3.4.bin.WIN64/docs/html/search/search.js +840 -0
  368. data/glfw-3.4.bin.WIN64/docs/html/search/searchdata.js +39 -0
  369. data/glfw-3.4.bin.WIN64/docs/html/search/typedefs_0.js +36 -0
  370. data/glfw-3.4.bin.WIN64/docs/html/search/variables_0.js +5 -0
  371. data/glfw-3.4.bin.WIN64/docs/html/search/variables_1.js +6 -0
  372. data/glfw-3.4.bin.WIN64/docs/html/search/variables_2.js +4 -0
  373. data/glfw-3.4.bin.WIN64/docs/html/search/variables_3.js +5 -0
  374. data/glfw-3.4.bin.WIN64/docs/html/search/variables_4.js +4 -0
  375. data/glfw-3.4.bin.WIN64/docs/html/search/variables_5.js +4 -0
  376. data/glfw-3.4.bin.WIN64/docs/html/search/variables_6.js +7 -0
  377. data/glfw-3.4.bin.WIN64/docs/html/search/variables_7.js +4 -0
  378. data/glfw-3.4.bin.WIN64/docs/html/search/variables_8.js +4 -0
  379. data/glfw-3.4.bin.WIN64/docs/html/search/variables_9.js +4 -0
  380. data/glfw-3.4.bin.WIN64/docs/html/spaces.svg +877 -0
  381. data/glfw-3.4.bin.WIN64/docs/html/splitbar.png +0 -0
  382. data/glfw-3.4.bin.WIN64/docs/html/splitbard.png +0 -0
  383. data/glfw-3.4.bin.WIN64/docs/html/struct_g_l_f_wallocator.html +168 -0
  384. data/glfw-3.4.bin.WIN64/docs/html/struct_g_l_f_wgamepadstate.html +134 -0
  385. data/glfw-3.4.bin.WIN64/docs/html/struct_g_l_f_wgammaramp.html +170 -0
  386. data/glfw-3.4.bin.WIN64/docs/html/struct_g_l_f_wimage.html +151 -0
  387. data/glfw-3.4.bin.WIN64/docs/html/struct_g_l_f_wvidmode.html +204 -0
  388. data/glfw-3.4.bin.WIN64/docs/html/sync_off.png +0 -0
  389. data/glfw-3.4.bin.WIN64/docs/html/sync_on.png +0 -0
  390. data/glfw-3.4.bin.WIN64/docs/html/tab_a.png +0 -0
  391. data/glfw-3.4.bin.WIN64/docs/html/tab_ad.png +0 -0
  392. data/glfw-3.4.bin.WIN64/docs/html/tab_b.png +0 -0
  393. data/glfw-3.4.bin.WIN64/docs/html/tab_bd.png +0 -0
  394. data/glfw-3.4.bin.WIN64/docs/html/tab_h.png +0 -0
  395. data/glfw-3.4.bin.WIN64/docs/html/tab_hd.png +0 -0
  396. data/glfw-3.4.bin.WIN64/docs/html/tab_s.png +0 -0
  397. data/glfw-3.4.bin.WIN64/docs/html/tab_sd.png +0 -0
  398. data/glfw-3.4.bin.WIN64/docs/html/tabs.css +1 -0
  399. data/glfw-3.4.bin.WIN64/docs/html/topics.html +101 -0
  400. data/glfw-3.4.bin.WIN64/docs/html/vulkan_8md.html +81 -0
  401. data/glfw-3.4.bin.WIN64/docs/html/vulkan_guide.html +206 -0
  402. data/glfw-3.4.bin.WIN64/docs/html/window_8md.html +81 -0
  403. data/glfw-3.4.bin.WIN64/docs/html/window_guide.html +806 -0
  404. data/glfw-3.4.bin.WIN64/include/GLFW/glfw3.h +6547 -0
  405. data/glfw-3.4.bin.WIN64/include/GLFW/glfw3native.h +663 -0
  406. data/glfw-3.4.bin.WIN64/lib-mingw-w64/glfw3.dll +0 -0
  407. data/glfw-3.4.bin.WIN64/lib-mingw-w64/libglfw3.a +0 -0
  408. data/glfw-3.4.bin.WIN64/lib-mingw-w64/libglfw3dll.a +0 -0
  409. data/glfw-3.4.bin.WIN64/lib-static-ucrt/glfw3.dll +0 -0
  410. data/glfw-3.4.bin.WIN64/lib-static-ucrt/glfw3dll.lib +0 -0
  411. data/glfw-3.4.bin.WIN64/lib-vc2013/glfw3.dll +0 -0
  412. data/glfw-3.4.bin.WIN64/lib-vc2013/glfw3.lib +0 -0
  413. data/glfw-3.4.bin.WIN64/lib-vc2013/glfw3_mt.lib +0 -0
  414. data/glfw-3.4.bin.WIN64/lib-vc2013/glfw3dll.lib +0 -0
  415. data/glfw-3.4.bin.WIN64/lib-vc2015/glfw3.dll +0 -0
  416. data/glfw-3.4.bin.WIN64/lib-vc2015/glfw3.lib +0 -0
  417. data/glfw-3.4.bin.WIN64/lib-vc2015/glfw3_mt.lib +0 -0
  418. data/glfw-3.4.bin.WIN64/lib-vc2015/glfw3dll.lib +0 -0
  419. data/glfw-3.4.bin.WIN64/lib-vc2017/glfw3.dll +0 -0
  420. data/glfw-3.4.bin.WIN64/lib-vc2017/glfw3.lib +0 -0
  421. data/glfw-3.4.bin.WIN64/lib-vc2017/glfw3_mt.lib +0 -0
  422. data/glfw-3.4.bin.WIN64/lib-vc2017/glfw3dll.lib +0 -0
  423. data/glfw-3.4.bin.WIN64/lib-vc2019/glfw3.dll +0 -0
  424. data/glfw-3.4.bin.WIN64/lib-vc2019/glfw3.lib +0 -0
  425. data/glfw-3.4.bin.WIN64/lib-vc2019/glfw3_mt.lib +0 -0
  426. data/glfw-3.4.bin.WIN64/lib-vc2019/glfw3dll.lib +0 -0
  427. data/glfw-3.4.bin.WIN64/lib-vc2022/glfw3.dll +0 -0
  428. data/glfw-3.4.bin.WIN64/lib-vc2022/glfw3.lib +0 -0
  429. data/glfw-3.4.bin.WIN64/lib-vc2022/glfw3_mt.lib +0 -0
  430. data/glfw-3.4.bin.WIN64/lib-vc2022/glfw3dll.lib +0 -0
  431. data/lib/build.bash +12 -0
  432. data/lib/engine/camera.rb +13 -0
  433. data/lib/engine/component.rb +48 -0
  434. data/lib/engine/components/direction_light.rb +23 -0
  435. data/lib/engine/components/font_renderer.rb +134 -0
  436. data/lib/engine/components/mesh_renderer.rb +31 -0
  437. data/lib/engine/components/orthographic_camera.rb +54 -0
  438. data/lib/engine/components/perspective_camera.rb +53 -0
  439. data/lib/engine/components/point_light.rb +24 -0
  440. data/lib/engine/components/sprite_renderer.rb +141 -0
  441. data/lib/engine/components/ui_font_renderer.rb +140 -0
  442. data/lib/engine/components/ui_sprite_renderer.rb +101 -0
  443. data/lib/engine/cursor.rb +43 -0
  444. data/lib/engine/engine.rb +221 -0
  445. data/lib/engine/font.rb +74 -0
  446. data/lib/engine/game_object.rb +198 -0
  447. data/lib/engine/importers/font_importer.rb +69 -0
  448. data/lib/engine/importers/obj_file.rb +244 -0
  449. data/lib/engine/importers/obj_importer.rb +33 -0
  450. data/lib/engine/input.rb +61 -0
  451. data/lib/engine/material.rb +79 -0
  452. data/lib/engine/mesh.rb +43 -0
  453. data/lib/engine/path.rb +92 -0
  454. data/lib/engine/physics/collision.rb +12 -0
  455. data/lib/engine/physics/components/cube_collider.rb +6 -0
  456. data/lib/engine/physics/components/rigidbody.rb +103 -0
  457. data/lib/engine/physics/components/sphere_collider.rb +93 -0
  458. data/lib/engine/physics/physics_resolver.rb +37 -0
  459. data/lib/engine/polygon_mesh.rb +45 -0
  460. data/lib/engine/quaternion.rb +228 -0
  461. data/lib/engine/rendering/instance_renderer.rb +153 -0
  462. data/lib/engine/rendering/render_pipeline.rb +35 -0
  463. data/lib/engine/screenshoter.rb +34 -0
  464. data/lib/engine/shader.rb +91 -0
  465. data/lib/engine/shaders/colour_frag.glsl +9 -0
  466. data/lib/engine/shaders/colour_vertex.glsl +14 -0
  467. data/lib/engine/shaders/mesh_frag.glsl +102 -0
  468. data/lib/engine/shaders/mesh_vertex.glsl +25 -0
  469. data/lib/engine/shaders/skybox_frag.glsl +12 -0
  470. data/lib/engine/shaders/skybox_vert.glsl +14 -0
  471. data/lib/engine/shaders/sprite_frag.glsl +17 -0
  472. data/lib/engine/shaders/sprite_vertex.glsl +16 -0
  473. data/lib/engine/shaders/text_frag.glsl +15 -0
  474. data/lib/engine/shaders/text_vertex.glsl +31 -0
  475. data/lib/engine/shaders/ui_sprite_frag.glsl +15 -0
  476. data/lib/engine/shaders/ui_sprite_vertex.glsl +16 -0
  477. data/lib/engine/shaders/vertex_lit_frag.glsl +89 -0
  478. data/lib/engine/shaders/vertex_lit_vertex.glsl +28 -0
  479. data/lib/engine/tangent_calculator.rb +42 -0
  480. data/lib/engine/texture.rb +52 -0
  481. data/lib/engine/video_mode.rb +37 -0
  482. data/lib/engine/window.rb +126 -0
  483. metadata +482 -1
@@ -0,0 +1,93 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Engine::Physics::Components
4
+ class SphereCollider < Engine::Component
5
+ attr_accessor :radius
6
+
7
+ def initialize(radius)
8
+ @radius = radius
9
+ end
10
+
11
+ def collision_for(other_collider)
12
+ distance = (game_object.pos - other_collider.game_object.pos).magnitude
13
+ min_distance = radius + other_collider.radius
14
+
15
+ return nil if distance >= min_distance
16
+
17
+ direction = (other_collider.game_object.pos - game_object.pos).normalize
18
+ collision_point = collision_point(direction, min_distance - distance)
19
+ magnitude = normal_impulse_magnitude(direction, other_collider, collision_point)
20
+
21
+ return nil if magnitude <= 0
22
+
23
+ normal_impulse = -direction * magnitude
24
+ tangential_impulse = tangential_impulse(other_collider, normal_impulse, collision_point)
25
+
26
+ puts "normal_impulse: #{normal_impulse}"
27
+ puts "tangential_impulse: #{tangential_impulse}"
28
+ puts "total impulse: #{normal_impulse + tangential_impulse}"
29
+
30
+ Engine::Physics::Collision.new(normal_impulse + tangential_impulse, collision_point)
31
+ end
32
+
33
+ def static?
34
+ rigidbody.nil?
35
+ end
36
+
37
+ def inverse_mass
38
+ 1.0 / rigidbody.mass
39
+ end
40
+
41
+ def velocity(pos)
42
+ rigidbody&.velocity_at_point(pos) || Vector[0, 0, 0]
43
+ end
44
+
45
+ def rigidbody
46
+ game_object.components.find { |c| c.is_a?(Rigidbody) }
47
+ end
48
+
49
+ private
50
+
51
+ def combined_coefficient_of_restitution(other_collider)
52
+ return rigidbody.coefficient_of_restitution if other_collider.static?
53
+
54
+ rigidbody.coefficient_of_restitution * other_collider.rigidbody.coefficient_of_restitution
55
+ end
56
+
57
+ def combined_coefficient_of_friction(other_collider)
58
+ return rigidbody.coefficient_of_friction if other_collider.static?
59
+
60
+ rigidbody.coefficient_of_friction * other_collider.rigidbody.coefficient_of_friction
61
+ end
62
+
63
+ def collision_point(direction, overlap)
64
+ game_object.pos + direction * (radius - overlap / 2)
65
+ end
66
+
67
+ def normal_impulse_magnitude(direction, other_collider, collision_point)
68
+ (
69
+ if other_collider.static?
70
+ v_r = velocity(collision_point)
71
+ (v_r.dot(direction) * 2) / inverse_mass
72
+ else
73
+ v_r = velocity(collision_point) - other_collider.velocity(collision_point)
74
+ (v_r.dot(direction) * 2) / (inverse_mass + other_collider.inverse_mass)
75
+ end) * combined_coefficient_of_restitution(other_collider)
76
+ end
77
+
78
+ def tangential_impulse(other_collider, normal_impulse, collision_point)
79
+ normal_direction = normal_impulse.normalize
80
+ v_t = if other_collider.static?
81
+ velocity(collision_point)
82
+ else
83
+ velocity(collision_point) - other_collider.velocity(collision_point)
84
+ end
85
+
86
+ v_t_without_normal = -((v_t - v_t.dot(normal_direction) * normal_direction))
87
+ return Vector[0, 0, 0] if v_t_without_normal.magnitude == 0
88
+
89
+ relevant_speed = [v_t_without_normal.magnitude, normal_impulse.magnitude * combined_coefficient_of_friction(other_collider)].min
90
+ v_t_without_normal.normalize * relevant_speed / 2
91
+ end
92
+ end
93
+ end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Engine::Physics
4
+ module PhysicsResolver
5
+ def self.resolve
6
+ rigidbodies.each do |rb|
7
+ apply_collisions(rb)
8
+ end
9
+ end
10
+
11
+ private
12
+
13
+ def self.apply_collisions(rigidbody)
14
+ other_colliders = colliders.reject { |c| rigidbody.colliders.include?(c) }
15
+
16
+ rigidbody.colliders.map do |collider|
17
+ other_colliders.map do |other_collider|
18
+ collider.collision_for(other_collider)
19
+ end.compact
20
+ end.flatten.each do |collision|
21
+ rigidbody.apply_impulse(collision.impulse, collision.point)
22
+ end
23
+ end
24
+
25
+ def self.rigidbodies
26
+ Engine::GameObject.objects.map do |go|
27
+ go.components.find { |c| c.is_a?(Engine::Physics::Components::Rigidbody) }
28
+ end.compact
29
+ end
30
+
31
+ def self.colliders
32
+ Engine::GameObject.objects.map do |go|
33
+ go.components.select { |c| c.is_a?(Components::SphereCollider) }
34
+ end.flatten
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Engine
4
+ class PolygonMesh
5
+ attr_reader :points, :uvs
6
+
7
+ def initialize(points, uvs)
8
+ @points = points
9
+ @uvs = uvs
10
+ end
11
+
12
+ def vertex_data
13
+ @vertex_data ||= generate_vertex_data
14
+ end
15
+
16
+ def index_data
17
+ @index_data ||= (0..vertices.length - 1).to_a
18
+ end
19
+
20
+ private
21
+
22
+ def generate_vertex_data
23
+ vertices.map do |point|
24
+ uv = uvs[points.index(point)]
25
+ [point[0], point[1], 0.0, uv[0], uv[1]]
26
+ end.flatten
27
+ end
28
+
29
+ def vertices
30
+ @vertices ||=
31
+ begin
32
+ path = Path.new(@points)
33
+ vertices = []
34
+ until path.length == 3
35
+ ear, new_path = path.find_ear
36
+ ear = ear.reverse!
37
+ vertices << ear
38
+ path = new_path
39
+ end
40
+ vertices += path.points.reverse
41
+ vertices.flatten(1)
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,228 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Engine
4
+ class Quaternion
5
+ EULER_ORDER = "XYZ"
6
+ attr_accessor :w, :x, :y, :z, :euler_order
7
+
8
+ def initialize(w, x, y, z)
9
+ @w = w
10
+ @x = x
11
+ @y = y
12
+ @z = z
13
+ end
14
+
15
+ def to_s
16
+ "Quaternion(w: #{@w}, x: #{@x}, y: #{@y}, z: #{@z})"
17
+ end
18
+
19
+ def *(other)
20
+ Quaternion.new(
21
+ @w * other.w - @x * other.x - @y * other.y - @z * other.z,
22
+ @w * other.x + @x * other.w + @y * other.z - @z * other.y,
23
+ @w * other.y - @x * other.z + @y * other.w + @z * other.x,
24
+ @w * other.z + @x * other.y - @y * other.x + @z * other.w
25
+ )
26
+ end
27
+
28
+ # taken from https://github.com/mrdoob/three.js/blob/134ff886792734a75c0a9b30aa816d19270f8526/src/math/Quaternion.js#L229
29
+ def self.from_euler(euler)
30
+ e_1 = euler[0] * Math::PI / 180
31
+ e_2 = euler[1] * Math::PI / 180
32
+ e_3 = euler[2] * Math::PI / 180
33
+
34
+ c_1 = Math.cos(e_1 / 2)
35
+ c_2 = Math.cos(e_2 / 2)
36
+ c_3 = Math.cos(e_3 / 2)
37
+
38
+ s_1 = Math.sin(e_1 / 2)
39
+ s_2 = Math.sin(e_2 / 2)
40
+ s_3 = Math.sin(e_3 / 2)
41
+
42
+ case EULER_ORDER
43
+ when "XYZ"
44
+ Quaternion.new(
45
+ c_1 * c_2 * c_3 - s_1 * s_2 * s_3,
46
+ s_1 * c_2 * c_3 + c_1 * s_2 * s_3,
47
+ c_1 * s_2 * c_3 - s_1 * c_2 * s_3,
48
+ c_1 * c_2 * s_3 + s_1 * s_2 * c_3
49
+ )
50
+ when "YXZ"
51
+ Quaternion.new(
52
+ c_1 * c_2 * c_3 + s_1 * s_2 * s_3,
53
+ s_1 * c_2 * c_3 + c_1 * s_2 * s_3,
54
+ c_1 * s_2 * c_3 - s_1 * c_2 * s_3,
55
+ c_1 * c_2 * s_3 - s_1 * s_2 * c_3
56
+ )
57
+ when "ZXY"
58
+ Quaternion.new(
59
+ c_1 * c_2 * c_3 - s_1 * s_2 * s_3,
60
+ s_1 * c_2 * c_3 - c_1 * s_2 * s_3,
61
+ c_1 * s_2 * c_3 + s_1 * c_2 * s_3,
62
+ c_1 * c_2 * s_3 + s_1 * s_2 * c_3
63
+ )
64
+ when "ZYX"
65
+ Quaternion.new(
66
+ c_1 * c_2 * c_3 + s_1 * s_2 * s_3,
67
+ s_1 * c_2 * c_3 - c_1 * s_2 * s_3,
68
+ c_1 * s_2 * c_3 + s_1 * c_2 * s_3,
69
+ c_1 * c_2 * s_3 - s_1 * s_2 * c_3
70
+ )
71
+ when "YZX"
72
+ Quaternion.new(
73
+ s_1 * c_2 * c_3 + c_1 * s_2 * s_3,
74
+ c_1 * s_2 * c_3 + s_1 * c_2 * s_3,
75
+ c_1 * c_2 * s_3 - s_1 * s_2 * c_3,
76
+ c_1 * c_2 * c_3 - s_1 * s_2 * s_3
77
+ )
78
+ when "XZY"
79
+ Quaternion.new(
80
+ c_1 * c_2 * c_3 + s_1 * s_2 * s_3,
81
+ s_1 * c_2 * c_3 - c_1 * s_2 * s_3,
82
+ c_1 * s_2 * c_3 - s_1 * c_2 * s_3,
83
+ c_1 * c_2 * s_3 + s_1 * s_2 * c_3
84
+ )
85
+ end
86
+ end
87
+
88
+ # taken from https://github.com/mrdoob/three.js/blob/134ff886792734a75c0a9b30aa816d19270f8526/src/math/Euler.js#L134
89
+ def to_euler
90
+ m11 = te[0]
91
+ m12 = te[4]
92
+ m13 = te[8]
93
+ m21 = te[1]
94
+ m22 = te[5]
95
+ m23 = te[9]
96
+ m31 = te[2]
97
+ m32 = te[6]
98
+ m33 = te[10]
99
+
100
+ case EULER_ORDER
101
+ when "XYZ"
102
+ e_y = Math.asin(m13.clamp(-1, 1))
103
+
104
+ if m13.abs < 0.9999999
105
+ e_x = Math.atan2(-m23, m33)
106
+ e_z = Math.atan2(-m12, m11)
107
+ else
108
+ e_x = Math.atan2(m32, m22)
109
+ e_z = 0
110
+ end
111
+ when "YXZ"
112
+ e_x = Math.asin(-m23.clamp(-1, 1))
113
+
114
+ if m23.abs < 0.9999999
115
+ e_y = Math.atan2(m13, m33)
116
+ e_z = Math.atan2(m21, m22)
117
+ else
118
+ e_y = Math.atan2(-m31, m11)
119
+ e_z = 0
120
+ end
121
+ when "ZXY"
122
+ e_x = Math.asin(m32.clamp(-1, 1))
123
+
124
+ if m32.abs < 0.9999999
125
+ e_y = Math.atan2(-m31, m33)
126
+ e_z = Math.atan2(-m12, m22)
127
+ else
128
+ e_y = 0
129
+ e_z = Math.atan2(m21, m11)
130
+ end
131
+ when "ZYX"
132
+ e_y = Math.asin(-m31.clamp(-1, 1))
133
+
134
+ if m31.abs < 0.9999999
135
+ e_x = Math.atan2(m32, m33)
136
+ e_z = Math.atan2(m21, m11)
137
+ else
138
+ e_x = 0
139
+ e_z = Math.atan2(-m12, m22)
140
+ end
141
+ when "YZX"
142
+ e_z = Math.asin(m21.clamp(-1, 1))
143
+
144
+ if m21.abs < 0.9999999
145
+ e_x = Math.atan2(-m23, m22)
146
+ e_y = Math.atan2(-m31, m11)
147
+ else
148
+ e_x = 0
149
+ e_y = Math.atan2(m13, m33)
150
+ end
151
+ when "XZY"
152
+ e_z = Math.asin(-m12.clamp(-1, 1))
153
+
154
+ if m12.abs < 0.9999999
155
+ e_x = Math.atan2(m32, m22)
156
+ e_y = Math.atan2(m13, m11)
157
+ else
158
+ e_x = Math.atan2(-m23, m33)
159
+ e_y = 0
160
+ end
161
+ end
162
+
163
+ Vector[e_x, e_y, e_z] * 180 / Math::PI
164
+ end
165
+
166
+ def te
167
+ x2 = x + x
168
+ y2 = y + y
169
+ z2 = z + z
170
+
171
+ xx = x * x2
172
+ xy = x * y2
173
+ xz = x * z2
174
+ yy = y * y2
175
+ yz = y * z2
176
+ zz = z * z2
177
+ wx = w * x2
178
+ wy = w * y2
179
+ wz = w * z2
180
+
181
+ [
182
+ 1 - (yy + zz),
183
+ xy + wz,
184
+ xz - wy,
185
+ 0,
186
+
187
+ xy - wz,
188
+ 1 - (xx + zz),
189
+ yz + wx,
190
+ 0,
191
+
192
+ xz + wy,
193
+ yz - wx,
194
+ 1 - (xx + yy),
195
+ 0,
196
+
197
+ 0,
198
+ 0,
199
+ 0,
200
+ 1,
201
+ ]
202
+ end
203
+
204
+ def self.from_angle_axis(angle, axis)
205
+ axis = axis.normalize
206
+ angle = angle * Math::PI / 180
207
+
208
+ half_angle = angle / 2
209
+ sin_half_angle = Math.sin(half_angle)
210
+ cos_half_angle = Math.cos(half_angle)
211
+
212
+ Quaternion.new(
213
+ cos_half_angle,
214
+ axis[0] * sin_half_angle,
215
+ axis[1] * sin_half_angle,
216
+ axis[2] * sin_half_angle
217
+ )
218
+ end
219
+
220
+ def to_angle_axis
221
+ angle = 2 * Math.acos(@w)
222
+ s = Math.sqrt(1 - @w * @w)
223
+ s = 1 if s < 0.0001
224
+ axis = Vector[@x / s, @y / s, @z / s]
225
+ [angle * 180 / Math::PI, axis]
226
+ end
227
+ end
228
+ end
@@ -0,0 +1,153 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Rendering
4
+ class InstanceRenderer
5
+ attr_reader :mesh, :material
6
+
7
+ def initialize(mesh, material)
8
+ @mesh = mesh
9
+ @material = material
10
+ @mesh_renderers = []
11
+ @mesh_matrix_data = []
12
+
13
+ setup_vertex_attribute_buffer
14
+ setup_vertex_buffer
15
+ setup_index_buffer
16
+ generate_instance_vbo_buf
17
+ end
18
+
19
+ def add_instance(mesh_renderer)
20
+ @mesh_renderers << mesh_renderer
21
+ @mesh_matrix_data += mesh_renderer.game_object.model_matrix.to_a.flatten
22
+ end
23
+
24
+ def remove_instance(mesh_renderer)
25
+ index = @mesh_renderers.index(mesh_renderer)
26
+ @mesh_renderers.delete_at(index)
27
+ @mesh_matrix_data[index * 16, 16] = []
28
+ end
29
+
30
+ def update_instance(mesh_renderer)
31
+ index = @mesh_renderers.index(mesh_renderer)
32
+ @mesh_matrix_data[index * 16, 16] = mesh_renderer.game_object.model_matrix.to_a.flatten
33
+ end
34
+
35
+ def draw_all
36
+ set_material_per_frame_data
37
+
38
+ GL.BindVertexArray(@vao)
39
+ update_vbo_buf
40
+ GL.BindBuffer(GL::ELEMENT_ARRAY_BUFFER, @ebo)
41
+ GL.BindBuffer(GL::ARRAY_BUFFER, @instance_vbo)
42
+
43
+ GL.DrawElementsInstanced(GL::TRIANGLES, mesh.index_data.length, GL::UNSIGNED_INT, 0, @mesh_renderers.count)
44
+ GL.BindVertexArray(0)
45
+ GL.BindBuffer(GL::ELEMENT_ARRAY_BUFFER, 0)
46
+ end
47
+
48
+ private
49
+
50
+ def set_material_per_frame_data
51
+ material.set_mat4("camera", Engine::Camera.instance.matrix)
52
+ material.set_vec3("cameraPos", Engine::Camera.instance.game_object.pos)
53
+
54
+ update_light_data
55
+ material.update_shader
56
+ end
57
+
58
+ def update_light_data
59
+ Engine::Components::PointLight.point_lights.each_with_index do |light, i|
60
+ material.set_float("pointLights[#{i}].sqrRange", light.range * light.range)
61
+ material.set_vec3("pointLights[#{i}].position", light.game_object.pos)
62
+ material.set_vec3("pointLights[#{i}].colour", light.colour)
63
+ end
64
+ Engine::Components::DirectionLight.direction_lights.each_with_index do |light, i|
65
+ material.set_vec3("directionalLights[#{i}].direction", light.game_object.forward)
66
+ material.set_vec3("directionalLights[#{i}].colour", light.colour)
67
+ end
68
+ end
69
+
70
+ def setup_index_buffer
71
+ indices = mesh.index_data
72
+
73
+ ebo_buf = ' ' * 4
74
+ GL.GenBuffers(1, ebo_buf)
75
+ @ebo = ebo_buf.unpack('L')[0]
76
+ GL.BindBuffer(GL::ELEMENT_ARRAY_BUFFER, @ebo)
77
+ GL.BufferData(
78
+ GL::ELEMENT_ARRAY_BUFFER, indices.length * Fiddle::SIZEOF_INT,
79
+ indices.pack('I*'), GL::STATIC_DRAW
80
+ )
81
+ end
82
+
83
+ def setup_vertex_attribute_buffer
84
+ vao_buf = ' ' * 4
85
+ GL.GenVertexArrays(1, vao_buf)
86
+ @vao = vao_buf.unpack('L')[0]
87
+ GL.BindVertexArray(@vao)
88
+ end
89
+
90
+ def setup_vertex_buffer
91
+ vbo_buf = ' ' * 4
92
+ GL.GenBuffers(1, vbo_buf)
93
+ vbo = vbo_buf.unpack('L')[0]
94
+ points = mesh.vertex_data
95
+
96
+ GL.BindBuffer(GL::ARRAY_BUFFER, vbo)
97
+ GL.BufferData(
98
+ GL::ARRAY_BUFFER, @mesh.vertex_data.length * Fiddle::SIZEOF_FLOAT,
99
+ points.pack('F*'), GL::STATIC_DRAW
100
+ )
101
+ vertex_data_size = 20 * Fiddle::SIZEOF_FLOAT
102
+
103
+ GL.VertexAttribPointer(0, 3, GL::FLOAT, GL::FALSE, vertex_data_size, 0)
104
+ GL.VertexAttribPointer(1, 2, GL::FLOAT, GL::FALSE, vertex_data_size, 3 * Fiddle::SIZEOF_FLOAT)
105
+ GL.VertexAttribPointer(2, 3, GL::FLOAT, GL::FALSE, vertex_data_size, 5 * Fiddle::SIZEOF_FLOAT)
106
+ GL.VertexAttribPointer(3, 3, GL::FLOAT, GL::FALSE, vertex_data_size, 8 * Fiddle::SIZEOF_FLOAT)
107
+ GL.VertexAttribPointer(4, 3, GL::FLOAT, GL::FALSE, vertex_data_size, 11 * Fiddle::SIZEOF_FLOAT)
108
+ GL.VertexAttribPointer(5, 3, GL::FLOAT, GL::FALSE, vertex_data_size, 14 * Fiddle::SIZEOF_FLOAT)
109
+ GL.VertexAttribPointer(6, 3, GL::FLOAT, GL::FALSE, vertex_data_size, 17 * Fiddle::SIZEOF_FLOAT)
110
+ GL.EnableVertexAttribArray(0)
111
+ GL.EnableVertexAttribArray(1)
112
+ GL.EnableVertexAttribArray(2)
113
+ GL.EnableVertexAttribArray(3)
114
+ GL.EnableVertexAttribArray(4)
115
+ GL.EnableVertexAttribArray(5)
116
+ GL.EnableVertexAttribArray(6)
117
+ end
118
+
119
+ def generate_instance_vbo_buf
120
+ instance_vbo_buf = ' ' * 4
121
+ GL.GenBuffers(1, instance_vbo_buf)
122
+ @instance_vbo = instance_vbo_buf.unpack('L')[0]
123
+ update_vbo_buf
124
+ end
125
+
126
+ def update_vbo_buf
127
+ vertex_data = @mesh_matrix_data
128
+
129
+ GL.BindBuffer(GL::ARRAY_BUFFER, @instance_vbo)
130
+ GL.BufferData(
131
+ GL::ARRAY_BUFFER, vertex_data.length * Fiddle::SIZEOF_FLOAT,
132
+ vertex_data.pack('F*'), GL::STATIC_DRAW
133
+ )
134
+
135
+ vec4_size = Fiddle::SIZEOF_FLOAT * 4
136
+
137
+ GL.EnableVertexAttribArray(7)
138
+ GL.EnableVertexAttribArray(8)
139
+ GL.EnableVertexAttribArray(9)
140
+ GL.EnableVertexAttribArray(10)
141
+
142
+ GL.VertexAttribPointer(7, 4, GL::FLOAT, GL::FALSE, 4 * vec4_size, 0)
143
+ GL.VertexAttribPointer(8, 4, GL::FLOAT, GL::FALSE, 4 * vec4_size, 1 * vec4_size)
144
+ GL.VertexAttribPointer(9, 4, GL::FLOAT, GL::FALSE, 4 * vec4_size, 2 * vec4_size)
145
+ GL.VertexAttribPointer(10, 4, GL::FLOAT, GL::FALSE, 4 * vec4_size, 3 * vec4_size)
146
+
147
+ GL.VertexAttribDivisor(7, 1)
148
+ GL.VertexAttribDivisor(8, 1)
149
+ GL.VertexAttribDivisor(9, 1)
150
+ GL.VertexAttribDivisor(10, 1)
151
+ end
152
+ end
153
+ end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Rendering
4
+ module RenderPipeline
5
+ def self.draw
6
+ Engine::GameObject.mesh_renderers.each do |mesh_renderer|
7
+ mesh_renderer.update(0)
8
+ end
9
+
10
+ instance_renderers.values.each do |renderer|
11
+ renderer.draw_all
12
+ end
13
+ end
14
+
15
+ def self.add_instance(mesh_renderer)
16
+ instance_renderers[[mesh_renderer.mesh, mesh_renderer.material]].add_instance(mesh_renderer)
17
+ end
18
+
19
+ def self.remove_instance(mesh_renderer)
20
+ instance_renderers[[mesh_renderer.mesh, mesh_renderer.material]].remove_instance(mesh_renderer)
21
+ end
22
+
23
+ def self.update_instance(mesh_renderer)
24
+ instance_renderers[[mesh_renderer.mesh, mesh_renderer.material]].update_instance(mesh_renderer)
25
+ end
26
+
27
+ private
28
+
29
+ def self.instance_renderers
30
+ @instance_renderers ||= Hash.new do |hash, key|
31
+ hash[key] = InstanceRenderer.new(key[0], key[1])
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,34 @@
1
+ module Engine
2
+ class Screenshoter
3
+ def self.screenshot(&block)
4
+ @after_screenshot = block
5
+ end
6
+
7
+ def self.scheduled_screenshot
8
+ @after_screenshot != nil
9
+ end
10
+
11
+ def self.take_screenshot
12
+ @scheduled_screenshot = nil
13
+ width = Engine::Window.framebuffer_width
14
+ height = Engine::Window.framebuffer_height
15
+ pixels = ' ' * (width * height * 3)
16
+ GL.ReadPixels(0, 0, width, height, GL::RGB, GL::UNSIGNED_BYTE, pixels)
17
+ png = ChunkyPNG::Image.new(width, height, ChunkyPNG::Color::TRANSPARENT)
18
+ pixels = pixels.bytes.map { |b| b.to_i }
19
+ x = 0
20
+ y = 0
21
+ pixels.each_slice(3) do |r, g, b|
22
+ png[x, height - y - 1] = ChunkyPNG::Color.rgb(r, g, b)
23
+ x += 1
24
+ if x >= width
25
+ x = 0
26
+ y += 1
27
+ end
28
+ end
29
+ block = @after_screenshot
30
+ @after_screenshot = nil
31
+ block.call(png)
32
+ end
33
+ end
34
+ end