ruby2d 0.12.0 → 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 (619) 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 -428
  285. data/assets/app.icns +0 -0
  286. data/assets/include/GLES2/gl2.h +0 -656
  287. data/assets/include/GLES2/gl2ext.h +0 -3949
  288. data/assets/include/GLES2/gl2ext_angle.h +0 -701
  289. data/assets/include/GLES2/gl2platform.h +0 -27
  290. data/assets/include/GLES3/gl3.h +0 -1192
  291. data/assets/include/GLES3/gl31.h +0 -1507
  292. data/assets/include/GLES3/gl32.h +0 -1808
  293. data/assets/include/GLES3/gl3platform.h +0 -27
  294. data/assets/include/KHR/khrplatform.h +0 -290
  295. data/assets/include/SDL2/SDL.h +0 -233
  296. data/assets/include/SDL2/SDL_assert.h +0 -326
  297. data/assets/include/SDL2/SDL_atomic.h +0 -415
  298. data/assets/include/SDL2/SDL_audio.h +0 -1500
  299. data/assets/include/SDL2/SDL_clipboard.h +0 -141
  300. data/assets/include/SDL2/SDL_config.h +0 -61
  301. data/assets/include/SDL2/SDL_config_android.h +0 -194
  302. data/assets/include/SDL2/SDL_config_emscripten.h +0 -218
  303. data/assets/include/SDL2/SDL_config_iphoneos.h +0 -217
  304. data/assets/include/SDL2/SDL_config_macosx.h +0 -277
  305. data/assets/include/SDL2/SDL_config_minimal.h +0 -95
  306. data/assets/include/SDL2/SDL_config_ngage.h +0 -89
  307. data/assets/include/SDL2/SDL_config_os2.h +0 -207
  308. data/assets/include/SDL2/SDL_config_pandora.h +0 -141
  309. data/assets/include/SDL2/SDL_config_windows.h +0 -331
  310. data/assets/include/SDL2/SDL_config_wingdk.h +0 -253
  311. data/assets/include/SDL2/SDL_config_winrt.h +0 -220
  312. data/assets/include/SDL2/SDL_config_xbox.h +0 -235
  313. data/assets/include/SDL2/SDL_cpuinfo.h +0 -594
  314. data/assets/include/SDL2/SDL_endian.h +0 -348
  315. data/assets/include/SDL2/SDL_error.h +0 -163
  316. data/assets/include/SDL2/SDL_events.h +0 -1166
  317. data/assets/include/SDL2/SDL_filesystem.h +0 -149
  318. data/assets/include/SDL2/SDL_gamecontroller.h +0 -1074
  319. data/assets/include/SDL2/SDL_gesture.h +0 -117
  320. data/assets/include/SDL2/SDL_guid.h +0 -100
  321. data/assets/include/SDL2/SDL_haptic.h +0 -1341
  322. data/assets/include/SDL2/SDL_hidapi.h +0 -451
  323. data/assets/include/SDL2/SDL_hints.h +0 -2569
  324. data/assets/include/SDL2/SDL_image.h +0 -2173
  325. data/assets/include/SDL2/SDL_joystick.h +0 -1066
  326. data/assets/include/SDL2/SDL_keyboard.h +0 -353
  327. data/assets/include/SDL2/SDL_keycode.h +0 -358
  328. data/assets/include/SDL2/SDL_loadso.h +0 -115
  329. data/assets/include/SDL2/SDL_log.h +0 -404
  330. data/assets/include/SDL2/SDL_main.h +0 -275
  331. data/assets/include/SDL2/SDL_mixer.h +0 -2784
  332. data/assets/include/SDL2/SDL_mouse.h +0 -465
  333. data/assets/include/SDL2/SDL_mutex.h +0 -471
  334. data/assets/include/SDL2/SDL_name.h +0 -33
  335. data/assets/include/SDL2/SDL_pixels.h +0 -644
  336. data/assets/include/SDL2/SDL_platform.h +0 -261
  337. data/assets/include/SDL2/SDL_quit.h +0 -58
  338. data/assets/include/SDL2/SDL_rect.h +0 -376
  339. data/assets/include/SDL2/SDL_render.h +0 -1919
  340. data/assets/include/SDL2/SDL_revision.h +0 -6
  341. data/assets/include/SDL2/SDL_rwops.h +0 -841
  342. data/assets/include/SDL2/SDL_sensor.h +0 -322
  343. data/assets/include/SDL2/SDL_shape.h +0 -155
  344. data/assets/include/SDL2/SDL_stdinc.h +0 -830
  345. data/assets/include/SDL2/SDL_surface.h +0 -997
  346. data/assets/include/SDL2/SDL_system.h +0 -623
  347. data/assets/include/SDL2/SDL_syswm.h +0 -386
  348. data/assets/include/SDL2/SDL_test_images.h +0 -78
  349. data/assets/include/SDL2/SDL_test_random.h +0 -115
  350. data/assets/include/SDL2/SDL_thread.h +0 -464
  351. data/assets/include/SDL2/SDL_timer.h +0 -222
  352. data/assets/include/SDL2/SDL_touch.h +0 -150
  353. data/assets/include/SDL2/SDL_ttf.h +0 -2316
  354. data/assets/include/SDL2/SDL_types.h +0 -29
  355. data/assets/include/SDL2/SDL_version.h +0 -204
  356. data/assets/include/SDL2/SDL_video.h +0 -2150
  357. data/assets/include/SDL2/SDL_vulkan.h +0 -215
  358. data/assets/include/SDL2/begin_code.h +0 -187
  359. data/assets/include/mruby/boxing_no.h +0 -58
  360. data/assets/include/mruby/class.h +0 -108
  361. data/assets/include/mruby/error.h +0 -147
  362. data/assets/include/mruby/gc.h +0 -94
  363. data/assets/include/mruby/irep.h +0 -147
  364. data/assets/include/mruby/khash.h +0 -284
  365. data/assets/include/mruby/object.h +0 -43
  366. data/assets/include/mruby/presym/disable.h +0 -70
  367. data/assets/include/mruby/presym/enable.h +0 -37
  368. data/assets/include/mruby/presym.h +0 -40
  369. data/assets/include/mruby/proc.h +0 -211
  370. data/assets/include/mruby/throw.h +0 -66
  371. data/assets/macos/universal/bin/mrbc +0 -0
  372. data/assets/macos/universal/lib/libFLAC.a +0 -0
  373. data/assets/macos/universal/lib/libSDL2.a +0 -0
  374. data/assets/macos/universal/lib/libSDL2_image.a +0 -0
  375. data/assets/macos/universal/lib/libSDL2_mixer.a +0 -0
  376. data/assets/macos/universal/lib/libSDL2_ttf.a +0 -0
  377. data/assets/macos/universal/lib/libavif.a +0 -0
  378. data/assets/macos/universal/lib/libbrotlicommon-static.a +0 -0
  379. data/assets/macos/universal/lib/libbrotlidec-static.a +0 -0
  380. data/assets/macos/universal/lib/libfreetype.a +0 -0
  381. data/assets/macos/universal/lib/libgraphite2.a +0 -0
  382. data/assets/macos/universal/lib/libharfbuzz.a +0 -0
  383. data/assets/macos/universal/lib/libhwy.a +0 -0
  384. data/assets/macos/universal/lib/libjpeg.a +0 -0
  385. data/assets/macos/universal/lib/libjxl.a +0 -0
  386. data/assets/macos/universal/lib/libmodplug.a +0 -0
  387. data/assets/macos/universal/lib/libmpg123.a +0 -0
  388. data/assets/macos/universal/lib/libmruby.a +0 -0
  389. data/assets/macos/universal/lib/libogg.a +0 -0
  390. data/assets/macos/universal/lib/libpng.a +0 -0
  391. data/assets/macos/universal/lib/libtiff.a +0 -0
  392. data/assets/macos/universal/lib/libvorbis.a +0 -0
  393. data/assets/macos/universal/lib/libvorbisfile.a +0 -0
  394. data/assets/macos/universal/lib/libwebp.a +0 -0
  395. data/assets/macos/universal/lib/libzstd.a +0 -0
  396. data/assets/test_media/README.md +0 -3
  397. data/assets/test_media/bitstream_vera/COPYRIGHT.txt +0 -124
  398. data/assets/test_media/bitstream_vera/vera.ttf +0 -0
  399. data/assets/test_media/boom.png +0 -0
  400. data/assets/test_media/coin.png +0 -0
  401. data/assets/test_media/colors.png +0 -0
  402. data/assets/test_media/controller.png +0 -0
  403. data/assets/test_media/dial.wav +0 -0
  404. data/assets/test_media/hero.png +0 -0
  405. data/assets/test_media/image.bmp +0 -0
  406. data/assets/test_media/image.jpg +0 -0
  407. data/assets/test_media/image.png +0 -0
  408. data/assets/test_media/music.flac +0 -0
  409. data/assets/test_media/music.mp3 +0 -0
  410. data/assets/test_media/music.ogg +0 -0
  411. data/assets/test_media/music.wav +0 -0
  412. data/assets/test_media/originals/boom.pxm +0 -0
  413. data/assets/test_media/originals/coin.pxm +0 -0
  414. data/assets/test_media/originals/controller.sketch +0 -0
  415. data/assets/test_media/originals/hero.pxm +0 -0
  416. data/assets/test_media/originals/image.pxm +0 -0
  417. data/assets/test_media/originals/music.caf +0 -0
  418. data/assets/test_media/originals/texture_atlas.pxm +0 -0
  419. data/assets/test_media/rondo_alla_turka.ogg +0 -0
  420. data/assets/test_media/sound.flac +0 -0
  421. data/assets/test_media/sound.mp3 +0 -0
  422. data/assets/test_media/sound.ogg +0 -0
  423. data/assets/test_media/sound.wav +0 -0
  424. data/assets/test_media/sprite_sheet.png +0 -0
  425. data/assets/test_media/texture_atlas.png +0 -0
  426. data/assets/wasm/libmruby.a +0 -0
  427. data/assets/windows/mingw-w64-ucrt-x86_64/bin/mrbc.exe +0 -0
  428. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libFLAC.a +0 -0
  429. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libLerc.a +0 -0
  430. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libSDL2.a +0 -0
  431. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libSDL2_image.a +0 -0
  432. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libSDL2_mixer.a +0 -0
  433. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libSDL2_ttf.a +0 -0
  434. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libbrotlicommon.a +0 -0
  435. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libbrotlidec.a +0 -0
  436. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libbz2.a +0 -0
  437. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libdeflate.a +0 -0
  438. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libfreetype.a +0 -0
  439. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libglew32.a +0 -0
  440. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libgraphite2.a +0 -0
  441. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libharfbuzz.a +0 -0
  442. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libhwy.a +0 -0
  443. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libjbig.a +0 -0
  444. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libjpeg.a +0 -0
  445. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libjxl.a +0 -0
  446. data/assets/windows/mingw-w64-ucrt-x86_64/lib/liblzma.a +0 -0
  447. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libmodplug.a +0 -0
  448. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libmpg123.a +0 -0
  449. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libmruby.a +0 -0
  450. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libogg.a +0 -0
  451. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libopus.a +0 -0
  452. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libopusfile.a +0 -0
  453. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libpng.a +0 -0
  454. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libsndfile.a +0 -0
  455. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libssp.a +0 -1
  456. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libstdc++.a +0 -0
  457. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libtiff.a +0 -0
  458. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libvorbis.a +0 -0
  459. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libvorbisfile.a +0 -0
  460. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libwebp.a +0 -0
  461. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libz.a +0 -0
  462. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libzstd.a +0 -0
  463. data/assets/windows/mingw-w64-x86_64/bin/mrbc.exe +0 -0
  464. data/assets/windows/mingw-w64-x86_64/lib/libFLAC.a +0 -0
  465. data/assets/windows/mingw-w64-x86_64/lib/libLerc.a +0 -0
  466. data/assets/windows/mingw-w64-x86_64/lib/libSDL2.a +0 -0
  467. data/assets/windows/mingw-w64-x86_64/lib/libSDL2_image.a +0 -0
  468. data/assets/windows/mingw-w64-x86_64/lib/libSDL2_mixer.a +0 -0
  469. data/assets/windows/mingw-w64-x86_64/lib/libSDL2_ttf.a +0 -0
  470. data/assets/windows/mingw-w64-x86_64/lib/libbrotlicommon.a +0 -0
  471. data/assets/windows/mingw-w64-x86_64/lib/libbrotlidec.a +0 -0
  472. data/assets/windows/mingw-w64-x86_64/lib/libbz2.a +0 -0
  473. data/assets/windows/mingw-w64-x86_64/lib/libdeflate.a +0 -0
  474. data/assets/windows/mingw-w64-x86_64/lib/libfreetype.a +0 -0
  475. data/assets/windows/mingw-w64-x86_64/lib/libglew32.a +0 -0
  476. data/assets/windows/mingw-w64-x86_64/lib/libgraphite2.a +0 -0
  477. data/assets/windows/mingw-w64-x86_64/lib/libharfbuzz.a +0 -0
  478. data/assets/windows/mingw-w64-x86_64/lib/libhwy.a +0 -0
  479. data/assets/windows/mingw-w64-x86_64/lib/libjbig.a +0 -0
  480. data/assets/windows/mingw-w64-x86_64/lib/libjpeg.a +0 -0
  481. data/assets/windows/mingw-w64-x86_64/lib/libjxl.a +0 -0
  482. data/assets/windows/mingw-w64-x86_64/lib/liblzma.a +0 -0
  483. data/assets/windows/mingw-w64-x86_64/lib/libmodplug.a +0 -0
  484. data/assets/windows/mingw-w64-x86_64/lib/libmpg123.a +0 -0
  485. data/assets/windows/mingw-w64-x86_64/lib/libmruby.a +0 -0
  486. data/assets/windows/mingw-w64-x86_64/lib/libogg.a +0 -0
  487. data/assets/windows/mingw-w64-x86_64/lib/libopus.a +0 -0
  488. data/assets/windows/mingw-w64-x86_64/lib/libopusfile.a +0 -0
  489. data/assets/windows/mingw-w64-x86_64/lib/libpng.a +0 -0
  490. data/assets/windows/mingw-w64-x86_64/lib/libsndfile.a +0 -0
  491. data/assets/windows/mingw-w64-x86_64/lib/libssp.a +0 -1
  492. data/assets/windows/mingw-w64-x86_64/lib/libstdc++.a +0 -0
  493. data/assets/windows/mingw-w64-x86_64/lib/libtiff.a +0 -0
  494. data/assets/windows/mingw-w64-x86_64/lib/libvorbis.a +0 -0
  495. data/assets/windows/mingw-w64-x86_64/lib/libvorbisfile.a +0 -0
  496. data/assets/windows/mingw-w64-x86_64/lib/libwebp.a +0 -0
  497. data/assets/windows/mingw-w64-x86_64/lib/libz.a +0 -0
  498. data/assets/windows/mingw-w64-x86_64/lib/libzstd.a +0 -0
  499. data/assets/xcode/ios/Assets.xcassets/AppIcon.appiconset/Contents.json +0 -98
  500. data/assets/xcode/ios/Assets.xcassets/Contents.json +0 -6
  501. data/assets/xcode/ios/Base.lproj/LaunchScreen.storyboard +0 -27
  502. data/assets/xcode/ios/Info.plist +0 -43
  503. data/assets/xcode/ios/MRuby.framework/Headers/mrbconf.h +0 -143
  504. data/assets/xcode/ios/MRuby.framework/Headers/mruby/array.h +0 -280
  505. data/assets/xcode/ios/MRuby.framework/Headers/mruby/boxing_nan.h +0 -102
  506. data/assets/xcode/ios/MRuby.framework/Headers/mruby/boxing_no.h +0 -56
  507. data/assets/xcode/ios/MRuby.framework/Headers/mruby/boxing_word.h +0 -144
  508. data/assets/xcode/ios/MRuby.framework/Headers/mruby/class.h +0 -97
  509. data/assets/xcode/ios/MRuby.framework/Headers/mruby/common.h +0 -77
  510. data/assets/xcode/ios/MRuby.framework/Headers/mruby/compile.h +0 -195
  511. data/assets/xcode/ios/MRuby.framework/Headers/mruby/data.h +0 -75
  512. data/assets/xcode/ios/MRuby.framework/Headers/mruby/debug.h +0 -67
  513. data/assets/xcode/ios/MRuby.framework/Headers/mruby/dump.h +0 -196
  514. data/assets/xcode/ios/MRuby.framework/Headers/mruby/error.h +0 -75
  515. data/assets/xcode/ios/MRuby.framework/Headers/mruby/gc.h +0 -91
  516. data/assets/xcode/ios/MRuby.framework/Headers/mruby/hash.h +0 -215
  517. data/assets/xcode/ios/MRuby.framework/Headers/mruby/irep.h +0 -75
  518. data/assets/xcode/ios/MRuby.framework/Headers/mruby/istruct.h +0 -47
  519. data/assets/xcode/ios/MRuby.framework/Headers/mruby/khash.h +0 -274
  520. data/assets/xcode/ios/MRuby.framework/Headers/mruby/numeric.h +0 -161
  521. data/assets/xcode/ios/MRuby.framework/Headers/mruby/object.h +0 -44
  522. data/assets/xcode/ios/MRuby.framework/Headers/mruby/opcode.h +0 -69
  523. data/assets/xcode/ios/MRuby.framework/Headers/mruby/ops.h +0 -117
  524. data/assets/xcode/ios/MRuby.framework/Headers/mruby/proc.h +0 -131
  525. data/assets/xcode/ios/MRuby.framework/Headers/mruby/range.h +0 -49
  526. data/assets/xcode/ios/MRuby.framework/Headers/mruby/re.h +0 -16
  527. data/assets/xcode/ios/MRuby.framework/Headers/mruby/string.h +0 -444
  528. data/assets/xcode/ios/MRuby.framework/Headers/mruby/throw.h +0 -55
  529. data/assets/xcode/ios/MRuby.framework/Headers/mruby/value.h +0 -309
  530. data/assets/xcode/ios/MRuby.framework/Headers/mruby/variable.h +0 -136
  531. data/assets/xcode/ios/MRuby.framework/Headers/mruby/version.h +0 -110
  532. data/assets/xcode/ios/MRuby.framework/Headers/mruby.h +0 -1282
  533. data/assets/xcode/ios/MRuby.framework/Info.plist +0 -20
  534. data/assets/xcode/ios/MRuby.framework/MRuby +0 -0
  535. data/assets/xcode/ios/MyApp.xcodeproj/project.pbxproj +0 -368
  536. data/assets/xcode/ios/MyApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
  537. data/assets/xcode/ios/MyApp.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
  538. data/assets/xcode/ios/MyApp.xcodeproj/project.xcworkspace/xcshareddata/MyApp.xcscmblueprint +0 -30
  539. data/assets/xcode/ios/main.c +0 -1
  540. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Back.imagestacklayer/Content.imageset/Contents.json +0 -16
  541. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Back.imagestacklayer/Contents.json +0 -6
  542. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Contents.json +0 -17
  543. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Front.imagestacklayer/Content.imageset/Contents.json +0 -16
  544. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Front.imagestacklayer/Contents.json +0 -6
  545. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json +0 -16
  546. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Middle.imagestacklayer/Contents.json +0 -6
  547. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Back.imagestacklayer/Content.imageset/Contents.json +0 -16
  548. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Back.imagestacklayer/Contents.json +0 -6
  549. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Contents.json +0 -17
  550. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Front.imagestacklayer/Content.imageset/Contents.json +0 -16
  551. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Front.imagestacklayer/Contents.json +0 -6
  552. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json +0 -16
  553. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Middle.imagestacklayer/Contents.json +0 -6
  554. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Contents.json +0 -32
  555. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image Wide.imageset/Contents.json +0 -16
  556. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image.imageset/Contents.json +0 -16
  557. data/assets/xcode/tvos/Assets.xcassets/Contents.json +0 -6
  558. data/assets/xcode/tvos/Assets.xcassets/LaunchImage.launchimage/Contents.json +0 -22
  559. data/assets/xcode/tvos/Info.plist +0 -30
  560. data/assets/xcode/tvos/MRuby.framework/Headers/mrbconf.h +0 -143
  561. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/array.h +0 -280
  562. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/boxing_nan.h +0 -102
  563. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/boxing_no.h +0 -56
  564. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/boxing_word.h +0 -144
  565. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/class.h +0 -97
  566. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/common.h +0 -77
  567. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/compile.h +0 -195
  568. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/data.h +0 -75
  569. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/debug.h +0 -67
  570. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/dump.h +0 -196
  571. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/error.h +0 -75
  572. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/gc.h +0 -91
  573. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/hash.h +0 -215
  574. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/irep.h +0 -75
  575. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/istruct.h +0 -47
  576. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/khash.h +0 -274
  577. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/numeric.h +0 -161
  578. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/object.h +0 -44
  579. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/opcode.h +0 -69
  580. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/ops.h +0 -117
  581. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/proc.h +0 -131
  582. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/range.h +0 -49
  583. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/re.h +0 -16
  584. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/string.h +0 -444
  585. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/throw.h +0 -55
  586. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/value.h +0 -309
  587. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/variable.h +0 -136
  588. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/version.h +0 -110
  589. data/assets/xcode/tvos/MRuby.framework/Headers/mruby.h +0 -1282
  590. data/assets/xcode/tvos/MRuby.framework/Info.plist +0 -20
  591. data/assets/xcode/tvos/MRuby.framework/MRuby +0 -0
  592. data/assets/xcode/tvos/MyApp.xcodeproj/project.pbxproj +0 -350
  593. data/assets/xcode/tvos/MyApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
  594. data/assets/xcode/tvos/MyApp.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
  595. data/assets/xcode/tvos/MyApp.xcodeproj/project.xcworkspace/xcshareddata/MyApp.xcscmblueprint +0 -30
  596. data/assets/xcode/tvos/main.c +0 -1
  597. data/ext/ruby2d/common.c +0 -185
  598. data/ext/ruby2d/controllers.c +0 -110
  599. data/ext/ruby2d/gl.c +0 -398
  600. data/ext/ruby2d/gl2.c +0 -86
  601. data/ext/ruby2d/gl3.c +0 -304
  602. data/ext/ruby2d/gles.c +0 -302
  603. data/ext/ruby2d/input.c +0 -48
  604. data/ext/ruby2d/music.c +0 -127
  605. data/ext/ruby2d/sound.c +0 -132
  606. data/lib/ruby2d/cli/console.rb +0 -65
  607. data/lib/ruby2d/cli/enable_console.rb +0 -7
  608. data/lib/ruby2d/cli/platform.rb +0 -17
  609. data/lib/ruby2d/music.rb +0 -77
  610. data/lib/ruby2d/pixel.rb +0 -18
  611. data/lib/ruby2d/pixmap.rb +0 -39
  612. data/lib/ruby2d/pixmap_atlas.rb +0 -56
  613. data/lib/ruby2d/sound.rb +0 -61
  614. data/lib/ruby2d/texture.rb +0 -38
  615. /data/assets/{include/SDL2 → platform/include/SDL3}/SDL_opengles2_gl2.h +0 -0
  616. /data/assets/{include/SDL2 → platform/include/SDL3}/SDL_opengles2_gl2ext.h +0 -0
  617. /data/assets/{include/SDL2 → platform/include/SDL3}/SDL_opengles2_gl2platform.h +0 -0
  618. /data/assets/{include/SDL2 → platform/include/SDL3}/SDL_opengles2_khrplatform.h +0 -0
  619. /data/assets/{include → platform/include}/mruby/re.h +0 -0
