ruby2d 0.12.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (619) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.md +7 -0
  3. data/README.md +141 -0
  4. data/USAGE.md +2435 -0
  5. data/assets/Rakefile +637 -0
  6. data/assets/build_support/CMakeLists.txt +94 -0
  7. data/assets/build_support/mruby/build_config.rb +34 -0
  8. data/assets/build_support/mruby/build_config_wasm.rb +30 -0
  9. data/assets/build_support/sdl_test.c +174 -0
  10. data/assets/deps.yaml +16 -0
  11. data/assets/platform/include/SDL3/SDL.h +91 -0
  12. data/assets/platform/include/SDL3/SDL_assert.h +705 -0
  13. data/assets/platform/include/SDL3/SDL_asyncio.h +550 -0
  14. data/assets/platform/include/SDL3/SDL_atomic.h +692 -0
  15. data/assets/platform/include/SDL3/SDL_audio.h +2370 -0
  16. data/assets/platform/include/SDL3/SDL_begin_code.h +553 -0
  17. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_bits.h +47 -27
  18. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_blendmode.h +59 -55
  19. data/assets/platform/include/SDL3/SDL_camera.h +535 -0
  20. data/assets/platform/include/SDL3/SDL_clipboard.h +331 -0
  21. data/assets/{include/SDL2/close_code.h → platform/include/SDL3/SDL_close_code.h} +9 -8
  22. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_copying.h +3 -1
  23. data/assets/platform/include/SDL3/SDL_cpuinfo.h +374 -0
  24. data/assets/platform/include/SDL3/SDL_dialog.h +343 -0
  25. data/assets/platform/include/SDL3/SDL_dlopennote.h +234 -0
  26. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_egl.h +11 -8
  27. data/assets/platform/include/SDL3/SDL_endian.h +645 -0
  28. data/assets/platform/include/SDL3/SDL_error.h +226 -0
  29. data/assets/platform/include/SDL3/SDL_events.h +1645 -0
  30. data/assets/platform/include/SDL3/SDL_filesystem.h +537 -0
  31. data/assets/platform/include/SDL3/SDL_gamepad.h +1656 -0
  32. data/assets/platform/include/SDL3/SDL_gpu.h +4608 -0
  33. data/assets/platform/include/SDL3/SDL_guid.h +106 -0
  34. data/assets/platform/include/SDL3/SDL_haptic.h +1461 -0
  35. data/assets/platform/include/SDL3/SDL_hidapi.h +571 -0
  36. data/assets/platform/include/SDL3/SDL_hints.h +5001 -0
  37. data/assets/platform/include/SDL3/SDL_init.h +507 -0
  38. data/assets/platform/include/SDL3/SDL_intrin.h +410 -0
  39. data/assets/platform/include/SDL3/SDL_iostream.h +1379 -0
  40. data/assets/platform/include/SDL3/SDL_joystick.h +1385 -0
  41. data/assets/platform/include/SDL3/SDL_keyboard.h +608 -0
  42. data/assets/platform/include/SDL3/SDL_keycode.h +347 -0
  43. data/assets/platform/include/SDL3/SDL_loadso.h +145 -0
  44. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_locale.h +40 -24
  45. data/assets/platform/include/SDL3/SDL_log.h +541 -0
  46. data/assets/platform/include/SDL3/SDL_main.h +704 -0
  47. data/assets/platform/include/SDL3/SDL_main_impl.h +151 -0
  48. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_messagebox.h +85 -48
  49. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_metal.h +29 -29
  50. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_misc.h +13 -12
  51. data/assets/platform/include/SDL3/SDL_mouse.h +813 -0
  52. data/assets/platform/include/SDL3/SDL_mutex.h +1117 -0
  53. data/assets/platform/include/SDL3/SDL_oldnames.h +1339 -0
  54. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_opengl.h +1247 -278
  55. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_opengl_glext.h +5 -1
  56. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_opengles.h +6 -7
  57. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_opengles2.h +10 -11
  58. data/assets/platform/include/SDL3/SDL_pen.h +198 -0
  59. data/assets/platform/include/SDL3/SDL_pixels.h +1441 -0
  60. data/assets/{include/SDL2/SDL_test_log.h → platform/include/SDL3/SDL_platform.h} +25 -26
  61. data/assets/platform/include/SDL3/SDL_platform_defines.h +497 -0
  62. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_power.h +40 -20
  63. data/assets/platform/include/SDL3/SDL_process.h +441 -0
  64. data/assets/platform/include/SDL3/SDL_properties.h +572 -0
  65. data/assets/platform/include/SDL3/SDL_rect.h +528 -0
  66. data/assets/platform/include/SDL3/SDL_render.h +3028 -0
  67. data/assets/platform/include/SDL3/SDL_revision.h +59 -0
  68. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_scancode.h +59 -68
  69. data/assets/platform/include/SDL3/SDL_sensor.h +321 -0
  70. data/assets/platform/include/SDL3/SDL_stdinc.h +6186 -0
  71. data/assets/platform/include/SDL3/SDL_storage.h +686 -0
  72. data/assets/platform/include/SDL3/SDL_surface.h +1769 -0
  73. data/assets/platform/include/SDL3/SDL_system.h +840 -0
  74. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test.h +16 -22
  75. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_assert.h +27 -34
  76. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_common.h +109 -52
  77. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_compare.h +22 -14
  78. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_crc32.h +27 -30
  79. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_font.h +50 -49
  80. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_fuzzer.h +64 -79
  81. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_harness.h +47 -30
  82. data/assets/platform/include/SDL3/SDL_test_log.h +83 -0
  83. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_md5.h +21 -28
  84. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_memory.h +19 -16
  85. data/assets/platform/include/SDL3/SDL_thread.h +602 -0
  86. data/assets/platform/include/SDL3/SDL_time.h +249 -0
  87. data/assets/platform/include/SDL3/SDL_timer.h +454 -0
  88. data/assets/platform/include/SDL3/SDL_touch.h +184 -0
  89. data/assets/platform/include/SDL3/SDL_tray.h +544 -0
  90. data/assets/platform/include/SDL3/SDL_version.h +198 -0
  91. data/assets/platform/include/SDL3/SDL_video.h +3497 -0
  92. data/assets/platform/include/SDL3/SDL_vulkan.h +287 -0
  93. data/assets/platform/include/SDL3_image/SDL_image.h +3328 -0
  94. data/assets/platform/include/SDL3_mixer/SDL_mixer.h +3369 -0
  95. data/assets/platform/include/SDL3_ttf/SDL_textengine.h +181 -0
  96. data/assets/platform/include/SDL3_ttf/SDL_ttf.h +2833 -0
  97. data/assets/{include → platform/include}/mrbconf.h +42 -31
  98. data/assets/{include → platform/include}/mruby/array.h +3 -4
  99. data/assets/{include → platform/include}/mruby/boxing_nan.h +10 -0
  100. data/assets/platform/include/mruby/boxing_no.h +59 -0
  101. data/assets/{include → platform/include}/mruby/boxing_word.h +72 -26
  102. data/assets/platform/include/mruby/class.h +157 -0
  103. data/assets/{include → platform/include}/mruby/common.h +30 -1
  104. data/assets/{include → platform/include}/mruby/compile.h +52 -74
  105. data/assets/{include → platform/include}/mruby/data.h +2 -2
  106. data/assets/{include → platform/include}/mruby/debug.h +12 -5
  107. data/assets/{include → platform/include}/mruby/dump.h +7 -9
  108. data/assets/{include → platform/include}/mruby/endian.h +1 -1
  109. data/assets/platform/include/mruby/error.h +173 -0
  110. data/assets/platform/include/mruby/gc.h +79 -0
  111. data/assets/{include → platform/include}/mruby/hash.h +1 -7
  112. data/assets/platform/include/mruby/internal.h +282 -0
  113. data/assets/platform/include/mruby/irep.h +143 -0
  114. data/assets/{include → platform/include}/mruby/istruct.h +1 -1
  115. data/assets/platform/include/mruby/khash.h +455 -0
  116. data/assets/platform/include/mruby/mempool.h +19 -0
  117. data/assets/{include → platform/include}/mruby/numeric.h +7 -10
  118. data/assets/platform/include/mruby/object.h +51 -0
  119. data/assets/{include → platform/include}/mruby/opcode.h +5 -5
  120. data/assets/{include → platform/include}/mruby/ops.h +19 -6
  121. data/assets/platform/include/mruby/presym/id.h +1447 -0
  122. data/assets/{include → platform/include}/mruby/presym/scanning.h +10 -7
  123. data/assets/platform/include/mruby/presym/table.h +2893 -0
  124. data/assets/platform/include/mruby/presym.h +65 -0
  125. data/assets/platform/include/mruby/proc.h +184 -0
  126. data/assets/{include → platform/include}/mruby/range.h +0 -2
  127. data/assets/{include → platform/include}/mruby/string.h +33 -53
  128. data/assets/platform/include/mruby/throw.h +81 -0
  129. data/assets/{include → platform/include}/mruby/value.h +64 -29
  130. data/assets/{include → platform/include}/mruby/variable.h +6 -23
  131. data/assets/{include → platform/include}/mruby/version.h +7 -7
  132. data/assets/{include → platform/include}/mruby.h +238 -116
  133. data/assets/platform/macos-arm64/bin/mrbc +0 -0
  134. data/assets/platform/macos-arm64/lib/libSDL3.a +0 -0
  135. data/assets/platform/macos-arm64/lib/libSDL3_image.a +0 -0
  136. data/assets/platform/macos-arm64/lib/libSDL3_mixer.a +0 -0
  137. data/assets/platform/macos-arm64/lib/libSDL3_ttf.a +0 -0
  138. data/assets/platform/macos-arm64/lib/libmruby.a +0 -0
  139. data/assets/platform/wasm/lib/libFLAC.a +0 -0
  140. data/assets/platform/wasm/lib/libSDL3.a +0 -0
  141. data/assets/platform/wasm/lib/libSDL3_image.a +0 -0
  142. data/assets/platform/wasm/lib/libSDL3_mixer.a +0 -0
  143. data/assets/platform/wasm/lib/libSDL3_ttf.a +0 -0
  144. data/assets/platform/wasm/lib/libfreetype.a +0 -0
  145. data/assets/platform/wasm/lib/libharfbuzz.a +0 -0
  146. data/assets/platform/wasm/lib/libmruby.a +0 -0
  147. data/assets/platform/wasm/lib/libogg.a +0 -0
  148. data/assets/platform/wasm/lib/libplutosvg.a +0 -0
  149. data/assets/platform/wasm/lib/libplutovg.a +0 -0
  150. data/assets/platform/wasm/lib/libpng.a +0 -0
  151. data/assets/platform/wasm/lib/libpng16.a +0 -0
  152. data/assets/platform/wasm/lib/libvorbis.a +0 -0
  153. data/assets/platform/wasm/lib/libvorbisfile.a +0 -0
  154. data/assets/platform/wasm/lib/libzlibstatic.a +0 -0
  155. data/assets/platform/windows-arm64-mingw-ucrt/bin/mrbc.exe +0 -0
  156. data/assets/platform/windows-arm64-mingw-ucrt/lib/libSDL3.a +0 -0
  157. data/assets/platform/windows-arm64-mingw-ucrt/lib/libSDL3_image.a +0 -0
  158. data/assets/platform/windows-arm64-mingw-ucrt/lib/libSDL3_mixer.a +0 -0
  159. data/assets/platform/windows-arm64-mingw-ucrt/lib/libSDL3_ttf.a +0 -0
  160. data/assets/platform/windows-arm64-mingw-ucrt/lib/libmruby.a +0 -0
  161. data/assets/platform/windows-x86_64-mingw-ucrt/bin/mrbc.exe +0 -0
  162. data/assets/platform/windows-x86_64-mingw-ucrt/lib/libSDL3.a +0 -0
  163. data/assets/platform/windows-x86_64-mingw-ucrt/lib/libSDL3_image.a +0 -0
  164. data/assets/platform/windows-x86_64-mingw-ucrt/lib/libSDL3_mixer.a +0 -0
  165. data/assets/platform/windows-x86_64-mingw-ucrt/lib/libSDL3_ttf.a +0 -0
  166. data/assets/platform/windows-x86_64-mingw-ucrt/lib/libmruby.a +0 -0
  167. data/assets/resources/fonts/outfit/OFL.txt +93 -0
  168. data/assets/resources/fonts/outfit/outfit.ttf +0 -0
  169. data/assets/resources/fonts/roboto_mono/OFL.txt +91 -0
  170. data/assets/resources/fonts/roboto_mono/roboto_mono.ttf +0 -0
  171. data/assets/resources/icons/icon.icns +0 -0
  172. data/assets/resources/icons/icon.png +0 -0
  173. data/assets/resources/spritesheets/License.txt +28 -0
  174. data/assets/resources/spritesheets/spritesheet-backgrounds.png +0 -0
  175. data/assets/resources/spritesheets/spritesheet-backgrounds.xml +16 -0
  176. data/assets/resources/spritesheets/spritesheet-characters.png +0 -0
  177. data/assets/resources/spritesheets/spritesheet-characters.xml +47 -0
  178. data/assets/resources/spritesheets/spritesheet-enemies.png +0 -0
  179. data/assets/resources/spritesheets/spritesheet-enemies.xml +62 -0
  180. data/assets/resources/spritesheets/spritesheet-tiles.png +0 -0
  181. data/assets/resources/spritesheets/spritesheet-tiles.xml +316 -0
  182. data/assets/{wasm → resources/web}/template.html +1 -1
  183. data/assets/target.rb +131 -0
  184. data/bin/ruby2d +281 -82
  185. data/examples/astar.rb +269 -0
  186. data/examples/asteroids.rb +403 -0
  187. data/examples/bezier_editor.rb +96 -0
  188. data/examples/boids.rb +191 -0
  189. data/examples/bouncing_balls.rb +119 -0
  190. data/examples/breakout.rb +186 -0
  191. data/examples/constellations.rb +100 -0
  192. data/examples/dashboard.rb +133 -0
  193. data/examples/double_pendulum.rb +254 -0
  194. data/examples/falling_sand.rb +291 -0
  195. data/examples/fireworks.rb +110 -0
  196. data/examples/fluid_dynamics.rb +340 -0
  197. data/examples/fourier_epicycles.rb +142 -0
  198. data/examples/fractal_tree.rb +326 -0
  199. data/examples/game_of_life.rb +148 -0
  200. data/examples/gamepads.rb +333 -0
  201. data/examples/hill_driver.rb +613 -0
  202. data/examples/logo_animation.rb +251 -0
  203. data/examples/lorenz_attractor.rb +115 -0
  204. data/examples/mandelbrot.rb +207 -0
  205. data/examples/marching_squares.rb +200 -0
  206. data/examples/maze.rb +323 -0
  207. data/examples/nbody.rb +338 -0
  208. data/examples/outrun.rb +391 -0
  209. data/examples/pixel_paint.rb +313 -0
  210. data/examples/platformer.rb +335 -0
  211. data/examples/ray_casting_maze.rb +175 -0
  212. data/examples/shadow_casting.rb +151 -0
  213. data/examples/shape_recognizer.rb +908 -0
  214. data/examples/snake.rb +144 -0
  215. data/examples/sprite_sheets.rb +246 -0
  216. data/examples/swarm.rb +206 -0
  217. data/examples/tsp_annealing.rb +104 -0
  218. data/examples/ui_controls.rb +163 -0
  219. data/examples/wireframe_3d.rb +139 -0
  220. data/ext/ruby2d/audio.c +324 -0
  221. data/ext/ruby2d/canvas.c +1715 -494
  222. data/ext/ruby2d/ext.c +541 -0
  223. data/ext/ruby2d/extconf.rb +122 -145
  224. data/ext/ruby2d/font.c +566 -20
  225. data/ext/ruby2d/fps.c +92 -0
  226. data/ext/ruby2d/image.c +466 -41
  227. data/ext/ruby2d/ruby2d.c +374 -1890
  228. data/ext/ruby2d/ruby2d.h +840 -460
  229. data/ext/ruby2d/shapes.c +931 -101
  230. data/ext/ruby2d/text.c +586 -21
  231. data/ext/ruby2d/window.c +1693 -283
  232. data/lib/ruby2d/atlas_parser.rb +194 -0
  233. data/lib/ruby2d/audio.rb +73 -0
  234. data/lib/ruby2d/benchmark.rb +259 -0
  235. data/lib/ruby2d/bitmap_text.rb +155 -0
  236. data/lib/ruby2d/button.rb +402 -0
  237. data/lib/ruby2d/canvas.rb +703 -279
  238. data/lib/ruby2d/circle.rb +206 -29
  239. data/lib/ruby2d/cli/browser.rb +314 -0
  240. data/lib/ruby2d/cli/build.rb +471 -257
  241. data/lib/ruby2d/cli/colorize.rb +7 -5
  242. data/lib/ruby2d/cli/examples.rb +127 -0
  243. data/lib/ruby2d/cli/launch.rb +24 -39
  244. data/lib/ruby2d/cli/lib_files.rb +48 -0
  245. data/lib/ruby2d/cli/messages.rb +40 -0
  246. data/lib/ruby2d/cli/setup.rb +273 -0
  247. data/lib/ruby2d/cli/static_server.rb +160 -0
  248. data/lib/ruby2d/cli/usage.rb +255 -0
  249. data/lib/ruby2d/color.rb +191 -69
  250. data/lib/ruby2d/core.rb +37 -19
  251. data/lib/ruby2d/deps_help.rb +89 -0
  252. data/lib/ruby2d/dsl.rb +51 -12
  253. data/lib/ruby2d/ellipse.rb +228 -0
  254. data/lib/ruby2d/exceptions.rb +0 -2
  255. data/lib/ruby2d/font.rb +34 -74
  256. data/lib/ruby2d/gamepad.rb +323 -0
  257. data/lib/ruby2d/gem_paths.rb +19 -0
  258. data/lib/ruby2d/image.rb +155 -52
  259. data/lib/ruby2d/interactive.rb +103 -0
  260. data/lib/ruby2d/json_parser.rb +268 -0
  261. data/lib/ruby2d/line.rb +194 -85
  262. data/lib/ruby2d/mruby_compat.rb +12 -0
  263. data/lib/ruby2d/polygon.rb +297 -0
  264. data/lib/ruby2d/polyline.rb +368 -0
  265. data/lib/ruby2d/quad.rb +358 -94
  266. data/lib/ruby2d/rectangle.rb +77 -19
  267. data/lib/ruby2d/renderable.rb +411 -11
  268. data/lib/ruby2d/sprite.rb +471 -180
  269. data/lib/ruby2d/sprite_sheet.rb +64 -0
  270. data/lib/ruby2d/square.rb +29 -17
  271. data/lib/ruby2d/text.rb +196 -65
  272. data/lib/ruby2d/tileset.rb +139 -81
  273. data/lib/ruby2d/triangle.rb +324 -89
  274. data/lib/ruby2d/version.rb +1 -3
  275. data/lib/ruby2d/vertices.rb +62 -85
  276. data/lib/ruby2d/warnings.rb +29 -0
  277. data/lib/ruby2d/window/class_methods.rb +218 -0
  278. data/lib/ruby2d/window/gamepad_events.rb +141 -0
  279. data/lib/ruby2d/window/key_events.rb +74 -0
  280. data/lib/ruby2d/window/mouse_events.rb +171 -0
  281. data/lib/ruby2d/window/object_events.rb +168 -0
  282. data/lib/ruby2d/window.rb +632 -585
  283. data/lib/ruby2d.rb +14 -19
  284. metadata +275 -428
  285. data/assets/app.icns +0 -0
  286. data/assets/include/GLES2/gl2.h +0 -656
  287. data/assets/include/GLES2/gl2ext.h +0 -3949
  288. data/assets/include/GLES2/gl2ext_angle.h +0 -701
  289. data/assets/include/GLES2/gl2platform.h +0 -27
  290. data/assets/include/GLES3/gl3.h +0 -1192
  291. data/assets/include/GLES3/gl31.h +0 -1507
  292. data/assets/include/GLES3/gl32.h +0 -1808
  293. data/assets/include/GLES3/gl3platform.h +0 -27
  294. data/assets/include/KHR/khrplatform.h +0 -290
  295. data/assets/include/SDL2/SDL.h +0 -233
  296. data/assets/include/SDL2/SDL_assert.h +0 -326
  297. data/assets/include/SDL2/SDL_atomic.h +0 -415
  298. data/assets/include/SDL2/SDL_audio.h +0 -1500
  299. data/assets/include/SDL2/SDL_clipboard.h +0 -141
  300. data/assets/include/SDL2/SDL_config.h +0 -61
  301. data/assets/include/SDL2/SDL_config_android.h +0 -194
  302. data/assets/include/SDL2/SDL_config_emscripten.h +0 -218
  303. data/assets/include/SDL2/SDL_config_iphoneos.h +0 -217
  304. data/assets/include/SDL2/SDL_config_macosx.h +0 -277
  305. data/assets/include/SDL2/SDL_config_minimal.h +0 -95
  306. data/assets/include/SDL2/SDL_config_ngage.h +0 -89
  307. data/assets/include/SDL2/SDL_config_os2.h +0 -207
  308. data/assets/include/SDL2/SDL_config_pandora.h +0 -141
  309. data/assets/include/SDL2/SDL_config_windows.h +0 -331
  310. data/assets/include/SDL2/SDL_config_wingdk.h +0 -253
  311. data/assets/include/SDL2/SDL_config_winrt.h +0 -220
  312. data/assets/include/SDL2/SDL_config_xbox.h +0 -235
  313. data/assets/include/SDL2/SDL_cpuinfo.h +0 -594
  314. data/assets/include/SDL2/SDL_endian.h +0 -348
  315. data/assets/include/SDL2/SDL_error.h +0 -163
  316. data/assets/include/SDL2/SDL_events.h +0 -1166
  317. data/assets/include/SDL2/SDL_filesystem.h +0 -149
  318. data/assets/include/SDL2/SDL_gamecontroller.h +0 -1074
  319. data/assets/include/SDL2/SDL_gesture.h +0 -117
  320. data/assets/include/SDL2/SDL_guid.h +0 -100
  321. data/assets/include/SDL2/SDL_haptic.h +0 -1341
  322. data/assets/include/SDL2/SDL_hidapi.h +0 -451
  323. data/assets/include/SDL2/SDL_hints.h +0 -2569
  324. data/assets/include/SDL2/SDL_image.h +0 -2173
  325. data/assets/include/SDL2/SDL_joystick.h +0 -1066
  326. data/assets/include/SDL2/SDL_keyboard.h +0 -353
  327. data/assets/include/SDL2/SDL_keycode.h +0 -358
  328. data/assets/include/SDL2/SDL_loadso.h +0 -115
  329. data/assets/include/SDL2/SDL_log.h +0 -404
  330. data/assets/include/SDL2/SDL_main.h +0 -275
  331. data/assets/include/SDL2/SDL_mixer.h +0 -2784
  332. data/assets/include/SDL2/SDL_mouse.h +0 -465
  333. data/assets/include/SDL2/SDL_mutex.h +0 -471
  334. data/assets/include/SDL2/SDL_name.h +0 -33
  335. data/assets/include/SDL2/SDL_pixels.h +0 -644
  336. data/assets/include/SDL2/SDL_platform.h +0 -261
  337. data/assets/include/SDL2/SDL_quit.h +0 -58
  338. data/assets/include/SDL2/SDL_rect.h +0 -376
  339. data/assets/include/SDL2/SDL_render.h +0 -1919
  340. data/assets/include/SDL2/SDL_revision.h +0 -6
  341. data/assets/include/SDL2/SDL_rwops.h +0 -841
  342. data/assets/include/SDL2/SDL_sensor.h +0 -322
  343. data/assets/include/SDL2/SDL_shape.h +0 -155
  344. data/assets/include/SDL2/SDL_stdinc.h +0 -830
  345. data/assets/include/SDL2/SDL_surface.h +0 -997
  346. data/assets/include/SDL2/SDL_system.h +0 -623
  347. data/assets/include/SDL2/SDL_syswm.h +0 -386
  348. data/assets/include/SDL2/SDL_test_images.h +0 -78
  349. data/assets/include/SDL2/SDL_test_random.h +0 -115
  350. data/assets/include/SDL2/SDL_thread.h +0 -464
  351. data/assets/include/SDL2/SDL_timer.h +0 -222
  352. data/assets/include/SDL2/SDL_touch.h +0 -150
  353. data/assets/include/SDL2/SDL_ttf.h +0 -2316
  354. data/assets/include/SDL2/SDL_types.h +0 -29
  355. data/assets/include/SDL2/SDL_version.h +0 -204
  356. data/assets/include/SDL2/SDL_video.h +0 -2150
  357. data/assets/include/SDL2/SDL_vulkan.h +0 -215
  358. data/assets/include/SDL2/begin_code.h +0 -187
  359. data/assets/include/mruby/boxing_no.h +0 -58
  360. data/assets/include/mruby/class.h +0 -108
  361. data/assets/include/mruby/error.h +0 -147
  362. data/assets/include/mruby/gc.h +0 -94
  363. data/assets/include/mruby/irep.h +0 -147
  364. data/assets/include/mruby/khash.h +0 -284
  365. data/assets/include/mruby/object.h +0 -43
  366. data/assets/include/mruby/presym/disable.h +0 -70
  367. data/assets/include/mruby/presym/enable.h +0 -37
  368. data/assets/include/mruby/presym.h +0 -40
  369. data/assets/include/mruby/proc.h +0 -211
  370. data/assets/include/mruby/throw.h +0 -66
  371. data/assets/macos/universal/bin/mrbc +0 -0
  372. data/assets/macos/universal/lib/libFLAC.a +0 -0
  373. data/assets/macos/universal/lib/libSDL2.a +0 -0
  374. data/assets/macos/universal/lib/libSDL2_image.a +0 -0
  375. data/assets/macos/universal/lib/libSDL2_mixer.a +0 -0
  376. data/assets/macos/universal/lib/libSDL2_ttf.a +0 -0
  377. data/assets/macos/universal/lib/libavif.a +0 -0
  378. data/assets/macos/universal/lib/libbrotlicommon-static.a +0 -0
  379. data/assets/macos/universal/lib/libbrotlidec-static.a +0 -0
  380. data/assets/macos/universal/lib/libfreetype.a +0 -0
  381. data/assets/macos/universal/lib/libgraphite2.a +0 -0
  382. data/assets/macos/universal/lib/libharfbuzz.a +0 -0
  383. data/assets/macos/universal/lib/libhwy.a +0 -0
  384. data/assets/macos/universal/lib/libjpeg.a +0 -0
  385. data/assets/macos/universal/lib/libjxl.a +0 -0
  386. data/assets/macos/universal/lib/libmodplug.a +0 -0
  387. data/assets/macos/universal/lib/libmpg123.a +0 -0
  388. data/assets/macos/universal/lib/libmruby.a +0 -0
  389. data/assets/macos/universal/lib/libogg.a +0 -0
  390. data/assets/macos/universal/lib/libpng.a +0 -0
  391. data/assets/macos/universal/lib/libtiff.a +0 -0
  392. data/assets/macos/universal/lib/libvorbis.a +0 -0
  393. data/assets/macos/universal/lib/libvorbisfile.a +0 -0
  394. data/assets/macos/universal/lib/libwebp.a +0 -0
  395. data/assets/macos/universal/lib/libzstd.a +0 -0
  396. data/assets/test_media/README.md +0 -3
  397. data/assets/test_media/bitstream_vera/COPYRIGHT.txt +0 -124
  398. data/assets/test_media/bitstream_vera/vera.ttf +0 -0
  399. data/assets/test_media/boom.png +0 -0
  400. data/assets/test_media/coin.png +0 -0
  401. data/assets/test_media/colors.png +0 -0
  402. data/assets/test_media/controller.png +0 -0
  403. data/assets/test_media/dial.wav +0 -0
  404. data/assets/test_media/hero.png +0 -0
  405. data/assets/test_media/image.bmp +0 -0
  406. data/assets/test_media/image.jpg +0 -0
  407. data/assets/test_media/image.png +0 -0
  408. data/assets/test_media/music.flac +0 -0
  409. data/assets/test_media/music.mp3 +0 -0
  410. data/assets/test_media/music.ogg +0 -0
  411. data/assets/test_media/music.wav +0 -0
  412. data/assets/test_media/originals/boom.pxm +0 -0
  413. data/assets/test_media/originals/coin.pxm +0 -0
  414. data/assets/test_media/originals/controller.sketch +0 -0
  415. data/assets/test_media/originals/hero.pxm +0 -0
  416. data/assets/test_media/originals/image.pxm +0 -0
  417. data/assets/test_media/originals/music.caf +0 -0
  418. data/assets/test_media/originals/texture_atlas.pxm +0 -0
  419. data/assets/test_media/rondo_alla_turka.ogg +0 -0
  420. data/assets/test_media/sound.flac +0 -0
  421. data/assets/test_media/sound.mp3 +0 -0
  422. data/assets/test_media/sound.ogg +0 -0
  423. data/assets/test_media/sound.wav +0 -0
  424. data/assets/test_media/sprite_sheet.png +0 -0
  425. data/assets/test_media/texture_atlas.png +0 -0
  426. data/assets/wasm/libmruby.a +0 -0
  427. data/assets/windows/mingw-w64-ucrt-x86_64/bin/mrbc.exe +0 -0
  428. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libFLAC.a +0 -0
  429. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libLerc.a +0 -0
  430. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libSDL2.a +0 -0
  431. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libSDL2_image.a +0 -0
  432. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libSDL2_mixer.a +0 -0
  433. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libSDL2_ttf.a +0 -0
  434. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libbrotlicommon.a +0 -0
  435. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libbrotlidec.a +0 -0
  436. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libbz2.a +0 -0
  437. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libdeflate.a +0 -0
  438. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libfreetype.a +0 -0
  439. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libglew32.a +0 -0
  440. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libgraphite2.a +0 -0
  441. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libharfbuzz.a +0 -0
  442. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libhwy.a +0 -0
  443. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libjbig.a +0 -0
  444. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libjpeg.a +0 -0
  445. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libjxl.a +0 -0
  446. data/assets/windows/mingw-w64-ucrt-x86_64/lib/liblzma.a +0 -0
  447. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libmodplug.a +0 -0
  448. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libmpg123.a +0 -0
  449. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libmruby.a +0 -0
  450. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libogg.a +0 -0
  451. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libopus.a +0 -0
  452. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libopusfile.a +0 -0
  453. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libpng.a +0 -0
  454. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libsndfile.a +0 -0
  455. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libssp.a +0 -1
  456. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libstdc++.a +0 -0
  457. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libtiff.a +0 -0
  458. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libvorbis.a +0 -0
  459. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libvorbisfile.a +0 -0
  460. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libwebp.a +0 -0
  461. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libz.a +0 -0
  462. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libzstd.a +0 -0
  463. data/assets/windows/mingw-w64-x86_64/bin/mrbc.exe +0 -0
  464. data/assets/windows/mingw-w64-x86_64/lib/libFLAC.a +0 -0
  465. data/assets/windows/mingw-w64-x86_64/lib/libLerc.a +0 -0
  466. data/assets/windows/mingw-w64-x86_64/lib/libSDL2.a +0 -0
  467. data/assets/windows/mingw-w64-x86_64/lib/libSDL2_image.a +0 -0
  468. data/assets/windows/mingw-w64-x86_64/lib/libSDL2_mixer.a +0 -0
  469. data/assets/windows/mingw-w64-x86_64/lib/libSDL2_ttf.a +0 -0
  470. data/assets/windows/mingw-w64-x86_64/lib/libbrotlicommon.a +0 -0
  471. data/assets/windows/mingw-w64-x86_64/lib/libbrotlidec.a +0 -0
  472. data/assets/windows/mingw-w64-x86_64/lib/libbz2.a +0 -0
  473. data/assets/windows/mingw-w64-x86_64/lib/libdeflate.a +0 -0
  474. data/assets/windows/mingw-w64-x86_64/lib/libfreetype.a +0 -0
  475. data/assets/windows/mingw-w64-x86_64/lib/libglew32.a +0 -0
  476. data/assets/windows/mingw-w64-x86_64/lib/libgraphite2.a +0 -0
  477. data/assets/windows/mingw-w64-x86_64/lib/libharfbuzz.a +0 -0
  478. data/assets/windows/mingw-w64-x86_64/lib/libhwy.a +0 -0
  479. data/assets/windows/mingw-w64-x86_64/lib/libjbig.a +0 -0
  480. data/assets/windows/mingw-w64-x86_64/lib/libjpeg.a +0 -0
  481. data/assets/windows/mingw-w64-x86_64/lib/libjxl.a +0 -0
  482. data/assets/windows/mingw-w64-x86_64/lib/liblzma.a +0 -0
  483. data/assets/windows/mingw-w64-x86_64/lib/libmodplug.a +0 -0
  484. data/assets/windows/mingw-w64-x86_64/lib/libmpg123.a +0 -0
  485. data/assets/windows/mingw-w64-x86_64/lib/libmruby.a +0 -0
  486. data/assets/windows/mingw-w64-x86_64/lib/libogg.a +0 -0
  487. data/assets/windows/mingw-w64-x86_64/lib/libopus.a +0 -0
  488. data/assets/windows/mingw-w64-x86_64/lib/libopusfile.a +0 -0
  489. data/assets/windows/mingw-w64-x86_64/lib/libpng.a +0 -0
  490. data/assets/windows/mingw-w64-x86_64/lib/libsndfile.a +0 -0
  491. data/assets/windows/mingw-w64-x86_64/lib/libssp.a +0 -1
  492. data/assets/windows/mingw-w64-x86_64/lib/libstdc++.a +0 -0
  493. data/assets/windows/mingw-w64-x86_64/lib/libtiff.a +0 -0
  494. data/assets/windows/mingw-w64-x86_64/lib/libvorbis.a +0 -0
  495. data/assets/windows/mingw-w64-x86_64/lib/libvorbisfile.a +0 -0
  496. data/assets/windows/mingw-w64-x86_64/lib/libwebp.a +0 -0
  497. data/assets/windows/mingw-w64-x86_64/lib/libz.a +0 -0
  498. data/assets/windows/mingw-w64-x86_64/lib/libzstd.a +0 -0
  499. data/assets/xcode/ios/Assets.xcassets/AppIcon.appiconset/Contents.json +0 -98
  500. data/assets/xcode/ios/Assets.xcassets/Contents.json +0 -6
  501. data/assets/xcode/ios/Base.lproj/LaunchScreen.storyboard +0 -27
  502. data/assets/xcode/ios/Info.plist +0 -43
  503. data/assets/xcode/ios/MRuby.framework/Headers/mrbconf.h +0 -143
  504. data/assets/xcode/ios/MRuby.framework/Headers/mruby/array.h +0 -280
  505. data/assets/xcode/ios/MRuby.framework/Headers/mruby/boxing_nan.h +0 -102
  506. data/assets/xcode/ios/MRuby.framework/Headers/mruby/boxing_no.h +0 -56
  507. data/assets/xcode/ios/MRuby.framework/Headers/mruby/boxing_word.h +0 -144
  508. data/assets/xcode/ios/MRuby.framework/Headers/mruby/class.h +0 -97
  509. data/assets/xcode/ios/MRuby.framework/Headers/mruby/common.h +0 -77
  510. data/assets/xcode/ios/MRuby.framework/Headers/mruby/compile.h +0 -195
  511. data/assets/xcode/ios/MRuby.framework/Headers/mruby/data.h +0 -75
  512. data/assets/xcode/ios/MRuby.framework/Headers/mruby/debug.h +0 -67
  513. data/assets/xcode/ios/MRuby.framework/Headers/mruby/dump.h +0 -196
  514. data/assets/xcode/ios/MRuby.framework/Headers/mruby/error.h +0 -75
  515. data/assets/xcode/ios/MRuby.framework/Headers/mruby/gc.h +0 -91
  516. data/assets/xcode/ios/MRuby.framework/Headers/mruby/hash.h +0 -215
  517. data/assets/xcode/ios/MRuby.framework/Headers/mruby/irep.h +0 -75
  518. data/assets/xcode/ios/MRuby.framework/Headers/mruby/istruct.h +0 -47
  519. data/assets/xcode/ios/MRuby.framework/Headers/mruby/khash.h +0 -274
  520. data/assets/xcode/ios/MRuby.framework/Headers/mruby/numeric.h +0 -161
  521. data/assets/xcode/ios/MRuby.framework/Headers/mruby/object.h +0 -44
  522. data/assets/xcode/ios/MRuby.framework/Headers/mruby/opcode.h +0 -69
  523. data/assets/xcode/ios/MRuby.framework/Headers/mruby/ops.h +0 -117
  524. data/assets/xcode/ios/MRuby.framework/Headers/mruby/proc.h +0 -131
  525. data/assets/xcode/ios/MRuby.framework/Headers/mruby/range.h +0 -49
  526. data/assets/xcode/ios/MRuby.framework/Headers/mruby/re.h +0 -16
  527. data/assets/xcode/ios/MRuby.framework/Headers/mruby/string.h +0 -444
  528. data/assets/xcode/ios/MRuby.framework/Headers/mruby/throw.h +0 -55
  529. data/assets/xcode/ios/MRuby.framework/Headers/mruby/value.h +0 -309
  530. data/assets/xcode/ios/MRuby.framework/Headers/mruby/variable.h +0 -136
  531. data/assets/xcode/ios/MRuby.framework/Headers/mruby/version.h +0 -110
  532. data/assets/xcode/ios/MRuby.framework/Headers/mruby.h +0 -1282
  533. data/assets/xcode/ios/MRuby.framework/Info.plist +0 -20
  534. data/assets/xcode/ios/MRuby.framework/MRuby +0 -0
  535. data/assets/xcode/ios/MyApp.xcodeproj/project.pbxproj +0 -368
  536. data/assets/xcode/ios/MyApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
  537. data/assets/xcode/ios/MyApp.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
  538. data/assets/xcode/ios/MyApp.xcodeproj/project.xcworkspace/xcshareddata/MyApp.xcscmblueprint +0 -30
  539. data/assets/xcode/ios/main.c +0 -1
  540. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Back.imagestacklayer/Content.imageset/Contents.json +0 -16
  541. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Back.imagestacklayer/Contents.json +0 -6
  542. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Contents.json +0 -17
  543. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Front.imagestacklayer/Content.imageset/Contents.json +0 -16
  544. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Front.imagestacklayer/Contents.json +0 -6
  545. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json +0 -16
  546. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Middle.imagestacklayer/Contents.json +0 -6
  547. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Back.imagestacklayer/Content.imageset/Contents.json +0 -16
  548. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Back.imagestacklayer/Contents.json +0 -6
  549. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Contents.json +0 -17
  550. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Front.imagestacklayer/Content.imageset/Contents.json +0 -16
  551. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Front.imagestacklayer/Contents.json +0 -6
  552. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json +0 -16
  553. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Middle.imagestacklayer/Contents.json +0 -6
  554. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Contents.json +0 -32
  555. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image Wide.imageset/Contents.json +0 -16
  556. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image.imageset/Contents.json +0 -16
  557. data/assets/xcode/tvos/Assets.xcassets/Contents.json +0 -6
  558. data/assets/xcode/tvos/Assets.xcassets/LaunchImage.launchimage/Contents.json +0 -22
  559. data/assets/xcode/tvos/Info.plist +0 -30
  560. data/assets/xcode/tvos/MRuby.framework/Headers/mrbconf.h +0 -143
  561. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/array.h +0 -280
  562. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/boxing_nan.h +0 -102
  563. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/boxing_no.h +0 -56
  564. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/boxing_word.h +0 -144
  565. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/class.h +0 -97
  566. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/common.h +0 -77
  567. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/compile.h +0 -195
  568. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/data.h +0 -75
  569. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/debug.h +0 -67
  570. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/dump.h +0 -196
  571. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/error.h +0 -75
  572. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/gc.h +0 -91
  573. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/hash.h +0 -215
  574. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/irep.h +0 -75
  575. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/istruct.h +0 -47
  576. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/khash.h +0 -274
  577. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/numeric.h +0 -161
  578. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/object.h +0 -44
  579. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/opcode.h +0 -69
  580. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/ops.h +0 -117
  581. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/proc.h +0 -131
  582. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/range.h +0 -49
  583. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/re.h +0 -16
  584. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/string.h +0 -444
  585. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/throw.h +0 -55
  586. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/value.h +0 -309
  587. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/variable.h +0 -136
  588. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/version.h +0 -110
  589. data/assets/xcode/tvos/MRuby.framework/Headers/mruby.h +0 -1282
  590. data/assets/xcode/tvos/MRuby.framework/Info.plist +0 -20
  591. data/assets/xcode/tvos/MRuby.framework/MRuby +0 -0
  592. data/assets/xcode/tvos/MyApp.xcodeproj/project.pbxproj +0 -350
  593. data/assets/xcode/tvos/MyApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
  594. data/assets/xcode/tvos/MyApp.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
  595. data/assets/xcode/tvos/MyApp.xcodeproj/project.xcworkspace/xcshareddata/MyApp.xcscmblueprint +0 -30
  596. data/assets/xcode/tvos/main.c +0 -1
  597. data/ext/ruby2d/common.c +0 -185
  598. data/ext/ruby2d/controllers.c +0 -110
  599. data/ext/ruby2d/gl.c +0 -398
  600. data/ext/ruby2d/gl2.c +0 -86
  601. data/ext/ruby2d/gl3.c +0 -304
  602. data/ext/ruby2d/gles.c +0 -302
  603. data/ext/ruby2d/input.c +0 -48
  604. data/ext/ruby2d/music.c +0 -127
  605. data/ext/ruby2d/sound.c +0 -132
  606. data/lib/ruby2d/cli/console.rb +0 -65
  607. data/lib/ruby2d/cli/enable_console.rb +0 -7
  608. data/lib/ruby2d/cli/platform.rb +0 -17
  609. data/lib/ruby2d/music.rb +0 -77
  610. data/lib/ruby2d/pixel.rb +0 -18
  611. data/lib/ruby2d/pixmap.rb +0 -39
  612. data/lib/ruby2d/pixmap_atlas.rb +0 -56
  613. data/lib/ruby2d/sound.rb +0 -61
  614. data/lib/ruby2d/texture.rb +0 -38
  615. /data/assets/{include/SDL2 → platform/include/SDL3}/SDL_opengles2_gl2.h +0 -0
  616. /data/assets/{include/SDL2 → platform/include/SDL3}/SDL_opengles2_gl2ext.h +0 -0
  617. /data/assets/{include/SDL2 → platform/include/SDL3}/SDL_opengles2_gl2platform.h +0 -0
  618. /data/assets/{include/SDL2 → platform/include/SDL3}/SDL_opengles2_khrplatform.h +0 -0
  619. /data/assets/{include → platform/include}/mruby/re.h +0 -0
