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
data/lib/ruby2d/quad.rb CHANGED
@@ -1,5 +1,3 @@
1
- # frozen_string_literal: true
2
-
3
1
  # Ruby2D::Quad
4
2
 
5
3
  module Ruby2D
@@ -15,23 +13,68 @@ module Ruby2D
15
13
  attr_accessor :x1, :y1,
16
14
  :x2, :y2,
17
15
  :x3, :y3,
18
- :x4, :y4
19
-
20
- # Create an quadrilateral
21
- # @param [Numeric] x1
22
- # @param [Numeric] y1
23
- # @param [Numeric] x2
24
- # @param [Numeric] y2
25
- # @param [Numeric] x3
26
- # @param [Numeric] y3
27
- # @param [Numeric] x4
28
- # @param [Numeric] y4
29
- # @param [Numeric] z
30
- # @param [String, Array] color A single colour or an array of exactly 4 colours
31
- # @param [Numeric] opacity Opacity of the image when rendering
32
- # @raise [ArgumentError] if an array of colours does not have 4 entries
16
+ :x4, :y4,
17
+ :rotate,
18
+ :fill, :stroke_width
19
+ attr_reader :stroke_color
20
+ alias_method :stroke_colour, :stroke_color
21
+
22
+ # The x coordinate of the centroid (average of the four vertex x's)
23
+ def x
24
+ (@x1 + @x2 + @x3 + @x4) / 4.0
25
+ end
26
+
27
+ # The y coordinate of the centroid (average of the four vertex y's)
28
+ def y
29
+ (@y1 + @y2 + @y3 + @y4) / 4.0
30
+ end
31
+
32
+ # Set the x coordinate of the centroid, translating all vertices
33
+ def x=(new_x)
34
+ _require_numeric_position(:x, new_x)
35
+ dx = new_x - x
36
+ @x1 += dx
37
+ @x2 += dx
38
+ @x3 += dx
39
+ @x4 += dx
40
+ end
41
+
42
+ # Set the y coordinate of the centroid, translating all vertices
43
+ def y=(new_y)
44
+ _require_numeric_position(:y, new_y)
45
+ dy = new_y - y
46
+ @y1 += dy
47
+ @y2 += dy
48
+ @y3 += dy
49
+ @y4 += dy
50
+ end
51
+
52
+ # Bounding-box width and height (extent across the four vertices)
53
+ def width
54
+ xs = [@x1, @x2, @x3, @x4]
55
+ xs.max - xs.min
56
+ end
57
+
58
+ def height
59
+ ys = [@y1, @y2, @y3, @y4]
60
+ ys.max - ys.min
61
+ end
62
+
63
+ # Create a quadrilateral. Specify vertices via `points:` or via
64
+ # `x1:`/`y1:`/... `points:` takes precedence if both are given.
33
65
  def initialize(x1: 0, y1: 0, x2: 100, y2: 0, x3: 100, y3: 100, x4: 0, y4: 100,
34
- z: 0, color: nil, colour: nil, opacity: nil)
66
+ points: nil,
67
+ z: 0, rotate: 0, rx: nil, ry: nil,
68
+ color: nil, colour: nil, opacity: nil,
69
+ fill: true, stroke_width: 0, stroke_color: nil, stroke_colour: nil,
70
+ add: true, visible: true)
71
+ if points
72
+ Quad.send(:validate_points, points)
73
+ x1, y1 = points[0]
74
+ x2, y2 = points[1]
75
+ x3, y3 = points[2]
76
+ x4, y4 = points[3]
77
+ end
35
78
  @x1 = x1
36
79
  @y1 = y1
37
80
  @x2 = x2
@@ -41,14 +84,32 @@ module Ruby2D
41
84
  @x4 = x4
42
85
  @y4 = y4
43
86
  @z = z
87
+ @rotate = rotate
88
+ @_user_rx = rx
89
+ @_user_ry = ry
44
90
  self.color = color || colour || 'white'
45
- self.color.opacity = opacity unless opacity.nil?
46
- add
91
+ self.opacity = opacity unless opacity.nil?
92
+ @fill = fill
93
+ @stroke_width = stroke_width
94
+ self.stroke_color = stroke_color || stroke_colour || (color || colour)
95
+ self.stroke_color.opacity = opacity unless opacity.nil?
96
+ @visible = visible
97
+ self.add if add
47
98
  end