@@ -0,0 +1,251 @@
1
+ # Logo animation
2
+ # An animated version of the gem logo with staggered assembly and idle shimmer.
3
+ #
4
+ # Features staggered facet assembly with overshoot, idle floating with
5
+ # color shimmer, a glow layer, sparkle particles, and a fade-in title.
6
+
7
+ require 'ruby2d'
8
+
9
+ # === Tunables ===
10
+
11
+ WIDTH = 600 # window width in pixels
12
+ HEIGHT = 500 # window height in pixels
13
+ INTRO_DUR = 1.5 # seconds for each facet to ease into place
14
+ STAGGER = 0.12 # seconds between successive facet starts
15
+ SPARKLE_RATE = 21 # sparkles spawned per second along the outline
16
+
17
+ # === Window ===
18
+
19
+ set title: 'Ruby 2D ▸ Examples ▸ Logo animation', width: WIDTH, height: HEIGHT
20
+ set close_on_esc: true
21
+
22
+ # === Geometry (same vertices as logo.rb) ===
23
+
24
+ CX, CY = 299.0, 211.0
25
+
26
+ VERTICES = {
27
+ left: [ 75, 145], tl: [165, 55], tc: [299, 55], tr: [434, 55],
28
+ right: [524, 145], bot: [299, 368], il: [201, 145], ir: [398, 145]
29
+ }
30
+
31
+ FACETS = [
32
+ # Crown (left to right)
33
+ [:left, :tl, :il, [0.91, 0.45, 0.43]], # #e7746e
34
+ [:tl, :tc, :il, [0.86, 0.29, 0.25]], # #dc4b40
35
+ [:il, :tc, :ir, [0.90, 0.39, 0.36]], # #e5645c
36
+ [:tc, :tr, :ir, [0.82, 0.28, 0.24]], # #d2473e
37
+ [:tr, :right, :ir, [0.89, 0.36, 0.33]], # #e35c53
38
+ # Pavilion (left to right)
39
+ [:left, :il, :bot, [0.89, 0.33, 0.29]], # #e3534b
40
+ [:il, :ir, :bot, [0.85, 0.28, 0.22]], # #d84738
41
+ [:right, :ir, :bot, [0.78, 0.26, 0.23]] # #c7433a
42
+ ]
43
+
44
+ OUTLINE_KEYS = [:left, :tl, :tc, :tr, :right, :bot]
45
+
46
+ # === Intro: random starting offsets per facet ===
47
+
48
+ srand(42)
49
+ INTRO_OFFSETS = FACETS.map do
50
+ [rand(-500..500).to_f, rand(-400..400).to_f, rand(-200..200).to_f]
51
+ end
52
+ INTRO_END = FACETS.length * STAGGER + INTRO_DUR
53
+
54
+ # === Text (drawn manually in render block) ===
55
+
56
+ logo_text = Text.new('Ruby 2D', x: 0, y: 0, size: 40, add: false)
57
+
58
+ # === Particles ===
59
+
60
+ particles = []
61
+
62
+ # === Starfield (fixed positions, each star twinkles independently) ===
63
+
64
+ STARS = 90.times.map do
65
+ {
66
+ x: rand(0.0..WIDTH.to_f), y: rand(0.0..HEIGHT.to_f),
67
+ size: rand(1.0..2.5), brightness: rand(0.3..0.8),
68
+ phase: rand(0.0..Math::PI * 2), speed: rand(0.5..2.0)
69
+ }
70
+ end
71
+
72
+ # === Helpers ===
73
+
74
+ def ease_out_back(t)
75
+ t = t.clamp(0.0, 1.0)
76
+ c1 = 1.70158
77
+ c3 = c1 + 1.0
78
+ 1.0 + c3 * (t - 1.0) ** 3 + c1 * (t - 1.0) ** 2
79
+ end
80
+
81
+ def rotate_pt(x, y, cx, cy, a)
82
+ c, s = Math.cos(a), Math.sin(a)
83
+ dx, dy = x - cx, y - cy
84
+ [cx + dx * c - dy * s, cy + dx * s + dy * c]
85
+ end
86
+
87
+ def xform(vx, vy, cx, cy, sc, rot, tx, ty)
88
+ x = cx + (vx - cx) * sc
89
+ y = cy + (vy - cy) * sc
90
+ x, y = rotate_pt(x, y, cx, cy, rot)
91
+ [x + tx, y + ty]
92
+ end
93
+
94
+ # Wrap a flat [r, g, b, a] into a per-vertex color array for .render methods
95
+ def color3(c) = [c, c, c]
96
+ def color4(c) = [c, c, c, c]
97
+
98
+ # === Update loop (particle state) ===
99
+
100
+ update do |dt|
101
+ t = elapsed
102
+ idle_t = [t - INTRO_END, 0.0].max
103
+
104
+ # Spawn sparkles along the outline after intro settles
105
+ if idle_t > 0.5 && rand < SPARKLE_RATE * dt
106
+ vx, vy = VERTICES[OUTLINE_KEYS.sample]
107
+ float_y = Math.sin(idle_t * 1.2) * 10.0
108
+ particles << {
109
+ x: vx + rand(-20.0..20.0),
110
+ y: vy + rand(-20.0..20.0) + float_y,
111
+ vx: rand(-42.0..42.0),
112
+ vy: rand(-84.0..-18.0),
113
+ life: 1.0,
114
+ size: rand(2.0..5.0)
115
+ }
116
+ end
117
+
118
+ particles.each do |p|
119
+ p[:x] += p[:vx] * dt
120
+ p[:y] += p[:vy] * dt
121
+ p[:life] -= dt
122
+ end
123
+ particles.reject! { |p| p[:life] <= 0 }
124
+ end
125
+
126
+ # === Render loop (all drawing) ===
127
+
128
+ render do
129
+ t = elapsed
130
+ idle_t = [t - INTRO_END, 0.0].max
131
+
132
+ # Global idle transforms
133
+ float_y = Math.sin(idle_t * 1.2) * 10.0
134
+ global_rot = Math.sin(idle_t * 0.5) * 0.03
135
+ global_sc = 1.0 + Math.sin(idle_t * 2.0) * 0.015
136
+
137
+ # --- Background gradient (deep navy → dark charcoal, slowly shifting) ---
138
+ shift = Math.sin(t * 0.15) * 0.02
139
+ top_l = [0.05 + shift, 0.06 + shift, 0.13 + shift * 2, 1.0]
140
+ top_r = [0.07 + shift, 0.06 + shift, 0.15 + shift * 2, 1.0]
141
+ bot_l = [0.10 - shift, 0.07 - shift, 0.09 - shift, 1.0]
142
+ bot_r = [0.08 - shift, 0.07 - shift, 0.11 - shift, 1.0]
143
+ Rectangle.render(x: 0, y: 0, width: 600, height: 500, color: [top_l, top_r, bot_r, bot_l])
144
+
145
+ # --- Starfield ---
146
+ STARS.each do |s|
147
+ twinkle = (Math.sin(t * s[:speed] + s[:phase]) * 0.5 + 0.5) * s[:brightness]
148
+ Square.render(
149
+ x: s[:x], y: s[:y], size: s[:size],
150
+ color: color4([0.7, 0.75, 1.0, twinkle])
151
+ )
152
+ end
153
+
154
+ # Smooth ramp for idle effects (0→1 over ~1.5 seconds after intro)
155
+ idle_blend = (idle_t / 1.5).clamp(0.0, 1.0)
156
+
157
+ # --- Glow layer (slightly larger, semi-transparent echo) ---
158
+ if idle_blend > 0.01
159
+ glow_pulse = (Math.sin(idle_t * 1.8) * 0.5 + 0.5) * 0.12 * idle_blend
160
+ glow_sc = global_sc * 1.07
161
+
162
+ FACETS.each do |v1k, v2k, v3k, rgb|
163
+ pts = [v1k, v2k, v3k].map do |k|
164
+ xform(*VERTICES[k], CX, CY, glow_sc, global_rot, 0, float_y)
165
+ end
166
+ Triangle.render(
167
+ x1: pts[0][0], y1: pts[0][1],
168
+ x2: pts[1][0], y2: pts[1][1],
169
+ x3: pts[2][0], y3: pts[2][1],
170
+ color: color3([rgb[0], rgb[1], rgb[2], glow_pulse])
171
+ )
172
+ end
173
+ end
174
+
175
+ # --- Facets ---
176
+ FACETS.each_with_index do |(v1k, v2k, v3k, rgb), i|
177
+ off_x, off_y, off_deg = INTRO_OFFSETS[i]
178
+
179
+ # Intro: ease from scattered position to final
180
+ ft = (t - i * STAGGER) / INTRO_DUR
181
+ ease = ease_out_back(ft)
182
+
183
+ dx = off_x * (1.0 - ease)
184
+ dy = off_y * (1.0 - ease)
185
+ rot = off_deg * Math::PI / 180.0 * (1.0 - ease)
186
+ alpha = ft.clamp(0.0, 1.0)
187
+
188
+ # Color shimmer (fades in gradually via idle_blend)
189
+ shimmer = Math.sin(idle_t * 3.0 + i * 0.9) * 0.07 * idle_blend
190
+ color = [
191
+ (rgb[0] + shimmer).clamp(0.0, 1.0),
192
+ (rgb[1] + shimmer * 0.5).clamp(0.0, 1.0),
193
+ (rgb[2] + shimmer * 0.3).clamp(0.0, 1.0),
194
+ alpha
195
+ ]
196
+
197
+ pts = [v1k, v2k, v3k].map do |k|
198
+ xform(*VERTICES[k], CX, CY, global_sc, global_rot + rot, dx, dy + float_y)
199
+ end
200
+
201
+ Triangle.render(
202
+ x1: pts[0][0], y1: pts[0][1],
203
+ x2: pts[1][0], y2: pts[1][1],
204
+ x3: pts[2][0], y3: pts[2][1],
205
+ color: color3(color)
206
+ )
207
+ end
208
+
209
+ # --- Border (fades in after facets land) ---
210
+ border_alpha = ((t - FACETS.length * STAGGER) / INTRO_DUR).clamp(0.0, 1.0)
211
+
212
+ if border_alpha > 0.01
213
+ outline_pts = OUTLINE_KEYS.map do |k|
214
+ xform(*VERTICES[k], CX, CY, global_sc, global_rot, 0, float_y)
215
+ end
216
+
217
+ border_color = [1.0, 1.0, 1.0, border_alpha]
218
+
219
+ outline_pts.each_with_index do |pt, i|
220
+ npt = outline_pts[(i + 1) % outline_pts.length]
221
+ Line.render(
222
+ x1: pt[0], y1: pt[1], x2: npt[0], y2: npt[1],
223
+ stroke_width: 8, color: border_color
224
+ )
225
+ end
226
+
227
+ # Cap the joints with circles to close corner gaps
228
+ outline_pts.each do |pt|
229
+ Circle.render(x: pt[0], y: pt[1], radius: 4, sectors: 16, color: border_color)
230
+ end
231
+ end
232
+
233
+ # --- Sparkle particles ---
234
+ particles.each do |p|
235
+ a = (p[:life] ** 0.6).clamp(0.0, 1.0)
236
+ sz = p[:size] * (0.3 + 0.7 * p[:life])
237
+ Square.render(
238
+ x: p[:x], y: p[:y] + float_y * 0.15,
239
+ size: sz, color: color4([1.0, 0.85, 0.7, a * 0.7])
240
+ )
241
+ end
242
+
243
+ # --- Logo text (slides up and fades in after intro) ---
244
+ text_t = [(t - INTRO_END - 0.3) * 1.5, 0.0].max.clamp(0.0, 1.0)
245
+ if text_t > 0.01
246
+ text_y = 400.0 + float_y + (1.0 - text_t) * 25.0
247
+ logo_text.render(x: 210, y: text_y, color: [0.93, 0.90, 0.88, text_t])
248
+ end
249
+ end
250
+
251
+ show
@@ -0,0 +1,115 @@
1
+ # Lorenz attractor
2
+ # Lorenz's three-equation convection model traces its butterfly attractor in 3D.
3
+ #
4
+ # Edward Lorenz's three-equation toy model of atmospheric convection
5
+ #
6
+ # dx/dt = σ (y − x)
7
+ # dy/dt = x (ρ − z) − y
8
+ # dz/dt = x y − β z
9
+ #
10
+ # never settles and never repeats, yet stays bounded inside a strange,
11
+ # butterfly-shaped region. Here it's integrated step by step with
12
+ # Euler, kept as a 3D trail, then perspective-projected and depth-shaded.
13
+ # The view rotates so you can see the structure from every angle.
14
+ # Press R to start over from a different seed point.
15
+
16
+ require 'ruby2d'
17
+
18
+ # === Tunables ===
19
+
20
+ WIDTH = 800 # window width in pixels
21
+ HEIGHT = 600 # window height in pixels
22
+ SIGMA = 10.0 # classical Lorenz parameters
23
+ RHO = 28.0
24
+ BETA = 8.0 / 3.0
25
+ DT = 0.005 # integration step (small enough for Euler stability)
26
+ STEPS_PER_FRAME = 60 # integration steps applied each frame
27
+ TRAIL_LEN = 2200 # how many trail points to keep
28
+ SCALE = 11 # pixels per Lorenz unit
29
+ CAMERA = 180.0 # camera distance in scaled units
30
+ TILT = 0.35 # fixed tilt around the screen-X axis (radians)
31
+ SPIN_RATE = 0.25 # idle rotation around the vertical axis (rad/sec)
32
+
33
+ CX = WIDTH / 2
34
+ CY = HEIGHT / 2
35
+
36
+ # === Window ===
37
+
38
+ set title: 'Ruby 2D ▸ Examples ▸ Lorenz attractor',
39
+ width: WIDTH, height: HEIGHT, background: '#06081a'
40
+ set close_on_esc: true
41
+
42
+ # === State ===
43
+
44
+ lx = 0.0; ly = 0.0; lz = 0.0
45
+ trail = [] # collected (lx, ly, lz) tuples in integration order
46
+ spin = 0.0
47
+
48
+ reset = lambda do
49
+ lx = 0.1
50
+ ly = 0.0
51
+ lz = 0.0
52
+ trail.clear
53
+ end
54
+
55
+ reset.call
56
+
57
+ # === Input ===
58
+
59
+ on key_down: :r do
60
+ reset.call
61
+ end
62
+
63
+ # === Per-frame update ===
64
+
65
+ update do |dt|
66
+ spin += SPIN_RATE * dt
67
+
68
+ STEPS_PER_FRAME.times do
69
+ dxv = SIGMA * (ly - lx)
70
+ dyv = lx * (RHO - lz) - ly
71
+ dzv = lx * ly - BETA * lz
72
+ lx += DT * dxv
73
+ ly += DT * dyv
74
+ lz += DT * dzv
75
+ trail << [lx, ly, lz]
76
+ end
77
+
78
+ trail.shift(trail.length - TRAIL_LEN) if trail.length > TRAIL_LEN
79
+ end
80
+
81
+ # === Render ===
82
+
83
+ # Lorenz `z` becomes screen-vertical (the convection variable is
84
+ # naturally the "up" axis); Lorenz `y` becomes screen-depth. Each trail
85
+ # point is rotated around the vertical axis by `spin`, tilted by a
86
+ # fixed amount around the horizontal axis, then perspective-projected.
87
+ # Per-vertex color encodes depth so the trail dims as it wraps behind.
88
+ render do
89
+ cs = Math.cos(spin); ss = Math.sin(spin)
90
+ ct = Math.cos(TILT); st = Math.sin(TILT)
91
+
92
+ pts = []
93
+ colors = []
94
+ trail.each do |px, py, pz|
95
+ wx = px
96
+ wy = pz - 25 # center the attractor vertically
97
+ wz = py
98
+
99
+ wy2 = wy * ct - wz * st
100
+ wz2 = wy * st + wz * ct
101
+
102
+ wx3 = wx * cs + wz2 * ss
103
+ wz3 = -wx * ss + wz2 * cs
104
+
105
+ f = CAMERA / (CAMERA - wz3)
106
+ pts << [CX + wx3 * SCALE * f, CY - wy2 * SCALE * f]
107
+
108
+ t = ((wz3 + 30) / 60.0).clamp(0.0, 1.0)
109
+ colors << [0.30 + 0.65 * t, 0.50 + 0.45 * t, 0.85 + 0.15 * t, 0.20 + 0.75 * t]
110
+ end
111
+
112
+ Polyline.render(points: pts, color: colors, stroke_width: 1.5) if pts.length >= 2
113
+ end
114
+
115
+ show
@@ -0,0 +1,207 @@
1
+ # Mandelbrot zoomer
2
+ # Click to zoom into the Mandelbrot set, rendered fresh to a Canvas.
3
+ #
4
+ # Click anywhere to zoom in 4x at the cursor; right-click to zoom out.
5
+ # Press `r` to reset to the home view. Each view is rendered in 2x2 blocks,
6
+ # one horizontal band per frame, so the window stays responsive and a progress
7
+ # bar can track the work; within a band, pixels are grouped by escape-time
8
+ # bucket so each color is drawn in a single batched call.
9
+
10
+ require 'ruby2d'
11
+
12
+ # === Tunables ===
13
+
14
+ WIDTH = 800 # window width in pixels
15
+ HEIGHT = 600 # window height in pixels
16
+ PIXEL = 2 # render block size (smaller = sharper, slower)
17
+ BAND_ROWS = 16 # block-rows rendered per frame. The set is drawn one
18
+ # band at a time so only a band's worth of rectangles is
19
+ # ever live at once — without this bound a deep zoom's
20
+ # arrays overflow the mruby/WebAssembly heap and abort
21
+ # the tab. Larger = fewer frames, more peak memory.
22
+ MAX_ITER = 80 # iterations before declaring "in the set"
23
+ ZOOM_FACTOR = 4.0 # multiplicative zoom per click
24
+ COOLDOWN_FRAMES = 15 # frames that ignore input after a render finishes, so a
25
+ # rapid double-click reads as one zoom, not two
26
+ HOME_X = -0.5 # home view center (real)
27
+ HOME_Y = 0.0 # home view center (imaginary)
28
+ HOME_W = 3.5 # home view width in complex-plane units
29
+
30
+ PIXELS_W = WIDTH / PIXEL
31
+ PIXELS_H = HEIGHT / PIXEL
32
+
33
+ # === Window ===
34
+
35
+ set title: 'Ruby 2D ▸ Examples ▸ Mandelbrot zoomer', width: WIDTH, height: HEIGHT
36
+ set close_on_esc: true
37
+
38
+ canvas = Canvas.new(x: 0, y: 0, width: WIDTH, height: HEIGHT, fill: [0, 0, 0, 1])
39
+ status = Text.new('', x: 8, y: HEIGHT - 22, size: 13, color: [1.0, 1.0, 1.0, 0.7], z: 10)
40
+
41
+ # === Rendering overlay ===
42
+ #
43
+ # A centered "busy" panel shown while a view streams in: a translucent black
44
+ # backdrop (so the label reads over any part of the fractal), a prominent label,
45
+ # and a progress bar that fills as bands complete. `x:/y: :center` re-resolve
46
+ # against the live viewport each frame. The bar's track and fill share a fixed
47
+ # left edge so the fill grows rightward instead of staying centered.
48
+
49
+ PANEL_W = 320
50
+ PANEL_H = 108
51
+ BAR_W = 250
52
+ BAR_H = 12
53
+ PANEL_Y = (HEIGHT - PANEL_H) / 2
54
+ BAR_X = (WIDTH - BAR_W) / 2
55
+
56
+ overlay_panel = Rectangle.new(x: :center, y: :center, width: PANEL_W, height: PANEL_H,
57
+ color: [0.0, 0.0, 0.0, 0.6], z: 20)
58
+ overlay_label = Text.new('Rendering…', x: :center, y: PANEL_Y + 20, size: 30,
59
+ color: 'white', z: 22)
60
+ progress_track = Rectangle.new(x: BAR_X, y: PANEL_Y + 72, width: BAR_W, height: BAR_H,
61
+ color: [1.0, 1.0, 1.0, 0.18], z: 21)
62
+ progress_fill = Rectangle.new(x: BAR_X, y: PANEL_Y + 72, width: 0, height: BAR_H,
63
+ color: '#fbbf24', z: 22)
64
+ overlay = [overlay_panel, progress_track, progress_fill, overlay_label]
65
+
66
+ # === Palette ===
67
+
68
+ PALETTE = Array.new(MAX_ITER + 1) do |n|
69
+ if n >= MAX_ITER
70
+ [0.02, 0.02, 0.04, 1]
71
+ else
72
+ h = (n.to_f / 32 + 0.6) % 1.0
73
+ s = 0.7
74
+ v = 1.0
75
+ i = (h * 6).floor
76
+ f = h * 6 - i
77
+ p = v * (1 - s)
78
+ q = v * (1 - f * s)
79
+ tt = v * (1 - (1 - f) * s)
80
+ rgb = case i % 6
81
+ when 0 then [v, tt, p]
82
+ when 1 then [q, v, p]
83
+ when 2 then [p, v, tt]
84
+ when 3 then [p, q, v]
85
+ when 4 then [tt, p, v]
86
+ else [v, p, q]
87
+ end
88
+ rgb + [1.0]
89
+ end
90
+ end
91
+
92
+ # === Rendering ===
93
+
94
+ # Render a single horizontal band, block-rows [py_start, py_end), into the
95
+ # canvas. Pixels are sorted into escape-time buckets and each non-empty bucket
96
+ # is drawn in one batched call. One band's worth of rectangles is all that is
97
+ # ever live, so peak memory stays bounded no matter how deep the zoom — the
98
+ # whole-image bucket set would otherwise overflow the mruby/web heap.
99
+ def render_band(canvas, cx, cy, vw, py_start, py_end)
100
+ view_h = vw * HEIGHT.to_f / WIDTH
101
+ inv_w = vw / PIXELS_W
102
+ inv_h = view_h / PIXELS_H
103
+ origin_x = cx - vw / 2.0
104
+ origin_y = cy - view_h / 2.0
105
+ buckets = Array.new(MAX_ITER + 1) { [] }
106
+ py = py_start
107
+ while py < py_end
108
+ cy_p = origin_y + py * inv_h
109
+ PIXELS_W.times do |px|
110
+ cx_p = origin_x + px * inv_w
111
+ zr = 0.0
112
+ zi = 0.0
113
+ n = 0
114
+ while n < MAX_ITER && zr * zr + zi * zi < 4.0
115
+ zr_new = zr * zr - zi * zi + cx_p
116
+ zi = 2 * zr * zi + cy_p
117
+ zr = zr_new
118
+ n += 1
119
+ end
120
+ buckets[n] << [px * PIXEL, py * PIXEL, PIXEL, PIXEL]
121
+ end
122
+ py += 1
123
+ end
124
+ buckets.each_with_index do |rects, n|
125
+ next if rects.empty?
126
+ canvas.fill_rectangles(rectangles: rects, color: PALETTE[n])
127
+ end
128
+ end
129
+
130
+ def update_status(status, cx, cy, vw)
131
+ zoom = HOME_W / vw
132
+ status.content = format('center: (%.5f, %.5f) zoom: %.1fx', cx, cy, zoom)
133
+ end
134
+
135
+ # === State ===
136
+
137
+ center_x = HOME_X
138
+ center_y = HOME_Y
139
+ view_w = HOME_W
140
+ rendering = false # true while a view is streaming in across frames
141
+ band_py = 0 # next block-row to render this pass
142
+ cooldown = 0 # frames left before input is accepted again
143
+
144
+ # Begin streaming the current view. The `update` loop renders one band per
145
+ # frame from here; the overlay stays up until the last band lands.
146
+ start_render = lambda do
147
+ rendering = true
148
+ band_py = 0
149
+ progress_fill.width = 0
150
+ overlay.each { |element| element.show }
151
+ end
152
+
153
+ # Kick off the first render so the window can appear immediately and fill in,
154
+ # rather than blocking on a full render before it is even visible.
155
+ start_render.call
156
+
157
+ # === Input ===
158
+ #
159
+ # Clicks are ignored while a render is streaming or during the brief cooldown
160
+ # after one, so mashing the mouse can't queue up a stack of zooms.
161
+
162
+ on :mouse_down do |event|
163
+ next if rendering || cooldown > 0
164
+ view_h = view_w * HEIGHT.to_f / WIDTH
165
+ target_x = center_x + (event.x.to_f / WIDTH - 0.5) * view_w
166
+ target_y = center_y + (event.y.to_f / HEIGHT - 0.5) * view_h
167
+ if event.button? :right
168
+ view_w *= ZOOM_FACTOR
169
+ else
170
+ view_w /= ZOOM_FACTOR
171
+ end
172
+ center_x = target_x
173
+ center_y = target_y
174
+ start_render.call
175
+ end
176
+
177
+ on key_down: :r do
178
+ next if rendering || cooldown > 0
179
+ center_x = HOME_X
180
+ center_y = HOME_Y
181
+ view_w = HOME_W
182
+ start_render.call
183
+ end
184
+
185
+ # === Per-frame update ===
186
+ #
187
+ # Render the next band, advance the progress bar, and — on the final band —
188
+ # refresh the status line, drop the overlay, and start the input cooldown.
189
+
190
+ update do
191
+ cooldown -= 1 if cooldown > 0
192
+ next unless rendering
193
+
194
+ band_end = [band_py + BAND_ROWS, PIXELS_H].min
195
+ render_band(canvas, center_x, center_y, view_w, band_py, band_end)
196
+ band_py = band_end
197
+ progress_fill.width = (BAR_W * (band_py.to_f / PIXELS_H)).round
198
+
199
+ if band_py >= PIXELS_H
200
+ rendering = false
201
+ cooldown = COOLDOWN_FRAMES
202
+ update_status(status, center_x, center_y, view_w)
203
+ overlay.each { |element| element.hide }
204
+ end
205
+ end
206
+
207
+ show