ruby2d 0.12.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (619) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.md +7 -0
  3. data/README.md +141 -0
  4. data/USAGE.md +2435 -0
  5. data/assets/Rakefile +637 -0
  6. data/assets/build_support/CMakeLists.txt +94 -0
  7. data/assets/build_support/mruby/build_config.rb +34 -0
  8. data/assets/build_support/mruby/build_config_wasm.rb +30 -0
  9. data/assets/build_support/sdl_test.c +174 -0
  10. data/assets/deps.yaml +16 -0
  11. data/assets/platform/include/SDL3/SDL.h +91 -0
  12. data/assets/platform/include/SDL3/SDL_assert.h +705 -0
  13. data/assets/platform/include/SDL3/SDL_asyncio.h +550 -0
  14. data/assets/platform/include/SDL3/SDL_atomic.h +692 -0
  15. data/assets/platform/include/SDL3/SDL_audio.h +2370 -0
  16. data/assets/platform/include/SDL3/SDL_begin_code.h +553 -0
  17. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_bits.h +47 -27
  18. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_blendmode.h +59 -55
  19. data/assets/platform/include/SDL3/SDL_camera.h +535 -0
  20. data/assets/platform/include/SDL3/SDL_clipboard.h +331 -0
  21. data/assets/{include/SDL2/close_code.h → platform/include/SDL3/SDL_close_code.h} +9 -8
  22. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_copying.h +3 -1
  23. data/assets/platform/include/SDL3/SDL_cpuinfo.h +374 -0
  24. data/assets/platform/include/SDL3/SDL_dialog.h +343 -0
  25. data/assets/platform/include/SDL3/SDL_dlopennote.h +234 -0
  26. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_egl.h +11 -8
  27. data/assets/platform/include/SDL3/SDL_endian.h +645 -0
  28. data/assets/platform/include/SDL3/SDL_error.h +226 -0
  29. data/assets/platform/include/SDL3/SDL_events.h +1645 -0
  30. data/assets/platform/include/SDL3/SDL_filesystem.h +537 -0
  31. data/assets/platform/include/SDL3/SDL_gamepad.h +1656 -0
  32. data/assets/platform/include/SDL3/SDL_gpu.h +4608 -0
  33. data/assets/platform/include/SDL3/SDL_guid.h +106 -0
  34. data/assets/platform/include/SDL3/SDL_haptic.h +1461 -0
  35. data/assets/platform/include/SDL3/SDL_hidapi.h +571 -0
  36. data/assets/platform/include/SDL3/SDL_hints.h +5001 -0
  37. data/assets/platform/include/SDL3/SDL_init.h +507 -0
  38. data/assets/platform/include/SDL3/SDL_intrin.h +410 -0
  39. data/assets/platform/include/SDL3/SDL_iostream.h +1379 -0
  40. data/assets/platform/include/SDL3/SDL_joystick.h +1385 -0
  41. data/assets/platform/include/SDL3/SDL_keyboard.h +608 -0
  42. data/assets/platform/include/SDL3/SDL_keycode.h +347 -0
  43. data/assets/platform/include/SDL3/SDL_loadso.h +145 -0
  44. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_locale.h +40 -24
  45. data/assets/platform/include/SDL3/SDL_log.h +541 -0
  46. data/assets/platform/include/SDL3/SDL_main.h +704 -0
  47. data/assets/platform/include/SDL3/SDL_main_impl.h +151 -0
  48. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_messagebox.h +85 -48
  49. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_metal.h +29 -29
  50. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_misc.h +13 -12
  51. data/assets/platform/include/SDL3/SDL_mouse.h +813 -0
  52. data/assets/platform/include/SDL3/SDL_mutex.h +1117 -0
  53. data/assets/platform/include/SDL3/SDL_oldnames.h +1339 -0
  54. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_opengl.h +1247 -278
  55. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_opengl_glext.h +5 -1
  56. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_opengles.h +6 -7
  57. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_opengles2.h +10 -11
  58. data/assets/platform/include/SDL3/SDL_pen.h +198 -0
  59. data/assets/platform/include/SDL3/SDL_pixels.h +1441 -0
  60. data/assets/{include/SDL2/SDL_test_log.h → platform/include/SDL3/SDL_platform.h} +25 -26
  61. data/assets/platform/include/SDL3/SDL_platform_defines.h +497 -0
  62. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_power.h +40 -20
  63. data/assets/platform/include/SDL3/SDL_process.h +441 -0
  64. data/assets/platform/include/SDL3/SDL_properties.h +572 -0
  65. data/assets/platform/include/SDL3/SDL_rect.h +528 -0
  66. data/assets/platform/include/SDL3/SDL_render.h +3028 -0
  67. data/assets/platform/include/SDL3/SDL_revision.h +59 -0
  68. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_scancode.h +59 -68
  69. data/assets/platform/include/SDL3/SDL_sensor.h +321 -0
  70. data/assets/platform/include/SDL3/SDL_stdinc.h +6186 -0
  71. data/assets/platform/include/SDL3/SDL_storage.h +686 -0
  72. data/assets/platform/include/SDL3/SDL_surface.h +1769 -0
  73. data/assets/platform/include/SDL3/SDL_system.h +840 -0
  74. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test.h +16 -22
  75. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_assert.h +27 -34
  76. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_common.h +109 -52
  77. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_compare.h +22 -14
  78. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_crc32.h +27 -30
  79. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_font.h +50 -49
  80. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_fuzzer.h +64 -79
  81. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_harness.h +47 -30
  82. data/assets/platform/include/SDL3/SDL_test_log.h +83 -0
  83. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_md5.h +21 -28
  84. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_memory.h +19 -16
  85. data/assets/platform/include/SDL3/SDL_thread.h +602 -0
  86. data/assets/platform/include/SDL3/SDL_time.h +249 -0
  87. data/assets/platform/include/SDL3/SDL_timer.h +454 -0
  88. data/assets/platform/include/SDL3/SDL_touch.h +184 -0
  89. data/assets/platform/include/SDL3/SDL_tray.h +544 -0
  90. data/assets/platform/include/SDL3/SDL_version.h +198 -0
  91. data/assets/platform/include/SDL3/SDL_video.h +3497 -0
  92. data/assets/platform/include/SDL3/SDL_vulkan.h +287 -0
  93. data/assets/platform/include/SDL3_image/SDL_image.h +3328 -0
  94. data/assets/platform/include/SDL3_mixer/SDL_mixer.h +3369 -0
  95. data/assets/platform/include/SDL3_ttf/SDL_textengine.h +181 -0
  96. data/assets/platform/include/SDL3_ttf/SDL_ttf.h +2833 -0
  97. data/assets/{include → platform/include}/mrbconf.h +42 -31
  98. data/assets/{include → platform/include}/mruby/array.h +3 -4
  99. data/assets/{include → platform/include}/mruby/boxing_nan.h +10 -0
  100. data/assets/platform/include/mruby/boxing_no.h +59 -0
  101. data/assets/{include → platform/include}/mruby/boxing_word.h +72 -26
  102. data/assets/platform/include/mruby/class.h +157 -0
  103. data/assets/{include → platform/include}/mruby/common.h +30 -1
  104. data/assets/{include → platform/include}/mruby/compile.h +52 -74
  105. data/assets/{include → platform/include}/mruby/data.h +2 -2
  106. data/assets/{include → platform/include}/mruby/debug.h +12 -5
  107. data/assets/{include → platform/include}/mruby/dump.h +7 -9
  108. data/assets/{include → platform/include}/mruby/endian.h +1 -1
  109. data/assets/platform/include/mruby/error.h +173 -0
  110. data/assets/platform/include/mruby/gc.h +79 -0
  111. data/assets/{include → platform/include}/mruby/hash.h +1 -7
  112. data/assets/platform/include/mruby/internal.h +282 -0
  113. data/assets/platform/include/mruby/irep.h +143 -0
  114. data/assets/{include → platform/include}/mruby/istruct.h +1 -1
  115. data/assets/platform/include/mruby/khash.h +455 -0
  116. data/assets/platform/include/mruby/mempool.h +19 -0
  117. data/assets/{include → platform/include}/mruby/numeric.h +7 -10
  118. data/assets/platform/include/mruby/object.h +51 -0
  119. data/assets/{include → platform/include}/mruby/opcode.h +5 -5
  120. data/assets/{include → platform/include}/mruby/ops.h +19 -6
  121. data/assets/platform/include/mruby/presym/id.h +1447 -0
  122. data/assets/{include → platform/include}/mruby/presym/scanning.h +10 -7
  123. data/assets/platform/include/mruby/presym/table.h +2893 -0
  124. data/assets/platform/include/mruby/presym.h +65 -0
  125. data/assets/platform/include/mruby/proc.h +184 -0
  126. data/assets/{include → platform/include}/mruby/range.h +0 -2
  127. data/assets/{include → platform/include}/mruby/string.h +33 -53
  128. data/assets/platform/include/mruby/throw.h +81 -0
  129. data/assets/{include → platform/include}/mruby/value.h +64 -29
  130. data/assets/{include → platform/include}/mruby/variable.h +6 -23
  131. data/assets/{include → platform/include}/mruby/version.h +7 -7
  132. data/assets/{include → platform/include}/mruby.h +238 -116
  133. data/assets/platform/macos-arm64/bin/mrbc +0 -0
  134. data/assets/platform/macos-arm64/lib/libSDL3.a +0 -0
  135. data/assets/platform/macos-arm64/lib/libSDL3_image.a +0 -0
  136. data/assets/platform/macos-arm64/lib/libSDL3_mixer.a +0 -0
  137. data/assets/platform/macos-arm64/lib/libSDL3_ttf.a +0 -0
  138. data/assets/platform/macos-arm64/lib/libmruby.a +0 -0
  139. data/assets/platform/wasm/lib/libFLAC.a +0 -0
  140. data/assets/platform/wasm/lib/libSDL3.a +0 -0
  141. data/assets/platform/wasm/lib/libSDL3_image.a +0 -0
  142. data/assets/platform/wasm/lib/libSDL3_mixer.a +0 -0
  143. data/assets/platform/wasm/lib/libSDL3_ttf.a +0 -0
  144. data/assets/platform/wasm/lib/libfreetype.a +0 -0
  145. data/assets/platform/wasm/lib/libharfbuzz.a +0 -0
  146. data/assets/platform/wasm/lib/libmruby.a +0 -0
  147. data/assets/platform/wasm/lib/libogg.a +0 -0
  148. data/assets/platform/wasm/lib/libplutosvg.a +0 -0
  149. data/assets/platform/wasm/lib/libplutovg.a +0 -0
  150. data/assets/platform/wasm/lib/libpng.a +0 -0
  151. data/assets/platform/wasm/lib/libpng16.a +0 -0
  152. data/assets/platform/wasm/lib/libvorbis.a +0 -0
  153. data/assets/platform/wasm/lib/libvorbisfile.a +0 -0
  154. data/assets/platform/wasm/lib/libzlibstatic.a +0 -0
  155. data/assets/platform/windows-arm64-mingw-ucrt/bin/mrbc.exe +0 -0
  156. data/assets/platform/windows-arm64-mingw-ucrt/lib/libSDL3.a +0 -0
  157. data/assets/platform/windows-arm64-mingw-ucrt/lib/libSDL3_image.a +0 -0
  158. data/assets/platform/windows-arm64-mingw-ucrt/lib/libSDL3_mixer.a +0 -0
  159. data/assets/platform/windows-arm64-mingw-ucrt/lib/libSDL3_ttf.a +0 -0
  160. data/assets/platform/windows-arm64-mingw-ucrt/lib/libmruby.a +0 -0
  161. data/assets/platform/windows-x86_64-mingw-ucrt/bin/mrbc.exe +0 -0
  162. data/assets/platform/windows-x86_64-mingw-ucrt/lib/libSDL3.a +0 -0
  163. data/assets/platform/windows-x86_64-mingw-ucrt/lib/libSDL3_image.a +0 -0
  164. data/assets/platform/windows-x86_64-mingw-ucrt/lib/libSDL3_mixer.a +0 -0
  165. data/assets/platform/windows-x86_64-mingw-ucrt/lib/libSDL3_ttf.a +0 -0
  166. data/assets/platform/windows-x86_64-mingw-ucrt/lib/libmruby.a +0 -0
  167. data/assets/resources/fonts/outfit/OFL.txt +93 -0
  168. data/assets/resources/fonts/outfit/outfit.ttf +0 -0
  169. data/assets/resources/fonts/roboto_mono/OFL.txt +91 -0
  170. data/assets/resources/fonts/roboto_mono/roboto_mono.ttf +0 -0
  171. data/assets/resources/icons/icon.icns +0 -0
  172. data/assets/resources/icons/icon.png +0 -0
  173. data/assets/resources/spritesheets/License.txt +28 -0
  174. data/assets/resources/spritesheets/spritesheet-backgrounds.png +0 -0
  175. data/assets/resources/spritesheets/spritesheet-backgrounds.xml +16 -0
  176. data/assets/resources/spritesheets/spritesheet-characters.png +0 -0
  177. data/assets/resources/spritesheets/spritesheet-characters.xml +47 -0
  178. data/assets/resources/spritesheets/spritesheet-enemies.png +0 -0
  179. data/assets/resources/spritesheets/spritesheet-enemies.xml +62 -0
  180. data/assets/resources/spritesheets/spritesheet-tiles.png +0 -0
  181. data/assets/resources/spritesheets/spritesheet-tiles.xml +316 -0
  182. data/assets/{wasm → resources/web}/template.html +1 -1
  183. data/assets/target.rb +131 -0
  184. data/bin/ruby2d +281 -82
  185. data/examples/astar.rb +269 -0
  186. data/examples/asteroids.rb +403 -0
  187. data/examples/bezier_editor.rb +96 -0
  188. data/examples/boids.rb +191 -0
  189. data/examples/bouncing_balls.rb +119 -0
  190. data/examples/breakout.rb +186 -0
  191. data/examples/constellations.rb +100 -0
  192. data/examples/dashboard.rb +133 -0
  193. data/examples/double_pendulum.rb +254 -0
  194. data/examples/falling_sand.rb +291 -0
  195. data/examples/fireworks.rb +110 -0
  196. data/examples/fluid_dynamics.rb +340 -0
  197. data/examples/fourier_epicycles.rb +142 -0
  198. data/examples/fractal_tree.rb +326 -0
  199. data/examples/game_of_life.rb +148 -0
  200. data/examples/gamepads.rb +333 -0
  201. data/examples/hill_driver.rb +613 -0
  202. data/examples/logo_animation.rb +251 -0
  203. data/examples/lorenz_attractor.rb +115 -0
  204. data/examples/mandelbrot.rb +207 -0
  205. data/examples/marching_squares.rb +200 -0
  206. data/examples/maze.rb +323 -0
  207. data/examples/nbody.rb +338 -0
  208. data/examples/outrun.rb +391 -0
  209. data/examples/pixel_paint.rb +313 -0
  210. data/examples/platformer.rb +335 -0
  211. data/examples/ray_casting_maze.rb +175 -0
  212. data/examples/shadow_casting.rb +151 -0
  213. data/examples/shape_recognizer.rb +908 -0
  214. data/examples/snake.rb +144 -0
  215. data/examples/sprite_sheets.rb +246 -0
  216. data/examples/swarm.rb +206 -0
  217. data/examples/tsp_annealing.rb +104 -0
  218. data/examples/ui_controls.rb +163 -0
  219. data/examples/wireframe_3d.rb +139 -0
  220. data/ext/ruby2d/audio.c +324 -0
  221. data/ext/ruby2d/canvas.c +1715 -494
  222. data/ext/ruby2d/ext.c +541 -0
  223. data/ext/ruby2d/extconf.rb +122 -145
  224. data/ext/ruby2d/font.c +566 -20
  225. data/ext/ruby2d/fps.c +92 -0
  226. data/ext/ruby2d/image.c +466 -41
  227. data/ext/ruby2d/ruby2d.c +374 -1890
  228. data/ext/ruby2d/ruby2d.h +840 -460
  229. data/ext/ruby2d/shapes.c +931 -101
  230. data/ext/ruby2d/text.c +586 -21
  231. data/ext/ruby2d/window.c +1693 -283
  232. data/lib/ruby2d/atlas_parser.rb +194 -0
  233. data/lib/ruby2d/audio.rb +73 -0
  234. data/lib/ruby2d/benchmark.rb +259 -0
  235. data/lib/ruby2d/bitmap_text.rb +155 -0
  236. data/lib/ruby2d/button.rb +402 -0
  237. data/lib/ruby2d/canvas.rb +703 -279
  238. data/lib/ruby2d/circle.rb +206 -29
  239. data/lib/ruby2d/cli/browser.rb +314 -0
  240. data/lib/ruby2d/cli/build.rb +471 -257
  241. data/lib/ruby2d/cli/colorize.rb +7 -5
  242. data/lib/ruby2d/cli/examples.rb +127 -0
  243. data/lib/ruby2d/cli/launch.rb +24 -39
  244. data/lib/ruby2d/cli/lib_files.rb +48 -0
  245. data/lib/ruby2d/cli/messages.rb +40 -0
  246. data/lib/ruby2d/cli/setup.rb +273 -0
  247. data/lib/ruby2d/cli/static_server.rb +160 -0
  248. data/lib/ruby2d/cli/usage.rb +255 -0
  249. data/lib/ruby2d/color.rb +191 -69
  250. data/lib/ruby2d/core.rb +37 -19
  251. data/lib/ruby2d/deps_help.rb +89 -0
  252. data/lib/ruby2d/dsl.rb +51 -12
  253. data/lib/ruby2d/ellipse.rb +228 -0
  254. data/lib/ruby2d/exceptions.rb +0 -2
  255. data/lib/ruby2d/font.rb +34 -74
  256. data/lib/ruby2d/gamepad.rb +323 -0
  257. data/lib/ruby2d/gem_paths.rb +19 -0
  258. data/lib/ruby2d/image.rb +155 -52
  259. data/lib/ruby2d/interactive.rb +103 -0
  260. data/lib/ruby2d/json_parser.rb +268 -0
  261. data/lib/ruby2d/line.rb +194 -85
  262. data/lib/ruby2d/mruby_compat.rb +12 -0
  263. data/lib/ruby2d/polygon.rb +297 -0
  264. data/lib/ruby2d/polyline.rb +368 -0
  265. data/lib/ruby2d/quad.rb +358 -94
  266. data/lib/ruby2d/rectangle.rb +77 -19
  267. data/lib/ruby2d/renderable.rb +411 -11
  268. data/lib/ruby2d/sprite.rb +471 -180
  269. data/lib/ruby2d/sprite_sheet.rb +64 -0
  270. data/lib/ruby2d/square.rb +29 -17
  271. data/lib/ruby2d/text.rb +196 -65
  272. data/lib/ruby2d/tileset.rb +139 -81
  273. data/lib/ruby2d/triangle.rb +324 -89
  274. data/lib/ruby2d/version.rb +1 -3
  275. data/lib/ruby2d/vertices.rb +62 -85
  276. data/lib/ruby2d/warnings.rb +29 -0
  277. data/lib/ruby2d/window/class_methods.rb +218 -0
  278. data/lib/ruby2d/window/gamepad_events.rb +141 -0
  279. data/lib/ruby2d/window/key_events.rb +74 -0
  280. data/lib/ruby2d/window/mouse_events.rb +171 -0
  281. data/lib/ruby2d/window/object_events.rb +168 -0
  282. data/lib/ruby2d/window.rb +632 -585
  283. data/lib/ruby2d.rb +14 -19
  284. metadata +275 -428
  285. data/assets/app.icns +0 -0
  286. data/assets/include/GLES2/gl2.h +0 -656
  287. data/assets/include/GLES2/gl2ext.h +0 -3949
  288. data/assets/include/GLES2/gl2ext_angle.h +0 -701
  289. data/assets/include/GLES2/gl2platform.h +0 -27
  290. data/assets/include/GLES3/gl3.h +0 -1192
  291. data/assets/include/GLES3/gl31.h +0 -1507
  292. data/assets/include/GLES3/gl32.h +0 -1808
  293. data/assets/include/GLES3/gl3platform.h +0 -27
  294. data/assets/include/KHR/khrplatform.h +0 -290
  295. data/assets/include/SDL2/SDL.h +0 -233
  296. data/assets/include/SDL2/SDL_assert.h +0 -326
  297. data/assets/include/SDL2/SDL_atomic.h +0 -415
  298. data/assets/include/SDL2/SDL_audio.h +0 -1500
  299. data/assets/include/SDL2/SDL_clipboard.h +0 -141
  300. data/assets/include/SDL2/SDL_config.h +0 -61
  301. data/assets/include/SDL2/SDL_config_android.h +0 -194
  302. data/assets/include/SDL2/SDL_config_emscripten.h +0 -218
  303. data/assets/include/SDL2/SDL_config_iphoneos.h +0 -217
  304. data/assets/include/SDL2/SDL_config_macosx.h +0 -277
  305. data/assets/include/SDL2/SDL_config_minimal.h +0 -95
  306. data/assets/include/SDL2/SDL_config_ngage.h +0 -89
  307. data/assets/include/SDL2/SDL_config_os2.h +0 -207
  308. data/assets/include/SDL2/SDL_config_pandora.h +0 -141
  309. data/assets/include/SDL2/SDL_config_windows.h +0 -331
  310. data/assets/include/SDL2/SDL_config_wingdk.h +0 -253
  311. data/assets/include/SDL2/SDL_config_winrt.h +0 -220
  312. data/assets/include/SDL2/SDL_config_xbox.h +0 -235
  313. data/assets/include/SDL2/SDL_cpuinfo.h +0 -594
  314. data/assets/include/SDL2/SDL_endian.h +0 -348
  315. data/assets/include/SDL2/SDL_error.h +0 -163
  316. data/assets/include/SDL2/SDL_events.h +0 -1166
  317. data/assets/include/SDL2/SDL_filesystem.h +0 -149
  318. data/assets/include/SDL2/SDL_gamecontroller.h +0 -1074
  319. data/assets/include/SDL2/SDL_gesture.h +0 -117
  320. data/assets/include/SDL2/SDL_guid.h +0 -100
  321. data/assets/include/SDL2/SDL_haptic.h +0 -1341
  322. data/assets/include/SDL2/SDL_hidapi.h +0 -451
  323. data/assets/include/SDL2/SDL_hints.h +0 -2569
  324. data/assets/include/SDL2/SDL_image.h +0 -2173
  325. data/assets/include/SDL2/SDL_joystick.h +0 -1066
  326. data/assets/include/SDL2/SDL_keyboard.h +0 -353
  327. data/assets/include/SDL2/SDL_keycode.h +0 -358
  328. data/assets/include/SDL2/SDL_loadso.h +0 -115
  329. data/assets/include/SDL2/SDL_log.h +0 -404
  330. data/assets/include/SDL2/SDL_main.h +0 -275
  331. data/assets/include/SDL2/SDL_mixer.h +0 -2784
  332. data/assets/include/SDL2/SDL_mouse.h +0 -465
  333. data/assets/include/SDL2/SDL_mutex.h +0 -471
  334. data/assets/include/SDL2/SDL_name.h +0 -33
  335. data/assets/include/SDL2/SDL_pixels.h +0 -644
  336. data/assets/include/SDL2/SDL_platform.h +0 -261
  337. data/assets/include/SDL2/SDL_quit.h +0 -58
  338. data/assets/include/SDL2/SDL_rect.h +0 -376
  339. data/assets/include/SDL2/SDL_render.h +0 -1919
  340. data/assets/include/SDL2/SDL_revision.h +0 -6
  341. data/assets/include/SDL2/SDL_rwops.h +0 -841
  342. data/assets/include/SDL2/SDL_sensor.h +0 -322
  343. data/assets/include/SDL2/SDL_shape.h +0 -155
  344. data/assets/include/SDL2/SDL_stdinc.h +0 -830
  345. data/assets/include/SDL2/SDL_surface.h +0 -997
  346. data/assets/include/SDL2/SDL_system.h +0 -623
  347. data/assets/include/SDL2/SDL_syswm.h +0 -386
  348. data/assets/include/SDL2/SDL_test_images.h +0 -78
  349. data/assets/include/SDL2/SDL_test_random.h +0 -115
  350. data/assets/include/SDL2/SDL_thread.h +0 -464
  351. data/assets/include/SDL2/SDL_timer.h +0 -222
  352. data/assets/include/SDL2/SDL_touch.h +0 -150
  353. data/assets/include/SDL2/SDL_ttf.h +0 -2316
  354. data/assets/include/SDL2/SDL_types.h +0 -29
  355. data/assets/include/SDL2/SDL_version.h +0 -204
  356. data/assets/include/SDL2/SDL_video.h +0 -2150
  357. data/assets/include/SDL2/SDL_vulkan.h +0 -215
  358. data/assets/include/SDL2/begin_code.h +0 -187
  359. data/assets/include/mruby/boxing_no.h +0 -58
  360. data/assets/include/mruby/class.h +0 -108
  361. data/assets/include/mruby/error.h +0 -147
  362. data/assets/include/mruby/gc.h +0 -94
  363. data/assets/include/mruby/irep.h +0 -147
  364. data/assets/include/mruby/khash.h +0 -284
  365. data/assets/include/mruby/object.h +0 -43
  366. data/assets/include/mruby/presym/disable.h +0 -70
  367. data/assets/include/mruby/presym/enable.h +0 -37
  368. data/assets/include/mruby/presym.h +0 -40
  369. data/assets/include/mruby/proc.h +0 -211
  370. data/assets/include/mruby/throw.h +0 -66
  371. data/assets/macos/universal/bin/mrbc +0 -0
  372. data/assets/macos/universal/lib/libFLAC.a +0 -0
  373. data/assets/macos/universal/lib/libSDL2.a +0 -0
  374. data/assets/macos/universal/lib/libSDL2_image.a +0 -0
  375. data/assets/macos/universal/lib/libSDL2_mixer.a +0 -0
  376. data/assets/macos/universal/lib/libSDL2_ttf.a +0 -0
  377. data/assets/macos/universal/lib/libavif.a +0 -0
  378. data/assets/macos/universal/lib/libbrotlicommon-static.a +0 -0
  379. data/assets/macos/universal/lib/libbrotlidec-static.a +0 -0
  380. data/assets/macos/universal/lib/libfreetype.a +0 -0
  381. data/assets/macos/universal/lib/libgraphite2.a +0 -0
  382. data/assets/macos/universal/lib/libharfbuzz.a +0 -0
  383. data/assets/macos/universal/lib/libhwy.a +0 -0
  384. data/assets/macos/universal/lib/libjpeg.a +0 -0
  385. data/assets/macos/universal/lib/libjxl.a +0 -0
  386. data/assets/macos/universal/lib/libmodplug.a +0 -0
  387. data/assets/macos/universal/lib/libmpg123.a +0 -0
  388. data/assets/macos/universal/lib/libmruby.a +0 -0
  389. data/assets/macos/universal/lib/libogg.a +0 -0
  390. data/assets/macos/universal/lib/libpng.a +0 -0
  391. data/assets/macos/universal/lib/libtiff.a +0 -0
  392. data/assets/macos/universal/lib/libvorbis.a +0 -0
  393. data/assets/macos/universal/lib/libvorbisfile.a +0 -0
  394. data/assets/macos/universal/lib/libwebp.a +0 -0
  395. data/assets/macos/universal/lib/libzstd.a +0 -0
  396. data/assets/test_media/README.md +0 -3
  397. data/assets/test_media/bitstream_vera/COPYRIGHT.txt +0 -124
  398. data/assets/test_media/bitstream_vera/vera.ttf +0 -0
  399. data/assets/test_media/boom.png +0 -0
  400. data/assets/test_media/coin.png +0 -0
  401. data/assets/test_media/colors.png +0 -0
  402. data/assets/test_media/controller.png +0 -0
  403. data/assets/test_media/dial.wav +0 -0
  404. data/assets/test_media/hero.png +0 -0
  405. data/assets/test_media/image.bmp +0 -0
  406. data/assets/test_media/image.jpg +0 -0
  407. data/assets/test_media/image.png +0 -0
  408. data/assets/test_media/music.flac +0 -0
  409. data/assets/test_media/music.mp3 +0 -0
  410. data/assets/test_media/music.ogg +0 -0
  411. data/assets/test_media/music.wav +0 -0
  412. data/assets/test_media/originals/boom.pxm +0 -0
  413. data/assets/test_media/originals/coin.pxm +0 -0
  414. data/assets/test_media/originals/controller.sketch +0 -0
  415. data/assets/test_media/originals/hero.pxm +0 -0
  416. data/assets/test_media/originals/image.pxm +0 -0
  417. data/assets/test_media/originals/music.caf +0 -0
  418. data/assets/test_media/originals/texture_atlas.pxm +0 -0
  419. data/assets/test_media/rondo_alla_turka.ogg +0 -0
  420. data/assets/test_media/sound.flac +0 -0
  421. data/assets/test_media/sound.mp3 +0 -0
  422. data/assets/test_media/sound.ogg +0 -0
  423. data/assets/test_media/sound.wav +0 -0
  424. data/assets/test_media/sprite_sheet.png +0 -0
  425. data/assets/test_media/texture_atlas.png +0 -0
  426. data/assets/wasm/libmruby.a +0 -0
  427. data/assets/windows/mingw-w64-ucrt-x86_64/bin/mrbc.exe +0 -0
  428. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libFLAC.a +0 -0
  429. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libLerc.a +0 -0
  430. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libSDL2.a +0 -0
  431. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libSDL2_image.a +0 -0
  432. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libSDL2_mixer.a +0 -0
  433. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libSDL2_ttf.a +0 -0
  434. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libbrotlicommon.a +0 -0
  435. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libbrotlidec.a +0 -0
  436. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libbz2.a +0 -0
  437. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libdeflate.a +0 -0
  438. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libfreetype.a +0 -0
  439. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libglew32.a +0 -0
  440. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libgraphite2.a +0 -0
  441. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libharfbuzz.a +0 -0
  442. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libhwy.a +0 -0
  443. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libjbig.a +0 -0
  444. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libjpeg.a +0 -0
  445. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libjxl.a +0 -0
  446. data/assets/windows/mingw-w64-ucrt-x86_64/lib/liblzma.a +0 -0
  447. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libmodplug.a +0 -0
  448. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libmpg123.a +0 -0
  449. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libmruby.a +0 -0
  450. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libogg.a +0 -0
  451. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libopus.a +0 -0
  452. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libopusfile.a +0 -0
  453. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libpng.a +0 -0
  454. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libsndfile.a +0 -0
  455. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libssp.a +0 -1
  456. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libstdc++.a +0 -0
  457. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libtiff.a +0 -0
  458. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libvorbis.a +0 -0
  459. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libvorbisfile.a +0 -0
  460. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libwebp.a +0 -0
  461. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libz.a +0 -0
  462. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libzstd.a +0 -0
  463. data/assets/windows/mingw-w64-x86_64/bin/mrbc.exe +0 -0
  464. data/assets/windows/mingw-w64-x86_64/lib/libFLAC.a +0 -0
  465. data/assets/windows/mingw-w64-x86_64/lib/libLerc.a +0 -0
  466. data/assets/windows/mingw-w64-x86_64/lib/libSDL2.a +0 -0
  467. data/assets/windows/mingw-w64-x86_64/lib/libSDL2_image.a +0 -0
  468. data/assets/windows/mingw-w64-x86_64/lib/libSDL2_mixer.a +0 -0
  469. data/assets/windows/mingw-w64-x86_64/lib/libSDL2_ttf.a +0 -0
  470. data/assets/windows/mingw-w64-x86_64/lib/libbrotlicommon.a +0 -0
  471. data/assets/windows/mingw-w64-x86_64/lib/libbrotlidec.a +0 -0
  472. data/assets/windows/mingw-w64-x86_64/lib/libbz2.a +0 -0
  473. data/assets/windows/mingw-w64-x86_64/lib/libdeflate.a +0 -0
  474. data/assets/windows/mingw-w64-x86_64/lib/libfreetype.a +0 -0
  475. data/assets/windows/mingw-w64-x86_64/lib/libglew32.a +0 -0
  476. data/assets/windows/mingw-w64-x86_64/lib/libgraphite2.a +0 -0
  477. data/assets/windows/mingw-w64-x86_64/lib/libharfbuzz.a +0 -0
  478. data/assets/windows/mingw-w64-x86_64/lib/libhwy.a +0 -0
  479. data/assets/windows/mingw-w64-x86_64/lib/libjbig.a +0 -0
  480. data/assets/windows/mingw-w64-x86_64/lib/libjpeg.a +0 -0
  481. data/assets/windows/mingw-w64-x86_64/lib/libjxl.a +0 -0
  482. data/assets/windows/mingw-w64-x86_64/lib/liblzma.a +0 -0
  483. data/assets/windows/mingw-w64-x86_64/lib/libmodplug.a +0 -0
  484. data/assets/windows/mingw-w64-x86_64/lib/libmpg123.a +0 -0
  485. data/assets/windows/mingw-w64-x86_64/lib/libmruby.a +0 -0
  486. data/assets/windows/mingw-w64-x86_64/lib/libogg.a +0 -0
  487. data/assets/windows/mingw-w64-x86_64/lib/libopus.a +0 -0
  488. data/assets/windows/mingw-w64-x86_64/lib/libopusfile.a +0 -0
  489. data/assets/windows/mingw-w64-x86_64/lib/libpng.a +0 -0
  490. data/assets/windows/mingw-w64-x86_64/lib/libsndfile.a +0 -0
  491. data/assets/windows/mingw-w64-x86_64/lib/libssp.a +0 -1
  492. data/assets/windows/mingw-w64-x86_64/lib/libstdc++.a +0 -0
  493. data/assets/windows/mingw-w64-x86_64/lib/libtiff.a +0 -0
  494. data/assets/windows/mingw-w64-x86_64/lib/libvorbis.a +0 -0
  495. data/assets/windows/mingw-w64-x86_64/lib/libvorbisfile.a +0 -0
  496. data/assets/windows/mingw-w64-x86_64/lib/libwebp.a +0 -0
  497. data/assets/windows/mingw-w64-x86_64/lib/libz.a +0 -0
  498. data/assets/windows/mingw-w64-x86_64/lib/libzstd.a +0 -0
  499. data/assets/xcode/ios/Assets.xcassets/AppIcon.appiconset/Contents.json +0 -98
  500. data/assets/xcode/ios/Assets.xcassets/Contents.json +0 -6
  501. data/assets/xcode/ios/Base.lproj/LaunchScreen.storyboard +0 -27
  502. data/assets/xcode/ios/Info.plist +0 -43
  503. data/assets/xcode/ios/MRuby.framework/Headers/mrbconf.h +0 -143
  504. data/assets/xcode/ios/MRuby.framework/Headers/mruby/array.h +0 -280
  505. data/assets/xcode/ios/MRuby.framework/Headers/mruby/boxing_nan.h +0 -102
  506. data/assets/xcode/ios/MRuby.framework/Headers/mruby/boxing_no.h +0 -56
  507. data/assets/xcode/ios/MRuby.framework/Headers/mruby/boxing_word.h +0 -144
  508. data/assets/xcode/ios/MRuby.framework/Headers/mruby/class.h +0 -97
  509. data/assets/xcode/ios/MRuby.framework/Headers/mruby/common.h +0 -77
  510. data/assets/xcode/ios/MRuby.framework/Headers/mruby/compile.h +0 -195
  511. data/assets/xcode/ios/MRuby.framework/Headers/mruby/data.h +0 -75
  512. data/assets/xcode/ios/MRuby.framework/Headers/mruby/debug.h +0 -67
  513. data/assets/xcode/ios/MRuby.framework/Headers/mruby/dump.h +0 -196
  514. data/assets/xcode/ios/MRuby.framework/Headers/mruby/error.h +0 -75
  515. data/assets/xcode/ios/MRuby.framework/Headers/mruby/gc.h +0 -91
  516. data/assets/xcode/ios/MRuby.framework/Headers/mruby/hash.h +0 -215
  517. data/assets/xcode/ios/MRuby.framework/Headers/mruby/irep.h +0 -75
  518. data/assets/xcode/ios/MRuby.framework/Headers/mruby/istruct.h +0 -47
  519. data/assets/xcode/ios/MRuby.framework/Headers/mruby/khash.h +0 -274
  520. data/assets/xcode/ios/MRuby.framework/Headers/mruby/numeric.h +0 -161
  521. data/assets/xcode/ios/MRuby.framework/Headers/mruby/object.h +0 -44
  522. data/assets/xcode/ios/MRuby.framework/Headers/mruby/opcode.h +0 -69
  523. data/assets/xcode/ios/MRuby.framework/Headers/mruby/ops.h +0 -117
  524. data/assets/xcode/ios/MRuby.framework/Headers/mruby/proc.h +0 -131
  525. data/assets/xcode/ios/MRuby.framework/Headers/mruby/range.h +0 -49
  526. data/assets/xcode/ios/MRuby.framework/Headers/mruby/re.h +0 -16
  527. data/assets/xcode/ios/MRuby.framework/Headers/mruby/string.h +0 -444
  528. data/assets/xcode/ios/MRuby.framework/Headers/mruby/throw.h +0 -55
  529. data/assets/xcode/ios/MRuby.framework/Headers/mruby/value.h +0 -309
  530. data/assets/xcode/ios/MRuby.framework/Headers/mruby/variable.h +0 -136
  531. data/assets/xcode/ios/MRuby.framework/Headers/mruby/version.h +0 -110
  532. data/assets/xcode/ios/MRuby.framework/Headers/mruby.h +0 -1282
  533. data/assets/xcode/ios/MRuby.framework/Info.plist +0 -20
  534. data/assets/xcode/ios/MRuby.framework/MRuby +0 -0
  535. data/assets/xcode/ios/MyApp.xcodeproj/project.pbxproj +0 -368
  536. data/assets/xcode/ios/MyApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
  537. data/assets/xcode/ios/MyApp.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
  538. data/assets/xcode/ios/MyApp.xcodeproj/project.xcworkspace/xcshareddata/MyApp.xcscmblueprint +0 -30
  539. data/assets/xcode/ios/main.c +0 -1
  540. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Back.imagestacklayer/Content.imageset/Contents.json +0 -16
  541. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Back.imagestacklayer/Contents.json +0 -6
  542. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Contents.json +0 -17
  543. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Front.imagestacklayer/Content.imageset/Contents.json +0 -16
  544. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Front.imagestacklayer/Contents.json +0 -6
  545. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json +0 -16
  546. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Middle.imagestacklayer/Contents.json +0 -6
  547. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Back.imagestacklayer/Content.imageset/Contents.json +0 -16
  548. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Back.imagestacklayer/Contents.json +0 -6
  549. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Contents.json +0 -17
  550. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Front.imagestacklayer/Content.imageset/Contents.json +0 -16
  551. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Front.imagestacklayer/Contents.json +0 -6
  552. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json +0 -16
  553. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Middle.imagestacklayer/Contents.json +0 -6
  554. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Contents.json +0 -32
  555. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image Wide.imageset/Contents.json +0 -16
  556. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image.imageset/Contents.json +0 -16
  557. data/assets/xcode/tvos/Assets.xcassets/Contents.json +0 -6
  558. data/assets/xcode/tvos/Assets.xcassets/LaunchImage.launchimage/Contents.json +0 -22
  559. data/assets/xcode/tvos/Info.plist +0 -30
  560. data/assets/xcode/tvos/MRuby.framework/Headers/mrbconf.h +0 -143
  561. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/array.h +0 -280
  562. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/boxing_nan.h +0 -102
  563. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/boxing_no.h +0 -56
  564. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/boxing_word.h +0 -144
  565. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/class.h +0 -97
  566. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/common.h +0 -77
  567. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/compile.h +0 -195
  568. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/data.h +0 -75
  569. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/debug.h +0 -67
  570. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/dump.h +0 -196
  571. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/error.h +0 -75
  572. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/gc.h +0 -91
  573. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/hash.h +0 -215
  574. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/irep.h +0 -75
  575. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/istruct.h +0 -47
  576. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/khash.h +0 -274
  577. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/numeric.h +0 -161
  578. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/object.h +0 -44
  579. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/opcode.h +0 -69
  580. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/ops.h +0 -117
  581. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/proc.h +0 -131
  582. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/range.h +0 -49
  583. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/re.h +0 -16
  584. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/string.h +0 -444
  585. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/throw.h +0 -55
  586. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/value.h +0 -309
  587. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/variable.h +0 -136
  588. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/version.h +0 -110
  589. data/assets/xcode/tvos/MRuby.framework/Headers/mruby.h +0 -1282
  590. data/assets/xcode/tvos/MRuby.framework/Info.plist +0 -20
  591. data/assets/xcode/tvos/MRuby.framework/MRuby +0 -0
  592. data/assets/xcode/tvos/MyApp.xcodeproj/project.pbxproj +0 -350
  593. data/assets/xcode/tvos/MyApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
  594. data/assets/xcode/tvos/MyApp.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
  595. data/assets/xcode/tvos/MyApp.xcodeproj/project.xcworkspace/xcshareddata/MyApp.xcscmblueprint +0 -30
  596. data/assets/xcode/tvos/main.c +0 -1
  597. data/ext/ruby2d/common.c +0 -185
  598. data/ext/ruby2d/controllers.c +0 -110
  599. data/ext/ruby2d/gl.c +0 -398
  600. data/ext/ruby2d/gl2.c +0 -86
  601. data/ext/ruby2d/gl3.c +0 -304
  602. data/ext/ruby2d/gles.c +0 -302
  603. data/ext/ruby2d/input.c +0 -48
  604. data/ext/ruby2d/music.c +0 -127
  605. data/ext/ruby2d/sound.c +0 -132
  606. data/lib/ruby2d/cli/console.rb +0 -65
  607. data/lib/ruby2d/cli/enable_console.rb +0 -7
  608. data/lib/ruby2d/cli/platform.rb +0 -17
  609. data/lib/ruby2d/music.rb +0 -77
  610. data/lib/ruby2d/pixel.rb +0 -18
  611. data/lib/ruby2d/pixmap.rb +0 -39
  612. data/lib/ruby2d/pixmap_atlas.rb +0 -56
  613. data/lib/ruby2d/sound.rb +0 -61
  614. data/lib/ruby2d/texture.rb +0 -38
  615. /data/assets/{include/SDL2 → platform/include/SDL3}/SDL_opengles2_gl2.h +0 -0
  616. /data/assets/{include/SDL2 → platform/include/SDL3}/SDL_opengles2_gl2ext.h +0 -0
  617. /data/assets/{include/SDL2 → platform/include/SDL3}/SDL_opengles2_gl2platform.h +0 -0
  618. /data/assets/{include/SDL2 → platform/include/SDL3}/SDL_opengles2_khrplatform.h +0 -0
  619. /data/assets/{include → platform/include}/mruby/re.h +0 -0