48
99
 
49
- # Change the colour of the line
50
- # @param [String, Array] color A single colour or an array of exactly 4 colours
51
- # @raise [ArgumentError] if an array of colours does not have 4 entries
100
+ # Set the stroke color. Accepts a single color or a `Color::Set` of 4
101
+ # (one per vertex) interpolated around the perimeter. If nil, defaults to
102
+ # the fill color (preserving a per-vertex set when the fill is per-vertex).
103
+ def stroke_color=(c)
104
+ @stroke_color = Renderable.resolve_color_or_default(c, 4, label: self.class)
105
+ # A single stroke Color (not a per-vertex Set) takes the compact
106
+ # `stroke_quad_uniform` fast path.
107
+ @_stroke_color_uniform = !@stroke_color.is_a?(Color::Set)
108
+ @_stroke_cc = nil
109
+ end
110
+ alias_method :stroke_colour=, :stroke_color=
111
+
112
+ # Set the color of the quad
52
113
  def color=(color)
53
114
  # convert to Color or Color::Set
54
115
  color = Color.set(color)
@@ -60,86 +121,289 @@ module Ruby2D
60
121
  end
61
122
 
62
123
  @color = color # converted above
63
- invalidate_color_components
124
+ # A single Color (not a per-vertex Set) is uniform across all four
125
+ # vertices, so it takes the compact `draw_quad_uniform` fast path.
126
+ @_color_uniform = !color.is_a?(Color::Set)
127
+ @_cc = nil # invalidate cached color components
64
128
  end
65
129
 
66
- # The logic is the same as for a triangle
67
- # See triangle.rb for reference
130
+ # Check if the quad contains the given point (inside the rendered fill).
131
+ # Ray-cast over the four vertices, so concave quads hit-test against what's
132
+ # actually drawn — unlike the old area method, which only held for convex
133
+ # quads. Self-intersecting (bow-tie) quads aren't fully supported by the fill
134
+ # renderer, so the test can diverge from the drawn pixels there.
68
135
  def contains?(x, y)
69
- self_area = triangle_area(@x1, @y1, @x2, @y2, @x3, @y3) +
70
- triangle_area(@x1, @y1, @x3, @y3, @x4, @y4)
71
-
72
- questioned_area = triangle_area(@x1, @y1, @x2, @y2, x, y) +
73
- triangle_area(@x2, @y2, @x3, @y3, x, y) +
74
- triangle_area(@x3, @y3, @x4, @y4, x, y) +
75
- triangle_area(@x4, @y4, @x1, @y1, x, y)
76
-
77
- questioned_area <= self_area
78
- end
79
-
80
- # Draw a line without creating a Line
81
- # @param [Numeric] x1
82
- # @param [Numeric] y1
83
- # @param [Numeric] x2
84
- # @param [Numeric] y2
85
- # @param [Numeric] x3
86
- # @param [Numeric] y3
87
- # @param [Numeric] x4
88
- # @param [Numeric] y4
89
- # @param color [Array<Array<float,float,float,float>>] An array of 4 array of colour components
90
- # (e.g. [[1.0, 0, 0, 1.0], ...])
91
- def self.draw(x1:, y1:, x2:, y2:, x3:, y3:, x4:, y4:, color:)
136
+ x, y = _unrotate(x, y)
137
+ _point_in_polygon?([@x1, @y1, @x2, @y2, @x3, @y3, @x4, @y4], x, y)
138
+ end
139
+
140
+ # Get the rotation center x coordinate
141
+ def rx
142
+ @_user_rx.nil? ? (@x1 + @x2 + @x3 + @x4) / 4.0 : @_user_rx
143
+ end
144
+
145
+ # Get the rotation center y coordinate
146
+ def ry
147
+ @_user_ry.nil? ? (@y1 + @y2 + @y3 + @y4) / 4.0 : @_user_ry
148
+ end
149
+
150
+ # Set the rotation center x coordinate
151
+ def rx=(val)
152
+ @_user_rx = val
153
+ end
154
+
155
+ # Set the rotation center y coordinate
156
+ def ry=(val)
157
+ @_user_ry = val
158
+ end
159
+
160
+ # Render a quad without creating an instance
161
+ def self.render(x1: 0, y1: 0, x2: 100, y2: 0, x3: 100, y3: 100, x4: 0, y4: 100,
162
+ points: nil,
163
+ rotate: 0, rx: nil, ry: nil,
164
+ color: nil, colour: nil, opacity: nil,
165
+ fill: true, stroke_width: 0, stroke_color: nil, stroke_colour: nil)
166
+ if points
167
+ validate_points(points)
168
+ x1, y1 = points[0]
169
+ x2, y2 = points[1]
170
+ x3, y3 = points[2]
171
+ x4, y4 = points[3]
172
+ end
173
+ draw_immediate(x1, y1, x2, y2, x3, y3, x4, y4, rotate, rx, ry,
174
+ color || colour, opacity, fill, stroke_width,
175
+ stroke_color || stroke_colour)
176
+ end
177
+
178
+ # The immediate-mode draw shared by Quad, Rectangle, and Square. Takes
179
+ # positional arguments, and subclasses call it directly instead of
180
+ # forwarding through `super`: keyword dispatch is expensive on mruby
181
+ # (~17µs per hop of this many keywords on the web build), so each public
182
+ # `.render` pays for its own keywords exactly once. `rx`/`ry` may be nil
183
+ # (centroid default); `explicit_stroke` is the user's stroke color or nil.
184
+ def self.draw_immediate(x1, y1, x2, y2, x3, y3, x4, y4, rotate, rx, ry,
185
+ fill_input, opacity, fill, stroke_width, explicit_stroke)
92
186
  Window.render_ready_check
