ruby2d 0.12.1 → 1.0.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 (620) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.md +7 -0
  3. data/README.md +141 -0
  4. data/USAGE.md +2435 -0
  5. data/assets/Rakefile +637 -0
  6. data/assets/build_support/CMakeLists.txt +94 -0
  7. data/assets/build_support/mruby/build_config.rb +34 -0
  8. data/assets/build_support/mruby/build_config_wasm.rb +30 -0
  9. data/assets/build_support/sdl_test.c +174 -0
  10. data/assets/deps.yaml +16 -0
  11. data/assets/platform/include/SDL3/SDL.h +91 -0
  12. data/assets/platform/include/SDL3/SDL_assert.h +705 -0
  13. data/assets/platform/include/SDL3/SDL_asyncio.h +550 -0
  14. data/assets/platform/include/SDL3/SDL_atomic.h +692 -0
  15. data/assets/platform/include/SDL3/SDL_audio.h +2370 -0
  16. data/assets/platform/include/SDL3/SDL_begin_code.h +553 -0
  17. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_bits.h +47 -27
  18. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_blendmode.h +59 -55
  19. data/assets/platform/include/SDL3/SDL_camera.h +535 -0
  20. data/assets/platform/include/SDL3/SDL_clipboard.h +331 -0
  21. data/assets/{include/SDL2/close_code.h → platform/include/SDL3/SDL_close_code.h} +9 -8
  22. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_copying.h +3 -1
  23. data/assets/platform/include/SDL3/SDL_cpuinfo.h +374 -0
  24. data/assets/platform/include/SDL3/SDL_dialog.h +343 -0
  25. data/assets/platform/include/SDL3/SDL_dlopennote.h +234 -0
  26. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_egl.h +11 -8
  27. data/assets/platform/include/SDL3/SDL_endian.h +645 -0
  28. data/assets/platform/include/SDL3/SDL_error.h +226 -0
  29. data/assets/platform/include/SDL3/SDL_events.h +1645 -0
  30. data/assets/platform/include/SDL3/SDL_filesystem.h +537 -0
  31. data/assets/platform/include/SDL3/SDL_gamepad.h +1656 -0
  32. data/assets/platform/include/SDL3/SDL_gpu.h +4608 -0
  33. data/assets/platform/include/SDL3/SDL_guid.h +106 -0
  34. data/assets/platform/include/SDL3/SDL_haptic.h +1461 -0
  35. data/assets/platform/include/SDL3/SDL_hidapi.h +571 -0
  36. data/assets/platform/include/SDL3/SDL_hints.h +5001 -0
  37. data/assets/platform/include/SDL3/SDL_init.h +507 -0
  38. data/assets/platform/include/SDL3/SDL_intrin.h +410 -0
  39. data/assets/platform/include/SDL3/SDL_iostream.h +1379 -0
  40. data/assets/platform/include/SDL3/SDL_joystick.h +1385 -0
  41. data/assets/platform/include/SDL3/SDL_keyboard.h +608 -0
  42. data/assets/platform/include/SDL3/SDL_keycode.h +347 -0
  43. data/assets/platform/include/SDL3/SDL_loadso.h +145 -0
  44. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_locale.h +40 -24
  45. data/assets/platform/include/SDL3/SDL_log.h +541 -0
  46. data/assets/platform/include/SDL3/SDL_main.h +704 -0
  47. data/assets/platform/include/SDL3/SDL_main_impl.h +151 -0
  48. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_messagebox.h +85 -48
  49. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_metal.h +29 -29
  50. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_misc.h +13 -12
  51. data/assets/platform/include/SDL3/SDL_mouse.h +813 -0
  52. data/assets/platform/include/SDL3/SDL_mutex.h +1117 -0
  53. data/assets/platform/include/SDL3/SDL_oldnames.h +1339 -0
  54. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_opengl.h +1247 -278
  55. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_opengl_glext.h +5 -1
  56. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_opengles.h +6 -7
  57. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_opengles2.h +10 -11
  58. data/assets/platform/include/SDL3/SDL_pen.h +198 -0
  59. data/assets/platform/include/SDL3/SDL_pixels.h +1441 -0
  60. data/assets/{include/SDL2/SDL_test_log.h → platform/include/SDL3/SDL_platform.h} +25 -26
  61. data/assets/platform/include/SDL3/SDL_platform_defines.h +497 -0
  62. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_power.h +40 -20
  63. data/assets/platform/include/SDL3/SDL_process.h +441 -0
  64. data/assets/platform/include/SDL3/SDL_properties.h +572 -0
  65. data/assets/platform/include/SDL3/SDL_rect.h +528 -0
  66. data/assets/platform/include/SDL3/SDL_render.h +3028 -0
  67. data/assets/platform/include/SDL3/SDL_revision.h +59 -0
  68. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_scancode.h +59 -68
  69. data/assets/platform/include/SDL3/SDL_sensor.h +321 -0
  70. data/assets/platform/include/SDL3/SDL_stdinc.h +6186 -0
  71. data/assets/platform/include/SDL3/SDL_storage.h +686 -0
  72. data/assets/platform/include/SDL3/SDL_surface.h +1769 -0
  73. data/assets/platform/include/SDL3/SDL_system.h +840 -0
  74. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test.h +16 -22
  75. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_assert.h +27 -34
  76. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_common.h +109 -52
  77. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_compare.h +22 -14
  78. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_crc32.h +27 -30
  79. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_font.h +50 -49
  80. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_fuzzer.h +64 -79
  81. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_harness.h +47 -30
  82. data/assets/platform/include/SDL3/SDL_test_log.h +83 -0
  83. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_md5.h +21 -28
  84. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_memory.h +19 -16
  85. data/assets/platform/include/SDL3/SDL_thread.h +602 -0
  86. data/assets/platform/include/SDL3/SDL_time.h +249 -0
  87. data/assets/platform/include/SDL3/SDL_timer.h +454 -0
  88. data/assets/platform/include/SDL3/SDL_touch.h +184 -0
  89. data/assets/platform/include/SDL3/SDL_tray.h +544 -0
  90. data/assets/platform/include/SDL3/SDL_version.h +198 -0
  91. data/assets/platform/include/SDL3/SDL_video.h +3497 -0
  92. data/assets/platform/include/SDL3/SDL_vulkan.h +287 -0
  93. data/assets/platform/include/SDL3_image/SDL_image.h +3328 -0
  94. data/assets/platform/include/SDL3_mixer/SDL_mixer.h +3369 -0
  95. data/assets/platform/include/SDL3_ttf/SDL_textengine.h +181 -0
  96. data/assets/platform/include/SDL3_ttf/SDL_ttf.h +2833 -0
  97. data/assets/{include → platform/include}/mrbconf.h +42 -31
  98. data/assets/{include → platform/include}/mruby/array.h +3 -4
  99. data/assets/{include → platform/include}/mruby/boxing_nan.h +10 -0
  100. data/assets/platform/include/mruby/boxing_no.h +59 -0
  101. data/assets/{include → platform/include}/mruby/boxing_word.h +72 -26
  102. data/assets/platform/include/mruby/class.h +157 -0
  103. data/assets/{include → platform/include}/mruby/common.h +30 -1
  104. data/assets/{include → platform/include}/mruby/compile.h +52 -74
  105. data/assets/{include → platform/include}/mruby/data.h +2 -2
  106. data/assets/{include → platform/include}/mruby/debug.h +12 -5
  107. data/assets/{include → platform/include}/mruby/dump.h +7 -9
  108. data/assets/{include → platform/include}/mruby/endian.h +1 -1
  109. data/assets/platform/include/mruby/error.h +173 -0
  110. data/assets/platform/include/mruby/gc.h +79 -0
  111. data/assets/{include → platform/include}/mruby/hash.h +1 -7
  112. data/assets/platform/include/mruby/internal.h +282 -0
  113. data/assets/platform/include/mruby/irep.h +143 -0
  114. data/assets/{include → platform/include}/mruby/istruct.h +1 -1
  115. data/assets/platform/include/mruby/khash.h +455 -0
  116. data/assets/platform/include/mruby/mempool.h +19 -0
  117. data/assets/{include → platform/include}/mruby/numeric.h +7 -10
  118. data/assets/platform/include/mruby/object.h +51 -0
  119. data/assets/{include → platform/include}/mruby/opcode.h +5 -5
  120. data/assets/{include → platform/include}/mruby/ops.h +19 -6
  121. data/assets/platform/include/mruby/presym/id.h +1447 -0
  122. data/assets/{include → platform/include}/mruby/presym/scanning.h +10 -7
  123. data/assets/platform/include/mruby/presym/table.h +2893 -0
  124. data/assets/platform/include/mruby/presym.h +65 -0
  125. data/assets/platform/include/mruby/proc.h +184 -0
  126. data/assets/{include → platform/include}/mruby/range.h +0 -2
  127. data/assets/{include → platform/include}/mruby/string.h +33 -53
  128. data/assets/platform/include/mruby/throw.h +81 -0
  129. data/assets/{include → platform/include}/mruby/value.h +64 -29
  130. data/assets/{include → platform/include}/mruby/variable.h +6 -23
  131. data/assets/{include → platform/include}/mruby/version.h +7 -7
  132. data/assets/{include → platform/include}/mruby.h +238 -116
  133. data/assets/platform/macos-arm64/bin/mrbc +0 -0
  134. data/assets/platform/macos-arm64/lib/libSDL3.a +0 -0
  135. data/assets/platform/macos-arm64/lib/libSDL3_image.a +0 -0
  136. data/assets/platform/macos-arm64/lib/libSDL3_mixer.a +0 -0
  137. data/assets/platform/macos-arm64/lib/libSDL3_ttf.a +0 -0
  138. data/assets/platform/macos-arm64/lib/libmruby.a +0 -0
  139. data/assets/platform/wasm/lib/libFLAC.a +0 -0
  140. data/assets/platform/wasm/lib/libSDL3.a +0 -0
  141. data/assets/platform/wasm/lib/libSDL3_image.a +0 -0
  142. data/assets/platform/wasm/lib/libSDL3_mixer.a +0 -0
  143. data/assets/platform/wasm/lib/libSDL3_ttf.a +0 -0
  144. data/assets/platform/wasm/lib/libfreetype.a +0 -0
  145. data/assets/platform/wasm/lib/libharfbuzz.a +0 -0
  146. data/assets/platform/wasm/lib/libmruby.a +0 -0
  147. data/assets/platform/wasm/lib/libogg.a +0 -0
  148. data/assets/platform/wasm/lib/libplutosvg.a +0 -0
  149. data/assets/platform/wasm/lib/libplutovg.a +0 -0
  150. data/assets/platform/wasm/lib/libpng.a +0 -0
  151. data/assets/platform/wasm/lib/libpng16.a +0 -0
  152. data/assets/platform/wasm/lib/libvorbis.a +0 -0
  153. data/assets/platform/wasm/lib/libvorbisfile.a +0 -0
  154. data/assets/platform/wasm/lib/libzlibstatic.a +0 -0
  155. data/assets/platform/windows-arm64-mingw-ucrt/bin/mrbc.exe +0 -0
  156. data/assets/platform/windows-arm64-mingw-ucrt/lib/libSDL3.a +0 -0
  157. data/assets/platform/windows-arm64-mingw-ucrt/lib/libSDL3_image.a +0 -0
  158. data/assets/platform/windows-arm64-mingw-ucrt/lib/libSDL3_mixer.a +0 -0
  159. data/assets/platform/windows-arm64-mingw-ucrt/lib/libSDL3_ttf.a +0 -0
  160. data/assets/platform/windows-arm64-mingw-ucrt/lib/libmruby.a +0 -0
  161. data/assets/platform/windows-x86_64-mingw-ucrt/bin/mrbc.exe +0 -0
  162. data/assets/platform/windows-x86_64-mingw-ucrt/lib/libSDL3.a +0 -0
  163. data/assets/platform/windows-x86_64-mingw-ucrt/lib/libSDL3_image.a +0 -0
  164. data/assets/platform/windows-x86_64-mingw-ucrt/lib/libSDL3_mixer.a +0 -0
  165. data/assets/platform/windows-x86_64-mingw-ucrt/lib/libSDL3_ttf.a +0 -0
  166. data/assets/platform/windows-x86_64-mingw-ucrt/lib/libmruby.a +0 -0
  167. data/assets/resources/fonts/outfit/OFL.txt +93 -0
  168. data/assets/resources/fonts/outfit/outfit.ttf +0 -0
  169. data/assets/resources/fonts/roboto_mono/OFL.txt +91 -0
  170. data/assets/resources/fonts/roboto_mono/roboto_mono.ttf +0 -0
  171. data/assets/resources/icons/icon.icns +0 -0
  172. data/assets/resources/icons/icon.png +0 -0
  173. data/assets/resources/spritesheets/License.txt +28 -0
  174. data/assets/resources/spritesheets/spritesheet-backgrounds.png +0 -0
  175. data/assets/resources/spritesheets/spritesheet-backgrounds.xml +16 -0
  176. data/assets/resources/spritesheets/spritesheet-characters.png +0 -0
  177. data/assets/resources/spritesheets/spritesheet-characters.xml +47 -0
  178. data/assets/resources/spritesheets/spritesheet-enemies.png +0 -0
  179. data/assets/resources/spritesheets/spritesheet-enemies.xml +62 -0
  180. data/assets/resources/spritesheets/spritesheet-tiles.png +0 -0
  181. data/assets/resources/spritesheets/spritesheet-tiles.xml +316 -0
  182. data/assets/{wasm → resources/web}/template.html +1 -1
  183. data/assets/target.rb +131 -0
  184. data/bin/ruby2d +281 -82
  185. data/examples/astar.rb +269 -0
  186. data/examples/asteroids.rb +403 -0
  187. data/examples/bezier_editor.rb +96 -0
  188. data/examples/boids.rb +191 -0
  189. data/examples/bouncing_balls.rb +119 -0
  190. data/examples/breakout.rb +186 -0
  191. data/examples/constellations.rb +100 -0
  192. data/examples/dashboard.rb +133 -0
  193. data/examples/double_pendulum.rb +254 -0
  194. data/examples/falling_sand.rb +291 -0
  195. data/examples/fireworks.rb +110 -0
  196. data/examples/fluid_dynamics.rb +340 -0
  197. data/examples/fourier_epicycles.rb +142 -0
  198. data/examples/fractal_tree.rb +326 -0
  199. data/examples/game_of_life.rb +148 -0
  200. data/examples/gamepads.rb +333 -0
  201. data/examples/hill_driver.rb +613 -0
  202. data/examples/logo_animation.rb +251 -0
  203. data/examples/lorenz_attractor.rb +115 -0
  204. data/examples/mandelbrot.rb +207 -0
  205. data/examples/marching_squares.rb +200 -0
  206. data/examples/maze.rb +323 -0
  207. data/examples/nbody.rb +338 -0
  208. data/examples/outrun.rb +391 -0
  209. data/examples/pixel_paint.rb +313 -0
  210. data/examples/platformer.rb +335 -0
  211. data/examples/ray_casting_maze.rb +175 -0
  212. data/examples/shadow_casting.rb +151 -0
  213. data/examples/shape_recognizer.rb +908 -0
  214. data/examples/snake.rb +144 -0
  215. data/examples/sprite_sheets.rb +246 -0
  216. data/examples/swarm.rb +206 -0
  217. data/examples/tsp_annealing.rb +104 -0
  218. data/examples/ui_controls.rb +163 -0
  219. data/examples/wireframe_3d.rb +139 -0
  220. data/ext/ruby2d/audio.c +324 -0
  221. data/ext/ruby2d/canvas.c +1715 -494
  222. data/ext/ruby2d/ext.c +541 -0
  223. data/ext/ruby2d/extconf.rb +122 -145
  224. data/ext/ruby2d/font.c +566 -20
  225. data/ext/ruby2d/fps.c +92 -0
  226. data/ext/ruby2d/image.c +466 -41
  227. data/ext/ruby2d/ruby2d.c +374 -1890
  228. data/ext/ruby2d/ruby2d.h +840 -460
  229. data/ext/ruby2d/shapes.c +931 -101
  230. data/ext/ruby2d/text.c +586 -21
  231. data/ext/ruby2d/window.c +1693 -283
  232. data/lib/ruby2d/atlas_parser.rb +194 -0
  233. data/lib/ruby2d/audio.rb +73 -0
  234. data/lib/ruby2d/benchmark.rb +259 -0
  235. data/lib/ruby2d/bitmap_text.rb +155 -0
  236. data/lib/ruby2d/button.rb +402 -0
  237. data/lib/ruby2d/canvas.rb +703 -279
  238. data/lib/ruby2d/circle.rb +206 -29
  239. data/lib/ruby2d/cli/browser.rb +314 -0
  240. data/lib/ruby2d/cli/build.rb +471 -257
  241. data/lib/ruby2d/cli/colorize.rb +7 -5
  242. data/lib/ruby2d/cli/examples.rb +127 -0
  243. data/lib/ruby2d/cli/launch.rb +24 -39
  244. data/lib/ruby2d/cli/lib_files.rb +48 -0
  245. data/lib/ruby2d/cli/messages.rb +40 -0
  246. data/lib/ruby2d/cli/setup.rb +273 -0
  247. data/lib/ruby2d/cli/static_server.rb +160 -0
  248. data/lib/ruby2d/cli/usage.rb +255 -0
  249. data/lib/ruby2d/color.rb +191 -69
  250. data/lib/ruby2d/core.rb +37 -19
  251. data/lib/ruby2d/deps_help.rb +89 -0
  252. data/lib/ruby2d/dsl.rb +51 -12
  253. data/lib/ruby2d/ellipse.rb +228 -0
  254. data/lib/ruby2d/exceptions.rb +0 -2
  255. data/lib/ruby2d/font.rb +34 -74
  256. data/lib/ruby2d/gamepad.rb +323 -0
  257. data/lib/ruby2d/gem_paths.rb +19 -0
  258. data/lib/ruby2d/image.rb +155 -52
  259. data/lib/ruby2d/interactive.rb +103 -0
  260. data/lib/ruby2d/json_parser.rb +268 -0
  261. data/lib/ruby2d/line.rb +194 -85
  262. data/lib/ruby2d/mruby_compat.rb +12 -0
  263. data/lib/ruby2d/polygon.rb +297 -0
  264. data/lib/ruby2d/polyline.rb +368 -0
  265. data/lib/ruby2d/quad.rb +358 -94
  266. data/lib/ruby2d/rectangle.rb +77 -19
  267. data/lib/ruby2d/renderable.rb +411 -11
  268. data/lib/ruby2d/sprite.rb +471 -180
  269. data/lib/ruby2d/sprite_sheet.rb +64 -0
  270. data/lib/ruby2d/square.rb +29 -17
  271. data/lib/ruby2d/text.rb +196 -65
  272. data/lib/ruby2d/tileset.rb +139 -81
  273. data/lib/ruby2d/triangle.rb +324 -89
  274. data/lib/ruby2d/version.rb +1 -3
  275. data/lib/ruby2d/vertices.rb +62 -85
  276. data/lib/ruby2d/warnings.rb +29 -0
  277. data/lib/ruby2d/window/class_methods.rb +218 -0
  278. data/lib/ruby2d/window/gamepad_events.rb +141 -0
  279. data/lib/ruby2d/window/key_events.rb +74 -0
  280. data/lib/ruby2d/window/mouse_events.rb +171 -0
  281. data/lib/ruby2d/window/object_events.rb +168 -0
  282. data/lib/ruby2d/window.rb +632 -585
  283. data/lib/ruby2d.rb +14 -19
  284. metadata +275 -443
  285. data/assets/app.icns +0 -0
  286. data/assets/include/GL/glew.h +0 -26427
  287. data/assets/include/GLES2/gl2.h +0 -656
  288. data/assets/include/GLES2/gl2ext.h +0 -3949
  289. data/assets/include/GLES2/gl2ext_angle.h +0 -701
  290. data/assets/include/GLES2/gl2platform.h +0 -27
  291. data/assets/include/GLES3/gl3.h +0 -1192
  292. data/assets/include/GLES3/gl31.h +0 -1507
  293. data/assets/include/GLES3/gl32.h +0 -1808
  294. data/assets/include/GLES3/gl3platform.h +0 -27
  295. data/assets/include/KHR/khrplatform.h +0 -290
  296. data/assets/include/SDL2/SDL.h +0 -233
  297. data/assets/include/SDL2/SDL_assert.h +0 -326
  298. data/assets/include/SDL2/SDL_atomic.h +0 -415
  299. data/assets/include/SDL2/SDL_audio.h +0 -1500
  300. data/assets/include/SDL2/SDL_clipboard.h +0 -141
  301. data/assets/include/SDL2/SDL_config.h +0 -61
  302. data/assets/include/SDL2/SDL_config_android.h +0 -194
  303. data/assets/include/SDL2/SDL_config_emscripten.h +0 -218
  304. data/assets/include/SDL2/SDL_config_iphoneos.h +0 -217
  305. data/assets/include/SDL2/SDL_config_macosx.h +0 -277
  306. data/assets/include/SDL2/SDL_config_minimal.h +0 -95
  307. data/assets/include/SDL2/SDL_config_ngage.h +0 -89
  308. data/assets/include/SDL2/SDL_config_os2.h +0 -207
  309. data/assets/include/SDL2/SDL_config_pandora.h +0 -141
  310. data/assets/include/SDL2/SDL_config_windows.h +0 -331
  311. data/assets/include/SDL2/SDL_config_wingdk.h +0 -253
  312. data/assets/include/SDL2/SDL_config_winrt.h +0 -220
  313. data/assets/include/SDL2/SDL_config_xbox.h +0 -235
  314. data/assets/include/SDL2/SDL_cpuinfo.h +0 -594
  315. data/assets/include/SDL2/SDL_endian.h +0 -348
  316. data/assets/include/SDL2/SDL_error.h +0 -163
  317. data/assets/include/SDL2/SDL_events.h +0 -1166
  318. data/assets/include/SDL2/SDL_filesystem.h +0 -149
  319. data/assets/include/SDL2/SDL_gamecontroller.h +0 -1074
  320. data/assets/include/SDL2/SDL_gesture.h +0 -117
  321. data/assets/include/SDL2/SDL_guid.h +0 -100
  322. data/assets/include/SDL2/SDL_haptic.h +0 -1341
  323. data/assets/include/SDL2/SDL_hidapi.h +0 -451
  324. data/assets/include/SDL2/SDL_hints.h +0 -2569
  325. data/assets/include/SDL2/SDL_image.h +0 -2173
  326. data/assets/include/SDL2/SDL_joystick.h +0 -1066
  327. data/assets/include/SDL2/SDL_keyboard.h +0 -353
  328. data/assets/include/SDL2/SDL_keycode.h +0 -358
  329. data/assets/include/SDL2/SDL_loadso.h +0 -115
  330. data/assets/include/SDL2/SDL_log.h +0 -404
  331. data/assets/include/SDL2/SDL_main.h +0 -275
  332. data/assets/include/SDL2/SDL_mixer.h +0 -2784
  333. data/assets/include/SDL2/SDL_mouse.h +0 -465
  334. data/assets/include/SDL2/SDL_mutex.h +0 -471
  335. data/assets/include/SDL2/SDL_name.h +0 -33
  336. data/assets/include/SDL2/SDL_pixels.h +0 -644
  337. data/assets/include/SDL2/SDL_platform.h +0 -261
  338. data/assets/include/SDL2/SDL_quit.h +0 -58
  339. data/assets/include/SDL2/SDL_rect.h +0 -376
  340. data/assets/include/SDL2/SDL_render.h +0 -1919
  341. data/assets/include/SDL2/SDL_revision.h +0 -6
  342. data/assets/include/SDL2/SDL_rwops.h +0 -841
  343. data/assets/include/SDL2/SDL_sensor.h +0 -322
  344. data/assets/include/SDL2/SDL_shape.h +0 -155
  345. data/assets/include/SDL2/SDL_stdinc.h +0 -830
  346. data/assets/include/SDL2/SDL_surface.h +0 -997
  347. data/assets/include/SDL2/SDL_system.h +0 -623
  348. data/assets/include/SDL2/SDL_syswm.h +0 -386
  349. data/assets/include/SDL2/SDL_test_images.h +0 -78
  350. data/assets/include/SDL2/SDL_test_random.h +0 -115
  351. data/assets/include/SDL2/SDL_thread.h +0 -464
  352. data/assets/include/SDL2/SDL_timer.h +0 -222
  353. data/assets/include/SDL2/SDL_touch.h +0 -150
  354. data/assets/include/SDL2/SDL_ttf.h +0 -2316
  355. data/assets/include/SDL2/SDL_types.h +0 -29
  356. data/assets/include/SDL2/SDL_version.h +0 -204
  357. data/assets/include/SDL2/SDL_video.h +0 -2150
  358. data/assets/include/SDL2/SDL_vulkan.h +0 -215
  359. data/assets/include/SDL2/begin_code.h +0 -187
  360. data/assets/include/mruby/boxing_no.h +0 -58
  361. data/assets/include/mruby/class.h +0 -108
  362. data/assets/include/mruby/error.h +0 -147
  363. data/assets/include/mruby/gc.h +0 -94
  364. data/assets/include/mruby/irep.h +0 -147
  365. data/assets/include/mruby/khash.h +0 -284
  366. data/assets/include/mruby/object.h +0 -43
  367. data/assets/include/mruby/presym/disable.h +0 -70
  368. data/assets/include/mruby/presym/enable.h +0 -37
  369. data/assets/include/mruby/presym.h +0 -40
  370. data/assets/include/mruby/proc.h +0 -211
  371. data/assets/include/mruby/throw.h +0 -66
  372. data/assets/macos/universal/bin/mrbc +0 -0
  373. data/assets/macos/universal/lib/libFLAC.a +0 -0
  374. data/assets/macos/universal/lib/libSDL2.a +0 -0
  375. data/assets/macos/universal/lib/libSDL2_image.a +0 -0
  376. data/assets/macos/universal/lib/libSDL2_mixer.a +0 -0
  377. data/assets/macos/universal/lib/libSDL2_ttf.a +0 -0
  378. data/assets/macos/universal/lib/libavif.a +0 -0
  379. data/assets/macos/universal/lib/libbrotlicommon-static.a +0 -0
  380. data/assets/macos/universal/lib/libbrotlidec-static.a +0 -0
  381. data/assets/macos/universal/lib/libfreetype.a +0 -0
  382. data/assets/macos/universal/lib/libgraphite2.a +0 -0
  383. data/assets/macos/universal/lib/libharfbuzz.a +0 -0
  384. data/assets/macos/universal/lib/libhwy.a +0 -0
  385. data/assets/macos/universal/lib/libjpeg.a +0 -0
  386. data/assets/macos/universal/lib/libjxl.a +0 -0
  387. data/assets/macos/universal/lib/libmodplug.a +0 -0
  388. data/assets/macos/universal/lib/libmpg123.a +0 -0
  389. data/assets/macos/universal/lib/libmruby.a +0 -0
  390. data/assets/macos/universal/lib/libogg.a +0 -0
  391. data/assets/macos/universal/lib/libpng.a +0 -0
  392. data/assets/macos/universal/lib/libtiff.a +0 -0
  393. data/assets/macos/universal/lib/libvorbis.a +0 -0
  394. data/assets/macos/universal/lib/libvorbisfile.a +0 -0
  395. data/assets/macos/universal/lib/libwebp.a +0 -0
  396. data/assets/macos/universal/lib/libzstd.a +0 -0
  397. data/assets/test_media/README.md +0 -3
  398. data/assets/test_media/bitstream_vera/COPYRIGHT.txt +0 -124
  399. data/assets/test_media/bitstream_vera/vera.ttf +0 -0
  400. data/assets/test_media/boom.png +0 -0
  401. data/assets/test_media/coin.png +0 -0
  402. data/assets/test_media/colors.png +0 -0
  403. data/assets/test_media/controller.png +0 -0
  404. data/assets/test_media/dial.wav +0 -0
  405. data/assets/test_media/hero.png +0 -0
  406. data/assets/test_media/image.bmp +0 -0
  407. data/assets/test_media/image.jpg +0 -0
  408. data/assets/test_media/image.png +0 -0
  409. data/assets/test_media/music.flac +0 -0
  410. data/assets/test_media/music.mp3 +0 -0
  411. data/assets/test_media/music.ogg +0 -0
  412. data/assets/test_media/music.wav +0 -0
  413. data/assets/test_media/originals/boom.pxm +0 -0
  414. data/assets/test_media/originals/coin.pxm +0 -0
  415. data/assets/test_media/originals/controller.sketch +0 -0
  416. data/assets/test_media/originals/hero.pxm +0 -0
  417. data/assets/test_media/originals/image.pxm +0 -0
  418. data/assets/test_media/originals/music.caf +0 -0
  419. data/assets/test_media/originals/texture_atlas.pxm +0 -0
  420. data/assets/test_media/rondo_alla_turka.ogg +0 -0
  421. data/assets/test_media/sound.flac +0 -0
  422. data/assets/test_media/sound.mp3 +0 -0
  423. data/assets/test_media/sound.ogg +0 -0
  424. data/assets/test_media/sound.wav +0 -0
  425. data/assets/test_media/sprite_sheet.png +0 -0
  426. data/assets/test_media/texture_atlas.png +0 -0
  427. data/assets/wasm/libmruby.a +0 -0
  428. data/assets/windows/mingw-w64-ucrt-x86_64/bin/mrbc.exe +0 -0
  429. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libFLAC.a +0 -0
  430. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libLerc.a +0 -0
  431. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libSDL2.a +0 -0
  432. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libSDL2_image.a +0 -0
  433. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libSDL2_mixer.a +0 -0
  434. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libSDL2_ttf.a +0 -0
  435. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libbrotlicommon.a +0 -0
  436. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libbrotlidec.a +0 -0
  437. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libbz2.a +0 -0
  438. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libdeflate.a +0 -0
  439. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libfreetype.a +0 -0
  440. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libglew32.a +0 -0
  441. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libgraphite2.a +0 -0
  442. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libharfbuzz.a +0 -0
  443. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libhwy.a +0 -0
  444. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libjbig.a +0 -0
  445. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libjpeg.a +0 -0
  446. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libjxl.a +0 -0
  447. data/assets/windows/mingw-w64-ucrt-x86_64/lib/liblzma.a +0 -0
  448. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libmodplug.a +0 -0
  449. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libmpg123.a +0 -0
  450. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libmruby.a +0 -0
  451. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libogg.a +0 -0
  452. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libopus.a +0 -0
  453. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libopusfile.a +0 -0
  454. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libpng.a +0 -0
  455. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libsndfile.a +0 -0
  456. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libssp.a +0 -1
  457. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libstdc++.a +0 -0
  458. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libtiff.a +0 -0
  459. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libvorbis.a +0 -0
  460. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libvorbisfile.a +0 -0
  461. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libwebp.a +0 -0
  462. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libz.a +0 -0
  463. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libzstd.a +0 -0
  464. data/assets/windows/mingw-w64-x86_64/bin/mrbc.exe +0 -0
  465. data/assets/windows/mingw-w64-x86_64/lib/libFLAC.a +0 -0
  466. data/assets/windows/mingw-w64-x86_64/lib/libLerc.a +0 -0
  467. data/assets/windows/mingw-w64-x86_64/lib/libSDL2.a +0 -0
  468. data/assets/windows/mingw-w64-x86_64/lib/libSDL2_image.a +0 -0
  469. data/assets/windows/mingw-w64-x86_64/lib/libSDL2_mixer.a +0 -0
  470. data/assets/windows/mingw-w64-x86_64/lib/libSDL2_ttf.a +0 -0
  471. data/assets/windows/mingw-w64-x86_64/lib/libbrotlicommon.a +0 -0
  472. data/assets/windows/mingw-w64-x86_64/lib/libbrotlidec.a +0 -0
  473. data/assets/windows/mingw-w64-x86_64/lib/libbz2.a +0 -0
  474. data/assets/windows/mingw-w64-x86_64/lib/libdeflate.a +0 -0
  475. data/assets/windows/mingw-w64-x86_64/lib/libfreetype.a +0 -0
  476. data/assets/windows/mingw-w64-x86_64/lib/libglew32.a +0 -0
  477. data/assets/windows/mingw-w64-x86_64/lib/libgraphite2.a +0 -0
  478. data/assets/windows/mingw-w64-x86_64/lib/libharfbuzz.a +0 -0
  479. data/assets/windows/mingw-w64-x86_64/lib/libhwy.a +0 -0
  480. data/assets/windows/mingw-w64-x86_64/lib/libjbig.a +0 -0
  481. data/assets/windows/mingw-w64-x86_64/lib/libjpeg.a +0 -0
  482. data/assets/windows/mingw-w64-x86_64/lib/libjxl.a +0 -0
  483. data/assets/windows/mingw-w64-x86_64/lib/liblzma.a +0 -0
  484. data/assets/windows/mingw-w64-x86_64/lib/libmodplug.a +0 -0
  485. data/assets/windows/mingw-w64-x86_64/lib/libmpg123.a +0 -0
  486. data/assets/windows/mingw-w64-x86_64/lib/libmruby.a +0 -0
  487. data/assets/windows/mingw-w64-x86_64/lib/libogg.a +0 -0
  488. data/assets/windows/mingw-w64-x86_64/lib/libopus.a +0 -0
  489. data/assets/windows/mingw-w64-x86_64/lib/libopusfile.a +0 -0
  490. data/assets/windows/mingw-w64-x86_64/lib/libpng.a +0 -0
  491. data/assets/windows/mingw-w64-x86_64/lib/libsndfile.a +0 -0
  492. data/assets/windows/mingw-w64-x86_64/lib/libssp.a +0 -1
  493. data/assets/windows/mingw-w64-x86_64/lib/libstdc++.a +0 -0
  494. data/assets/windows/mingw-w64-x86_64/lib/libtiff.a +0 -0
  495. data/assets/windows/mingw-w64-x86_64/lib/libvorbis.a +0 -0
  496. data/assets/windows/mingw-w64-x86_64/lib/libvorbisfile.a +0 -0
  497. data/assets/windows/mingw-w64-x86_64/lib/libwebp.a +0 -0
  498. data/assets/windows/mingw-w64-x86_64/lib/libz.a +0 -0
  499. data/assets/windows/mingw-w64-x86_64/lib/libzstd.a +0 -0
  500. data/assets/xcode/ios/Assets.xcassets/AppIcon.appiconset/Contents.json +0 -98
  501. data/assets/xcode/ios/Assets.xcassets/Contents.json +0 -6
  502. data/assets/xcode/ios/Base.lproj/LaunchScreen.storyboard +0 -27
  503. data/assets/xcode/ios/Info.plist +0 -43
  504. data/assets/xcode/ios/MRuby.framework/Headers/mrbconf.h +0 -143
  505. data/assets/xcode/ios/MRuby.framework/Headers/mruby/array.h +0 -280
  506. data/assets/xcode/ios/MRuby.framework/Headers/mruby/boxing_nan.h +0 -102
  507. data/assets/xcode/ios/MRuby.framework/Headers/mruby/boxing_no.h +0 -56
  508. data/assets/xcode/ios/MRuby.framework/Headers/mruby/boxing_word.h +0 -144
  509. data/assets/xcode/ios/MRuby.framework/Headers/mruby/class.h +0 -97
  510. data/assets/xcode/ios/MRuby.framework/Headers/mruby/common.h +0 -77
  511. data/assets/xcode/ios/MRuby.framework/Headers/mruby/compile.h +0 -195
  512. data/assets/xcode/ios/MRuby.framework/Headers/mruby/data.h +0 -75
  513. data/assets/xcode/ios/MRuby.framework/Headers/mruby/debug.h +0 -67
  514. data/assets/xcode/ios/MRuby.framework/Headers/mruby/dump.h +0 -196
  515. data/assets/xcode/ios/MRuby.framework/Headers/mruby/error.h +0 -75
  516. data/assets/xcode/ios/MRuby.framework/Headers/mruby/gc.h +0 -91
  517. data/assets/xcode/ios/MRuby.framework/Headers/mruby/hash.h +0 -215
  518. data/assets/xcode/ios/MRuby.framework/Headers/mruby/irep.h +0 -75
  519. data/assets/xcode/ios/MRuby.framework/Headers/mruby/istruct.h +0 -47
  520. data/assets/xcode/ios/MRuby.framework/Headers/mruby/khash.h +0 -274
  521. data/assets/xcode/ios/MRuby.framework/Headers/mruby/numeric.h +0 -161
  522. data/assets/xcode/ios/MRuby.framework/Headers/mruby/object.h +0 -44
  523. data/assets/xcode/ios/MRuby.framework/Headers/mruby/opcode.h +0 -69
  524. data/assets/xcode/ios/MRuby.framework/Headers/mruby/ops.h +0 -117
  525. data/assets/xcode/ios/MRuby.framework/Headers/mruby/proc.h +0 -131
  526. data/assets/xcode/ios/MRuby.framework/Headers/mruby/range.h +0 -49
  527. data/assets/xcode/ios/MRuby.framework/Headers/mruby/re.h +0 -16
  528. data/assets/xcode/ios/MRuby.framework/Headers/mruby/string.h +0 -444
  529. data/assets/xcode/ios/MRuby.framework/Headers/mruby/throw.h +0 -55
  530. data/assets/xcode/ios/MRuby.framework/Headers/mruby/value.h +0 -309
  531. data/assets/xcode/ios/MRuby.framework/Headers/mruby/variable.h +0 -136
  532. data/assets/xcode/ios/MRuby.framework/Headers/mruby/version.h +0 -110
  533. data/assets/xcode/ios/MRuby.framework/Headers/mruby.h +0 -1282
  534. data/assets/xcode/ios/MRuby.framework/Info.plist +0 -20
  535. data/assets/xcode/ios/MRuby.framework/MRuby +0 -0
  536. data/assets/xcode/ios/MyApp.xcodeproj/project.pbxproj +0 -368
  537. data/assets/xcode/ios/MyApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
  538. data/assets/xcode/ios/MyApp.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
  539. data/assets/xcode/ios/MyApp.xcodeproj/project.xcworkspace/xcshareddata/MyApp.xcscmblueprint +0 -30
  540. data/assets/xcode/ios/main.c +0 -1
  541. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Back.imagestacklayer/Content.imageset/Contents.json +0 -16
  542. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Back.imagestacklayer/Contents.json +0 -6
  543. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Contents.json +0 -17
  544. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Front.imagestacklayer/Content.imageset/Contents.json +0 -16
  545. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Front.imagestacklayer/Contents.json +0 -6
  546. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json +0 -16
  547. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Middle.imagestacklayer/Contents.json +0 -6
  548. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Back.imagestacklayer/Content.imageset/Contents.json +0 -16
  549. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Back.imagestacklayer/Contents.json +0 -6
  550. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Contents.json +0 -17
  551. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Front.imagestacklayer/Content.imageset/Contents.json +0 -16
  552. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Front.imagestacklayer/Contents.json +0 -6
  553. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json +0 -16
  554. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Middle.imagestacklayer/Contents.json +0 -6
  555. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Contents.json +0 -32
  556. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image Wide.imageset/Contents.json +0 -16
  557. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image.imageset/Contents.json +0 -16
  558. data/assets/xcode/tvos/Assets.xcassets/Contents.json +0 -6
  559. data/assets/xcode/tvos/Assets.xcassets/LaunchImage.launchimage/Contents.json +0 -22
  560. data/assets/xcode/tvos/Info.plist +0 -30
  561. data/assets/xcode/tvos/MRuby.framework/Headers/mrbconf.h +0 -143
  562. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/array.h +0 -280
  563. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/boxing_nan.h +0 -102
  564. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/boxing_no.h +0 -56
  565. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/boxing_word.h +0 -144
  566. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/class.h +0 -97
  567. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/common.h +0 -77
  568. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/compile.h +0 -195
  569. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/data.h +0 -75
  570. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/debug.h +0 -67
  571. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/dump.h +0 -196
  572. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/error.h +0 -75
  573. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/gc.h +0 -91
  574. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/hash.h +0 -215
  575. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/irep.h +0 -75
  576. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/istruct.h +0 -47
  577. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/khash.h +0 -274
  578. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/numeric.h +0 -161
  579. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/object.h +0 -44
  580. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/opcode.h +0 -69
  581. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/ops.h +0 -117
  582. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/proc.h +0 -131
  583. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/range.h +0 -49
  584. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/re.h +0 -16
  585. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/string.h +0 -444
  586. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/throw.h +0 -55
  587. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/value.h +0 -309
  588. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/variable.h +0 -136
  589. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/version.h +0 -110
  590. data/assets/xcode/tvos/MRuby.framework/Headers/mruby.h +0 -1282
  591. data/assets/xcode/tvos/MRuby.framework/Info.plist +0 -20
  592. data/assets/xcode/tvos/MRuby.framework/MRuby +0 -0
  593. data/assets/xcode/tvos/MyApp.xcodeproj/project.pbxproj +0 -350
  594. data/assets/xcode/tvos/MyApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
  595. data/assets/xcode/tvos/MyApp.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
  596. data/assets/xcode/tvos/MyApp.xcodeproj/project.xcworkspace/xcshareddata/MyApp.xcscmblueprint +0 -30
  597. data/assets/xcode/tvos/main.c +0 -1
  598. data/ext/ruby2d/common.c +0 -185
  599. data/ext/ruby2d/controllers.c +0 -110
  600. data/ext/ruby2d/gl.c +0 -398
  601. data/ext/ruby2d/gl2.c +0 -86
  602. data/ext/ruby2d/gl3.c +0 -304
  603. data/ext/ruby2d/gles.c +0 -302
  604. data/ext/ruby2d/input.c +0 -48
  605. data/ext/ruby2d/music.c +0 -127
  606. data/ext/ruby2d/sound.c +0 -132
  607. data/lib/ruby2d/cli/console.rb +0 -65
  608. data/lib/ruby2d/cli/enable_console.rb +0 -7
  609. data/lib/ruby2d/cli/platform.rb +0 -17
  610. data/lib/ruby2d/music.rb +0 -77
  611. data/lib/ruby2d/pixel.rb +0 -18
  612. data/lib/ruby2d/pixmap.rb +0 -39
  613. data/lib/ruby2d/pixmap_atlas.rb +0 -56
  614. data/lib/ruby2d/sound.rb +0 -61
  615. data/lib/ruby2d/texture.rb +0 -38
  616. /data/assets/{include/SDL2 → platform/include/SDL3}/SDL_opengles2_gl2.h +0 -0
  617. /data/assets/{include/SDL2 → platform/include/SDL3}/SDL_opengles2_gl2ext.h +0 -0
  618. /data/assets/{include/SDL2 → platform/include/SDL3}/SDL_opengles2_gl2platform.h +0 -0
  619. /data/assets/{include/SDL2 → platform/include/SDL3}/SDL_opengles2_khrplatform.h +0 -0
  620. /data/assets/{include → platform/include}/mruby/re.h +0 -0