@@ -1,5 +1,3 @@
1
- # frozen_string_literal: true
2
-
3
1
  # Ruby2D::Triangle
4
2
 
5
3
  module Ruby2D
@@ -9,22 +7,65 @@ module Ruby2D
9
7
 
10
8
  attr_accessor :x1, :y1,
11
9
  :x2, :y2,
12
- :x3, :y3
13
- attr_reader :color
14
-
15
- # Create a triangle
16
- # @param x1 [Numeric]
17
- # @param y1 [Numeric]
18
- # @param x2 [Numeric]
19
- # @param y2 [Numeric]
20
- # @param x3 [Numeric]
21
- # @param y3 [Numeric]
22
- # @param z [Numeric]
23
- # @param color [String, Array] A single colour or an array of exactly 3 colours
24
- # @param opacity [Numeric] Opacity of the image when rendering
25
- # @raise [ArgumentError] if an array of colours does not have 3 entries
10
+ :x3, :y3,
11
+ :rotate,
12
+ :fill, :stroke_width
13
+ attr_reader :color, :stroke_color
14
+ alias_method :stroke_colour, :stroke_color
15
+
16
+ # The x coordinate of the centroid
17
+ def x
18
+ (@x1 + @x2 + @x3) / 3.0
19
+ end
20
+
21
+ # The y coordinate of the centroid
22
+ def y
23
+ (@y1 + @y2 + @y3) / 3.0
24
+ end
25
+
26
+ # Set the x coordinate of the centroid, translating all vertices
27
+ def x=(new_x)
28
+ _require_numeric_position(:x, new_x)
29
+ dx = new_x - x
30
+ @x1 += dx
31
+ @x2 += dx
32
+ @x3 += dx
33
+ end
34
+
35
+ # Set the y coordinate of the centroid, translating all vertices
36
+ def y=(new_y)
37
+ _require_numeric_position(:y, new_y)
38
+ dy = new_y - y
39
+ @y1 += dy
40
+ @y2 += dy
41
+ @y3 += dy
42
+ end
43
+
44
+ # Bounding-box width and height (extent across the three vertices)
45
+ def width
46
+ xs = [@x1, @x2, @x3]
47
+ xs.max - xs.min
48
+ end
49
+
50
+ def height
51
+ ys = [@y1, @y2, @y3]
52
+ ys.max - ys.min
53
+ end
54
+
55
+ # Create a triangle. Specify vertices via `points:` or via `x1:`/`y1:`/...
56
+ # `points:` takes precedence if both are given.
26
57
  def initialize(x1: 50, y1: 0, x2: 100, y2: 100, x3: 0, y3: 100,
27
- z: 0, color: 'white', colour: nil, opacity: nil)
58
+ points: nil,
59
+ z: 0, rotate: 0, rx: nil, ry: nil,
60
+ color: nil, colour: nil, opacity: nil,
61
+ fill: true, stroke_width: 0, stroke_color: nil, stroke_colour: nil,
62
+ add: true, visible: true)
63
+ if points
64
+ Triangle.send(:validate_points, points)
65
+ x1, y1 = points[0]
66
+ x2, y2 = points[1]
67
+ x3, y3 = points[2]
68
+ end
28
69
  @x1 = x1