93
- ext_draw([
94
- x1, y1, *color[0], # splat the colour components
95
- x2, y2, *color[1],
96
- x3, y3, *color[2],
97
- x4, y4, *color[3]
98
- ])
187
+ # Resolve the fill color once. A single Color (not a per-vertex Set) with
188
+ # scalar opacity is uniform across all four vertices and draws via the
189
+ # compact `draw_quad_uniform`; otherwise build the per-vertex color array
190
+ # from the already-resolved color (no second parse). `for_render` returns
191
+ # a shared cached instance for string colors — read-only here.
192
+ # A per-vertex color flattens straight to floats, skipping the
193
+ # `Color::Set` the general path builds — that allocates and parses one
194
+ # `Color` per vertex on every call. `resolved` stays nil in that case
195
+ # and the stroke below resolves for itself if it ends up needing one.
196
+ # The `is_a?(Array)` guard is inline so the common single-color call
197
+ # doesn't pay for a method call that would only decline.
198
+ c = fill_input.is_a?(Array) ? Renderable.flatten_per_vertex(fill_input, 4, opacity) : nil
199
+ if c
200
+ resolved = nil
201
+ uniform = false
202
+ else
203
+ resolved = Color.for_render(fill_input.nil? ? 'white' : fill_input)
204
+ uniform = !resolved.is_a?(Color::Set) && !opacity.is_a?(Array)
205
+ c = uniform ? nil : Renderable.flatten_resolved_color(resolved, 4, opacity, label: self)
206
+ end
207
+
208
+ # Rotation is inlined into locals (as in `render` below and Line#render):
209
+ # a helper returning the rotated points would allocate an array per
210
+ # rotated shape per frame — measured 2.9µs vs 1.8µs per quad on wasm.
211
+ if rotate != 0
212
+ cx = rx || (x1 + x2 + x3 + x4) / 4.0
213
+ cy = ry || (y1 + y2 + y3 + y4) / 4.0
214
+ rad = rotate * Math::PI / 180.0
215
+ sa = Math.sin(rad)
216
+ ca = Math.cos(rad)
217
+ dx = x1 - cx; dy = y1 - cy
218
+ x1 = dx * ca - dy * sa + cx; y1 = dx * sa + dy * ca + cy
219
+ dx = x2 - cx; dy = y2 - cy
220
+ x2 = dx * ca - dy * sa + cx; y2 = dx * sa + dy * ca + cy
221
+ dx = x3 - cx; dy = y3 - cy
222
+ x3 = dx * ca - dy * sa + cx; y3 = dx * sa + dy * ca + cy
223
+ dx = x4 - cx; dy = y4 - cy
224
+ x4 = dx * ca - dy * sa + cx; y4 = dx * sa + dy * ca + cy
225
+ end
226
+
227
+ if fill
228
+ if uniform
229
+ a = opacity || resolved.a
230
+ Ext.draw_quad_uniform(x1, y1, x2, y2, x3, y3, x4, y4, resolved.r, resolved.g, resolved.b, a)
231
+ else
232
+ c1r, c1g, c1b, c1a, c2r, c2g, c2b, c2a,
233
+ c3r, c3g, c3b, c3a, c4r, c4g, c4b, c4a = c
234
+ Ext.draw_quad(
235
+ x1, y1, c1r, c1g, c1b, c1a,
236
+ x2, y2, c2r, c2g, c2b, c2a,
237
+ x3, y3, c3r, c3g, c3b, c3a,
238
+ x4, y4, c4r, c4g, c4b, c4a
239
+ )
240
+ end
241
+ end
242
+
243
+ # Resolve the stroke color only when actually stroking. A single stroke
244
+ # color draws via the compact `stroke_quad_uniform`; a per-vertex Set keeps
245
+ # the splatting path. When no explicit stroke is given the stroke reuses
246
+ # the already-resolved fill color. (An explicit stroke color is still
247
+ # validated at stroke_width 0 below, matching the instance constructor.)
248
+ if stroke_width > 0
249
+ stroke_input = explicit_stroke || fill_input
250
+ sresolved = if !stroke_input.equal?(fill_input)
251
+ Color.for_render(stroke_input)
252
+ else
253
+ resolved || Color.for_render(fill_input.nil? ? 'white' : fill_input)
254
+ end
255
+ if !sresolved.is_a?(Color::Set) && !opacity.is_a?(Array)
256
+ sa = opacity || sresolved.a
257
+ Ext.stroke_quad_uniform(x1, y1, x2, y2, x3, y3, x4, y4, stroke_width,
258
+ sresolved.r, sresolved.g, sresolved.b, sa)
259
+ else
260
+ s1r, s1g, s1b, s1a, s2r, s2g, s2b, s2a,
261
+ s3r, s3g, s3b, s3a, s4r, s4g, s4b, s4a =
262
+ Renderable.flatten_resolved_color(sresolved, 4, opacity, label: self)
263
+ Ext.stroke_quad(
264
+ x1, y1, x2, y2, x3, y3, x4, y4, stroke_width,
265
+ s1r, s1g, s1b, s1a,
266
+ s2r, s2g, s2b, s2a,
267
+ s3r, s3g, s3b, s3a,
268
+ s4r, s4g, s4b, s4a
269
+ )
270
+ end
271
+ elsif explicit_stroke
272
+ Renderable.flatten_color(explicit_stroke, 4, opacity, label: self)
273
+ end
99
274
  end