data/lib/ruby2d/color.rb CHANGED
@@ -1,55 +1,80 @@
1
- # frozen_string_literal: true
2
-
3
1
  # Ruby2D::Color
4
2
 
5
3
  module Ruby2D
6
- # Colors are represented by the Color class. Colors can be created from keywords
7
- # (based on css), a hexadecimal value or an array containing a collection of
8
- # red, green, blue, and alpha (transparency) values expressed as a Float from 0.0 to 1.0.
4
+ # A color from a keyword, hex value, or RGBA array
9
5
  class Color
10
- # Color::Set represents an array of colors.
6
+ # An array of colors
11
7
  class Set
12
8
  include Enumerable
13
9
 
10
+ # Create a color set from an array of colors
14
11
  def initialize(colors)
12
+ raise Error, 'a Color::Set requires at least one color, got an empty array' if colors.empty?
13
+
15
14
  @colors = colors.map { |c| Color.new(c) }
16
15
  end
17
16
 
17
+ # Get a color by index
18
18
  def [](index)
19
19
  @colors[index]
20
20
  end
21
21
 
22
+ # Get the number of colors in the set
22
23
  def length
23
24
  @colors.length
24
25
  end
25
26
 
26
- alias count length
27
-
27
+ # Iterate over each color
28
28
  def each(&block)