29
70
  @y1 = y1
30
71
  @x2 = x2
@@ -32,14 +73,32 @@ module Ruby2D
32
73
  @x3 = x3
33
74
  @y3 = y3
34
75
  @z = z
35
- self.color = color || colour
36
- self.color.opacity = opacity if opacity
37
- add
76
+ @rotate = rotate
77
+ @_user_rx = rx
78
+ @_user_ry = ry
79
+ self.color = color || colour || 'white'
80
+ self.opacity = opacity unless opacity.nil?
81
+ @fill = fill
82
+ @stroke_width = stroke_width
83
+ self.stroke_color = stroke_color || stroke_colour || (color || colour)
84
+ self.stroke_color.opacity = opacity unless opacity.nil?
85
+ @visible = visible
86
+ self.add if add
38
87
  end
39
88
 
40
- # Change the colour of the line
41
- # @param [String, Array] color A single colour or an array of exactly 3 colours
42
- # @raise [ArgumentError] if an array of colours does not have 3 entries
89
+ # Set the stroke color. Accepts a single color or a `Color::Set` of 3
90
+ # (one per vertex) interpolated around the perimeter. If nil, defaults to
91
+ # the fill color (preserving a per-vertex set when the fill is per-vertex).
92
+ def stroke_color=(c)
93
+ @stroke_color = Renderable.resolve_color_or_default(c, 3, label: self.class)
94
+ # A single stroke Color (not a per-vertex Set) takes the compact
95
+ # `stroke_triangle_uniform` fast path.
96
+ @_stroke_color_uniform = !@stroke_color.is_a?(Color::Set)
97
+ @_stroke_cc = nil
98
+ end
99
+ alias_method :stroke_colour=, :stroke_color=
100
+
101
+ # Set the color of the triangle
43
102
  def color=(color)
