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
@@ -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