ruby_rpg 0.0.5 → 0.1.0

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 (584) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +43 -21
  3. data/bin/build.bash +13 -13
  4. data/bin/import +54 -44
  5. data/ext/gl_native/extconf.rb +20 -0
  6. data/ext/gl_native/gl_native.c +563 -0
  7. data/ext/glfw_native/extconf.rb +18 -0
  8. data/ext/glfw_native/glfw_native.c +451 -0
  9. data/lib/engine/assets/_imported/cube.index_data +36 -0
  10. data/lib/engine/assets/_imported/cube.vertex_data +720 -0
  11. data/lib/engine/assets/_imported/plane.index_data +6 -0
  12. data/lib/engine/assets/_imported/plane.vertex_data +120 -0
  13. data/lib/engine/assets/_imported/sphere.index_data +2880 -0
  14. data/lib/engine/assets/_imported/sphere.vertex_data +57600 -0
  15. data/lib/engine/assets/cube.obj +46 -0
  16. data/lib/engine/assets/plane.obj +16 -0
  17. data/lib/engine/assets/sphere.obj +2488 -0
  18. data/lib/engine/autoloader.rb +11 -11
  19. data/lib/engine/camera.rb +12 -12
  20. data/lib/engine/component.rb +65 -63
  21. data/lib/engine/components/audio_source.rb +43 -41
  22. data/lib/engine/components/direction_light.rb +102 -23
  23. data/lib/engine/components/orthographic_camera.rb +60 -54
  24. data/lib/engine/components/perspective_camera.rb +76 -53
  25. data/lib/engine/components/point_light.rb +80 -24
  26. data/lib/engine/components/renderers/font_renderer.rb +19 -0
  27. data/lib/engine/components/renderers/font_renderer_base.rb +134 -0
  28. data/lib/engine/components/renderers/mesh_renderer.rb +41 -0
  29. data/lib/engine/components/renderers/sprite_renderer.rb +46 -0
  30. data/lib/engine/components/spot_light.rb +90 -0
  31. data/lib/engine/components/sprite_animator.rb +42 -0
  32. data/lib/engine/components/ui/flex/layout.rb +94 -0
  33. data/lib/engine/components/ui/flex/pack_layout.rb +65 -0
  34. data/lib/engine/components/ui/flex/stretch_layout.rb +52 -0
  35. data/lib/engine/components/ui/flex.rb +60 -0
  36. data/lib/engine/components/ui/font_renderer.rb +57 -0
  37. data/lib/engine/components/ui/rect.rb +117 -0
  38. data/lib/engine/components/ui/sprite_clickbox.rb +47 -0
  39. data/lib/engine/components/ui/sprite_renderer.rb +117 -0
  40. data/lib/engine/compute_shader.rb +14 -93
  41. data/lib/engine/compute_texture.rb +13 -0
  42. data/lib/engine/cursor.rb +43 -43
  43. data/lib/engine/debugging.rb +41 -41
  44. data/lib/engine/engine.rb +127 -131
  45. data/lib/engine/font.rb +99 -74
  46. data/lib/engine/game_object.rb +306 -234
  47. data/lib/engine/gl.rb +439 -0
  48. data/lib/engine/glfw.rb +151 -0
  49. data/lib/engine/importers/font_importer.rb +69 -69
  50. data/lib/engine/importers/obj_file.rb +244 -244
  51. data/lib/engine/importers/obj_importer.rb +33 -33
  52. data/lib/engine/input.rb +212 -105
  53. data/lib/engine/material.rb +214 -79
  54. data/lib/engine/matrix_helpers.rb +38 -0
  55. data/lib/engine/mesh.rb +68 -43
  56. data/lib/engine/metal/compute_shader.rb +118 -0
  57. data/lib/engine/metal/compute_texture.rb +176 -0
  58. data/lib/engine/metal/device.rb +98 -0
  59. data/lib/engine/metal/metal_bindings.rb +126 -0
  60. data/lib/engine/opengl/compute_shader.rb +77 -0
  61. data/lib/engine/opengl/compute_texture.rb +31 -0
  62. data/lib/engine/path.rb +92 -92
  63. data/lib/engine/physics/collision.rb +12 -12
  64. data/lib/engine/physics/components/cube_collider.rb +6 -6
  65. data/lib/engine/physics/components/rigidbody.rb +106 -103
  66. data/lib/engine/physics/components/sphere_collider.rb +103 -93
  67. data/lib/engine/physics/physics_resolver.rb +49 -37
  68. data/lib/engine/polygon_mesh.rb +45 -45
  69. data/lib/engine/quaternion.rb +234 -234
  70. data/lib/engine/rendering/cubemap_shadow_map_array.rb +77 -0
  71. data/lib/engine/rendering/gpu_timer.rb +68 -0
  72. data/lib/engine/rendering/instance_renderer.rb +232 -153
  73. data/lib/engine/rendering/post_processing/bloom_effect.rb +87 -0
  74. data/lib/engine/rendering/post_processing/depth_debug_effect.rb +17 -0
  75. data/lib/engine/rendering/post_processing/depth_of_field_effect.rb +52 -0
  76. data/lib/engine/rendering/post_processing/effect.rb +11 -0
  77. data/lib/engine/rendering/post_processing/post_processing_effect.rb +86 -0
  78. data/lib/engine/rendering/post_processing/single_pass_effect.rb +19 -0
  79. data/lib/engine/rendering/post_processing/ssao_effect.rb +182 -0
  80. data/lib/engine/rendering/post_processing/ssr_effect.rb +89 -0
  81. data/lib/engine/rendering/post_processing/tint_effect.rb +18 -0
  82. data/lib/engine/rendering/render_pipeline.rb +267 -35
  83. data/lib/engine/rendering/render_texture.rb +118 -0
  84. data/lib/engine/rendering/screen_quad.rb +64 -0
  85. data/lib/engine/rendering/shadow_map_array.rb +72 -0
  86. data/lib/engine/rendering/skybox_cubemap.rb +119 -0
  87. data/lib/engine/rendering/skybox_renderer.rb +64 -0
  88. data/lib/engine/rendering/ui/stencil_manager.rb +69 -0
  89. data/lib/engine/screenshoter.rb +34 -34
  90. data/lib/engine/serialization/graph_serializer.rb +74 -0
  91. data/lib/engine/serialization/object_serializer.rb +98 -0
  92. data/lib/engine/serialization/serializable.rb +78 -0
  93. data/lib/engine/serialization/yaml_persistence.rb +45 -0
  94. data/lib/engine/shader.rb +215 -119
  95. data/lib/engine/shaders/colour_frag.glsl +16 -8
  96. data/lib/engine/shaders/colour_vertex.glsl +20 -13
  97. data/lib/engine/shaders/fullscreen_frag.glsl +11 -0
  98. data/lib/engine/shaders/fullscreen_vertex.glsl +12 -0
  99. data/lib/engine/shaders/instanced_sprite_frag.glsl +21 -0
  100. data/lib/engine/shaders/{skybox_vert.glsl → instanced_sprite_vertex.glsl} +15 -14
  101. data/lib/engine/shaders/lighting/directional_light.glsl +49 -0
  102. data/lib/engine/shaders/lighting/lighting.glsl +33 -0
  103. data/lib/engine/shaders/lighting/lighting_common.glsl +13 -0
  104. data/lib/engine/shaders/lighting/point_light.glsl +46 -0
  105. data/lib/engine/shaders/lighting/spot_light.glsl +80 -0
  106. data/lib/engine/shaders/mesh_frag.glsl +53 -102
  107. data/lib/engine/shaders/mesh_vertex.glsl +25 -25
  108. data/lib/engine/shaders/point_shadow_frag.glsl +12 -0
  109. data/lib/engine/shaders/point_shadow_vertex.glsl +15 -0
  110. data/lib/engine/shaders/post_process/bloom_blur_frag.glsl +25 -0
  111. data/lib/engine/shaders/post_process/bloom_combine_frag.glsl +19 -0
  112. data/lib/engine/shaders/post_process/bloom_threshold_frag.glsl +19 -0
  113. data/lib/engine/shaders/post_process/debug_normals_frag.glsl +21 -0
  114. data/lib/engine/shaders/post_process/depth_debug_frag.glsl +17 -0
  115. data/lib/engine/shaders/post_process/dof_blur_frag.glsl +52 -0
  116. data/lib/engine/shaders/post_process/skybox_frag.glsl +29 -0
  117. data/lib/engine/shaders/post_process/ssao/blur_frag.glsl +50 -0
  118. data/lib/engine/shaders/post_process/ssao/combine_frag.glsl +15 -0
  119. data/lib/engine/shaders/post_process/ssao/frag.glsl +99 -0
  120. data/lib/engine/shaders/post_process/ssr/combine_frag.glsl +16 -0
  121. data/lib/engine/shaders/post_process/ssr/frag.glsl +118 -0
  122. data/lib/engine/shaders/post_process/tint_frag.glsl +14 -0
  123. data/lib/engine/shaders/shadow_frag.glsl +6 -0
  124. data/lib/engine/shaders/shadow_vertex.glsl +11 -0
  125. data/lib/engine/shaders/skybox_cubemap_frag.glsl +46 -0
  126. data/lib/engine/shaders/sprite_frag.glsl +17 -17
  127. data/lib/engine/shaders/sprite_vertex.glsl +15 -15
  128. data/lib/engine/shaders/text_frag.glsl +15 -15
  129. data/lib/engine/shaders/text_vertex.glsl +31 -31
  130. data/lib/engine/shaders/ui_sprite_frag.glsl +15 -15
  131. data/lib/engine/shaders/ui_sprite_vertex.glsl +15 -15
  132. data/lib/engine/shaders/vertex_lit_frag.glsl +33 -89
  133. data/lib/engine/shaders/vertex_lit_vertex.glsl +28 -28
  134. data/lib/engine/standard_meshes/quad_mesh.rb +26 -0
  135. data/lib/engine/standard_objects/cube.rb +23 -0
  136. data/lib/engine/standard_objects/default_material.rb +20 -0
  137. data/lib/engine/standard_objects/plane.rb +23 -0
  138. data/lib/engine/standard_objects/sphere.rb +23 -0
  139. data/lib/engine/tangent_calculator.rb +42 -42
  140. data/lib/engine/texture.rb +62 -53
  141. data/lib/engine/ui/rect.rb +16 -0
  142. data/lib/engine/video_mode.rb +37 -37
  143. data/lib/engine/window.rb +126 -126
  144. data/lib/ruby_rpg.rb +116 -58
  145. data/vendor/glew-2.2.0-win32/LICENSE.txt +73 -0
  146. data/vendor/glew-2.2.0-win32/bin/Release/x64/glew32.dll +0 -0
  147. data/vendor/glew-2.2.0-win32/include/GL/glew.h +26427 -0
  148. data/vendor/glew-2.2.0-win32/lib/Release/x64/glew32.lib +0 -0
  149. data/{glfw-3.3.9.bin.MACOS → vendor/glfw-3.3.9.bin.MACOS}/lib-arm64/libglfw.3.dylib +0 -0
  150. data/{glfw-3.3.9.bin.MACOS → vendor/glfw-3.4.bin.WIN64}/LICENSE.md +23 -23
  151. metadata +122 -463
  152. data/glfw-3.3.9.bin.MACOS/README.md +0 -5
  153. data/glfw-3.3.9.bin.MACOS/docs/html/bc_s.png +0 -0
  154. data/glfw-3.3.9.bin.MACOS/docs/html/bc_sd.png +0 -0
  155. data/glfw-3.3.9.bin.MACOS/docs/html/build_8dox.html +0 -81
  156. data/glfw-3.3.9.bin.MACOS/docs/html/build_guide.html +0 -199
  157. data/glfw-3.3.9.bin.MACOS/docs/html/closed.png +0 -0
  158. data/glfw-3.3.9.bin.MACOS/docs/html/compat_8dox.html +0 -81
  159. data/glfw-3.3.9.bin.MACOS/docs/html/compat_guide.html +0 -153
  160. data/glfw-3.3.9.bin.MACOS/docs/html/compile_8dox.html +0 -81
  161. data/glfw-3.3.9.bin.MACOS/docs/html/compile_guide.html +0 -223
  162. data/glfw-3.3.9.bin.MACOS/docs/html/context_8dox.html +0 -81
  163. data/glfw-3.3.9.bin.MACOS/docs/html/context_guide.html +0 -259
  164. data/glfw-3.3.9.bin.MACOS/docs/html/deprecated.html +0 -88
  165. data/glfw-3.3.9.bin.MACOS/docs/html/dir_08423ce7729c4554356a7de7171ba263.html +0 -85
  166. data/glfw-3.3.9.bin.MACOS/docs/html/dir_2dcebcdf14b42e92a6ed85c61bda6b9d.html +0 -93
  167. data/glfw-3.3.9.bin.MACOS/docs/html/dir_62ce056722ee97c199075aa1d6eca309.html +0 -95
  168. data/glfw-3.3.9.bin.MACOS/docs/html/dir_dddf4cf62655095a666cf715de3a31a2.html +0 -91
  169. data/glfw-3.3.9.bin.MACOS/docs/html/doc.svg +0 -12
  170. data/glfw-3.3.9.bin.MACOS/docs/html/docd.svg +0 -12
  171. data/glfw-3.3.9.bin.MACOS/docs/html/doxygen.css +0 -1685
  172. data/glfw-3.3.9.bin.MACOS/docs/html/doxygen.svg +0 -28
  173. data/glfw-3.3.9.bin.MACOS/docs/html/dynsections.js +0 -192
  174. data/glfw-3.3.9.bin.MACOS/docs/html/extra.css +0 -1
  175. data/glfw-3.3.9.bin.MACOS/docs/html/files.html +0 -91
  176. data/glfw-3.3.9.bin.MACOS/docs/html/folderclosed.svg +0 -11
  177. data/glfw-3.3.9.bin.MACOS/docs/html/folderclosedd.svg +0 -11
  178. data/glfw-3.3.9.bin.MACOS/docs/html/folderopen.svg +0 -17
  179. data/glfw-3.3.9.bin.MACOS/docs/html/folderopend.svg +0 -12
  180. data/glfw-3.3.9.bin.MACOS/docs/html/glfw3_8h.html +0 -1661
  181. data/glfw-3.3.9.bin.MACOS/docs/html/glfw3_8h_source.html +0 -1175
  182. data/glfw-3.3.9.bin.MACOS/docs/html/glfw3native_8h.html +0 -167
  183. data/glfw-3.3.9.bin.MACOS/docs/html/glfw3native_8h_source.html +0 -303
  184. data/glfw-3.3.9.bin.MACOS/docs/html/group__buttons.html +0 -282
  185. data/glfw-3.3.9.bin.MACOS/docs/html/group__context.html +0 -304
  186. data/glfw-3.3.9.bin.MACOS/docs/html/group__errors.html +0 -304
  187. data/glfw-3.3.9.bin.MACOS/docs/html/group__gamepad__axes.html +0 -202
  188. data/glfw-3.3.9.bin.MACOS/docs/html/group__gamepad__buttons.html +0 -410
  189. data/glfw-3.3.9.bin.MACOS/docs/html/group__hat__state.html +0 -234
  190. data/glfw-3.3.9.bin.MACOS/docs/html/group__init.html +0 -570
  191. data/glfw-3.3.9.bin.MACOS/docs/html/group__input.html +0 -2255
  192. data/glfw-3.3.9.bin.MACOS/docs/html/group__joysticks.html +0 -362
  193. data/glfw-3.3.9.bin.MACOS/docs/html/group__keys.html +0 -2034
  194. data/glfw-3.3.9.bin.MACOS/docs/html/group__mods.html +0 -198
  195. data/glfw-3.3.9.bin.MACOS/docs/html/group__monitor.html +0 -848
  196. data/glfw-3.3.9.bin.MACOS/docs/html/group__native.html +0 -812
  197. data/glfw-3.3.9.bin.MACOS/docs/html/group__shapes.html +0 -198
  198. data/glfw-3.3.9.bin.MACOS/docs/html/group__vulkan.html +0 -359
  199. data/glfw-3.3.9.bin.MACOS/docs/html/group__window.html +0 -3434
  200. data/glfw-3.3.9.bin.MACOS/docs/html/index.html +0 -100
  201. data/glfw-3.3.9.bin.MACOS/docs/html/input_8dox.html +0 -81
  202. data/glfw-3.3.9.bin.MACOS/docs/html/input_guide.html +0 -570
  203. data/glfw-3.3.9.bin.MACOS/docs/html/internal_8dox.html +0 -81
  204. data/glfw-3.3.9.bin.MACOS/docs/html/internals_guide.html +0 -132
  205. data/glfw-3.3.9.bin.MACOS/docs/html/intro_8dox.html +0 -81
  206. data/glfw-3.3.9.bin.MACOS/docs/html/intro_guide.html +0 -351
  207. data/glfw-3.3.9.bin.MACOS/docs/html/jquery.js +0 -34
  208. data/glfw-3.3.9.bin.MACOS/docs/html/main_8dox.html +0 -81
  209. data/glfw-3.3.9.bin.MACOS/docs/html/menu.js +0 -136
  210. data/glfw-3.3.9.bin.MACOS/docs/html/menudata.js +0 -29
  211. data/glfw-3.3.9.bin.MACOS/docs/html/minus.svg +0 -8
  212. data/glfw-3.3.9.bin.MACOS/docs/html/minusd.svg +0 -8
  213. data/glfw-3.3.9.bin.MACOS/docs/html/monitor_8dox.html +0 -81
  214. data/glfw-3.3.9.bin.MACOS/docs/html/monitor_guide.html +0 -229
  215. data/glfw-3.3.9.bin.MACOS/docs/html/moving_8dox.html +0 -81
  216. data/glfw-3.3.9.bin.MACOS/docs/html/moving_guide.html +0 -374
  217. data/glfw-3.3.9.bin.MACOS/docs/html/nav_f.png +0 -0
  218. data/glfw-3.3.9.bin.MACOS/docs/html/nav_fd.png +0 -0
  219. data/glfw-3.3.9.bin.MACOS/docs/html/nav_g.png +0 -0
  220. data/glfw-3.3.9.bin.MACOS/docs/html/nav_h.png +0 -0
  221. data/glfw-3.3.9.bin.MACOS/docs/html/nav_hd.png +0 -0
  222. data/glfw-3.3.9.bin.MACOS/docs/html/news.html +0 -634
  223. data/glfw-3.3.9.bin.MACOS/docs/html/news_8dox.html +0 -81
  224. data/glfw-3.3.9.bin.MACOS/docs/html/open.png +0 -0
  225. data/glfw-3.3.9.bin.MACOS/docs/html/pages.html +0 -99
  226. data/glfw-3.3.9.bin.MACOS/docs/html/plus.svg +0 -9
  227. data/glfw-3.3.9.bin.MACOS/docs/html/plusd.svg +0 -9
  228. data/glfw-3.3.9.bin.MACOS/docs/html/quick_8dox.html +0 -81
  229. data/glfw-3.3.9.bin.MACOS/docs/html/quick_guide.html +0 -397
  230. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_0.js +0 -5
  231. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_1.js +0 -4
  232. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_10.js +0 -65
  233. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_11.js +0 -26
  234. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_12.js +0 -44
  235. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_13.js +0 -34
  236. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_14.js +0 -12
  237. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_15.js +0 -52
  238. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_16.js +0 -69
  239. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_17.js +0 -51
  240. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_18.js +0 -14
  241. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_19.js +0 -36
  242. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_1a.js +0 -98
  243. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_1b.js +0 -12
  244. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_2.js +0 -6
  245. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_3.js +0 -9
  246. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_4.js +0 -57
  247. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_5.js +0 -22
  248. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_6.js +0 -103
  249. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_7.js +0 -23
  250. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_8.js +0 -35
  251. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_9.js +0 -63
  252. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_a.js +0 -505
  253. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_b.js +0 -24
  254. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_c.js +0 -50
  255. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_d.js +0 -17
  256. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_e.js +0 -12
  257. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_f.js +0 -35
  258. data/glfw-3.3.9.bin.MACOS/docs/html/search/classes_0.js +0 -7
  259. data/glfw-3.3.9.bin.MACOS/docs/html/search/close.svg +0 -18
  260. data/glfw-3.3.9.bin.MACOS/docs/html/search/defines_0.js +0 -34
  261. data/glfw-3.3.9.bin.MACOS/docs/html/search/files_0.js +0 -4
  262. data/glfw-3.3.9.bin.MACOS/docs/html/search/files_1.js +0 -6
  263. data/glfw-3.3.9.bin.MACOS/docs/html/search/files_2.js +0 -5
  264. data/glfw-3.3.9.bin.MACOS/docs/html/search/files_3.js +0 -6
  265. data/glfw-3.3.9.bin.MACOS/docs/html/search/files_4.js +0 -6
  266. data/glfw-3.3.9.bin.MACOS/docs/html/search/files_5.js +0 -4
  267. data/glfw-3.3.9.bin.MACOS/docs/html/search/files_6.js +0 -4
  268. data/glfw-3.3.9.bin.MACOS/docs/html/search/files_7.js +0 -4
  269. data/glfw-3.3.9.bin.MACOS/docs/html/search/files_8.js +0 -4
  270. data/glfw-3.3.9.bin.MACOS/docs/html/search/functions_0.js +0 -146
  271. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_0.js +0 -6
  272. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_1.js +0 -4
  273. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_10.js +0 -4
  274. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_2.js +0 -6
  275. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_3.js +0 -5
  276. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_4.js +0 -4
  277. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_5.js +0 -5
  278. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_6.js +0 -4
  279. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_7.js +0 -5
  280. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_8.js +0 -5
  281. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_9.js +0 -6
  282. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_a.js +0 -6
  283. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_b.js +0 -4
  284. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_c.js +0 -4
  285. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_d.js +0 -7
  286. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_e.js +0 -4
  287. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_f.js +0 -5
  288. data/glfw-3.3.9.bin.MACOS/docs/html/search/mag.svg +0 -24
  289. data/glfw-3.3.9.bin.MACOS/docs/html/search/mag_d.svg +0 -24
  290. data/glfw-3.3.9.bin.MACOS/docs/html/search/mag_sel.svg +0 -31
  291. data/glfw-3.3.9.bin.MACOS/docs/html/search/mag_seld.svg +0 -31
  292. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_0.js +0 -4
  293. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_1.js +0 -4
  294. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_10.js +0 -4
  295. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_2.js +0 -5
  296. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_3.js +0 -4
  297. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_4.js +0 -6
  298. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_5.js +0 -4
  299. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_6.js +0 -4
  300. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_7.js +0 -7
  301. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_8.js +0 -6
  302. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_9.js +0 -4
  303. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_a.js +0 -5
  304. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_b.js +0 -5
  305. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_c.js +0 -4
  306. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_d.js +0 -6
  307. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_e.js +0 -6
  308. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_f.js +0 -4
  309. data/glfw-3.3.9.bin.MACOS/docs/html/search/search.css +0 -291
  310. data/glfw-3.3.9.bin.MACOS/docs/html/search/search.js +0 -840
  311. data/glfw-3.3.9.bin.MACOS/docs/html/search/searchdata.js +0 -39
  312. data/glfw-3.3.9.bin.MACOS/docs/html/search/typedefs_0.js +0 -32
  313. data/glfw-3.3.9.bin.MACOS/docs/html/search/variables_0.js +0 -4
  314. data/glfw-3.3.9.bin.MACOS/docs/html/search/variables_1.js +0 -6
  315. data/glfw-3.3.9.bin.MACOS/docs/html/search/variables_2.js +0 -5
  316. data/glfw-3.3.9.bin.MACOS/docs/html/search/variables_3.js +0 -4
  317. data/glfw-3.3.9.bin.MACOS/docs/html/search/variables_4.js +0 -4
  318. data/glfw-3.3.9.bin.MACOS/docs/html/search/variables_5.js +0 -6
  319. data/glfw-3.3.9.bin.MACOS/docs/html/search/variables_6.js +0 -4
  320. data/glfw-3.3.9.bin.MACOS/docs/html/search/variables_7.js +0 -4
  321. data/glfw-3.3.9.bin.MACOS/docs/html/spaces.svg +0 -877
  322. data/glfw-3.3.9.bin.MACOS/docs/html/splitbar.png +0 -0
  323. data/glfw-3.3.9.bin.MACOS/docs/html/splitbard.png +0 -0
  324. data/glfw-3.3.9.bin.MACOS/docs/html/struct_g_l_f_wgamepadstate.html +0 -134
  325. data/glfw-3.3.9.bin.MACOS/docs/html/struct_g_l_f_wgammaramp.html +0 -170
  326. data/glfw-3.3.9.bin.MACOS/docs/html/struct_g_l_f_wimage.html +0 -151
  327. data/glfw-3.3.9.bin.MACOS/docs/html/struct_g_l_f_wvidmode.html +0 -204
  328. data/glfw-3.3.9.bin.MACOS/docs/html/sync_off.png +0 -0
  329. data/glfw-3.3.9.bin.MACOS/docs/html/sync_on.png +0 -0
  330. data/glfw-3.3.9.bin.MACOS/docs/html/tab_a.png +0 -0
  331. data/glfw-3.3.9.bin.MACOS/docs/html/tab_ad.png +0 -0
  332. data/glfw-3.3.9.bin.MACOS/docs/html/tab_b.png +0 -0
  333. data/glfw-3.3.9.bin.MACOS/docs/html/tab_bd.png +0 -0
  334. data/glfw-3.3.9.bin.MACOS/docs/html/tab_h.png +0 -0
  335. data/glfw-3.3.9.bin.MACOS/docs/html/tab_hd.png +0 -0
  336. data/glfw-3.3.9.bin.MACOS/docs/html/tab_s.png +0 -0
  337. data/glfw-3.3.9.bin.MACOS/docs/html/tab_sd.png +0 -0
  338. data/glfw-3.3.9.bin.MACOS/docs/html/tabs.css +0 -1
  339. data/glfw-3.3.9.bin.MACOS/docs/html/vulkan_8dox.html +0 -81
  340. data/glfw-3.3.9.bin.MACOS/docs/html/vulkan_guide.html +0 -196
  341. data/glfw-3.3.9.bin.MACOS/docs/html/window_8dox.html +0 -81
  342. data/glfw-3.3.9.bin.MACOS/docs/html/window_guide.html +0 -763
  343. data/glfw-3.3.9.bin.MACOS/include/GLFW/glfw3.h +0 -5932
  344. data/glfw-3.3.9.bin.MACOS/include/GLFW/glfw3native.h +0 -634
  345. data/glfw-3.3.9.bin.MACOS/lib-arm64/libglfw3.a +0 -0
  346. data/glfw-3.3.9.bin.MACOS/lib-universal/libglfw.3.dylib +0 -0
  347. data/glfw-3.3.9.bin.MACOS/lib-universal/libglfw3.a +0 -0
  348. data/glfw-3.3.9.bin.MACOS/lib-x86_64/libglfw.3.dylib +0 -0
  349. data/glfw-3.3.9.bin.MACOS/lib-x86_64/libglfw3.a +0 -0
  350. data/glfw-3.4.bin.WIN64/README.md +0 -70
  351. data/glfw-3.4.bin.WIN64/docs/html/bc_s.png +0 -0
  352. data/glfw-3.4.bin.WIN64/docs/html/bc_sd.png +0 -0
  353. data/glfw-3.4.bin.WIN64/docs/html/build_8md.html +0 -81
  354. data/glfw-3.4.bin.WIN64/docs/html/build_guide.html +0 -217
  355. data/glfw-3.4.bin.WIN64/docs/html/closed.png +0 -0
  356. data/glfw-3.4.bin.WIN64/docs/html/compat_8md.html +0 -81
  357. data/glfw-3.4.bin.WIN64/docs/html/compat_guide.html +0 -156
  358. data/glfw-3.4.bin.WIN64/docs/html/compile_8md.html +0 -81
  359. data/glfw-3.4.bin.WIN64/docs/html/compile_guide.html +0 -219
  360. data/glfw-3.4.bin.WIN64/docs/html/context_8md.html +0 -81
  361. data/glfw-3.4.bin.WIN64/docs/html/context_guide.html +0 -258
  362. data/glfw-3.4.bin.WIN64/docs/html/deprecated.html +0 -88
  363. data/glfw-3.4.bin.WIN64/docs/html/dir_13577e2d8b9423099662de029791bd7d.html +0 -93
  364. data/glfw-3.4.bin.WIN64/docs/html/dir_7f92719a7fe62e5b064f87d7a3c220b1.html +0 -95
  365. data/glfw-3.4.bin.WIN64/docs/html/dir_a788ef6c2b1e5b367804e0b6ccfd6f11.html +0 -85
  366. data/glfw-3.4.bin.WIN64/docs/html/dir_b11153cd0f4fd04a7564cc166f482635.html +0 -91
  367. data/glfw-3.4.bin.WIN64/docs/html/doc.svg +0 -12
  368. data/glfw-3.4.bin.WIN64/docs/html/docd.svg +0 -12
  369. data/glfw-3.4.bin.WIN64/docs/html/doxygen.css +0 -1685
  370. data/glfw-3.4.bin.WIN64/docs/html/doxygen.svg +0 -28
  371. data/glfw-3.4.bin.WIN64/docs/html/dynsections.js +0 -192
  372. data/glfw-3.4.bin.WIN64/docs/html/extra.css +0 -2
  373. data/glfw-3.4.bin.WIN64/docs/html/files.html +0 -91
  374. data/glfw-3.4.bin.WIN64/docs/html/folderclosed.svg +0 -11
  375. data/glfw-3.4.bin.WIN64/docs/html/folderclosedd.svg +0 -11
  376. data/glfw-3.4.bin.WIN64/docs/html/folderopen.svg +0 -17
  377. data/glfw-3.4.bin.WIN64/docs/html/folderopend.svg +0 -12
  378. data/glfw-3.4.bin.WIN64/docs/html/glfw3_8h.html +0 -1910
  379. data/glfw-3.4.bin.WIN64/docs/html/glfw3_8h_source.html +0 -1260
  380. data/glfw-3.4.bin.WIN64/docs/html/glfw3native_8h.html +0 -170
  381. data/glfw-3.4.bin.WIN64/docs/html/glfw3native_8h_source.html +0 -306
  382. data/glfw-3.4.bin.WIN64/docs/html/group__buttons.html +0 -282
  383. data/glfw-3.4.bin.WIN64/docs/html/group__context.html +0 -304
  384. data/glfw-3.4.bin.WIN64/docs/html/group__errors.html +0 -384
  385. data/glfw-3.4.bin.WIN64/docs/html/group__gamepad__axes.html +0 -202
  386. data/glfw-3.4.bin.WIN64/docs/html/group__gamepad__buttons.html +0 -410
  387. data/glfw-3.4.bin.WIN64/docs/html/group__hat__state.html +0 -234
  388. data/glfw-3.4.bin.WIN64/docs/html/group__init.html +0 -1015
  389. data/glfw-3.4.bin.WIN64/docs/html/group__input.html +0 -2285
  390. data/glfw-3.4.bin.WIN64/docs/html/group__joysticks.html +0 -362
  391. data/glfw-3.4.bin.WIN64/docs/html/group__keys.html +0 -2034
  392. data/glfw-3.4.bin.WIN64/docs/html/group__mods.html +0 -198
  393. data/glfw-3.4.bin.WIN64/docs/html/group__monitor.html +0 -849
  394. data/glfw-3.4.bin.WIN64/docs/html/group__native.html +0 -837
  395. data/glfw-3.4.bin.WIN64/docs/html/group__shapes.html +0 -337
  396. data/glfw-3.4.bin.WIN64/docs/html/group__vulkan.html +0 -361
  397. data/glfw-3.4.bin.WIN64/docs/html/group__window.html +0 -3608
  398. data/glfw-3.4.bin.WIN64/docs/html/index.html +0 -100
  399. data/glfw-3.4.bin.WIN64/docs/html/input_8md.html +0 -81
  400. data/glfw-3.4.bin.WIN64/docs/html/input_guide.html +0 -576
  401. data/glfw-3.4.bin.WIN64/docs/html/internal_8md.html +0 -81
  402. data/glfw-3.4.bin.WIN64/docs/html/internals_guide.html +0 -135
  403. data/glfw-3.4.bin.WIN64/docs/html/intro_8md.html +0 -81
  404. data/glfw-3.4.bin.WIN64/docs/html/intro_guide.html +0 -429
  405. data/glfw-3.4.bin.WIN64/docs/html/jquery.js +0 -34
  406. data/glfw-3.4.bin.WIN64/docs/html/main_8md.html +0 -81
  407. data/glfw-3.4.bin.WIN64/docs/html/menu.js +0 -136
  408. data/glfw-3.4.bin.WIN64/docs/html/menudata.js +0 -30
  409. data/glfw-3.4.bin.WIN64/docs/html/minus.svg +0 -8
  410. data/glfw-3.4.bin.WIN64/docs/html/minusd.svg +0 -8
  411. data/glfw-3.4.bin.WIN64/docs/html/monitor_8md.html +0 -81
  412. data/glfw-3.4.bin.WIN64/docs/html/monitor_guide.html +0 -228
  413. data/glfw-3.4.bin.WIN64/docs/html/moving_8md.html +0 -81
  414. data/glfw-3.4.bin.WIN64/docs/html/moving_guide.html +0 -360
  415. data/glfw-3.4.bin.WIN64/docs/html/nav_f.png +0 -0
  416. data/glfw-3.4.bin.WIN64/docs/html/nav_fd.png +0 -0
  417. data/glfw-3.4.bin.WIN64/docs/html/nav_g.png +0 -0
  418. data/glfw-3.4.bin.WIN64/docs/html/nav_h.png +0 -0
  419. data/glfw-3.4.bin.WIN64/docs/html/nav_hd.png +0 -0
  420. data/glfw-3.4.bin.WIN64/docs/html/news.html +0 -336
  421. data/glfw-3.4.bin.WIN64/docs/html/news_8md.html +0 -81
  422. data/glfw-3.4.bin.WIN64/docs/html/open.png +0 -0
  423. data/glfw-3.4.bin.WIN64/docs/html/pages.html +0 -99
  424. data/glfw-3.4.bin.WIN64/docs/html/plus.svg +0 -9
  425. data/glfw-3.4.bin.WIN64/docs/html/plusd.svg +0 -9
  426. data/glfw-3.4.bin.WIN64/docs/html/quick_8md.html +0 -81
  427. data/glfw-3.4.bin.WIN64/docs/html/quick_guide.html +0 -406
  428. data/glfw-3.4.bin.WIN64/docs/html/search/all_0.js +0 -4
  429. data/glfw-3.4.bin.WIN64/docs/html/search/all_1.js +0 -4
  430. data/glfw-3.4.bin.WIN64/docs/html/search/all_10.js +0 -13
  431. data/glfw-3.4.bin.WIN64/docs/html/search/all_11.js +0 -11
  432. data/glfw-3.4.bin.WIN64/docs/html/search/all_12.js +0 -26
  433. data/glfw-3.4.bin.WIN64/docs/html/search/all_13.js +0 -51
  434. data/glfw-3.4.bin.WIN64/docs/html/search/all_14.js +0 -22
  435. data/glfw-3.4.bin.WIN64/docs/html/search/all_15.js +0 -35
  436. data/glfw-3.4.bin.WIN64/docs/html/search/all_16.js +0 -29
  437. data/glfw-3.4.bin.WIN64/docs/html/search/all_17.js +0 -8
  438. data/glfw-3.4.bin.WIN64/docs/html/search/all_18.js +0 -44
  439. data/glfw-3.4.bin.WIN64/docs/html/search/all_19.js +0 -60
  440. data/glfw-3.4.bin.WIN64/docs/html/search/all_1a.js +0 -39
  441. data/glfw-3.4.bin.WIN64/docs/html/search/all_1b.js +0 -8
  442. data/glfw-3.4.bin.WIN64/docs/html/search/all_1c.js +0 -32
  443. data/glfw-3.4.bin.WIN64/docs/html/search/all_1d.js +0 -84
  444. data/glfw-3.4.bin.WIN64/docs/html/search/all_1e.js +0 -13
  445. data/glfw-3.4.bin.WIN64/docs/html/search/all_1f.js +0 -4
  446. data/glfw-3.4.bin.WIN64/docs/html/search/all_2.js +0 -5
  447. data/glfw-3.4.bin.WIN64/docs/html/search/all_3.js +0 -4
  448. data/glfw-3.4.bin.WIN64/docs/html/search/all_4.js +0 -4
  449. data/glfw-3.4.bin.WIN64/docs/html/search/all_5.js +0 -4
  450. data/glfw-3.4.bin.WIN64/docs/html/search/all_6.js +0 -4
  451. data/glfw-3.4.bin.WIN64/docs/html/search/all_7.js +0 -58
  452. data/glfw-3.4.bin.WIN64/docs/html/search/all_8.js +0 -21
  453. data/glfw-3.4.bin.WIN64/docs/html/search/all_9.js +0 -82
  454. data/glfw-3.4.bin.WIN64/docs/html/search/all_a.js +0 -20
  455. data/glfw-3.4.bin.WIN64/docs/html/search/all_b.js +0 -26
  456. data/glfw-3.4.bin.WIN64/docs/html/search/all_c.js +0 -35
  457. data/glfw-3.4.bin.WIN64/docs/html/search/all_d.js +0 -555
  458. data/glfw-3.4.bin.WIN64/docs/html/search/all_e.js +0 -23
  459. data/glfw-3.4.bin.WIN64/docs/html/search/all_f.js +0 -40
  460. data/glfw-3.4.bin.WIN64/docs/html/search/classes_0.js +0 -8
  461. data/glfw-3.4.bin.WIN64/docs/html/search/close.svg +0 -18
  462. data/glfw-3.4.bin.WIN64/docs/html/search/defines_0.js +0 -43
  463. data/glfw-3.4.bin.WIN64/docs/html/search/files_0.js +0 -4
  464. data/glfw-3.4.bin.WIN64/docs/html/search/files_1.js +0 -6
  465. data/glfw-3.4.bin.WIN64/docs/html/search/files_2.js +0 -5
  466. data/glfw-3.4.bin.WIN64/docs/html/search/files_3.js +0 -6
  467. data/glfw-3.4.bin.WIN64/docs/html/search/files_4.js +0 -6
  468. data/glfw-3.4.bin.WIN64/docs/html/search/files_5.js +0 -4
  469. data/glfw-3.4.bin.WIN64/docs/html/search/files_6.js +0 -4
  470. data/glfw-3.4.bin.WIN64/docs/html/search/files_7.js +0 -4
  471. data/glfw-3.4.bin.WIN64/docs/html/search/files_8.js +0 -4
  472. data/glfw-3.4.bin.WIN64/docs/html/search/functions_0.js +0 -152
  473. data/glfw-3.4.bin.WIN64/docs/html/search/groups_0.js +0 -6
  474. data/glfw-3.4.bin.WIN64/docs/html/search/groups_1.js +0 -4
  475. data/glfw-3.4.bin.WIN64/docs/html/search/groups_10.js +0 -4
  476. data/glfw-3.4.bin.WIN64/docs/html/search/groups_2.js +0 -6
  477. data/glfw-3.4.bin.WIN64/docs/html/search/groups_3.js +0 -5
  478. data/glfw-3.4.bin.WIN64/docs/html/search/groups_4.js +0 -4
  479. data/glfw-3.4.bin.WIN64/docs/html/search/groups_5.js +0 -5
  480. data/glfw-3.4.bin.WIN64/docs/html/search/groups_6.js +0 -4
  481. data/glfw-3.4.bin.WIN64/docs/html/search/groups_7.js +0 -5
  482. data/glfw-3.4.bin.WIN64/docs/html/search/groups_8.js +0 -5
  483. data/glfw-3.4.bin.WIN64/docs/html/search/groups_9.js +0 -6
  484. data/glfw-3.4.bin.WIN64/docs/html/search/groups_a.js +0 -6
  485. data/glfw-3.4.bin.WIN64/docs/html/search/groups_b.js +0 -4
  486. data/glfw-3.4.bin.WIN64/docs/html/search/groups_c.js +0 -4
  487. data/glfw-3.4.bin.WIN64/docs/html/search/groups_d.js +0 -7
  488. data/glfw-3.4.bin.WIN64/docs/html/search/groups_e.js +0 -4
  489. data/glfw-3.4.bin.WIN64/docs/html/search/groups_f.js +0 -5
  490. data/glfw-3.4.bin.WIN64/docs/html/search/mag.svg +0 -24
  491. data/glfw-3.4.bin.WIN64/docs/html/search/mag_d.svg +0 -24
  492. data/glfw-3.4.bin.WIN64/docs/html/search/mag_sel.svg +0 -31
  493. data/glfw-3.4.bin.WIN64/docs/html/search/mag_seld.svg +0 -31
  494. data/glfw-3.4.bin.WIN64/docs/html/search/pages_0.js +0 -4
  495. data/glfw-3.4.bin.WIN64/docs/html/search/pages_1.js +0 -5
  496. data/glfw-3.4.bin.WIN64/docs/html/search/pages_10.js +0 -5
  497. data/glfw-3.4.bin.WIN64/docs/html/search/pages_11.js +0 -4
  498. data/glfw-3.4.bin.WIN64/docs/html/search/pages_2.js +0 -4
  499. data/glfw-3.4.bin.WIN64/docs/html/search/pages_3.js +0 -5
  500. data/glfw-3.4.bin.WIN64/docs/html/search/pages_4.js +0 -4
  501. data/glfw-3.4.bin.WIN64/docs/html/search/pages_5.js +0 -6
  502. data/glfw-3.4.bin.WIN64/docs/html/search/pages_6.js +0 -4
  503. data/glfw-3.4.bin.WIN64/docs/html/search/pages_7.js +0 -5
  504. data/glfw-3.4.bin.WIN64/docs/html/search/pages_8.js +0 -7
  505. data/glfw-3.4.bin.WIN64/docs/html/search/pages_9.js +0 -7
  506. data/glfw-3.4.bin.WIN64/docs/html/search/pages_a.js +0 -4
  507. data/glfw-3.4.bin.WIN64/docs/html/search/pages_b.js +0 -5
  508. data/glfw-3.4.bin.WIN64/docs/html/search/pages_c.js +0 -4
  509. data/glfw-3.4.bin.WIN64/docs/html/search/pages_d.js +0 -4
  510. data/glfw-3.4.bin.WIN64/docs/html/search/pages_e.js +0 -6
  511. data/glfw-3.4.bin.WIN64/docs/html/search/pages_f.js +0 -6
  512. data/glfw-3.4.bin.WIN64/docs/html/search/search.css +0 -291
  513. data/glfw-3.4.bin.WIN64/docs/html/search/search.js +0 -840
  514. data/glfw-3.4.bin.WIN64/docs/html/search/searchdata.js +0 -39
  515. data/glfw-3.4.bin.WIN64/docs/html/search/typedefs_0.js +0 -36
  516. data/glfw-3.4.bin.WIN64/docs/html/search/variables_0.js +0 -5
  517. data/glfw-3.4.bin.WIN64/docs/html/search/variables_1.js +0 -6
  518. data/glfw-3.4.bin.WIN64/docs/html/search/variables_2.js +0 -4
  519. data/glfw-3.4.bin.WIN64/docs/html/search/variables_3.js +0 -5
  520. data/glfw-3.4.bin.WIN64/docs/html/search/variables_4.js +0 -4
  521. data/glfw-3.4.bin.WIN64/docs/html/search/variables_5.js +0 -4
  522. data/glfw-3.4.bin.WIN64/docs/html/search/variables_6.js +0 -7
  523. data/glfw-3.4.bin.WIN64/docs/html/search/variables_7.js +0 -4
  524. data/glfw-3.4.bin.WIN64/docs/html/search/variables_8.js +0 -4
  525. data/glfw-3.4.bin.WIN64/docs/html/search/variables_9.js +0 -4
  526. data/glfw-3.4.bin.WIN64/docs/html/spaces.svg +0 -877
  527. data/glfw-3.4.bin.WIN64/docs/html/splitbar.png +0 -0
  528. data/glfw-3.4.bin.WIN64/docs/html/splitbard.png +0 -0
  529. data/glfw-3.4.bin.WIN64/docs/html/struct_g_l_f_wallocator.html +0 -168
  530. data/glfw-3.4.bin.WIN64/docs/html/struct_g_l_f_wgamepadstate.html +0 -134
  531. data/glfw-3.4.bin.WIN64/docs/html/struct_g_l_f_wgammaramp.html +0 -170
  532. data/glfw-3.4.bin.WIN64/docs/html/struct_g_l_f_wimage.html +0 -151
  533. data/glfw-3.4.bin.WIN64/docs/html/struct_g_l_f_wvidmode.html +0 -204
  534. data/glfw-3.4.bin.WIN64/docs/html/sync_off.png +0 -0
  535. data/glfw-3.4.bin.WIN64/docs/html/sync_on.png +0 -0
  536. data/glfw-3.4.bin.WIN64/docs/html/tab_a.png +0 -0
  537. data/glfw-3.4.bin.WIN64/docs/html/tab_ad.png +0 -0
  538. data/glfw-3.4.bin.WIN64/docs/html/tab_b.png +0 -0
  539. data/glfw-3.4.bin.WIN64/docs/html/tab_bd.png +0 -0
  540. data/glfw-3.4.bin.WIN64/docs/html/tab_h.png +0 -0
  541. data/glfw-3.4.bin.WIN64/docs/html/tab_hd.png +0 -0
  542. data/glfw-3.4.bin.WIN64/docs/html/tab_s.png +0 -0
  543. data/glfw-3.4.bin.WIN64/docs/html/tab_sd.png +0 -0
  544. data/glfw-3.4.bin.WIN64/docs/html/tabs.css +0 -1
  545. data/glfw-3.4.bin.WIN64/docs/html/topics.html +0 -101
  546. data/glfw-3.4.bin.WIN64/docs/html/vulkan_8md.html +0 -81
  547. data/glfw-3.4.bin.WIN64/docs/html/vulkan_guide.html +0 -206
  548. data/glfw-3.4.bin.WIN64/docs/html/window_8md.html +0 -81
  549. data/glfw-3.4.bin.WIN64/docs/html/window_guide.html +0 -806
  550. data/glfw-3.4.bin.WIN64/include/GLFW/glfw3.h +0 -6547
  551. data/glfw-3.4.bin.WIN64/include/GLFW/glfw3native.h +0 -663
  552. data/glfw-3.4.bin.WIN64/lib-mingw-w64/glfw3.dll +0 -0
  553. data/glfw-3.4.bin.WIN64/lib-mingw-w64/libglfw3.a +0 -0
  554. data/glfw-3.4.bin.WIN64/lib-mingw-w64/libglfw3dll.a +0 -0
  555. data/glfw-3.4.bin.WIN64/lib-static-ucrt/glfw3dll.lib +0 -0
  556. data/glfw-3.4.bin.WIN64/lib-vc2013/glfw3.dll +0 -0
  557. data/glfw-3.4.bin.WIN64/lib-vc2013/glfw3.lib +0 -0
  558. data/glfw-3.4.bin.WIN64/lib-vc2013/glfw3_mt.lib +0 -0
  559. data/glfw-3.4.bin.WIN64/lib-vc2013/glfw3dll.lib +0 -0
  560. data/glfw-3.4.bin.WIN64/lib-vc2015/glfw3.dll +0 -0
  561. data/glfw-3.4.bin.WIN64/lib-vc2015/glfw3.lib +0 -0
  562. data/glfw-3.4.bin.WIN64/lib-vc2015/glfw3_mt.lib +0 -0
  563. data/glfw-3.4.bin.WIN64/lib-vc2015/glfw3dll.lib +0 -0
  564. data/glfw-3.4.bin.WIN64/lib-vc2017/glfw3.dll +0 -0
  565. data/glfw-3.4.bin.WIN64/lib-vc2017/glfw3.lib +0 -0
  566. data/glfw-3.4.bin.WIN64/lib-vc2017/glfw3_mt.lib +0 -0
  567. data/glfw-3.4.bin.WIN64/lib-vc2017/glfw3dll.lib +0 -0
  568. data/glfw-3.4.bin.WIN64/lib-vc2019/glfw3.dll +0 -0
  569. data/glfw-3.4.bin.WIN64/lib-vc2019/glfw3.lib +0 -0
  570. data/glfw-3.4.bin.WIN64/lib-vc2019/glfw3_mt.lib +0 -0
  571. data/glfw-3.4.bin.WIN64/lib-vc2019/glfw3dll.lib +0 -0
  572. data/glfw-3.4.bin.WIN64/lib-vc2022/glfw3.dll +0 -0
  573. data/glfw-3.4.bin.WIN64/lib-vc2022/glfw3.lib +0 -0
  574. data/glfw-3.4.bin.WIN64/lib-vc2022/glfw3_mt.lib +0 -0
  575. data/glfw-3.4.bin.WIN64/lib-vc2022/glfw3dll.lib +0 -0
  576. data/lib/engine/components/font_renderer.rb +0 -134
  577. data/lib/engine/components/mesh_renderer.rb +0 -31
  578. data/lib/engine/components/sprite_renderer.rb +0 -141
  579. data/lib/engine/components/ui_font_renderer.rb +0 -140
  580. data/lib/engine/components/ui_sprite_clickbox.rb +0 -62
  581. data/lib/engine/components/ui_sprite_renderer.rb +0 -101
  582. data/lib/engine/shaders/skybox_frag.glsl +0 -12
  583. /data/{glfw-3.4.bin.WIN64 → vendor/glfw-3.3.9.bin.MACOS}/LICENSE.md +0 -0
  584. /data/{glfw-3.4.bin.WIN64 → vendor/glfw-3.4.bin.WIN64}/lib-static-ucrt/glfw3.dll +0 -0