44
103
  # convert to Color or Color::Set
45
104
  color = Color.set(color)
@@ -51,81 +110,257 @@ module Ruby2D
51
110
  end
52
111
 
53
112
  @color = color # converted above
54
- invalidate_color_components
113
+ # A single Color (not a per-vertex Set) is uniform across all three
114
+ # vertices, so it takes the compact `draw_triangle_uniform` fast path.
115
+ @_color_uniform = !color.is_a?(Color::Set)
116
+ @_cc = nil # invalidate cached color components
55
117
  end
56
118
 
57
- # A point is inside a triangle if the area of 3 triangles, constructed from
58
- # triangle sides and the given point, is equal to the area of triangle.
119
+ # Check if the triangle contains the given point (inside the rendered fill)
59
120
  def contains?(x, y)
60
- self_area = triangle_area(@x1, @y1, @x2, @y2, @x3, @y3)
61
- questioned_area =
62
- triangle_area(@x1, @y1, @x2, @y2, x, y) +
63
- triangle_area(@x2, @y2, @x3, @y3, x, y) +
64
- triangle_area(@x3, @y3, @x1, @y1, x, y)
65
-
66
- questioned_area <= self_area
67
- end
68
-
69
- # Draw a triangle
70
- # @param x1 [Numeric]
71
- # @param y1 [Numeric]
72
- # @param x2 [Numeric]
73
- # @param y2 [Numeric]
74
- # @param x3 [Numeric]
75
- # @param y3 [Numeric]
76
- # @param z [Numeric]
77
- # @param color [Array<Array<float,float,float,float>>] An array of 3 arrays of colour components
78
- # (e.g. [[1.0, 0, 0, 1.0], ...])
79
- def self.draw(x1:, y1:, x2:, y2:, x3:, y3:, color:)
121
+ x, y = _unrotate(x, y)
122
+ _point_in_polygon?([@x1, @y1, @x2, @y2, @x3, @y3], x, y)
123
+ end
124
+
125
+ # Get the rotation center x coordinate
126
+ def rx
127
+ @_user_rx.nil? ? x : @_user_rx
128
+ end
129
+
130
+ # Get the rotation center y coordinate
131
+ def ry
132
+ @_user_ry.nil? ? y : @_user_ry
133
+ end
134
+
135
+ # Set the rotation center x coordinate
136
+ def rx=(val)
137
+ @_user_rx = val
138
+ end
139
+
140
+ # Set the rotation center y coordinate
141
+ def ry=(val)
142
+ @_user_ry = val
143
+ end
144
+
145
+ # Render a triangle without creating an instance
146
+ def self.render(x1: 50, y1: 0, x2: 100, y2: 100, x3: 0, y3: 100,
147
+ points: nil,
148
+ rotate: 0, rx: nil, ry: nil,
149
+ color: nil, colour: nil, opacity: nil,
150
+ fill: true, stroke_width: 0, stroke_color: nil, stroke_colour: nil)
80
151
  Window.render_ready_check