29
29
  @colors.each(&block)
30
30
  end
31
31
 
32
- def first
33
- @colors.first
32
+ # Get the first color, or the first `n` colors if a count is given
33
+ def first(*args)
34
+ @colors.first(*args)
34
35
  end
35
36
 
36
- def last
37
- @colors.last
37
+ # Get the last color, or the last `n` colors if a count is given
38
+ def last(*args)
39
+ @colors.last(*args)
38
40
  end
39
41
 
42
+ # Get the opacity of the first color
40
43
  def opacity
41
44
  @colors.first.opacity
42
45
  end
43
46
 
47
+ # Set the opacity for all colors
44
48
  def opacity=(opacity)
49
+ unless opacity.is_a?(Numeric)
50
+ raise ArgumentError, "opacity must be a number between 0.0 and 1.0, got #{opacity.inspect}"
51
+ end
52
+
45
53
  @colors.each do |color|
46
54
  color.opacity = opacity
47
55
  end
48
56
  end
57
+
58
+ # The color for the i-th vertex. Paired with `Color#vertex` so per-vertex
59
+ # rendering code can uniformly call `color.vertex(i)` whether it holds a
60
+ # single `Color` (every vertex is the same) or a `Color::Set`.
61
+ def vertex(i)
62
+ @colors[i]
63
+ end
49
64
  end