275
+ private_class_method :draw_immediate
100
276
 
101
277
  private
102
278
 
279
+ def self.validate_points(points)
280
+ raise ArgumentError, 'Quad requires exactly 4 points' unless points.length == 4
281
+ raise ArgumentError, 'points must be an array of [x, y] pairs' \
282
+ unless points.all? { |p| p.is_a?(Array) && p.length == 2 }
283
+ end
284
+ private_class_method :validate_points
285
+
103
286
  def render
104
- color_comp_arrays = color_components
105
- self.class.ext_draw([
106
- @x1, @y1, *color_comp_arrays[0], # splat the colour components
107
- @x2, @y2, *color_comp_arrays[1],
108
- @x3, @y3, *color_comp_arrays[2],
109
- @x4, @y4, *color_comp_arrays[3]
110
- ])
111
- end
112
-
113
- def triangle_area(x1, y1, x2, y2, x3, y3)
114
- (x1 * y2 + x2 * y3 + x3 * y1 - x3 * y2 - x1 * y3 - x2 * y1).abs / 2
115
- end
116
-
117
- # Return colours as a memoized array of 4 x colour component arrays
118
- def color_components
119
- check_if_opacity_changed
120
- @color_components ||= if @color.is_a? Color::Set
121
- # Extract colour component arrays; see +def color=+ where colour set
122
- # size is enforced
123
- [
124
- @color[0].to_a, @color[1].to_a, @color[2].to_a, @color[3].to_a
125
- ]
126
- else
127
- # All vertex colours are the same
128
- c_a = @color.to_a
129
- [
130
- c_a, c_a, c_a, c_a
131
- ]
132
- end
133
- end
134
-
135
- # Invalidate memoized colour components if opacity has been changed via +color=+
136
- def check_if_opacity_changed
137
- @color_components = nil if @color_components && @color_components.first[3] != @color.opacity
138
- end
139
-
140
- # Invalidate the memoized colour components. Called when Line's colour is changed
141
- def invalidate_color_components
142
- @color_components = nil
287
+ # Note: Quad does not support symbolic alignment — its `x`/`y` are the
288
+ # centroid, not a top-left origin, so `_resolve_alignment` (which assumes
289
+ # top-left) cannot position it coherently. Matches Triangle/Polygon.
290
+ ensure_cc
291
+ ensure_scc if @stroke_width && @stroke_width > 0
292
+
293
+ x1, y1, x2, y2, x3, y3, x4, y4 = @x1, @y1, @x2, @y2, @x3, @y3, @x4, @y4
294
+
295
+ # Rotation inlined into locals — see the `draw_immediate` note.
296
+ if @rotate != 0
297
+ cx = rx; cy = ry
298
+ rad = @rotate * Math::PI / 180.0
299
+ sa = Math.sin(rad)
300
+ ca = Math.cos(rad)
301
+ dx = x1 - cx; dy = y1 - cy
302
+ x1 = dx * ca - dy * sa + cx; y1 = dx * sa + dy * ca + cy
303
+ dx = x2 - cx; dy = y2 - cy
304
+ x2 = dx * ca - dy * sa + cx; y2 = dx * sa + dy * ca + cy
305
+ dx = x3 - cx; dy = y3 - cy
306
+ x3 = dx * ca - dy * sa + cx; y3 = dx * sa + dy * ca + cy
307
+ dx = x4 - cx; dy = y4 - cy
308
+ x4 = dx * ca - dy * sa + cx; y4 = dx * sa + dy * ca + cy
309
+ end
310
+
311
+ if @fill
312
+ cc = @_cc
313
+ if @_color_uniform
314
+ Ext.draw_quad_uniform(x1, y1, x2, y2, x3, y3, x4, y4, cc[0], cc[1], cc[2], cc[3])
315
+ else
316
+ Ext.draw_quad(
317
+ x1, y1, cc[0], cc[1], cc[2], cc[3],
318
+ x2, y2, cc[4], cc[5], cc[6], cc[7],
319
+ x3, y3, cc[8], cc[9], cc[10], cc[11],
320
+ x4, y4, cc[12], cc[13], cc[14], cc[15]
321
+ )
322
+ end
323
+ end
324
+
325
+ if @stroke_width && @stroke_width > 0
326
+ scc = @_stroke_cc
327
+ if @_stroke_color_uniform
328
+ Ext.stroke_quad_uniform(x1, y1, x2, y2, x3, y3, x4, y4, @stroke_width, scc[0], scc[1], scc[2], scc[3])
329
+ else
330
+ Ext.stroke_quad(
331
+ x1, y1, x2, y2, x3, y3, x4, y4, @stroke_width,
332
+ scc[0], scc[1], scc[2], scc[3],
333
+ scc[4], scc[5], scc[6], scc[7],
334
+ scc[8], scc[9], scc[10], scc[11],
335
+ scc[12], scc[13], scc[14], scc[15]
336
+ )
337
+ end
338
+ end
339
+ end
340
+
341
+ # Scene-graph draw hook (see Renderable#_render_scene). Quad's `render` is
342
+ # already zero-arg, so the hook is the same method under the scene name.
343
+ alias_method :_render_scene, :render
344
+ public :_render_scene
345
+
346
+ # Build/rebuild flat per-vertex stroke color cache (4 × rgba = 16 floats)
347
+ def ensure_scc
348
+ if @_stroke_color_uniform
349
+ c = @stroke_color
350
+ if @_stroke_cc.nil? || @_stroke_cc[0] != c.r || @_stroke_cc[1] != c.g || @_stroke_cc[2] != c.b || @_stroke_cc[3] != c.a
351
+ @_stroke_cc = [c.r, c.g, c.b, c.a]
352
+ end
353
+ elsif @_stroke_cc.nil? || !scc_matches?
354
+ @_stroke_cc = Array.new(16)
355
+ 4.times do |i|
356
+ c = @stroke_color.vertex(i)
357
+ @_stroke_cc[i * 4] = c.r
358
+ @_stroke_cc[i * 4 + 1] = c.g
359
+ @_stroke_cc[i * 4 + 2] = c.b
360
+ @_stroke_cc[i * 4 + 3] = c.a
361
+ end
362
+ end
363
+ end
364
+
365
+ def scc_matches?
366
+ 4.times do |i|
367
+ c = @stroke_color.vertex(i)
368
+ return false if @_stroke_cc[i * 4] != c.r
369
+ return false if @_stroke_cc[i * 4 + 1] != c.g
370
+ return false if @_stroke_cc[i * 4 + 2] != c.b
371
+ return false if @_stroke_cc[i * 4 + 3] != c.a
372
+ end
373
+ true
374
+ end
375
+
376
+ # Build/rebuild flat color cache for the native extension
377
+ def ensure_cc
378
+ # Solid fill: cache 4 floats and validity-check 4 comparisons (the
379
+ # per-frame check still catches in-place `color.opacity=` fades). Mirrors
380
+ # the Circle/Ellipse single-color cache.
381
+ if @_color_uniform
382
+ c = @color
383
+ if @_cc.nil? || @_cc[0] != c.r || @_cc[1] != c.g || @_cc[2] != c.b || @_cc[3] != c.a
384
+ @_cc = [c.r, c.g, c.b, c.a]
385
+ end
386
+ elsif @_cc.nil? || !cc_matches?
387
+ @_cc = Array.new(16)
388
+ 4.times do |i|
389
+ c = @color.vertex(i)
390
+ @_cc[i * 4] = c.r
391
+ @_cc[i * 4 + 1] = c.g
392
+ @_cc[i * 4 + 2] = c.b
393
+ @_cc[i * 4 + 3] = c.a
394
+ end
395
+ end
396
+ end
397
+
398
+ def cc_matches?
399
+ 4.times do |i|
400
+ c = @color.vertex(i)
401
+ return false if @_cc[i * 4] != c.r
402
+ return false if @_cc[i * 4 + 1] != c.g
403
+ return false if @_cc[i * 4 + 2] != c.b
404
+ return false if @_cc[i * 4 + 3] != c.a
405
+ end
406
+ true
143
407
  end