81
- ext_draw([
82
- x1, y1, *color[0], # splat the colour components
83
- x2, y2, *color[1],
84
- x3, y3, *color[2]
85
- ])
152
+ if points
153
+ validate_points(points)
154
+ x1, y1 = points[0]
155
+ x2, y2 = points[1]
156
+ x3, y3 = points[2]
157
+ end
158
+ fill_input = color || colour
159
+ # Resolve the fill color once. A single Color (not a per-vertex Set) with
160
+ # scalar opacity is uniform across all three vertices and draws via the
161
+ # compact `draw_triangle_uniform`; otherwise build the per-vertex color
162
+ # array from the already-resolved color (no second parse).
163
+ # A per-vertex color flattens straight to floats, skipping the
164
+ # `Color::Set` the general path builds — that allocates and parses one
165
+ # `Color` per vertex on every call. `resolved` stays nil in that case
166
+ # and the stroke below resolves for itself if it ends up needing one.
167
+ # The `is_a?(Array)` guard is inline so the common single-color call
168
+ # doesn't pay for a method call that would only decline.
169
+ c = fill_input.is_a?(Array) ? Renderable.flatten_per_vertex(fill_input, 3, opacity) : nil
170
+ if c
171
+ resolved = nil
172
+ uniform = false
173
+ else
174
+ resolved = Color.for_render(fill_input.nil? ? 'white' : fill_input)
175
+ uniform = !resolved.is_a?(Color::Set) && !opacity.is_a?(Array)
176
+ c = uniform ? nil : Renderable.flatten_resolved_color(resolved, 3, opacity, label: self)
177
+ end
178
+
179
+ # Rotation is inlined into locals (as in `render` below and Line#render):
180
+ # a helper returning the rotated points would allocate an array per
181
+ # rotated shape per frame — measured 2.9µs vs 1.8µs per quad on wasm.
182
+ if rotate != 0
183
+ cx = rx || ((x1 + x2 + x3) / 3.0)
184
+ cy = ry || ((y1 + y2 + y3) / 3.0)
185
+ rad = rotate * Math::PI / 180.0
186
+ sa = Math.sin(rad)
187
+ ca = Math.cos(rad)
188
+ dx = x1 - cx; dy = y1 - cy
189
+ x1 = dx * ca - dy * sa + cx; y1 = dx * sa + dy * ca + cy
190
+ dx = x2 - cx; dy = y2 - cy
191
+ x2 = dx * ca - dy * sa + cx; y2 = dx * sa + dy * ca + cy
192
+ dx = x3 - cx; dy = y3 - cy
193
+ x3 = dx * ca - dy * sa + cx; y3 = dx * sa + dy * ca + cy
194
+ end
195
+
196
+ if fill
197
+ if uniform
198
+ a = opacity || resolved.a
199
+ Ext.draw_triangle_uniform(x1, y1, x2, y2, x3, y3, resolved.r, resolved.g, resolved.b, a)
200
+ else
201
+ c1r, c1g, c1b, c1a, c2r, c2g, c2b, c2a, c3r, c3g, c3b, c3a = c
202
+ Ext.draw_triangle(
203
+ x1, y1, c1r, c1g, c1b, c1a,
204
+ x2, y2, c2r, c2g, c2b, c2a,
205
+ x3, y3, c3r, c3g, c3b, c3a
206
+ )
207
+ end
208
+ end
209
+
210
+ # Resolve the stroke color only when actually stroking. A single stroke
211
+ # color draws via the compact `stroke_triangle_uniform`; a per-vertex Set
212
+ # keeps the splatting path. When no explicit stroke is given the stroke
213
+ # reuses the already-resolved fill color. (An explicit stroke color is
214
+ # still validated at stroke_width 0 below, matching the instance constructor.)
215
+ if stroke_width > 0
216
+ stroke_input = stroke_color || stroke_colour || fill_input
217
+ sresolved = if !stroke_input.equal?(fill_input)
218
+ Color.for_render(stroke_input)
219
+ else
220
+ resolved || Color.for_render(fill_input.nil? ? 'white' : fill_input)
221
+ end
222
+ if !sresolved.is_a?(Color::Set) && !opacity.is_a?(Array)
223
+ sa = opacity || sresolved.a
224
+ Ext.stroke_triangle_uniform(x1, y1, x2, y2, x3, y3, stroke_width,
225
+ sresolved.r, sresolved.g, sresolved.b, sa)
226
+ else
227
+ s1r, s1g, s1b, s1a, s2r, s2g, s2b, s2a, s3r, s3g, s3b, s3a =
228
+ Renderable.flatten_resolved_color(sresolved, 3, opacity, label: self)
229
+ Ext.stroke_triangle(
230
+ x1, y1, x2, y2, x3, y3, stroke_width,
231
+ s1r, s1g, s1b, s1a,
232
+ s2r, s2g, s2b, s2a,
233
+ s3r, s3g, s3b, s3a
234
+ )
235
+ end
236
+ elsif stroke_color || stroke_colour
237
+ Renderable.flatten_color(stroke_color || stroke_colour, 3, opacity, label: self)
238
+ end
86
239
  end
