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