50
65
 
51
66
  attr_accessor :r, :g, :b, :a
52
67
 
68
+ # Bounded cache of parsed color strings, keyed by the user input.
69
+ # `'random'` is never cached (re-randomized on each call).
70
+ PARSE_CACHE_MAX = 256
71
+ @parse_cache = {}
72
+
73
+ # Bounded cache of shared Color instances for immediate-mode `.render`
74
+ # calls, keyed by the color string. See `Color.for_render`.
75
+ RENDER_CACHE_MAX = 256
76
+ @render_cache = {}
77
+
53
78
  # Based on clrs.cc
54
79
  NAMED_COLORS = {
55
80
  'navy' => '#001F3F',
@@ -73,17 +98,18 @@ module Ruby2D
73
98
  'random' => ''
74
99
  }.freeze
75
100
 
101
+ # Create a color from a keyword, hex string, array, or Color
76
102
  def initialize(color)
77
- raise Error, "`#{color}` is not a valid color" unless self.class.valid? color
103
+ raise Error, "#{color.inspect} is not a valid color" unless self.class.valid? color
78
104
 
79
105
  case color
80
106
  when String
81
107
  init_from_string color
82
108
  when Array
83
- @r = color[0]
84
- @g = color[1]
85
- @b = color[2]
86
- @a = color[3]
109
+ @r = channel(color[0])
110
+ @g = channel(color[1])
111
+ @b = channel(color[2])
112
+ @a = color.length == 4 ? channel(color[3]) : 1.0
87
113
  when Color