144
408
  end
145
409
  end
@@ -1,64 +1,122 @@
1
- # frozen_string_literal: true
2
-
3
1
  # Ruby2D::Rectangle
4
2
 
5
3
  module Ruby2D
6
4
  # A rectangle
7
5
  class Rectangle < Quad
8
- # Create an rectangle
9
- # @param [Numeric] x
10
- # @param [Numeric] y
11
- # @param [Numeric] width
12
- # @param [Numeric] height
13
- # @param [Numeric] z
14
- # @param [String, Array] color A single colour or an array of exactly 4 colours
15
- # @param [Numeric] opacity Opacity of the image when rendering
16
- # @raise [ArgumentError] if an array of colours does not have 4 entries
17
- def initialize(x: 0, y: 0, width: 200, height: 100, z: 0, color: nil, colour: nil, opacity: nil)
6
+ # Create a rectangle
7
+ def initialize(x: 0, y: 0, width: 200, height: 100, z: 0, rotate: 0,
8
+ rx: nil, ry: nil, color: nil, colour: nil, opacity: nil,
9
+ fill: true, stroke_width: 0, stroke_color: nil, stroke_colour: nil,
10
+ add: true, visible: true,
11
+ padding: nil, padding_top: nil, padding_right: nil,
12
+ padding_bottom: nil, padding_left: nil)
13
+ x, y = _extract_alignment(x, y)
14
+ _apply_padding(padding, padding_top, padding_right, padding_bottom, padding_left)
15
+ _validate_dimensions(width: width, height: height)
18
16
  @width = width