87
240
 
88
241
  private
89
242
 
243
+ def self.validate_points(points)
244
+ raise ArgumentError, 'Triangle requires exactly 3 points' unless points.length == 3
245
+ raise ArgumentError, 'points must be an array of [x, y] pairs' \
246
+ unless points.all? { |p| p.is_a?(Array) && p.length == 2 }
247
+ end
248
+ private_class_method :validate_points
249
+
90
250
  def render
91
- color_comp_arrays = color_components
92
- self.class.ext_draw([
93
- @x1, @y1, *color_comp_arrays[0], # splat the colour components
94
- @x2, @y2, *color_comp_arrays[1],
95
- @x3, @y3, *color_comp_arrays[2]
96
- ])
97
- end
98
-
99
- def triangle_area(x1, y1, x2, y2, x3, y3)
100
- (x1 * y2 + x2 * y3 + x3 * y1 - x3 * y2 - x1 * y3 - x2 * y1).abs / 2
101
- end
102
-
103
- # Return colours as a memoized array of 3 x colour component arrays
104
- def color_components
105
- check_if_opacity_changed
106
- @color_components ||= if @color.is_a? Color::Set
107
- # Extract colour component arrays; see +def color=+ where colour set
108
- # size is enforced
109
- [
110
- @color[0].to_a, @color[1].to_a, @color[2].to_a
111
- ]
112
- else
113
- # All vertex colours are the same
114
- c_a = @color.to_a
115
- [
116
- c_a, c_a, c_a
117
- ]
118
- end
119
- end
120
-
121
- # Invalidate memoized colour components if opacity has been changed via +color=+
122
- def check_if_opacity_changed
123
- @color_components = nil if @color_components && @color_components.first[3] != @color.opacity
124
- end
125
-
126
- # Invalidate the memoized colour components. Called when Line's colour is changed
127
- def invalidate_color_components
128
- @color_components = nil
251
+ ensure_cc
252
+ ensure_scc if @stroke_width && @stroke_width > 0
253
+
254
+ x1, y1, x2, y2, x3, y3 = @x1, @y1, @x2, @y2, @x3, @y3
255
+
256
+ # Rotation inlined into locals — see the `Triangle.render` note.
257
+ if @rotate != 0
258
+ cx = rx; cy = ry
259
+ rad = @rotate * Math::PI / 180.0
260
+ sa = Math.sin(rad)
261
+ ca = Math.cos(rad)
262
+ dx = x1 - cx; dy = y1 - cy
263
+ x1 = dx * ca - dy * sa + cx; y1 = dx * sa + dy * ca + cy
264
+ dx = x2 - cx; dy = y2 - cy
265
+ x2 = dx * ca - dy * sa + cx; y2 = dx * sa + dy * ca + cy
266
+ dx = x3 - cx; dy = y3 - cy
267
+ x3 = dx * ca - dy * sa + cx; y3 = dx * sa + dy * ca + cy
268
+ end
269
+
270
+ if @fill
271
+ cc = @_cc
272
+ if @_color_uniform
273
+ Ext.draw_triangle_uniform(x1, y1, x2, y2, x3, y3, cc[0], cc[1], cc[2], cc[3])
274
+ else
275
+ Ext.draw_triangle(
276
+ x1, y1, cc[0], cc[1], cc[2], cc[3],
277
+ x2, y2, cc[4], cc[5], cc[6], cc[7],
278
+ x3, y3, cc[8], cc[9], cc[10], cc[11]
279
+ )
280
+ end
281
+ end
282
+
283
+ if @stroke_width && @stroke_width > 0
284
+ scc = @_stroke_cc
285
+ if @_stroke_color_uniform
286
+ Ext.stroke_triangle_uniform(x1, y1, x2, y2, x3, y3, @stroke_width, scc[0], scc[1], scc[2], scc[3])
287
+ else
288
+ Ext.stroke_triangle(
289
+ x1, y1, x2, y2, x3, y3, @stroke_width,
290
+ scc[0], scc[1], scc[2], scc[3],
291
+ scc[4], scc[5], scc[6], scc[7],
292
+ scc[8], scc[9], scc[10], scc[11]
293
+ )
294
+ end
295
+ end
296
+ end
297
+
298
+ # Scene-graph draw hook (see Renderable#_render_scene). Triangle's `render`
299
+ # is already zero-arg, so the hook is the same method under the scene name.
300
+ alias_method :_render_scene, :render
301
+ public :_render_scene
302
+
303
+ # Build/rebuild flat per-vertex stroke color cache (3 × rgba = 12 floats)
304
+ def ensure_scc
305
+ if @_stroke_color_uniform
306
+ c = @stroke_color
307
+ if @_stroke_cc.nil? || @_stroke_cc[0] != c.r || @_stroke_cc[1] != c.g || @_stroke_cc[2] != c.b || @_stroke_cc[3] != c.a
308
+ @_stroke_cc = [c.r, c.g, c.b, c.a]
309
+ end
310
+ elsif @_stroke_cc.nil? || !scc_matches?
311
+ @_stroke_cc = Array.new(12)
312
+ 3.times do |i|
313
+ c = @stroke_color.vertex(i)
314
+ @_stroke_cc[i * 4] = c.r
315
+ @_stroke_cc[i * 4 + 1] = c.g
316
+ @_stroke_cc[i * 4 + 2] = c.b
317
+ @_stroke_cc[i * 4 + 3] = c.a
318
+ end
319
+ end
320
+ end
321
+
322
+ def scc_matches?
323
+ 3.times do |i|
324
+ c = @stroke_color.vertex(i)
325
+ return false if @_stroke_cc[i * 4] != c.r
326
+ return false if @_stroke_cc[i * 4 + 1] != c.g
327
+ return false if @_stroke_cc[i * 4 + 2] != c.b
328
+ return false if @_stroke_cc[i * 4 + 3] != c.a
329
+ end
330
+ true
331
+ end
332
+
333
+ # Build/rebuild flat color cache for the native extension
334
+ def ensure_cc
335
+ # Solid fill: cache 4 floats and validity-check 4 comparisons (the
336
+ # per-frame check still catches in-place `color.opacity=` fades). Mirrors
337
+ # the Circle/Ellipse single-color cache.
338
+ if @_color_uniform
339
+ c = @color
340
+ if @_cc.nil? || @_cc[0] != c.r || @_cc[1] != c.g || @_cc[2] != c.b || @_cc[3] != c.a
341
+ @_cc = [c.r, c.g, c.b, c.a]
342
+ end
343
+ elsif @_cc.nil? || !cc_matches?
344
+ @_cc = Array.new(12)
345
+ 3.times do |i|
346
+ c = @color.vertex(i)
347
+ @_cc[i * 4] = c.r
348
+ @_cc[i * 4 + 1] = c.g
349
+ @_cc[i * 4 + 2] = c.b
350
+ @_cc[i * 4 + 3] = c.a
351
+ end
352
+ end
353
+ end
354
+
355
+ def cc_matches?
356
+ 3.times do |i|
357
+ c = @color.vertex(i)
358
+ return false if @_cc[i * 4] != c.r
359
+ return false if @_cc[i * 4 + 1] != c.g
360
+ return false if @_cc[i * 4 + 2] != c.b
361
+ return false if @_cc[i * 4 + 3] != c.a
362
+ end
363
+ true
129
364
  end