@@ -3,9 +3,11 @@
3
3
  # Extend `String` to include some fancy colors
4
4
  class String
5
5
  def ruby2d_colorize(c); "\e[#{c}m#{self}\e[0m" end
6
- def bold; ruby2d_colorize('1') end
7
- def info; ruby2d_colorize('1;34') end
8
- def warn; ruby2d_colorize('1;33') end
9
- def success; ruby2d_colorize('1;32') end
10
- def error; ruby2d_colorize('1;31') end
6
+ def bold; ruby2d_colorize('1') end
7
+ def dim; ruby2d_colorize('2') end
8
+ def info; ruby2d_colorize('1;34') end
9
+ def warning; ruby2d_colorize('1;33') end
10
+ def success; ruby2d_colorize('1;32') end
11
+ def error; ruby2d_colorize('1;31') end
12
+ def ruby2d_red; ruby2d_colorize('38;2;246;60;56') end
11
13
  end
@@ -0,0 +1,127 @@
1
+ require_relative 'browser'
2
+ require_relative 'colorize'
3
+
4
+ module Ruby2D
5
+ module CLI
6
+ module Examples
7
+
8
+ EXAMPLES_DIR = File.expand_path('../../../examples', __dir__)
9
+
10
+ # The gem root, where the bundled `assets/` directory sits alongside
11
+ # `examples/`. Examples resolve asset paths relative to this — the same
12
+ # relative layout `ruby2d build` mounts into the web VFS and copies into
13
+ # the native bundle — so example runs `chdir` here (see `run`).
14
+ ROOT_DIR = File.expand_path('..', EXAMPLES_DIR)
15
+
16
+ # Parse the leading comment block from an example file. The convention
17
+ # across `examples/*.rb` is:
18
+ #
19
+ # # Title
20
+ # # Short description (one or two lines, shown in the picker preview).
21
+ # #
22
+ # # Longer narrative — controls, context, anything beyond the tagline.
23
+ #
24
+ # The short description (first paragraph after the title) becomes
25
+ # `:description`; the entire post-title block becomes `:header`.
26
+ def self.parse(path)
27
+ title = nil
28
+ header = []
29
+ File.foreach(path) do |line|
30
+ line = line.chomp
31
+ break unless line.start_with?('#')
32
+ stripped = line.sub(/^#\s?/, '')
33
+ if title.nil?
34
+ title = stripped unless stripped.empty?
35
+ next
36
+ end
37
+ header << stripped
38
+ end
39
+ # Drop leading/trailing blank separator lines around the header block.
40
+ header.shift while header.first == ''
41
+ header.pop while header.last == ''
42
+ # `description` is the first paragraph of the header, joined as one line.
43
+ first_para = header.take_while { |l| !l.empty? }
44
+ name = File.basename(path, '.rb')
45
+ {
46
+ name: name,
47
+ title: title || name,
48
+ description: first_para.join(' ').strip,
49
+ header: header,
50
+ path: path
51
+ }
52
+ end
53
+
54
+ # Print the example's leading comment block (prose only, no title) in
55
+ # dim text, indented to match the surrounding "Running …" message.
56
+ def self.print_header(example)
57
+ lines = example[:header]
58
+ return if lines.nil? || lines.all?(&:empty?)
59
+ lines.each { |line| puts(line.empty? ? '' : " #{line.dim}") }
60
+ puts
61
+ end
62
+
63
+ def self.all
64
+ @all ||= Dir.glob("#{EXAMPLES_DIR}/*.rb").sort.map { |p| parse(p) }
65
+ end
66
+
67
+ def self.find(query)
68
+ list = all
69
+ if query.match?(/\A\d+\z/)
70
+ idx = query.to_i
71
+ # 1-based; out-of-range (incl. 0) returns nil rather than wrapping.
72
+ return idx.between?(1, list.length) ? list[idx - 1] : nil
73
+ end
74
+ norm = ->(s) { s.downcase.tr('-_', ' ').delete("'").squeeze(' ').strip }
75
+ q = norm.call(query)
76
+ return nil if q.empty? # an empty query must not match (and run) the first item
77
+
78
+ list.find { |e| norm.call(e[:name]) == q || norm.call(e[:title]) == q } ||
79
+ list.find { |e| norm.call(e[:name]).include?(q) || norm.call(e[:title]).include?(q) }
80
+ end
81
+
82
+ def self.run(example)
83
+ # Run from `ROOT_DIR` so an example's relative asset paths (e.g.
84
+ # `assets/resources/spritesheets`) resolve against the bundled assets.
85
+ system(Gem.ruby, example[:path], chdir: ROOT_DIR)
86
+ end
87
+
88
+ # Non-interactive list, matching the style of `ruby2d usage`.
89
+ def self.print_list
90
+ list = all
91
+ if list.empty?
92
+ puts "\n No examples found.\n\n"
93
+ return
94
+ end
95
+ w = list.length.to_s.length
96
+ puts "\n #{'Ruby 2D'.ruby2d_red.bold} — Examples\n\n"
97
+ list.each_with_index do |ex, i|
98
+ puts " #{(i + 1).to_s.rjust(w).dim} #{ex[:title]}"
99
+ end
100
+ puts "\n #{'ruby2d examples <name|number>'.dim}\n\n"
101
+ end
102
+
103
+ def self.browse
104
+ list = all
105
+ if list.empty?
106
+ puts "\n No examples found.\n\n"
107
+ return
108
+ end
109
+
110
+ Browser.run(list: list, label: 'Examples', footer_action: 'run',
111
+ fallback: -> { print_list }) do |ex|
112
+ puts
113
+ puts " #{'Ruby 2D'.ruby2d_red.bold} — Examples"
114
+ puts
115
+ puts " Running #{ex[:title].bold} #{"(#{ex[:name]}.rb)".dim}"
116
+ puts
117
+ print_header(ex)
118
+ ok = run(ex)
119
+ unless ok
120
+ print "\n #{'Example exited with errors. Press Enter to continue…'.dim}"
121
+ $stdin.gets
122
+ end
123
+ end
124
+ end
125
+ end
126
+ end
127
+ end
@@ -1,50 +1,35 @@
1
1
  # Launch a built Ruby 2D app
2
+ require_relative '../../../assets/target'
3
+ require_relative 'colorize'
4
+ require_relative 'messages'
5
+ require_relative 'static_server'
2
6
 
3
- # Launch a native app
4
- def launch_native
5
- if !File.exist? 'build/app'
6
- puts "No native app built!"
7
- exit
8
- end
9
- `( cd build && ./app )`
7
+
8
+ # Serve a directory over HTTP and open it in the browser. Backed by a minimal
9
+ # `socket`-based server (no WEBrick dependency) — see static_server.rb.
10
+ def serve(dir:, port: 8080, path: '')
11
+ Ruby2D::CLI::StaticServer.serve(dir: dir, port: port, path: path)
10
12
  end
11
13
 
12
14
 
13
- # Launch a web app
14
- def launch_web
15
- if !File.exist? 'build/app.html'
16
- puts "No web app built!"
17
- exit
18
- end
19
- open_cmd = 'open'
20
- case RUBY_PLATFORM
21
- when /linux/
22
- open_cmd = "xdg-#{open_cmd}"
23
- when /mingw/
24
- open_cmd = "start"
15
+ # Launch a native app, passing its stdio through so console output is visible.
16
+ def launch_native
17
+ exe = AssetsTarget.host_os == 'windows' ? 'app.exe' : 'app'
18
+ unless File.exist?("build/native/#{exe}")
19
+ error 'No native app found. Run `ruby2d build --native` first.'
20
+ exit 1
25
21
  end
26
- system "#{open_cmd} build/app.html"
22
+ # Run with the build dir as the working directory so the app resolves its
23
+ # bundled media by relative path, the way the built app expects.
24
+ system(File.expand_path("build/native/#{exe}"), chdir: 'build/native')
27
25
  end
28
26
 
29
27
 
30
- # Launch an iOS or tvOS app in a simulator
31
- def launch_apple(device)
32
- case device
33
- when 'ios'
34
- if !File.exist? 'build/ios/build/Release-iphonesimulator/MyApp.app'
35
- puts "No iOS app built!"
36
- exit
37
- end
38
- puts `simple2d simulator --open "iPhone X" &&
39
- simple2d simulator --install "build/ios/build/Release-iphonesimulator/MyApp.app" &&
40
- simple2d simulator --launch "Ruby2D.MyApp"`
41
- when 'tvos'
42
- if !File.exist? 'build/tvos/build/Release-appletvsimulator/MyApp.app'
43
- puts "No tvOS app built!"
44
- exit
45
- end
46
- puts `simple2d simulator --open "Apple TV 4K" &&
47
- simple2d simulator --install "build/tvos/build/Release-appletvsimulator/MyApp.app" &&
48
- simple2d simulator --launch "Ruby2D.MyApp"`
28
+ # Launch a web app
29
+ def launch_web
30
+ unless File.exist?('build/web/app.html')
31
+ error 'No web app found. Run `ruby2d build --web` first.'
32
+ exit 1
49
33
  end
34
+ serve(dir: File.expand_path('build/web'), port: 8080, path: 'app.html')
50
35
  end
@@ -0,0 +1,48 @@
1
+ module Ruby2D
2
+ module CLI
3
+ # The Ruby 2D library files, in load order, that get concatenated and
4
+ # compiled to mruby bytecode. Single source of truth shared by the native/web
5
+ # app build (`cli/build.rb`) and the "Try Ruby 2D" WASM build (`try/build.rb`)
6
+ # so the two lists can't drift. Includes files from subdirectories like
7
+ # `cli/` and `window/`, so it is not a plain `lib/ruby2d/*.rb` glob.
8
+ LIB_FILES = %w[
9
+ mruby_compat
10
+ cli/colorize
11
+ exceptions
12
+ warnings
13
+ window/class_methods
14
+ window/key_events
15
+ window/mouse_events
16
+ window/gamepad_events
17
+ window/object_events
18
+ gamepad
19
+ window
20
+ interactive
21
+ renderable
22
+ color
23
+ audio
24
+ canvas
25
+ circle
26
+ ellipse
27
+ font
28
+ image
29
+ json_parser
30
+ atlas_parser
31
+ sprite_sheet
32
+ line
33
+ polygon
34
+ polyline
35
+ quad
36
+ rectangle
37
+ sprite
38
+ square
39
+ text
40
+ bitmap_text
41
+ tileset
42
+ triangle
43
+ button
44
+ vertices
45
+ dsl
46
+ ].freeze
47
+ end
48
+ end
@@ -0,0 +1,40 @@
1
+ # Ruby 2D CLI messages
2
+ #
3
+ # The `Error:` / `Warning:` / `Note:` lines shared by the `ruby2d` CLI, `rake`,
4
+ # and the build scripts. The label carries the color and the message stays
5
+ # normal weight, so the eye lands on the label first.
6
+ #
7
+ # Kept out of `LIB_FILES` (see `cli/lib_files.rb`) on purpose: these write to a
8
+ # terminal, and compiling them into every native and web app would ship CLI-only
9
+ # code inside a user's game.
10
+
11
+ require_relative 'colorize'
12
+
13
+ # Compose a labeled line. `spaced` adds a blank line above, for a message that
14
+ # interrupts a run of build output; `indent` matches the nesting of the output
15
+ # around it (task bodies indent their results by four).
16
+ #
17
+ # The `ruby2d_` prefix keeps this clear of `mkmf`'s own `message`, which is in
18
+ # scope while `extconf.rb` runs.
19
+ def ruby2d_labeled(label, msg, spaced, indent)
20
+ "#{"\n" if spaced}#{' ' * indent}#{label} #{msg}"
21
+ end
22
+
23
+ def error(msg, spaced: false, indent: 0)
24
+ puts ruby2d_labeled('Error:'.error, msg, spaced, indent)
25
+ end
26
+
27
+ def warning(msg, spaced: false, indent: 0)
28
+ puts ruby2d_labeled('Warning:'.warning, msg, spaced, indent)
29
+ end
30
+
31
+ def note(msg, spaced: false, indent: 0)
32
+ puts ruby2d_labeled('Note:'.bold, msg, spaced, indent)
33
+ end
34
+
35
+ # Print an `Error:` line and exit non-zero. Writes to stderr rather than stdout,
36
+ # and never returns — so it also reads correctly as the right-hand side of
37
+ # `system(cmd) || abort_error(...)`.
38
+ def abort_error(msg, spaced: false, indent: 0)
39
+ abort ruby2d_labeled('Error:'.error, msg, spaced, indent)
40
+ end
@@ -0,0 +1,273 @@
1
+ # Build Ruby 2D's native dependencies (the SDL3 + mruby static libraries) for
2
+ # the current platform. The gem bundles prebuilt libraries for the common
3
+ # RELEASE_PLATFORMS; this builds them for everything else (e.g. Linux, Intel
4
+ # macOS) into a per-user cache outside the — possibly read-only — gem, where
5
+ # `ruby2d build --native` then resolves them (see cli/build's deps_platform_dir).
6
+
7
+ # Requires only extension-free pieces (gem_paths, not ruby2d) so `setup` can run
8
+ # to build the native extension when it doesn't exist yet.
9
+ require 'ruby2d/gem_paths'
10
+ require 'fileutils'
11
+ require 'ruby2d/cli/colorize'
12
+ require 'ruby2d/cli/messages'
13
+ require 'ruby2d/version'
14
+ require_relative '../../../assets/target'
15
+
16
+
17
+ # A ruby-red diamond banner, matching the `ruby2d` CLI and `rake` output.
18
+ def setup_step(title)
19
+ puts "\n #{'◆'.ruby2d_red} #{title.bold}"
20
+ end
21
+
22
+
23
+ # A friendly label for the platform being built (e.g. "macOS (x86_64)"). Reads
24
+ # the resolved target rather than the host: RUBY2D_ASSETS_OS/ARCH redirect setup
25
+ # at another platform's directory, and naming the host would then describe a
26
+ # build that isn't happening. Any toolchain is left to the target id printed
27
+ # alongside it.
28
+ def setup_platform_label
29
+ os, arch, = AssetsTarget.resolved_target
30
+ name = { 'macos' => 'macOS', 'windows' => 'Windows',
31
+ 'linux' => 'Linux', 'bsd' => 'BSD' }.fetch(os, os)
32
+ "#{name} (#{arch})"
33
+ end
34
+
35
+
36
+ # Abbreviate a home-relative path to `~/…` for tidy, portable output.
37
+ def setup_tildify(path)
38
+ home = Dir.home
39
+ path.start_with?(home) ? path.sub(home, '~') : path
40
+ end
41
+
42
+
43
+ # Whether a command is on PATH. Unix only — setup's preflight runs there; on
44
+ # Windows the assets Rakefile bootstraps git/cmake via MSYS2 pacman itself.
45
+ def setup_command?(cmd)
46
+ system("command -v #{cmd} >/dev/null 2>&1")
47
+ end
48
+
49
+
50
+ # Whether a pkg-config module's development files are installed. Used by the
51
+ # Linux preflight to find missing display libraries before SDL's CMake aborts
52
+ # on them — a wall of text several seconds into the build.
53
+ def setup_pkg_config?(mod)
54
+ system("pkg-config --exists #{mod} >/dev/null 2>&1")
55
+ end
56
+
57
+
58
+ # Check the host build toolchain up front and, if something's missing, print a
59
+ # platform-specific hint and stop — rather than failing partway through a
60
+ # multi-minute build. No-op on Windows, where the assets Rakefile offers to
61
+ # install git/cmake via pacman during its own preflight.
62
+ def setup_preflight!
63
+ return if AssetsTarget.host_os == 'windows'
64
+
65
+ cc = ENV['CC'] || 'cc'
66
+ linux = AssetsTarget.host_os == 'linux'
67
+ missing = []
68
+ missing << 'git' unless setup_command?('git')
69
+ missing << 'cmake' unless setup_command?('cmake')
70
+ missing << cc unless setup_command?(cc)
71
+ # SDL's Linux build finds Wayland (and much else) through pkg-config, and the
72
+ # display-library check below needs it to answer — so require it here.
73
+ missing << 'pkg-config' if linux && !setup_command?('pkg-config')
74
+
75
+ unless missing.empty?
76
+ hint = case AssetsTarget.host_os
77
+ when 'macos'
78
+ 'Install the Xcode Command Line Tools (`xcode-select --install`) and CMake (`brew install cmake`).'
79
+ when 'linux'
80
+ 'Install a C toolchain, CMake, Git, and pkg-config — e.g. `sudo apt install build-essential cmake git pkg-config`.'
81
+ else
82
+ 'Install a C toolchain, CMake, and Git with your system package manager (e.g. `pkg install cmake git`).'
83
+ end
84
+
85
+ error "Missing build tools: #{missing.join(', ')}", spaced: true
86
+ puts " #{hint}"
87
+ exit 1
88
+ end
89
+
90
+ # SDL won't build a desktop windowing backend without X11 or Wayland
91
+ # development libraries; its CMake mirrors this exact check, but only after
92
+ # cloning and configuring — so catch it here with a clean, actionable message
93
+ # instead of that error's wall of text. pkg-config is guaranteed present
94
+ # above, so it can answer for both. Linux only: the fix (apt packages, the
95
+ # SDL wiki) is Debian-shaped, and BSD's expert audience is served by CMake's.
96
+ if linux && !setup_pkg_config?('x11') && !setup_pkg_config?('wayland-client')
97
+ error 'SDL needs X11 or Wayland development libraries; neither was found.', spaced: true
98
+ puts " Install SDL's build dependencies for your distribution, then re-run #{'ruby2d setup'.bold}:"
99
+ puts ' https://wiki.libsdl.org/SDL3/README-linux'
100
+ exit 1
101
+ end
102
+ end
103
+
104
+
105
+ # Ask before doing the involved work, after printing what it entails. Enter
106
+ # accepts (the user asked for this by typing the command — the prompt is there
107
+ # to surface the cost, not to second-guess). Skipped by `--yes`, and when stdin
108
+ # isn't a TTY (CI, pipelines) where there's nobody to answer.
109
+ def setup_confirm!(yes:)
110
+ return if yes || !$stdin.tty?
111
+
112
+ print "\n Continue? #{'[Y/n]'.dim} "
113
+ # A bare Enter accepts; EOF (Ctrl-D) does not — closing the input is a way
114
+ # out of the prompt, not a way to start a multi-minute build.
115
+ answer = $stdin.gets
116
+ return if answer && (answer.strip.empty? || %w[y yes].include?(answer.strip.downcase))
117
+
118
+ puts "\n Cancelled.\n\n"
119
+ exit 0
120
+ end
121
+
122
+
123
+ # List the static libraries and binaries a build produced under `dir`.
124
+ def setup_list_artifacts(dir)
125
+ Dir.glob(File.join(dir, 'lib', '*.a')).map { |f| File.basename(f) }.sort.each { |f| puts " lib/#{f}" }
126
+ Dir.glob(File.join(dir, 'bin', '*')).map { |f| File.basename(f) }.sort.each { |f| puts " bin/#{f}" }
127
+ end
128
+
129
+
130
+ # Remove this platform's cache build: the libraries, shared headers, and the
131
+ # regenerable intermediates and downloaded sources.
132
+ def setup_clean(yes: false)
133
+ cache = AssetsTarget.cache_root
134
+ platform = AssetsTarget.platform_dir(root: cache)
135
+
136
+ # Nothing cached for this platform — say so rather than confirming a no-op.
137
+ unless Dir.exist?(platform)
138
+ setup_step 'Nothing to remove'
139
+ puts " #{"no cached dependencies for #{setup_platform_label}".dim}"
140
+ puts "\n #{setup_tildify(platform)} doesn't exist.\n\n"
141
+ return
142
+ end
143
+
144
+ setup_step 'Remove cached dependencies'
145
+ puts " #{"for #{setup_platform_label}".dim}"
146
+ puts "\n This removes #{setup_tildify(platform)} and its build files."
147
+ puts " Rebuilding them with #{'ruby2d setup'.bold} takes several minutes."
148
+ setup_confirm!(yes: yes)
149
+
150
+ [platform,
151
+ AssetsTarget.include_dir(root: cache),
152
+ AssetsTarget.build_dir(root: cache),
153
+ AssetsTarget.sources_dir(root: cache)].each { |dir| FileUtils.rm_rf dir }
154
+
155
+ puts "\n Removed #{setup_tildify(platform)}.\n\n"
156
+ end
157
+
158
+
159
+ # Build the native SDL3 + mruby static libraries for the current platform.
160
+ def setup(force: false, clean: false, yes: false)
161
+ if clean
162
+ # `--clean` is standalone: it only removes. Say so rather than letting a
163
+ # combined `--force` look like it did something (matches `build --clean`).
164
+ note '`--clean` only removes the built libraries; `--force` was ignored.' if force
165
+ return setup_clean(yes: yes)
166
+ end
167
+
168
+ target = AssetsTarget.target_id
169
+ cache = AssetsTarget.cache_root
170
+ cache_platform = AssetsTarget.platform_dir(root: cache)
171
+ stamp = File.join(cache_platform, '.ruby2d-version')
172
+
173
+ # Already provided? The gem bundles prebuilt libraries for RELEASE_PLATFORMS.
174
+ bundled = AssetsTarget.platform_dir(root: Ruby2D.assets)
175
+ bundled_exists = File.exist?(File.join(bundled, 'lib', 'libSDL3.a'))
176
+ if !force && bundled_exists
177
+ setup_step 'Native dependencies ready'
178
+ puts " #{"#{setup_platform_label} — bundled with the gem".dim}"
179
+ puts "\n Nothing to build. Run #{'ruby2d build --native <app>.rb'.bold} to build an app.\n\n"
180
+ return
181
+ end
182
+
183
+ # Already built for this ruby2d version? Skip unless --force.
184
+ built = File.exist?(File.join(cache_platform, 'lib', 'libSDL3.a')) &&
185
+ File.exist?(stamp) && File.read(stamp).strip == Ruby2D::VERSION
186
+ if built && !force
187
+ setup_step 'Native dependencies ready'
188
+ puts " #{"#{setup_platform_label} — built at #{setup_tildify(cache_platform)}".dim}"
189
+ puts "\n Already built. Re-run with #{'--force'.bold} to rebuild, or #{'ruby2d build --native <app>.rb'.bold} to build an app.\n\n"
190
+ return
191
+ end
192
+
193
+ setup_preflight!
194
+
195
+ # Header — surface the platform and cache location up front (again at the
196
+ # end), spell out what the build entails, and confirm before starting: this
197
+ # downloads sources, compiles for minutes, and rebuilds the installed gem.
198
+ setup_step 'Set up native dependencies'
199
+ puts
200
+ puts " #{'Platform'.dim} #{setup_platform_label} #{"(#{target})".dim}"
201
+ puts " #{'Location'.dim} #{setup_tildify(cache_platform)}"
202
+ puts "\n #{'This will:'.bold}"
203
+ if AssetsTarget.host_os == 'windows'
204
+ puts ' • Offer to install any missing build tools (git, CMake) via MSYS2'
205
+ end
206
+ puts ' • Download the SDL3 and mruby sources with git'
207
+ puts ' • Compile them into static libraries — this takes several minutes'
208
+ puts " • Rebuild the Ruby 2D extension with #{'gem pristine ruby2d'.bold}"
209
+ puts "\n Sources and build files go under the location above; only the last"
210
+ puts ' step touches anything outside it.'
211
+
212
+ # SDL links a lot of the system's development libraries — windowing, audio,
213
+ # and more — and the full set is distro-specific and long, so point at SDL's
214
+ # own list rather than trying to enumerate it. Preflight has already confirmed
215
+ # the one hard requirement (X11 or Wayland); this covers the rest, whose
216
+ # absence quietly disables features (e.g. no audio) instead of failing loudly.
217
+ if AssetsTarget.host_os == 'linux'
218
+ note "SDL builds against your system's development libraries — windowing,", spaced: true
219
+ puts ' audio, and more. Install the packages for your distribution before continuing:'
220
+ puts ' https://wiki.libsdl.org/SDL3/README-linux'
221
+ end
222
+
223
+ # Only `--force` gets here on a platform the gem already bundles, and a build
224
+ # resolves bundled libraries first (see cli/build's deps_platform_dir) — so
225
+ # this build won't be linked against. Worth saying before spending minutes on
226
+ # it, rather than refusing: rebuilding is still a fair way to check the
227
+ # pinned sources compile on this machine.
228
+ if bundled_exists
229
+ warning "This platform's libraries are bundled with the gem, and a", spaced: true
230
+ puts " build prefers those — so #{'ruby2d build'.bold} won't link what this produces."
231
+ end
232
+
233
+ setup_confirm!(yes: yes)
234
+
235
+ setup_step 'Building native dependencies'
236
+ puts " #{'$ rake sdl mruby'.dim}\n\n"
237
+
238
+ # Redirect sources, intermediates, and output to the cache so nothing is
239
+ # written into the gem dir. Scope the override to the build subprocess (env
240
+ # hash) so it doesn't leak into the `gem pristine` below — that step needs the
241
+ # standard bundled -> cache resolution. The assets Rakefile carries the pinned
242
+ # versions, the cmake/mruby build steps, and (on Windows) the pacman bootstrap.
243
+ ok = Dir.chdir(Ruby2D.assets) do
244
+ system({ 'RUBY2D_ASSETS_ROOT' => cache }, 'rake', 'sdl', 'mruby')
245
+ end
246
+
247
+ unless ok
248
+ error 'Failed to build the native dependencies. See the output above.', spaced: true
249
+ exit 1
250
+ end
251
+
252
+ # Stamp the build so `ruby2d build` and extconf only link it against a matching
253
+ # gem version — a later upgrade may pin newer SDL/mruby.
254
+ File.write(stamp, Ruby2D::VERSION)
255
+
256
+ setup_step 'Built the native dependencies'
257
+ puts "\n #{"Native (#{target})".bold}"
258
+ setup_list_artifacts(cache_platform)
259
+ puts "\n Built to #{setup_tildify(cache_platform)}"
260
+
261
+ # Build (or rebuild) the CRuby native extension through RubyGems' standard
262
+ # path now that the libraries exist — extconf resolves this cache build. This
263
+ # keeps the extension entirely on RubyGems' rails; setup builds no extension
264
+ # itself.
265
+ setup_step 'Building the Ruby 2D extension'
266
+ puts " #{'$ gem pristine ruby2d'.dim}\n\n"
267
+ if system('gem', 'pristine', 'ruby2d')
268
+ puts "\n #{'Ready!'.bold} #{"require 'ruby2d'".bold} now works — run #{'ruby2d build --native <app>.rb'.bold} to build an app.\n\n"
269
+ else
270
+ warning "Couldn't rebuild the extension automatically.", spaced: true
271
+ puts " Run #{'gem pristine ruby2d'.bold} yourself to finish.\n\n"
272
+ end
273
+ end