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,200 @@
1
+ # Marching squares
2
+ # Drifting metaballs merge and split as the iso-line is extracted live.
3
+ # Move the mouse to stir the blobs; press R to reshuffle.
4
+ #
5
+ # A handful of metaballs each contribute to a smooth scalar field
6
+ # (1/r² potential). The classic marching squares algorithm extracts
7
+ # the iso-line where the field equals a threshold: it samples on a
8
+ # coarse grid, then for each cell looks at which corners are above the
9
+ # threshold and connects the interpolated edge crossings. The blobs
10
+ # merge and split as the balls drift, and the cursor is one more ball
11
+ # you can herd them with.
12
+
13
+ require 'ruby2d'
14
+
15
+ # === Tunables ===
16
+
17
+ WIDTH = 800 # window width in pixels
18
+ HEIGHT = 600 # window height in pixels
19
+ CELL = 10 # marching squares cell size in pixels
20
+ NUM_BALLS = 6 # how many metaballs in motion
21
+ THRESHOLD = 1.0 # iso-level extracted as the contour
22
+ BALL_MIN_R = 60 # smallest metaball radius
23
+ BALL_MAX_R = 110 # largest metaball radius
24
+ BALL_SPEED = 160 # max ball speed (px/sec)
25
+ CURSOR_R = 70 # radius of the metaball that follows the mouse
26
+
27
+ GRID_W = WIDTH / CELL
28
+ GRID_H = HEIGHT / CELL
29
+
30
+ # Edges per case in the marching-squares lookup table. Corners are
31
+ # numbered 0=BL, 1=BR, 2=TR, 3=TL; edges 0=bottom, 1=right, 2=top,
32
+ # 3=left. The 4-bit case index is built as bit0=c0, bit1=c1, …
33
+ EDGES = [
34
+ [], # 0: 0000
35
+ [[0, 3]], # 1: 0001
36
+ [[0, 1]], # 2: 0010
37
+ [[1, 3]], # 3: 0011
38
+ [[1, 2]], # 4: 0100
39
+ [[0, 1], [2, 3]], # 5: 0101 (saddle)
40
+ [[0, 2]], # 6: 0110
41
+ [[2, 3]], # 7: 0111
42
+ [[2, 3]], # 8: 1000
43
+ [[0, 2]], # 9: 1001
44
+ [[0, 3], [1, 2]], # 10: 1010 (saddle)
45
+ [[1, 2]], # 11: 1011
46
+ [[1, 3]], # 12: 1100
47
+ [[0, 1]], # 13: 1101
48
+ [[0, 3]], # 14: 1110
49
+ [] # 15: 1111
50
+ ].freeze
51
+
52
+ # === Window ===
53
+
54
+ set title: 'Ruby 2D ▸ Examples ▸ Marching squares',
55
+ width: WIDTH, height: HEIGHT, background: '#0a0a14'
56
+ set close_on_esc: true
57
+
58
+ # === State ===
59
+
60
+ balls = Array.new(NUM_BALLS) do
61
+ {
62
+ x: rand * WIDTH,
63
+ y: rand * HEIGHT,
64
+ r: BALL_MIN_R + rand * (BALL_MAX_R - BALL_MIN_R),
65
+ vx: (rand - 0.5) * 2 * BALL_SPEED,
66
+ vy: (rand - 0.5) * 2 * BALL_SPEED
67
+ }
68
+ end
69
+
70
+ field = Array.new(GRID_H + 1) { Array.new(GRID_W + 1, 0.0) }
71
+
72
+ cursor_x = WIDTH / 2.0
73
+ cursor_y = HEIGHT / 2.0
74
+ cursor_on = false # true once the mouse has moved into the field
75
+
76
+ reshuffle = lambda do
77
+ balls.each do |b|
78
+ b[:x] = rand * WIDTH
79
+ b[:y] = rand * HEIGHT
80
+ b[:r] = BALL_MIN_R + rand * (BALL_MAX_R - BALL_MIN_R)
81
+ b[:vx] = (rand - 0.5) * 2 * BALL_SPEED
82
+ b[:vy] = (rand - 0.5) * 2 * BALL_SPEED
83
+ end
84
+ end
85
+
86
+ # === Input ===
87
+
88
+ on :mouse_move do |event|
89
+ cursor_x = event.x
90
+ cursor_y = event.y
91
+ cursor_on = true
92
+ end
93
+
94
+ on key_down: :r do
95
+ reshuffle.call
96
+ end
97
+
98
+ # Flattened ball fields, refilled each frame. See the resample loop.
99
+ ball_x = Array.new(NUM_BALLS + 1, 0.0)
100
+ ball_y = Array.new(NUM_BALLS + 1, 0.0)
101
+ ball_r2 = Array.new(NUM_BALLS + 1, 0.0)
102
+
103
+ # === Per-frame update ===
104
+
105
+ update do |dt|
106
+ balls.each do |b|
107
+ b[:x] += b[:vx] * dt
108
+ b[:y] += b[:vy] * dt
109
+ b[:vx] = -b[:vx] if (b[:x] < 0 && b[:vx] < 0) || (b[:x] > WIDTH && b[:vx] > 0)
110
+ b[:vy] = -b[:vy] if (b[:y] < 0 && b[:vy] < 0) || (b[:y] > HEIGHT && b[:vy] > 0)
111
+ end
112
+
113
+ # Resample the scalar field at every grid corner. Each metaball
114
+ # contributes r²/(d²+1) — the +1 keeps the field finite at the center.
115
+ # The cursor is one more ball, so the mouse shapes the field too.
116
+ # Flatten the balls (and the cursor, which acts as one more ball) into
117
+ # plain arrays first. The resample below reads these at every one of
118
+ # ~4,900 grid corners, where a Hash lookup per read costs far more than
119
+ # the arithmetic around it.
120
+ count = 0
121
+ balls.each do |b|
122
+ ball_x[count] = b[:x]
123
+ ball_y[count] = b[:y]
124
+ ball_r2[count] = b[:r] * b[:r]
125
+ count += 1
126
+ end
127
+ if cursor_on
128
+ ball_x[count] = cursor_x
129
+ ball_y[count] = cursor_y
130
+ ball_r2[count] = CURSOR_R * CURSOR_R
131
+ count += 1
132
+ end
133
+
134
+ (GRID_H + 1).times do |gy|
135
+ y = gy * CELL
136
+ row = field[gy]
137
+ (GRID_W + 1).times do |gx|
138
+ x = gx * CELL
139
+ sum = 0.0
140
+ n = 0
141
+ while n < count
142
+ dx = x - ball_x[n]
143
+ dy = y - ball_y[n]
144
+ sum += ball_r2[n] / (dx * dx + dy * dy + 1.0)
145
+ n += 1
146
+ end
147
+ row[gx] = sum
148
+ end
149
+ end
150
+ end
151
+
152
+ # === Render ===
153
+
154
+ # Two-pass stroke for a soft neon look: a thicker, faded line behind a
155
+ # crisp thin line on top.
156
+ GLOW = [0.99, 0.86, 0.27, 0.35]
157
+ CORE = [1.0, 0.97, 0.65, 1.0]
158
+
159
+ render do
160
+ gy = 0
161
+ while gy < GRID_H
162
+ gx = 0
163
+ while gx < GRID_W
164
+ v0 = field[gy + 1][gx]
165
+ v1 = field[gy + 1][gx + 1]
166
+ v2 = field[gy][gx + 1]
167
+ v3 = field[gy][gx]
168
+ bits = v0 > THRESHOLD ? 1 : 0
169
+ bits |= 2 if v1 > THRESHOLD
170
+ bits |= 4 if v2 > THRESHOLD
171
+ bits |= 8 if v3 > THRESHOLD
172
+ if bits != 0 && bits != 15
173
+ cx = gx * CELL
174
+ cy = gy * CELL
175
+ EDGES[bits].each do |edge_a, edge_b|
176
+ # Inline edge interpolation. `t` is the linear position of the
177
+ # threshold between the two corner values along the edge.
178
+ case edge_a
179
+ when 0 then ax = cx + (THRESHOLD - v0) / (v1 - v0) * CELL; ay = cy + CELL
180
+ when 1 then ax = cx + CELL; ay = cy + CELL - (THRESHOLD - v1) / (v2 - v1) * CELL
181
+ when 2 then ax = cx + (THRESHOLD - v3) / (v2 - v3) * CELL; ay = cy
182
+ else ax = cx; ay = cy + CELL - (THRESHOLD - v0) / (v3 - v0) * CELL
183
+ end
184
+ case edge_b
185
+ when 0 then bx = cx + (THRESHOLD - v0) / (v1 - v0) * CELL; by = cy + CELL
186
+ when 1 then bx = cx + CELL; by = cy + CELL - (THRESHOLD - v1) / (v2 - v1) * CELL
187
+ when 2 then bx = cx + (THRESHOLD - v3) / (v2 - v3) * CELL; by = cy
188
+ else bx = cx; by = cy + CELL - (THRESHOLD - v0) / (v3 - v0) * CELL
189
+ end
190
+ Line.render(x1: ax, y1: ay, x2: bx, y2: by, stroke_width: 6, color: GLOW)
191
+ Line.render(x1: ax, y1: ay, x2: bx, y2: by, stroke_width: 2, color: CORE)
192
+ end
193
+ end
194
+ gx += 1
195
+ end
196
+ gy += 1
197
+ end
198
+ end
199
+
200
+ show
data/examples/maze.rb ADDED
@@ -0,0 +1,323 @@
1
+ # Maze generator
2
+ # Recursive backtracking carves a perfect maze, then you steer through it.
3
+ #
4
+ # The orange dot is the algorithm's frontier; watch it wander through the
5
+ # grid until every cell has been visited. Once the maze is complete, steer
6
+ # the red player from the upper-left corner to the green goal in the
7
+ # bottom-right with the arrow keys — or press `s` to auto-solve and watch
8
+ # the path trace itself. Reach the goal and every wall pulses through a
9
+ # rainbow. Press `r` for a fresh maze.
10
+
11
+ require 'ruby2d'
12
+
13
+ # === Tunables ===
14
+
15
+ WIDTH = 800 # window width in pixels
16
+ HEIGHT = 600 # window height in pixels
17
+ COLS = 40 # grid columns
18
+ ROWS = 30 # grid rows
19
+ CELL = WIDTH / COLS # cell size in pixels
20
+ GOAL_C = COLS - 1 # goal cell column (bottom-right)
21
+ GOAL_R = ROWS - 1 # goal cell row
22
+ STEPS_PER_SEC = 240 # DFS steps per second during generation
23
+ SOLVE_SPEED = 30 # cells per second the auto-solver traces the path
24
+ RAINBOW_SPEED = 0.35 # rainbow cycles per second during the victory pulse
25
+ RAINBOW_SCALE = 0.03 # hue shift per cell along the diagonal rainbow wave
26
+ RAINBOW_SAT = 0.85 # saturation of the pulse (0 = white, 1 = pure hue)
27
+
28
+ # === Window ===
29
+
30
+ set title: 'Ruby 2D ▸ Examples ▸ Maze generator', width: WIDTH, height: HEIGHT, background: [0.04, 0.06, 0.10, 1]
31
+ set close_on_esc: true
32
+
33
+ WALL_COLOR = [0.85, 0.9, 1.0, 1]
34
+ HEAD_COLOR = [1.0, 0.8, 0.3, 1]
35
+ PLAYER_COLOR = [0.95, 0.45, 0.30, 1]
36
+ GOAL_COLOR = [0.4, 0.85, 0.4, 1]
37
+ TRACE_COLOR = [0.45, 0.9, 1.0, 0.85] # auto-solver's path trace
38
+
39
+ NORTH = 1
40
+ EAST = 2
41
+ SOUTH = 4
42
+ WEST = 8
43
+ ALL_WALLS = NORTH | EAST | SOUTH | WEST
44
+ DELTA = { NORTH => [0, -1], EAST => [1, 0], SOUTH => [0, 1], WEST => [-1, 0] }
45
+ OPPOSITE = { NORTH => SOUTH, EAST => WEST, SOUTH => NORTH, WEST => EAST }
46
+ DIRS = [NORTH, EAST, SOUTH, WEST]
47
+
48
+ # Pre-create wall lines. h_walls[er][c] is the horizontal segment at row-edge
49
+ # `er` and column `c`. v_walls[r][ec] is the vertical segment at row `r` and
50
+ # column-edge `ec`. Knocking down a wall hides its line.
51
+ h_walls = Array.new(ROWS + 1) do |er|
52
+ Array.new(COLS) do |c|
53
+ Line.new(x1: c * CELL, y1: er * CELL,
54
+ x2: (c + 1) * CELL, y2: er * CELL,
55
+ stroke_width: 2, color: WALL_COLOR, z: 2)
56
+ end
57
+ end
58
+ v_walls = Array.new(ROWS) do |r|
59
+ Array.new(COLS + 1) do |ec|
60
+ Line.new(x1: ec * CELL, y1: r * CELL,
61
+ x2: ec * CELL, y2: (r + 1) * CELL,
62
+ stroke_width: 2, color: WALL_COLOR, z: 2)
63
+ end
64
+ end
65
+
66
+ head = Circle.new(x: CELL / 2.0, y: CELL / 2.0,
67
+ radius: CELL * 0.35, color: HEAD_COLOR, z: 5)
68
+ player = Circle.new(x: CELL / 2.0, y: CELL / 2.0,
69
+ radius: CELL * 0.35, color: PLAYER_COLOR, z: 5, visible: false)
70
+ Circle.new(x: (GOAL_C + 0.5) * CELL, y: (GOAL_R + 0.5) * CELL,
71
+ radius: CELL * 0.4, color: GOAL_COLOR, z: 4)
72
+
73
+ # === Mutable state ===
74
+
75
+ walls_intact = nil
76
+ visited = nil
77
+ stack = nil
78
+ generating = true
79
+ player_c = 0
80
+ player_r = 0
81
+ step_accum = 0.0
82
+ solving = false # auto-solver is animating the trace
83
+ solved = false # goal reached — the rainbow pulse is running
84
+ solution = nil # list of [c, r] cells from the player to the goal
85
+ solve_index = 0 # how far along `solution` the trace has drawn
86
+ solve_accum = 0.0 # fractional cells owed to the trace this frame
87
+ celebrate_t = 0.0 # seconds elapsed into the victory pulse
88
+ trace = [] # Line segments drawn along the solved path
89
+
90
+ def hide_wall(h_walls, v_walls, r, c, side)
91
+ case side
92
+ when NORTH then h_walls[r][c].visible = false
93
+ when SOUTH then h_walls[r + 1][c].visible = false
94
+ when EAST then v_walls[r][c + 1].visible = false
95
+ when WEST then v_walls[r][c].visible = false
96
+ end
97
+ end
98
+
99
+ def reset_walls(h_walls, v_walls)
100
+ h_walls.each { |row| row.each { |w| w.visible = true; w.color = WALL_COLOR } }
101
+ v_walls.each { |row| row.each { |w| w.visible = true; w.color = WALL_COLOR } }
102
+ end
103
+
104
+ def step_dfs(walls_intact, visited, stack, h_walls, v_walls)
105
+ c, r = stack.last
106
+ unvisited = DIRS.select do |d|
107
+ dc, dr = DELTA[d]
108
+ nc = c + dc
109
+ nr = r + dr
110
+ nc.between?(0, COLS - 1) && nr.between?(0, ROWS - 1) && !visited[nr][nc]
111
+ end
112
+ if unvisited.empty?
113
+ stack.pop
114
+ else
115
+ d = unvisited.sample
116
+ dc, dr = DELTA[d]
117
+ nc = c + dc
118
+ nr = r + dr
119
+ walls_intact[r][c] &= ~d
120
+ walls_intact[nr][nc] &= ~OPPOSITE[d]
121
+ hide_wall(h_walls, v_walls, r, c, d)
122
+ visited[nr][nc] = true
123
+ stack.push([nc, nr])
124
+ end
125
+ end
126
+
127
+ # Breadth-first search from (start_c, start_r) to the goal, returning the
128
+ # path as a list of [c, r] cells. The maze is perfect (exactly one route
129
+ # between any two cells), so that path is unique. `from[r][c]` records the
130
+ # direction stepping back toward the start, walked in reverse to rebuild it.
131
+ def solve_path(walls_intact, start_c, start_r)
132
+ from = Array.new(ROWS) { Array.new(COLS) }
133
+ seen = Array.new(ROWS) { Array.new(COLS, false) }
134
+ seen[start_r][start_c] = true
135
+ queue = [[start_c, start_r]]
136
+ until queue.empty?
137
+ c, r = queue.shift
138
+ break if c == GOAL_C && r == GOAL_R
139
+ DIRS.each do |d|
140
+ next unless (walls_intact[r][c] & d) == 0
141
+ dc, dr = DELTA[d]
142
+ nc = c + dc
143
+ nr = r + dr
144
+ next if seen[nr][nc]
145
+ seen[nr][nc] = true
146
+ from[nr][nc] = OPPOSITE[d]
147
+ queue.push([nc, nr])
148
+ end
149
+ end
150
+ path = []
151
+ c = GOAL_C
152
+ r = GOAL_R
153
+ loop do
154
+ path.unshift([c, r])
155
+ break if c == start_c && r == start_r
156
+ back = from[r][c]
157
+ break unless back
158
+ dc, dr = DELTA[back]
159
+ c += dc
160
+ r += dr
161
+ end
162
+ path
163
+ end
164
+
165
+ # Write an HSV color (fixed saturation and value) straight into an existing
166
+ # Color's channels — no allocation, so recoloring every wall each frame
167
+ # during the victory pulse stays cheap. `hue` may be any value; only its
168
+ # fractional position within each unit interval picks the color.
169
+ def paint_hue(color, hue)
170
+ h = hue - hue.floor
171
+ i = (h * 6).to_i
172
+ f = h * 6 - i
173
+ min = 1.0 - RAINBOW_SAT # the two non-peak channels bottom out here
174
+ down = 1.0 - f * RAINBOW_SAT
175
+ up = 1.0 - (1.0 - f) * RAINBOW_SAT
176
+ case i % 6
177
+ when 0 then color.r = 1.0; color.g = up; color.b = min
178
+ when 1 then color.r = down; color.g = 1.0; color.b = min
179
+ when 2 then color.r = min; color.g = 1.0; color.b = up
180
+ when 3 then color.r = min; color.g = down; color.b = 1.0
181
+ when 4 then color.r = up; color.g = min; color.b = 1.0
182
+ else color.r = 1.0; color.g = min; color.b = down
183
+ end
184
+ end
185
+
186
+ reset = lambda do
187
+ walls_intact = Array.new(ROWS) { Array.new(COLS, ALL_WALLS) }
188
+ visited = Array.new(ROWS) { Array.new(COLS, false) }
189
+ visited[0][0] = true
190
+ stack = [[0, 0]]
191
+ reset_walls(h_walls, v_walls)
192
+ generating = true
193
+ solving = false
194
+ solved = false
195
+ solution = nil
196
+ solve_index = 0
197
+ solve_accum = 0.0
198
+ celebrate_t = 0.0
199
+ trace.each(&:remove)
200
+ trace.clear
201
+ player_c = 0
202
+ player_r = 0
203
+ step_accum = 0.0
204
+ player.x = CELL / 2.0
205
+ player.y = CELL / 2.0
206
+ player.visible = false
207
+ head.x = CELL / 2.0
208
+ head.y = CELL / 2.0
209
+ head.visible = true
210
+ end
211
+
212
+ # Kick off the auto-solver from the player's current cell. Ignored while the
213
+ # maze is still being carved or a solve/celebration is already under way.
214
+ start_solve = lambda do
215
+ next if generating || solving || solved
216
+ solution = solve_path(walls_intact, player_c, player_r)
217
+ solve_index = 0
218
+ solve_accum = 0.0
219
+ solving = true
220
+ end
221
+
222
+ # Enter the solved state: stop the solver and start the rainbow pulse.
223
+ mark_solved = lambda do
224
+ solving = false
225
+ solved = true
226
+ celebrate_t = 0.0
227
+ end
228
+
229
+ reset.call
230
+
231
+ # === Input ===
232
+
233
+ on :key_down do |event|
234
+ if event.key? :r
235
+ reset.call
236
+ next
237
+ end
238
+ if event.key? :s
239
+ start_solve.call
240
+ next
241
+ end
242
+ next if generating || solving || solved
243
+ move = case event.key
244
+ when 'up' then NORTH
245
+ when 'down' then SOUTH
246
+ when 'left' then WEST
247
+ when 'right' then EAST
248
+ end
249
+ next unless move
250
+ if (walls_intact[player_r][player_c] & move) == 0
251
+ dc, dr = DELTA[move]
252
+ player_c += dc
253
+ player_r += dr
254
+ player.x = (player_c + 0.5) * CELL
255
+ player.y = (player_r + 0.5) * CELL
256
+ mark_solved.call if player_c == GOAL_C && player_r == GOAL_R
257
+ end
258
+ end
259
+
260
+ # === Per-frame update ===
261
+
262
+ update do |dt|
263
+ if generating
264
+ step_accum += STEPS_PER_SEC * dt
265
+ count = step_accum.to_i
266
+ step_accum -= count
267
+ count.times do
268
+ if stack.empty?
269
+ generating = false
270
+ head.visible = false
271
+ player.visible = true
272
+ break
273
+ end
274
+ step_dfs(walls_intact, visited, stack, h_walls, v_walls)
275
+ end
276
+ if generating && !stack.empty?
277
+ c, r = stack.last
278
+ head.x = (c + 0.5) * CELL
279
+ head.y = (r + 0.5) * CELL
280
+ end
281
+ next
282
+ end
283
+
284
+ # Auto-solver: advance along the solution, laying a trace segment between
285
+ # each pair of cells and walking the player forward as it goes.
286
+ if solving
287
+ solve_accum += SOLVE_SPEED * dt
288
+ while solve_accum >= 1.0 && solve_index < solution.length - 1
289
+ solve_accum -= 1.0
290
+ solve_index += 1
291
+ pc, pr = solution[solve_index - 1]
292
+ nc, nr = solution[solve_index]
293
+ trace << Line.new(x1: (pc + 0.5) * CELL, y1: (pr + 0.5) * CELL,
294
+ x2: (nc + 0.5) * CELL, y2: (nr + 0.5) * CELL,
295
+ stroke_width: 4, color: TRACE_COLOR, z: 3)
296
+ player_c = nc
297
+ player_r = nr
298
+ player.x = (nc + 0.5) * CELL
299
+ player.y = (nr + 0.5) * CELL
300
+ end
301
+ mark_solved.call if solve_index >= solution.length - 1
302
+ next
303
+ end
304
+
305
+ # Victory pulse: sweep a diagonal rainbow wave across the standing walls by
306
+ # rewriting each wall's color in place (see `paint_hue`).
307
+ if solved
308
+ celebrate_t += dt
309
+ phase = celebrate_t * RAINBOW_SPEED
310
+ h_walls.each_with_index do |row, er|
311
+ row.each_with_index do |w, c|
312
+ paint_hue(w.color, (er + c) * RAINBOW_SCALE + phase) if w.visible
313
+ end
314
+ end
315
+ v_walls.each_with_index do |row, r|
316
+ row.each_with_index do |w, ec|
317
+ paint_hue(w.color, (r + ec) * RAINBOW_SCALE + phase) if w.visible
318
+ end
319
+ end
320
+ end
321
+ end
322
+
323
+ show