130
365
  end
131
366
  end
@@ -1,7 +1,5 @@
1
- # frozen_string_literal: true
2
-
3
1
  # Ruby2D::VERSION
4
2
 
5
3
  module Ruby2D
6
- VERSION = '0.12.0'
4
+ VERSION = '1.0.0'
7
5
  end
@@ -1,125 +1,102 @@
1
- # frozen_string_literal: true
2
-
3
1
  # Ruby2D::Vertices
4
2
 
5
3
  module Ruby2D
6
- # This internal class generates a vertices array which are passed to the openGL rendering code.
7
- # The vertices array is split up into 4 groups (1 - top left, 2 - top right, 3 - bottom right, 4 - bottom left)
8
- # This class is responsible for transforming textures, it can scale / crop / rotate and flip textures
4
+ # Vertex and texture coordinates for tile placements
9
5
  class Vertices
6
+ # Texture coordinates for an uncropped quad (full image)
7
+ TEX_UNCROPPED_COORDS = [
8
+ 0.0, 0.0, # top left
9
+ 1.0, 0.0, # top right
10
+ 1.0, 1.0, # bottom right
11
+ 0.0, 1.0 # bottom left
12
+ ].freeze
13
+
14
+ # Create a vertex set for a tile placement
10
15
  def initialize(x, y, width, height, rotate, crop: nil, flip: nil)