88
114
  @r = color.r
89
115
  @g = color.g
@@ -93,10 +119,15 @@ module Ruby2D
93
119
  end
94
120
 
95
121
  class << self
96
- # Return a color set if an array of valid colors
122
+ # Create a Color or Color::Set from the given value
97
123
  def set(colors)
98
- # If a valid array of colors, return a `Color::Set` with those colors
99
- if colors.is_a?(Array) && colors.all? { |el| Color.valid? el }
124
+ # Already a Color::Set (e.g. re-applying a gradient fill): pass through.
125
+ return colors if colors.is_a?(Color::Set)
126
+
127
+ # A non-empty array of valid colors becomes a `Color::Set`. An empty
128
+ # array is not a valid gradient, so it falls through to `Color.new`,
129
+ # which raises a clear "not a valid color" at the mistake site.
130
+ if colors.is_a?(Array) && !colors.empty? && colors.all? { |el| Color.valid? el }
100
131
  Color::Set.new(colors)
101
132
  # Otherwise, return single color
102
133
  else
@@ -104,86 +135,177 @@ module Ruby2D
104
135
  end
105
136
  end
106
137
 
107
- # Check if string is a proper hex value
138
+ # Resolve a color for an immediate-mode class-level `.render` call.
139
+ # Behaves like `.set`, except string colors and flat `[r, g, b(, a)]`
140
+ # numeric arrays return a shared cached Color instance, skipping the
141
+ # validation re-scan and object allocation `.new` pays on every call —
142
+ # those two forms are the common case in per-frame draws, and on the web
143
+ # (mruby/wasm) that per-call cost dominates the frame budget. The cached
144
+ # instance is read and forwarded to the native draw call immediately; it
145
+ # must never be stored on an object or handed to user code (a later
146
+ # mutation would corrupt every subsequent lookup) — use `.set` anywhere
147
+ # the color is kept. `'random'` is never cached, so each call still
148
+ # rolls a fresh color.
149
+ def for_render(colors)
150
+ if colors.is_a?(String)
151
+ cached = @render_cache[colors]
152
+ return cached if cached
153
+ return Color.new(colors) if colors == 'random'
154
+
155
+ @render_cache.shift if @render_cache.size >= RENDER_CACHE_MAX
156
+ @render_cache[colors] = Color.new(colors)
157
+ elsif colors.is_a?(Array) && colors[0].is_a?(Numeric) && rgba_array?(colors)
158
+ # ^ The two inline checks pre-screen the non-match cases (an array of
159
+ # colors starts with a String/Array/Color, never a Numeric) so this
160
+ # per-draw-call path only pays the `rgba_array?` method call when the
161
+ # input is almost certainly a cacheable [r, g, b(, a)] array.
162
+ # Array keys are looked up by value, so mutating a previously seen
163
+ # array can't corrupt the mapping — it just misses and inserts a new
164
+ # entry. The stored key is a frozen copy for the same reason.
165
+ cached = @render_cache[colors]
166
+ return cached if cached
167
+
168
+ c = Color.new(colors)
169
+ @render_cache.shift if @render_cache.size >= RENDER_CACHE_MAX
170
+ @render_cache[colors.dup.freeze] = c
171
+ else
172
+ set(colors)
173
+ end
174
+ end
175
+
176
+ # A flat `[r, g, b]` or `[r, g, b, a]` numeric array — the array form a
177
+ # single color takes (an array of *colors* is a `Color::Set`, and its
178
+ # elements are never bare Numerics). `while`, not blocks — this guards
179
+ # the per-draw-call render path and block calls dominate on wasm mruby.
180
+ def rgba_array?(colors)
181
+ return false unless colors.is_a?(Array)
182
+
183
+ n = colors.length
184
+ return false unless n == 3 || n == 4
185
+
186
+ i = 0
187
+ while i < n
188
+ return false unless colors[i].is_a?(Numeric)
189
+ i += 1
190
+ end
191
+ true
192
+ end
193
+
194
+ # Check if the string is a valid hex color value
195
+ # Byte comparisons, not slicing: `valid?` calls this on every `Color.new`
196
+ # and on every per-vertex color of every immediate-mode draw, and the
197
+ # readable form (`[0]`, `[1..]`, `.chars`, plus a fresh literal for the
198
+ # allowed set) allocated about ten short-lived strings each time.
108
199
  def hex?(color_string)