@@ -1,24 +1,80 @@
1
- # frozen_string_literal: true
2
-
3
- module Engine::Components
4
- class PointLight < Engine::Component
5
- attr_accessor :range, :colour
6
-
7
- def initialize(range: 300, colour: [1.0, 1.0, 1.0])
8
- @range = range
9
- @colour = colour
10
- end
11
-
12
- def start
13
- PointLight.point_lights << self
14
- end
15
-
16
- def destroy!
17
- PointLight.point_lights.delete(self)
18
- end
19
-
20
- def self.point_lights
21
- @point_lights ||= []
22
- end
23
- end
24
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Engine::Components
4
+ class PointLight < Engine::Component
5
+ include Engine::MatrixHelpers
6
+
7
+ NR_SHADOW_CASTING_POINT_LIGHTS = 4
8
+
9
+ # Cubemap face directions: +X, -X, +Y, -Y, +Z, -Z
10
+ CUBE_DIRECTIONS = [
11
+ { dir: Vector[1, 0, 0], up: Vector[0, -1, 0] }, # +X
12
+ { dir: Vector[-1, 0, 0], up: Vector[0, -1, 0] }, # -X
13
+ { dir: Vector[0, 1, 0], up: Vector[0, 0, 1] }, # +Y
14
+ { dir: Vector[0, -1, 0], up: Vector[0, 0, -1] }, # -Y
15
+ { dir: Vector[0, 0, 1], up: Vector[0, -1, 0] }, # +Z
16
+ { dir: Vector[0, 0, -1], up: Vector[0, -1, 0] } # -Z
17
+ ].freeze
18
+
19
+ serialize :range, :colour, :cast_shadows
20
+
21
+ attr_accessor :range, :colour, :cast_shadows, :shadow_layer_index
22
+
23
+ def awake
24
+ @range ||= 300
25
+ @colour ||= [1.0, 1.0, 1.0]
26
+ @cast_shadows = false if @cast_shadows.nil?
27
+ @shadow_layer_index = nil
28
+ @cached_light_space_matrices = nil
29
+ end
30
+
31
+ def start
32
+ PointLight.point_lights << self
33
+ end
34
+
35
+ def destroy!
36
+ PointLight.point_lights.delete(self)
37
+ end
38
+
39
+ def update(delta_time)
40
+ @cached_light_space_matrices = nil if @cast_shadows
41
+ end
42
+
43
+ def position
44
+ game_object.local_to_world_coordinate(Vector[0, 0, 0])
45
+ end
46
+
47
+ def shadow_near
48
+ @range * 0.01
49
+ end
50
+
51
+ def shadow_far
52
+ @range * 2.0
53
+ end
54
+
55
+ def light_space_matrices
56
+ @cached_light_space_matrices ||= compute_light_space_matrices
57
+ end
58
+
59
+ def self.point_lights
60
+ @point_lights ||= []
61
+ end
62
+
63
+ def self.shadow_casting_lights
64
+ point_lights.select(&:cast_shadows).take(NR_SHADOW_CASTING_POINT_LIGHTS)
65
+ end
66
+
67
+ private
68
+
69
+ def compute_light_space_matrices
70
+ light_pos = position
71
+ proj = perspective(Math::PI / 2.0, 1.0, shadow_near, shadow_far)
72
+
73
+ CUBE_DIRECTIONS.map do |face|
74
+ target = light_pos + face[:dir]
75
+ view = look_at(light_pos, target, face[:up])
76
+ (proj * view).transpose
77
+ end
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Engine::Components
4
+ class FontRenderer < FontRendererBase
5
+ def renderer?
6
+ true
7
+ end
8
+
9
+ private
10
+
11
+ def shader
12
+ @shader ||= Engine::Shader.text
13
+ end
14
+
15
+ def set_shader_camera_matrix
16
+ shader.set_mat4("camera", Engine::Camera.instance.matrix)
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,134 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Engine::Components
4
+ class FontRendererBase < Engine::Component
5
+ serialize :font, :string
6
+
7
+ attr_reader :mesh, :texture
8
+
9
+ def awake
10
+ # Original vertex order for ear-clipping, UVs flipped for Y-down camera
11
+ @mesh = Engine::PolygonMesh.new(
12
+ [Vector[-0.5, 0.5], Vector[0.5, 0.5], Vector[0.5, -0.5], Vector[-0.5, -0.5]],
13
+ [[0, 1], [1, 1], [1, 0], [0, 0]]
14
+ )
15
+ @texture = @font.texture.texture
16
+ end
17
+
18
+ def start
19
+ setup_vertex_attribute_buffer
20
+ setup_vertex_buffer
21
+ setup_index_buffer
22
+ Engine::GL.BindVertexArray(0)
23
+ end
24
+
25
+ def update_string(string)
26
+ @string = string
27
+ update_vbo_buf
28
+ end
29
+
30
+ def draw
31
+ shader.use
32
+ Engine::GL.BindVertexArray(@vao)
33
+ Engine::GL.BindBuffer(Engine::GL::ELEMENT_ARRAY_BUFFER, @ebo)
34
+
35
+ set_shader_per_frame_data
36
+
37
+ Engine::GL.DrawElementsInstanced(Engine::GL::TRIANGLES, mesh.index_data.length, Engine::GL::UNSIGNED_INT, 0, @string.length)
38
+ end
39
+
40
+ private
41
+
42
+ def shader
43
+ raise NotImplementedError, "Subclasses must implement #shader"
44
+ end
45
+
46
+ def set_shader_camera_matrix
47
+ raise NotImplementedError, "Subclasses must implement #set_shader_camera_matrix"
48
+ end
49
+
50
+ def set_shader_per_frame_data
51
+ set_shader_camera_matrix
52
+ set_shader_model_matrix
53
+ set_shader_texture
54
+ end
55
+
56
+ def set_shader_model_matrix
57
+ shader.set_mat4("model", game_object.model_matrix)
58
+ end
59
+
60
+ def set_shader_texture
61
+ Engine::Material.bind_texture(0, Engine::GL::TEXTURE_2D, texture)
62
+ shader.set_int("fontTexture", 0)
63
+ end
64
+
65
+ def setup_index_buffer
66
+ indices = mesh.index_data
67
+
68
+ ebo_buf = ' ' * 4
69
+ Engine::GL.GenBuffers(1, ebo_buf)
70
+ @ebo = ebo_buf.unpack('L')[0]
71
+ Engine::GL.BindBuffer(Engine::GL::ELEMENT_ARRAY_BUFFER, @ebo)
72
+ Engine::GL.BufferData(
73
+ Engine::GL::ELEMENT_ARRAY_BUFFER, indices.length * Fiddle::SIZEOF_INT,
74
+ indices.pack('I*'), Engine::GL::STATIC_DRAW
75
+ )
76
+ end
77
+
78
+ def setup_vertex_attribute_buffer
79
+ vao_buf = ' ' * 4
80
+ Engine::GL.GenVertexArrays(1, vao_buf)
81
+ @vao = vao_buf.unpack('L')[0]
82
+ Engine::GL.BindVertexArray(@vao)
83
+ end
84
+
85
+ def setup_vertex_buffer
86
+ vbo_buf = ' ' * 4
87
+ Engine::GL.GenBuffers(1, vbo_buf)
88
+ vbo = vbo_buf.unpack('L')[0]
89
+ points = mesh.vertex_data
90
+
91
+ Engine::GL.BindBuffer(Engine::GL::ARRAY_BUFFER, vbo)
92
+ Engine::GL.BufferData(
93
+ Engine::GL::ARRAY_BUFFER, @mesh.vertex_data.length * Fiddle::SIZEOF_FLOAT,
94
+ points.pack('F*'), Engine::GL::STATIC_DRAW
95
+ )
96
+
97
+ Engine::GL.VertexAttribPointer(0, 3, Engine::GL::FLOAT, Engine::GL::FALSE, 5 * Fiddle::SIZEOF_FLOAT, 0)
98
+ Engine::GL.VertexAttribPointer(1, 2, Engine::GL::FLOAT, Engine::GL::FALSE, 5 * Fiddle::SIZEOF_FLOAT, 3 * Fiddle::SIZEOF_FLOAT)
99
+ Engine::GL.EnableVertexAttribArray(0)
100
+ Engine::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
+ Engine::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
+ Engine::GL.BindBuffer(Engine::GL::ARRAY_BUFFER, @instance_vbo)
121
+ vertex_size = Fiddle::SIZEOF_INT + (Fiddle::SIZEOF_FLOAT * 2)
122
+ Engine::GL.BufferData(
123
+ Engine::GL::ARRAY_BUFFER, string_length * vertex_size,
124
+ vertex_data.pack('IFF' * string_length), Engine::GL::STATIC_DRAW
125
+ )
126
+ Engine::GL.VertexAttribIPointer(2, 1, Engine::GL::INT, vertex_size, 0)
127
+ Engine::GL.VertexAttribPointer(3, 2, Engine::GL::FLOAT, Engine::GL::FALSE, vertex_size, Fiddle::SIZEOF_INT)
128
+ Engine::GL.EnableVertexAttribArray(2)
129
+ Engine::GL.EnableVertexAttribArray(3)
130
+ Engine::GL.VertexAttribDivisor(2, 1)
131
+ Engine::GL.VertexAttribDivisor(3, 1)
132
+ end
133
+ end
134
+ end
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Engine::Components
4
+ class MeshRenderer < Engine::Component
5
+ serialize :mesh, :material, :static
6
+
7
+ attr_reader :mesh, :material, :static
8
+
9
+ def awake
10
+ @static = false if @static.nil?
11
+ @last_synced_version = nil
12
+ @renderer_key = nil
13
+ end
14
+
15
+ def renderer_key
16
+ @renderer_key ||= [mesh, material].freeze
17
+ end
18
+
19
+ def renderer?
20
+ true
21
+ end
22
+
23
+ def start
24
+ Rendering::RenderPipeline.add_instance(self)
25
+ end
26
+
27
+ def sync_transform
28
+ return if static
29
+
30
+ version = game_object.world_transform_version
31
+ return if @last_synced_version == version
32
+
33
+ @last_synced_version = version
34
+ Rendering::RenderPipeline.update_instance(self)
35
+ end
36
+
37
+ def destroy
38
+ Rendering::RenderPipeline.remove_instance(self)
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,46 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Engine::Components
4
+ class SpriteRenderer < Engine::Component
5
+ serialize :material
6
+
7
+ attr_reader :material
8
+
9
+ def colour=(value)
10
+ material.set_vec4("spriteColor", colour_to_vec4(value))
11
+ end
12
+
13
+ def colour_to_vec4(value)
14
+ if value.is_a?(Array)
15
+ value
16
+ else
17
+ [value[:r], value[:g], value[:b], value[:a] || 1.0]
18
+ end
19
+ end
20
+
21
+ def renderer?
22
+ true
23
+ end
24
+
25
+ def start
26
+ @mesh_renderer = MeshRenderer.create(mesh: Engine::Mesh.quad, material: material)
27
+ @mesh_renderer.set_game_object(game_object)
28
+ @mesh_renderer.start
29
+ set_default_frame_coords
30
+ end
31
+
32
+ def sync_transform
33
+ @mesh_renderer.sync_transform
34
+ end
35
+
36
+ def destroy
37
+ @mesh_renderer.destroy
38
+ end
39
+
40
+ private
41
+
42
+ def set_default_frame_coords
43
+ material.set_vec4("frameCoords", [0, 0, 1, 1])
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,90 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Engine::Components
4
+ class SpotLight < Engine::Component
5
+ include Engine::MatrixHelpers
6
+
7
+ serialize :range, :colour, :inner_angle, :outer_angle, :cast_shadows
8
+
9
+ attr_accessor :range, :colour, :inner_angle, :outer_angle, :cast_shadows, :shadow_layer_index
10
+
11
+ def awake
12
+ @range ||= 300
13
+ @colour ||= [1.0, 1.0, 1.0]
14
+ @inner_angle ||= 12.5
15
+ @outer_angle ||= 17.5
16
+ @cast_shadows = false if @cast_shadows.nil?
17
+ @shadow_layer_index = nil
18
+ @cached_light_space_matrix = nil
19
+ end
20
+
21
+ def start
22
+ SpotLight.spot_lights << self
23
+ end
24
+
25
+ def destroy!
26
+ SpotLight.spot_lights.delete(self)
27
+ end
28
+
29
+ def inner_cutoff
30
+ Math.cos(@inner_angle * Math::PI / 180.0)
31
+ end
32
+
33
+ def outer_cutoff
34
+ Math.cos(@outer_angle * Math::PI / 180.0)
35
+ end
36
+
37
+ def shadow_near
38
+ @range * 0.01
39
+ end
40
+
41
+ def shadow_far
42
+ # Factor of 2 needed to match shadow range with spotlight attenuation range
43
+ @range * 2.0
44
+ end
45
+
46
+ def direction
47
+ game_object.local_to_world_direction(Vector[0, 0, 1]).normalize
48
+ end
49
+
50
+ def position
51
+ game_object.local_to_world_coordinate(Vector[0, 0, 0])
52
+ end
53
+
54
+ def light_space_matrix
55
+ @cached_light_space_matrix ||= compute_light_space_matrix
56
+ end
57
+
58
+ def update(delta_time)
59
+ # Clear cache each frame so matrix is recomputed if light moves
60
+ @cached_light_space_matrix = nil
61
+ end
62
+
63
+ def compute_light_space_matrix
64
+ light_pos = position
65
+ light_dir = direction
66
+ target = light_pos + light_dir
67
+
68
+ # Choose up vector that's not parallel to light direction
69
+ # When light points mostly along Y axis, use Z as up instead
70
+ up = if light_dir[1].abs > 0.9
71
+ Vector[0, 0, 1]
72
+ else
73
+ Vector[0, 1, 0]
74
+ end
75
+
76
+ view_matrix = look_at(light_pos, target, up)
77
+
78
+ # Perspective projection based on spotlight cone angle
79
+ fov = (@outer_angle * 2.0 + 5.0) * Math::PI / 180.0
80
+ # near/far ratio affects depth precision
81
+ proj_matrix = perspective(fov, 1.0, shadow_near, shadow_far)
82
+
83
+ (proj_matrix * view_matrix).transpose
84
+ end
85
+
86
+ def self.spot_lights
87
+ @spot_lights ||= []
88
+ end
89
+ end
90
+ end
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Engine::Components
4
+ class SpriteAnimator < Engine::Component
5
+ serialize :material, :frame_coords, :frame_rate, :loop
6
+
7
+ attr_reader :frame_rate, :loop
8
+
9
+ def awake
10
+ @frame_rate ||= 1
11
+ @loop = true if @loop.nil?
12
+ end
13
+
14
+ def start
15
+ @start_time = Time.now
16
+ update_frame
17
+ end
18
+
19
+ def update(delta_time)
20
+ update_frame
21
+ end
22
+
23
+ private
24
+
25
+ def update_frame
26
+ current_frame_index = ((Time.now - @start_time) * @frame_rate).to_i
27
+ current_frame_index = if @loop
28
+ current_frame_index % @frame_coords.length
29
+ else
30
+ [@frame_coords.length - 1, current_frame_index].min
31
+ end
32
+
33
+ frame = @frame_coords[current_frame_index]
34
+ @material.set_vec4("frameCoords", [
35
+ frame[:tl][0],
36
+ frame[:tl][1],
37
+ frame[:width],
38
+ frame[:height]
39
+ ])
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,94 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Engine::Components
4
+ module UI
5
+ module FlexLayout
6
+ class Base
7
+ def initialize(direction:, gap:)
8
+ @direction = direction
9
+ @gap = gap
10
+ end
11
+
12
+ def rect_for_child(child_ui_rect, index, children, parent_rect)
13
+ raise NotImplementedError
14
+ end
15
+
16
+ private
17
+
18
+ attr_reader :direction, :gap
19
+
20
+ def row?
21
+ @direction == :row
22
+ end
23
+
24
+ def main_axis_size(rect)
25
+ row? ? rect.width : rect.height
26
+ end
27
+
28
+ def total_gap(children)
29
+ @gap * (children.length - 1)
30
+ end
31
+
32
+ def build_rect(parent_rect, main_start:, main_size:, child_ui_rect: nil)
33
+ # Y-down coordinate system: both row and column increment main_start
34
+ if row?
35
+ # Cross-axis is vertical; use flex_height if specified, else stretch
36
+ cross_size = child_ui_rect&.flex_height
37
+ top, bottom = calculate_cross_axis_position(
38
+ parent_rect.top, parent_rect.bottom, cross_size, child_ui_rect&.flex_align
39
+ )
40
+
41
+ Engine::UI::Rect.new(
42
+ left: main_start,
43
+ right: main_start + main_size,
44
+ top: top,
45
+ bottom: bottom
46
+ )
47
+ else
48
+ # Cross-axis is horizontal; use flex_width if specified, else stretch
49
+ cross_size = child_ui_rect&.flex_width
50
+ left, right = calculate_cross_axis_position(
51
+ parent_rect.left, parent_rect.right, cross_size, child_ui_rect&.flex_align
52
+ )
53
+
54
+ Engine::UI::Rect.new(
55
+ left: left,
56
+ right: right,
57
+ top: main_start,
58
+ bottom: main_start + main_size
59
+ )
60
+ end
61
+ end
62
+
63
+ def calculate_cross_axis_position(cross_start, cross_end, cross_size, align)
64
+ # If no cross_size specified, stretch to fill
65
+ return [cross_start, cross_end] unless cross_size
66
+
67
+ align ||= :start
68
+ available = cross_end - cross_start
69
+
70
+ case align
71
+ when :start
72
+ [cross_start, cross_start + cross_size]
73
+ when :center
74
+ offset = (available - cross_size) / 2.0
75
+ [cross_start + offset, cross_start + offset + cross_size]
76
+ when :end
77
+ [cross_end - cross_size, cross_end]
78
+ else
79
+ [cross_start, cross_start + cross_size]
80
+ end
81
+ end
82
+
83
+ def main_axis_start(parent_rect)
84
+ row? ? parent_rect.left : parent_rect.top
85
+ end
86
+
87
+ def available_space(parent_rect, children)
88
+ size = row? ? parent_rect.width : parent_rect.height
89
+ size - total_gap(children)
90
+ end
91
+ end
92
+ end
93
+ end
94
+ end
@@ -0,0 +1,65 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Engine::Components
4
+ module UI
5
+ module FlexLayout
6
+ class Pack < Base
7
+ def initialize(direction:, gap:, justify:)
8
+ super(direction: direction, gap: gap)
9
+ @justify = justify
10
+ end
11
+
12
+ def rect_for_child(child_ui_rect, index, children, parent_rect)
13
+ sizes = children.map { |c| child_main_size(c) }
14
+ total_content = sizes.sum + total_gap(children)
15
+
16
+ available = row? ? parent_rect.width : parent_rect.height
17
+ start_offset = calculate_start_offset(available, total_content, children.length)
18
+
19
+ # Y-down: both row and column increment main_start
20
+ main_start = main_axis_start(parent_rect)
21
+ main_start += start_offset
22
+
23
+ children.each_with_index do |_, i|
24
+ break if i == index
25
+ main_start += sizes[i] + gap
26
+ end
27
+
28
+ build_rect(parent_rect, main_start: main_start, main_size: sizes[index], child_ui_rect: child_ui_rect)
29
+ end
30
+
31
+ private
32
+
33
+ def child_main_size(child_ui_rect)
34
+ size = row? ? child_ui_rect.flex_width : child_ui_rect.flex_height
35
+ unless size
36
+ property = row? ? "flex_width" : "flex_height"
37
+ raise "UI::Rect requires #{property} when parent Flex has justify: :#{@justify}"
38
+ end
39
+ size
40
+ end
41
+
42
+ def calculate_start_offset(available_space, total_content, child_count)
43
+ remaining = available_space - total_content
44
+
45
+ case @justify
46
+ when :start
47
+ 0
48
+ when :end
49
+ remaining
50
+ when :center
51
+ remaining / 2.0
52
+ when :space_between
53
+ 0
54
+ when :space_around
55
+ remaining / (child_count * 2.0)
56
+ when :space_evenly
57
+ remaining / (child_count + 1.0)
58
+ else
59
+ 0
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,52 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Engine::Components
4
+ module UI
5
+ module FlexLayout
6
+ class Stretch < Base
7
+ def rect_for_child(child_ui_rect, index, children, parent_rect)
8
+ sizes = calculate_sizes(children, parent_rect)
9
+
10
+ # Y-down: both row and column increment main_start
11
+ main_start = main_axis_start(parent_rect)
12
+ children.each_with_index do |_, i|
13
+ break if i == index
14
+ main_start += sizes[i] + gap
15
+ end
16
+
17
+ build_rect(parent_rect, main_start: main_start, main_size: sizes[index], child_ui_rect: child_ui_rect)
18
+ end
19
+
20
+ private
21
+
22
+ def calculate_sizes(children, parent_rect)
23
+ available = available_space(parent_rect, children)
24
+
25
+ fixed_total = 0
26
+ total_weight = 0
27
+
28
+ children.each do |child|
29
+ fixed_size = row? ? child.flex_width : child.flex_height
30
+ if fixed_size
31
+ fixed_total += fixed_size
32
+ else
33
+ total_weight += child.flex_weight || 1
34
+ end
35
+ end
36
+
37
+ remaining = available - fixed_total
38
+ per_weight = total_weight > 0 ? remaining / total_weight.to_f : 0
39
+
40
+ children.map do |child|
41
+ fixed_size = row? ? child.flex_width : child.flex_height
42
+ if fixed_size
43
+ fixed_size
44
+ else
45
+ (child.flex_weight || 1) * per_weight
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end