19
17
  @height = height
20
18
  super(x1: @x = x, y1: @y = y,
21
19
  x2: x + width, y2: y,
22
20
  x3: x + width, y3: y + height,
23
- x4: x, y4: y + height, z: z, color: color, colour: colour, opacity: opacity)
21
+ x4: x, y4: y + height, z: z, rotate: rotate,
22
+ rx: rx, ry: ry,
23
+ color: color, colour: colour, opacity: opacity,
24
+ fill: fill, stroke_width: stroke_width,
25
+ stroke_color: stroke_color, stroke_colour: stroke_colour,
26
+ add: add, visible: visible)
27
+ end
28
+
29
+ # The x position (top-left). Rectangles are anchored at their top-left
30
+ # corner, not the centroid like a general Quad.
31
+ def x
32
+ @x1
33
+ end
34
+
35
+ # The y position (top-left).
36
+ def y
37
+ @y1
38
+ end
39
+
40
+ # Get the rotation center x coordinate
41
+ def rx
42
+ @_user_rx.nil? ? (@x1 + @width / 2.0) : @_user_rx
24
43
  end
25
44
 
45
+ # Get the rotation center y coordinate
46
+ def ry
47
+ @_user_ry.nil? ? (@y1 + @height / 2.0) : @_user_ry
48
+ end
49
+
50
+ # Set the x position (top-left), updating all four vertices. Pass a
51
+ # symbol (`:left`, `:center`, `:right`) to set alignment intent.
26
52
  def x=(x)