109
- # MRuby doesn't support regex, otherwise we'd do:
110
- # !(/^#[0-9A-F]{6}$/i.match(a).nil?)
111
- color_string.instance_of?(String) &&
112
- color_string[0] == '#' &&
113
- color_string.length == 7
200
+ return false unless color_string.instance_of?(String) &&
201
+ color_string.getbyte(0) == 35 # '#'
202
+
203
+ len = color_string.length
204
+ return false unless len == 4 || len == 7 || len == 9
205
+
206
+ i = 1
207
+ while i < len
208
+ b = color_string.getbyte(i)
209
+ return false unless (b >= 48 && b <= 57) || # 0-9
210
+ (b >= 65 && b <= 70) || # A-F
211
+ (b >= 97 && b <= 102) # a-f
212
+
213
+ i += 1
214
+ end
215
+ true
114
216
  end
115
217
 
116
- # Check if the color is valid
218
+ # Check if the value is a valid color
117
219
  def valid?(color)
118
220
  color.is_a?(Color) || # color object
119
221
  NAMED_COLORS.key?(color) || # keyword
120
222
  hex?(color) || # hexadecimal value
121
- ( # Array of Floats from 0.0..1.0
223
+ ( # [r, g, b] or [r, g, b, a] numbers
122
224
  color.instance_of?(Array) &&
123
- color.length == 4 &&
225
+ (color.length == 3 || color.length == 4) &&
124
226
  color.all? { |el| el.is_a?(Numeric) }
125
227
  )
126
228
  end
127
229
 
128
- #
129
- # Backwards compatibility
130
- alias is_valid? valid?
131
- alias is_hex? valid?
230
+ # Parse a color string into a frozen `[r, g, b, a]` tuple, caching the
231
+ # result. Named colors and hex strings are cached; `'random'` is not.
232
+ # Callers must not mutate the returned array.
233
+ def parse_string(color)
234
+ # Check the cache first so the hot path (a previously-seen named or hex
235
+ # color) returns before the `'random'` literal comparison, which would
236
+ # otherwise allocate a fresh `'random'` string on every call. `'random'`
237
+ # is never cached, so it still falls through to a fresh value below.
238
+ cached = @parse_cache[color]
239
+ return cached if cached
240
+
241
+ return [rand, rand, rand, 1.0] if color == 'random'
242
+
243
+ source = hex?(color) ? color : NAMED_COLORS[color]
244
+ rgba = hex_to_f(source).freeze
245
+ @parse_cache.shift if @parse_cache.size >= PARSE_CACHE_MAX
246
+ @parse_cache[color] = rgba
247
+ end
248
+
249
+ private
250
+
251
+ # Convert a hex color (e.g. #FFF, #FFF000, #FFF000FF) to [r, g, b, a]
252
+ # floats in 0.0..1.0.
253
+ def hex_to_f(hex_color)
254
+ hex = hex_color[1..]
255
+ hex = hex.chars.map { |c| c * 2 }.join if hex.length == 3
256
+ rgba = hex.chars.each_slice(2).map { |pair| pair.join.to_i(16) }
257
+ rgba << 255 if rgba.length == 3
258
+ rgba.map { |n| n / 255.0 }
259
+ end
132
260
  end
133
261
 
134
- # Convenience methods to alias `opacity` to `@a`
262
+ # Get the opacity
135
263
  def opacity
136
264
  @a
137
265
  end
138
266
 
267
+ # Set the opacity. Must be a single number; per-vertex opacity (an array)
268
+ # is only supported by shapes that handle it explicitly, such as Polyline.
269
+ # The value is clamped to 0.0..1.0 so an animation that momentarily drives
270
+ # opacity out of range degrades to fully transparent/opaque rather than
271
+ # wrapping the Uint8 alpha cast into a wrong, near-opaque byte.
139
272
  def opacity=(opacity)
140
- @a = opacity
273
+ unless opacity.is_a?(Numeric)
274
+ raise ArgumentError, "opacity must be a number between 0.0 and 1.0, got #{opacity.inspect}"
275
+ end
276
+
277
+ @a = opacity.clamp(0.0, 1.0)
141
278
  end
142
279
 
143
- # Return colour components as an array +[r, g, b, a]+
280
+ # Return the color components as an array
144
281
  def to_a
145
282
  [@r, @g, @b, @a]
146
283
  end
147
284
 
148
- private
149
-
150
- def init_from_string(color)
151
- if color == 'random'
152
- init_random_color
153
- elsif self.class.hex?(color)
154
- @r, @g, @b, @a = hex_to_f(color)
155
- else
156
- @r, @g, @b, @a = hex_to_f(NAMED_COLORS[color])
157
- end
285
+ # The color for the i-th vertex. A single `Color` represents "every vertex
286
+ # is the same color," so every index returns self. Mirrors `Color::Set#vertex`
287
+ # so per-vertex rendering code can call `color.vertex(i)` without branching.
288
+ def vertex(_i)
289
+ self
158
290
  end
159
291
 
160
- def init_random_color
161
- @r = rand
162
- @g = rand
163
- @b = rand
164
- @a = 1.0
165
- end
292
+ private
166
293
 
167
- # Convert from Fixnum (0..255) to Float (0.0..1.0)
168
- def i_to_f(color_array)
169
- b = []
170
- color_array.each do |n|
171
- b.push(n / 255.0)
172
- end
173
- b
294
+ def init_from_string(color)
295
+ @r, @g, @b, @a = self.class.parse_string(color)
174
296
  end
175
297
 
176
- # Convert from hex value (e.g. #FFF000) to Float (0.0..1.0)
177
- def hex_to_f(hex_color)
178
- hex_color = (hex_color[1..]).chars.each_slice(2).map(&:join)
179
- a = []
180
-
181
- hex_color.each do |el|
182
- a.push(el.to_i(16))
183
- end
298
+ # Interpret a color channel on the 0.0..1.0 scale — the graphics-programming
299
+ # convention also used internally and by the renderer. Both integers and
300
+ # floats are taken at face value on this scale, so `1` is full intensity and
301
+ # `0` is none; for 0..255 byte values, use a hex string like `'#FF8000'`. An
302
+ # out-of-range value warns once and clamps to the nearest bound so the stored
303
+ # color always stays in range.
304
+ def channel(value)
305
+ return value.to_f if value >= 0.0 && value <= 1.0
184
306
 
185
- a.push(255)
186
- i_to_f(a)
307
+ Ruby2D.warn("color value #{value} is out of range; components must be 0.0..1.0")
308
+ value < 0.0 ? 0.0 : 1.0
187
309
  end
188
310
  end
189
311
 
data/lib/ruby2d/core.rb CHANGED
@@ -1,32 +1,50 @@
1
- # frozen_string_literal: true
2
-
3
1
  # Ruby2D module and native extension loader
4
2
 
5
3
  unless RUBY_ENGINE == 'mruby'
6
4
  require 'ruby2d/cli/colorize'
7
5
  require 'ruby2d/exceptions'
6
+ require 'ruby2d/warnings'
7
+ require 'ruby2d/window/class_methods'
8
+ require 'ruby2d/window/key_events'
9
+ require 'ruby2d/window/mouse_events'
10
+ require 'ruby2d/window/gamepad_events'
11
+ require 'ruby2d/window/object_events'
12
+ require 'ruby2d/gamepad'
13
+ require 'ruby2d/window'
14
+ require 'ruby2d/interactive'
8
15
  require 'ruby2d/renderable'
9
16
  require 'ruby2d/color'
10
- require 'ruby2d/window'
11
- require 'ruby2d/dsl'
12
- require 'ruby2d/quad'
13
- require 'ruby2d/line'
17
+ require 'ruby2d/audio'
18
+ require 'ruby2d/canvas'
14
19
  require 'ruby2d/circle'
15
- require 'ruby2d/rectangle'
16
- require 'ruby2d/square'
17
- require 'ruby2d/triangle'
18
- require 'ruby2d/pixel'
19
- require 'ruby2d/pixmap'
20
- require 'ruby2d/pixmap_atlas'
20
+ require 'ruby2d/ellipse'
21
+ require 'ruby2d/font'
21
22
  require 'ruby2d/image'
23
+ require 'ruby2d/json_parser'
24
+ require 'ruby2d/atlas_parser'
25
+ require 'ruby2d/sprite_sheet'
26
+ require 'ruby2d/line'
27
+ require 'ruby2d/polygon'
28
+ require 'ruby2d/polyline'
29
+ require 'ruby2d/quad'
30
+ require 'ruby2d/rectangle'
22
31
  require 'ruby2d/sprite'
23
- require 'ruby2d/tileset'
24
- require 'ruby2d/font'
32
+ require 'ruby2d/square'
25
33
  require 'ruby2d/text'
26
- require 'ruby2d/canvas'
27
- require 'ruby2d/sound'
28
- require 'ruby2d/music'
29
- require 'ruby2d/texture'
34
+ require 'ruby2d/bitmap_text'
35
+ require 'ruby2d/tileset'
36
+ require 'ruby2d/triangle'
37
+ require 'ruby2d/button'
30
38
  require 'ruby2d/vertices'
31
- require 'ruby2d/ruby2d' # load native extension
39
+ begin
40
+ require 'ruby2d/ruby2d' # load native extension
41
+ rescue LoadError
42
+ # The extension isn't built — most often because SDL3 wasn't available at
43
+ # install time (see ext/ruby2d/extconf.rb, which then installs without it).
44
+ # Print the same recovery guidance the install shows and stop cleanly, so
45
+ # the user gets the notice — not a cryptic "cannot load such file" backtrace.
46
+ require 'ruby2d/deps_help'
47
+ abort Ruby2D::DepsHelp.notice
48
+ end
49
+ require 'ruby2d/dsl' # must loaded last, needs native extension
32
50
  end
@@ -0,0 +1,89 @@
1
+ # Extension-free guidance for when Ruby 2D's native dependency, SDL3, isn't
2
+ # available. Shared by `ext/ruby2d/extconf.rb` (install time, when the extension
3
+ # can't link) and the native-load rescue in `ruby2d/core` (run time, when the
4
+ # extension was never built) — so the message is authored once and can't drift.
5
+ #
6
+ # `require_relative` (not `require`) so it resolves both at install time, when
7
+ # `lib/` isn't on the load path, and at run time, when it is.
8
+
9
+ require_relative 'cli/colorize'
10
+ require_relative '../../assets/target'
11
+
12
+ module Ruby2D
13
+ module DepsHelp
14
+ module_function
15
+
16
+ # Detect the Linux distribution family from /etc/os-release.
17
+ def linux_distro
18
+ return :unknown unless File.exist?('/etc/os-release')
19
+
20
+ ids = File.read('/etc/os-release')
21
+ .scan(/^(?:ID|ID_LIKE)="?([^"\n]+)"?/)
22
+ .flatten
23
+ .flat_map(&:split)
24
+
25
+ return :debian if ids.any? { |id| %w[ubuntu debian linuxmint].include?(id) }
26
+ return :fedora if ids.any? { |id| %w[fedora rhel centos rocky almalinux].include?(id) }
27
+ return :arch if ids.any? { |id| %w[arch manjaro endeavouros].include?(id) }
28
+ return :opensuse if ids.any? { |id| id.include?('suse') }
29
+
30
+ :unknown
31
+ end
32
+
33
+ # The package-manager command that installs the SDL3 development libraries on
34
+ # this platform, or nil when we can't name one (unknown Linux distro or BSD).
35
+ def sdl3_install_command
36
+ case AssetsTarget.host_os
37
+ when 'macos'
38
+ 'brew install sdl3 sdl3_image sdl3_mixer sdl3_ttf'
39
+ when 'windows'
40
+ 'pacman -S mingw-w64-ucrt-x86_64-SDL3 mingw-w64-ucrt-x86_64-SDL3_image mingw-w64-ucrt-x86_64-SDL3_mixer mingw-w64-ucrt-x86_64-SDL3_ttf'
41
+ when 'linux'
42
+ {
43
+ debian: 'sudo apt install libsdl3-dev libsdl3-image-dev libsdl3-mixer-dev libsdl3-ttf-dev',
44
+ fedora: 'sudo dnf install SDL3-devel SDL3_image-devel SDL3_mixer-devel SDL3_ttf-devel',
45
+ arch: 'sudo pacman -S sdl3 sdl3_image sdl3_mixer sdl3_ttf',
46
+ opensuse: 'sudo zypper install libSDL3-devel libSDL3_image-devel libSDL3_mixer-devel libSDL3_ttf-devel',
47
+ }[linux_distro]
48
+ when 'bsd'
49
+ host = RbConfig::CONFIG['host_os'].downcase
50
+ if host.include?('freebsd') then 'sudo pkg install sdl3 sdl3_image sdl3_mixer sdl3_ttf'
51
+ elsif host.include?('openbsd') then 'doas pkg_add sdl3 sdl3-image sdl3-mixer sdl3-ttf'
52
+ elsif host.include?('netbsd') then 'sudo pkgin install SDL3 SDL3_image SDL3_mixer SDL3_ttf'
53
+ end
54
+ end
55
+ end
56
+
57
+ # The two-path recovery notice, framed like the install banner. Either
58
+ # install SDL3 with a package manager and rebuild with `gem pristine`, or
59
+ # build the libraries locally with `ruby2d setup` (which rebuilds the
60
+ # extension for you). Shown when no SDL3 — bundled, cached, or system — is
61
+ # found, both at install time and when a Ruby 2D app is run before setup.
62
+ def notice
63
+ cmd = sdl3_install_command
64
+
65
+ body = []
66
+ body << "Ruby 2D installed, but its native extension isn't built —"
67
+ body << "no SDL3 libraries were found for #{AssetsTarget.target_id}."
68
+ body << ''
69
+ body << 'To finish, choose one:'
70
+ body << ''
71
+ if cmd
72
+ body << '• Install SDL3 with your package manager (easiest), then rebuild:'
73
+ body << " #{cmd.bold}"
74
+ body << " #{'gem pristine ruby2d'.bold}"
75
+ else
76
+ body << "• Install the SDL3 development libraries, then run #{'gem pristine ruby2d'.bold}"
77
+ end
78
+ body << ''
79
+ body << '• Build the libraries locally (no system packages needed):'
80
+ body << " #{'ruby2d setup'.bold}"
81
+ body << ''
82
+ body << "See #{'ruby2d.com'.bold} for help."
83
+
84
+ header = '== Ruby 2D: native extension not built '.ljust(70, '=')
85
+ lines = ['', header, '', *body.map { |l| l.empty? ? '' : " #{l}" }, '', '=' * 70, '']
86
+ lines.join("\n")
87
+ end
88
+ end
89
+ end
data/lib/ruby2d/dsl.rb CHANGED
@@ -1,52 +1,91 @@
1
- # frozen_string_literal: true
2
-
3
1
  module Ruby2D