11
- @flip = flip
12
16
  @x = x
13
17
  @y = y
14
18
  @width = width.to_f
15
19
  @height = height.to_f
16
20
  @rotate = rotate
21
+ @crop = crop
22
+ apply_flip(flip)
17
23
  @rx = @x + (@width / 2.0)
18
24
  @ry = @y + (@height / 2.0)
19
- @crop = crop
20
- @coordinates = nil
21
- @texture_coordinates = nil
22
- _apply_flip unless @flip.nil?
23
25
  end
24
26
 
27
+ # Get the quad corner coordinates as a flat array
25
28
  def coordinates
26
- @coordinates ||= if @rotate.zero?
27
- _unrotated_coordinates
28
- else
29
- _calculate_coordinates
30
- end
29
+ @coordinates ||= @rotate.zero? ? unrotated_coordinates : rotated_coordinates
31
30
  end
32
31
 
33
- TEX_UNCROPPED_COORDS = [
34
- 0.0, 0.0, # top left
35
- 1.0, 0.0, # top right
36
- 1.0, 1.0, # bottom right
37
- 0.0, 1.0 # bottom left
38
- ].freeze
39
-
32
+ # Get the texture UV coordinates as a flat array
40
33
  def texture_coordinates
41
- @texture_coordinates ||= if @crop.nil?
42
- TEX_UNCROPPED_COORDS
43
- else
44
- _calculate_texture_coordinates
45
- end
34
+ @texture_coordinates ||= @crop ? cropped_texture_coordinates : TEX_UNCROPPED_COORDS
46
35
  end
47
36
 
48
37
  private
49
38
 
50
- def rotate(x, y)
51
- # Convert from degrees to radians
52
- angle = @rotate * Math::PI / 180.0
39
+ def unrotated_coordinates
40
+ [
41
+ @x, @y, # top left
42
+ @x + @width, @y, # top right
43
+ @x + @width, @y + @height, # bottom right
44
+ @x, @y + @height # bottom left
45
+ ]
46
+ end
53
47
 
54
- # Get the sine and cosine of the angle
48
+ def rotated_coordinates
49
+ angle = @rotate * Math::PI / 180.0
55
50
  sa = Math.sin(angle)
56
51
  ca = Math.cos(angle)
57
52
 
58
- # Translate point to origin
59
- x -= @rx
60
- y -= @ry
61
-
62
- # Rotate point
63
- xnew = x * ca - y * sa
64
- ynew = x * sa + y * ca
65
-
66
- # Translate point back
67
- x = xnew + @rx
68
- y = ynew + @ry
69
-
70
- [x, y]
53
+ [
54
+ *rotate_point(@x, @y, sa, ca), # top left
55
+ *rotate_point(@x + @width, @y, sa, ca), # top right
56
+ *rotate_point(@x + @width, @y + @height, sa, ca), # bottom right
57
+ *rotate_point(@x, @y + @height, sa, ca) # bottom left
58
+ ]
71
59
  end
72
60
 
73
- def _unrotated_coordinates
74
- x1 = @x
75
- y1 = @y; # Top left
76
- x2 = @x + @width
77
- y2 = @y; # Top right
78
- x3 = @x + @width
79
- y3 = @y + @height; # Bottom right
80
- x4 = @x
81
- y4 = @y + @height; # Bottom left
82
- [x1, y1, x2, y2, x3, y3, x4, y4]
83
- end
61
+ # Rotate a point around the center of the quad, given the precomputed sine
62
+ # and cosine of the rotation angle
63
+ def rotate_point(x, y, sa, ca)
64
+ dx = x - @rx
65
+ dy = y - @ry
84
66
 
85
- def _calculate_coordinates
86
- x1, y1 = rotate(@x, @y); # Top left
87
- x2, y2 = rotate(@x + @width, @y); # Top right
88
- x3, y3 = rotate(@x + @width, @y + @height); # Bottom right
89
- x4, y4 = rotate(@x, @y + @height); # Bottom left
90
- [x1, y1, x2, y2, x3, y3, x4, y4]
67
+ [dx * ca - dy * sa + @rx,
68
+ dx * sa + dy * ca + @ry]
91
69
  end
92
70
 
93
- def _calculate_texture_coordinates
94
- img_width = @crop[:image_width].to_f
95
- img_height = @crop[:image_height].to_f
96
-
97
- # Top left
98
- tx1 = @crop[:x] / img_width
99
- ty1 = @crop[:y] / img_height
100
- # Top right
101
- tx2 = tx1 + (@crop[:width] / img_width)
102
- ty2 = ty1
103
- # Botttom right
104
- tx3 = tx2
105
- ty3 = ty1 + (@crop[:height] / img_height)
106
- # Bottom left
107
- # tx4 = tx1
108
- # ty4 = ty3
109
-
110
- [tx1, ty1, tx2, ty2, tx3, ty3, tx1, ty3]
71
+ def cropped_texture_coordinates
72
+ img_w = @crop[:image_width].to_f
73
+ img_h = @crop[:image_height].to_f
74
+
75
+ left = @crop[:x] / img_w
76
+ top = @crop[:y] / img_h
77
+ right = left + (@crop[:width] / img_w)
78
+ bottom = top + (@crop[:height] / img_h)
79
+
80
+ [
81
+ left, top, # top left
82
+ right, top, # top right
83
+ right, bottom, # bottom right
84
+ left, bottom # bottom left
85
+ ]
111
86
  end
112
87
 
113
- def _apply_flip
114
- if @flip == :horizontal || @flip == :both
88
+ def apply_flip(flip)
89
+ return unless flip
90
+
91
+ if flip == :horizontal || flip == :both
115
92
  @x += @width
116
93
  @width = -@width
117
94
  end
118
95
 
119
- return unless @flip == :vertical || @flip == :both
120
-
121
- @y += @height
122
- @height = -@height
96
+ if flip == :vertical || flip == :both
97
+ @y += @height
98
+ @height = -@height
99
+ end
123
100
  end
124
101
  end
125
102
  end
@@ -0,0 +1,29 @@
1
+ module Ruby2D
2
+ # Messages already emitted by `warn`, so a bad value produced every frame in a
3
+ # render loop warns a single time rather than flooding the console. Keyed by
4
+ # the message string.
5
+ @warned_messages = {}
6
+
7
+ # Emit a warning at most once per distinct message. Mirrors the native
8
+ # extension's `R2D_Log(R2D_WARN, ...)`: a bold-yellow `[WARN]` tag
9
+ # (`String#warning` shares the C side's `1;33`) followed by the message, on
10
+ # stderr — so Ruby and C warnings render identically. `Kernel#warn` isn't
11
+ # available under mruby, so write to `$stderr` directly.
12
+ def self.warn(message)
13
+ return if @warned_messages.key?(message)
14
+
15
+ @warned_messages[message] = true
16
+ $stderr.puts "#{'[WARN]'.warning} #{message}"
17
+ end
18
+
19
+ # Emit an informational diagnostic, mirroring the native extension's
20
+ # `R2D_Log(R2D_INFO, ...)`: a bold-blue `[INFO]` tag (`String#info` and the C
21
+ # side both use `1;34`) followed by the message, on stderr. Like the C side,
22
+ # INFO is suppressed unless diagnostics are enabled (`set(diagnostics: true)`)
23
+ # and — unlike `warn` — it never dedupes, so every diagnostic event prints.
24
+ def self.info(message)
25
+ return unless DSL.window? && DSL.window.diagnostics
26
+
27
+ $stderr.puts "#{'[INFO]'.info} #{message}"
28
+ end
29
+ end