53
+ return self.x_align = x if x.is_a?(Symbol)
54
+ @x_align = nil unless @_resolving_alignment
27
55
  @x = @x1 = x
28
56
  @x2 = x + @width
29
57
  @x3 = x + @width
30
58
  @x4 = x
31
59
  end
32
60
 
61
+ # Set the y position (top-left), updating all four vertices. Pass a
62
+ # symbol (`:top`, `:center`, `:bottom`) to set alignment intent.
33
63
  def y=(y)
64
+ return self.y_align = y if y.is_a?(Symbol)
65
+ @y_align = nil unless @_resolving_alignment
34
66
  @y = @y1 = y
35
67
  @y2 = y
36
68
  @y3 = y + @height
37
69
  @y4 = y + @height
38
70
  end
39
71
 
72
+ # Set the width
40
73
  def width=(width)
41
74
  @width = width
42
75
  @x2 = @x1 + width
43
76
  @x3 = @x1 + width
44
77
  end
45
78
 
79
+ # Set the height
46
80
  def height=(height)
47
81
  @height = height
48
82
  @y3 = @y1 + height
49
83
  @y4 = @y1 + height
50
84
  end
51
85
 
52
- def self.draw(x:, y:, width:, height:, color:)
53
- super(x1: x, y1: y,
54
- x2: x + width, y2: y,
55
- x3: x + width, y3: y + height,
56
- x4: x, y4: y + height, color: color)
86
+ # Render a rectangle without creating an instance. Calls the positional
87
+ # internal directly rather than `super` see `Quad.draw_immediate`.
88
+ def self.render(x: 0, y: 0, width: 200, height: 100, rotate: 0,
89
+ rx: nil, ry: nil, color: nil, colour: nil, opacity: nil,
90
+ fill: true, stroke_width: 0, stroke_color: nil, stroke_colour: nil)
91
+ draw_immediate(x, y,
92
+ x + width, y,
93
+ x + width, y + height,
94
+ x, y + height,
95
+ rotate, rx || x + width / 2.0, ry || y + height / 2.0,
96
+ color || colour, opacity, fill, stroke_width,
97
+ stroke_color || stroke_colour)
57
98
  end
58
99
 
100
+ # Check if the rectangle contains the given point
59
101
  def contains?(x, y)
60
- # Override the check from Quad since this is faster
102
+ x, y = _unrotate(x, y)
61
103
  x >= @x && x <= (@x + @width) && y >= @y && y <= (@y + @height)
62
104
  end
105
+
106
+ private
107
+
108
+ # Resolve symbolic alignment (e.g. `x: :center`) against the window before
109
+ # drawing, then draw via Quad. Rectangle/Square are top-left-anchored and
110
+ # support alignment; a bare Quad (centroid-anchored) does not, so the call
111
+ # lives here rather than in Quad#render.
112
+ def render
113
+ _resolve_alignment
114
+ super
115
+ end
116
+
117
+ # Scene-graph draw hook (see Renderable#_render_scene). Re-aliased here so
118
+ # the hook picks up Rectangle's alignment-resolving `render`, not Quad's.
119
+ alias_method :_render_scene, :render
120
+ public :_render_scene
63
121
  end
64
122
  end