4
- # Ruby2D::DSL
2
+ # Domain-specific language methods for the top-level Ruby2D interface
5
3
  module DSL
6
- @window = Ruby2D::Window.new
7
-
4
+ # Get the DSL window instance, constructing a default on first access
8
5
  def self.window
9
- @window
6
+ @window ||= Ruby2D::Window.new
10
7
  end
11
8
 
9
+ # Set the DSL window instance
12
10
  def self.window=(window)
13
11
  @window = window
14
12
  end
15
13
 
16
- def get(sym, opts = nil)
17
- DSL.window.get(sym, opts)
14
+ # Whether a DSL window already exists, without constructing one. Used to
15
+ # enforce the single-window rule (reading `window` would auto-create one).
16
+ def self.window?
17
+ !@window.nil?
18
+ end
19
+
20
+ # Get a window attribute by name
21
+ def get(sym)
22
+ DSL.window.get(sym)
18
23
  end
19
24
 
25
+ # Set window attributes
20
26
  def set(opts)
21
27
  DSL.window.set(opts)
22
28
  end
23
29
 
24
- def on(event, &proc)
25
- DSL.window.on(event, &proc)
30
+ # Take a screenshot, saving to `path` (or a timestamped file if omitted)
31
+ def screenshot(path = nil)
32
+ DSL.window.screenshot(path)
26
33
  end
27
34
 
35
+ # Register an event handler
36
+ def on(event = nil, **filters, &proc)
37
+ DSL.window.on(event, **filters, &proc)
38
+ end
39
+
40
+ # Remove an event handler
28
41
  def off(event_descriptor)
29
42
  DSL.window.off(event_descriptor)
30
43
  end
31
44
 
45
+ # Set the update callback
32
46
  def update(&proc)
33
47
  DSL.window.update(&proc)
34
48
  end
35
49
 
36
- def render(&proc)
37
- DSL.window.render(&proc)
50
+ # Set the render callback. `z:` positions the block in the scene's
51
+ # z-order — `:foreground` (default), `:background`, or a number.
52
+ def render(z: :foreground, &proc)
53
+ DSL.window.render(z: z, &proc)
54
+ end
55
+
56
+ # Monotonic seconds since the engine started (see `Window#elapsed`)
57
+ def elapsed
58
+ DSL.window.elapsed
38
59
  end
39
60
 
61
+ # Clear all objects from the window
40
62
  def clear
41
63
  DSL.window.clear
42
64
  end
43
65
 
66
+ # The connected gamepads, in connect order
67
+ def gamepads
68
+ DSL.window.gamepads
69
+ end
70
+
71
+ # Load a gamepad mapping from a file path or a single mapping string
72
+ def add_gamepad_mapping(path_or_string)
73
+ DSL.window.add_gamepad_mapping(path_or_string)
74
+ end
75
+
76
+ # Show the window
44
77
  def show
45
78
  DSL.window.show
46
79
  end
47
80
 
81
+ # Close the window
48
82
  def close
49
83
  DSL.window.close
50
84
  end
85
+
86
+ # Request a render on the next tick (for :on_demand render mode)
87
+ def request_render
88
+ DSL.window.request_render
89
+ end
51
90
  end
52
91
  end