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.
- checksums.yaml +4 -4
- data/LICENSE.md +7 -0
- data/README.md +141 -0
- data/USAGE.md +2435 -0
- data/assets/Rakefile +637 -0
- data/assets/build_support/CMakeLists.txt +94 -0
- data/assets/build_support/mruby/build_config.rb +34 -0
- data/assets/build_support/mruby/build_config_wasm.rb +30 -0
- data/assets/build_support/sdl_test.c +174 -0
- data/assets/deps.yaml +16 -0
- data/assets/platform/include/SDL3/SDL.h +91 -0
- data/assets/platform/include/SDL3/SDL_assert.h +705 -0
- data/assets/platform/include/SDL3/SDL_asyncio.h +550 -0
- data/assets/platform/include/SDL3/SDL_atomic.h +692 -0
- data/assets/platform/include/SDL3/SDL_audio.h +2370 -0
- data/assets/platform/include/SDL3/SDL_begin_code.h +553 -0
- data/assets/{include/SDL2 → platform/include/SDL3}/SDL_bits.h +47 -27
- data/assets/{include/SDL2 → platform/include/SDL3}/SDL_blendmode.h +59 -55
- data/assets/platform/include/SDL3/SDL_camera.h +535 -0
- data/assets/platform/include/SDL3/SDL_clipboard.h +331 -0
- data/assets/{include/SDL2/close_code.h → platform/include/SDL3/SDL_close_code.h} +9 -8
- data/assets/{include/SDL2 → platform/include/SDL3}/SDL_copying.h +3 -1
- data/assets/platform/include/SDL3/SDL_cpuinfo.h +374 -0
- data/assets/platform/include/SDL3/SDL_dialog.h +343 -0
- data/assets/platform/include/SDL3/SDL_dlopennote.h +234 -0
- data/assets/{include/SDL2 → platform/include/SDL3}/SDL_egl.h +11 -8
- data/assets/platform/include/SDL3/SDL_endian.h +645 -0
- data/assets/platform/include/SDL3/SDL_error.h +226 -0
- data/assets/platform/include/SDL3/SDL_events.h +1645 -0
- data/assets/platform/include/SDL3/SDL_filesystem.h +537 -0
- data/assets/platform/include/SDL3/SDL_gamepad.h +1656 -0
- data/assets/platform/include/SDL3/SDL_gpu.h +4608 -0
- data/assets/platform/include/SDL3/SDL_guid.h +106 -0
- data/assets/platform/include/SDL3/SDL_haptic.h +1461 -0
- data/assets/platform/include/SDL3/SDL_hidapi.h +571 -0
- data/assets/platform/include/SDL3/SDL_hints.h +5001 -0
- data/assets/platform/include/SDL3/SDL_init.h +507 -0
- data/assets/platform/include/SDL3/SDL_intrin.h +410 -0
- data/assets/platform/include/SDL3/SDL_iostream.h +1379 -0
- data/assets/platform/include/SDL3/SDL_joystick.h +1385 -0
- data/assets/platform/include/SDL3/SDL_keyboard.h +608 -0
- data/assets/platform/include/SDL3/SDL_keycode.h +347 -0
- data/assets/platform/include/SDL3/SDL_loadso.h +145 -0
- data/assets/{include/SDL2 → platform/include/SDL3}/SDL_locale.h +40 -24
- data/assets/platform/include/SDL3/SDL_log.h +541 -0
- data/assets/platform/include/SDL3/SDL_main.h +704 -0
- data/assets/platform/include/SDL3/SDL_main_impl.h +151 -0
- data/assets/{include/SDL2 → platform/include/SDL3}/SDL_messagebox.h +85 -48
- data/assets/{include/SDL2 → platform/include/SDL3}/SDL_metal.h +29 -29
- data/assets/{include/SDL2 → platform/include/SDL3}/SDL_misc.h +13 -12
- data/assets/platform/include/SDL3/SDL_mouse.h +813 -0
- data/assets/platform/include/SDL3/SDL_mutex.h +1117 -0
- data/assets/platform/include/SDL3/SDL_oldnames.h +1339 -0
- data/assets/{include/SDL2 → platform/include/SDL3}/SDL_opengl.h +1247 -278
- data/assets/{include/SDL2 → platform/include/SDL3}/SDL_opengl_glext.h +5 -1
- data/assets/{include/SDL2 → platform/include/SDL3}/SDL_opengles.h +6 -7
- data/assets/{include/SDL2 → platform/include/SDL3}/SDL_opengles2.h +10 -11
- data/assets/platform/include/SDL3/SDL_pen.h +198 -0
- data/assets/platform/include/SDL3/SDL_pixels.h +1441 -0
- data/assets/{include/SDL2/SDL_test_log.h → platform/include/SDL3/SDL_platform.h} +25 -26
- data/assets/platform/include/SDL3/SDL_platform_defines.h +497 -0
- data/assets/{include/SDL2 → platform/include/SDL3}/SDL_power.h +40 -20
- data/assets/platform/include/SDL3/SDL_process.h +441 -0
- data/assets/platform/include/SDL3/SDL_properties.h +572 -0
- data/assets/platform/include/SDL3/SDL_rect.h +528 -0
- data/assets/platform/include/SDL3/SDL_render.h +3028 -0
- data/assets/platform/include/SDL3/SDL_revision.h +59 -0
- data/assets/{include/SDL2 → platform/include/SDL3}/SDL_scancode.h +59 -68
- data/assets/platform/include/SDL3/SDL_sensor.h +321 -0
- data/assets/platform/include/SDL3/SDL_stdinc.h +6186 -0
- data/assets/platform/include/SDL3/SDL_storage.h +686 -0
- data/assets/platform/include/SDL3/SDL_surface.h +1769 -0
- data/assets/platform/include/SDL3/SDL_system.h +840 -0
- data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test.h +16 -22
- data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_assert.h +27 -34
- data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_common.h +109 -52
- data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_compare.h +22 -14
- data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_crc32.h +27 -30
- data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_font.h +50 -49
- data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_fuzzer.h +64 -79
- data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_harness.h +47 -30
- data/assets/platform/include/SDL3/SDL_test_log.h +83 -0
- data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_md5.h +21 -28
- data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_memory.h +19 -16
- data/assets/platform/include/SDL3/SDL_thread.h +602 -0
- data/assets/platform/include/SDL3/SDL_time.h +249 -0
- data/assets/platform/include/SDL3/SDL_timer.h +454 -0
- data/assets/platform/include/SDL3/SDL_touch.h +184 -0
- data/assets/platform/include/SDL3/SDL_tray.h +544 -0
- data/assets/platform/include/SDL3/SDL_version.h +198 -0
- data/assets/platform/include/SDL3/SDL_video.h +3497 -0
- data/assets/platform/include/SDL3/SDL_vulkan.h +287 -0
- data/assets/platform/include/SDL3_image/SDL_image.h +3328 -0
- data/assets/platform/include/SDL3_mixer/SDL_mixer.h +3369 -0
- data/assets/platform/include/SDL3_ttf/SDL_textengine.h +181 -0
- data/assets/platform/include/SDL3_ttf/SDL_ttf.h +2833 -0
- data/assets/{include → platform/include}/mrbconf.h +42 -31
- data/assets/{include → platform/include}/mruby/array.h +3 -4
- data/assets/{include → platform/include}/mruby/boxing_nan.h +10 -0
- data/assets/platform/include/mruby/boxing_no.h +59 -0
- data/assets/{include → platform/include}/mruby/boxing_word.h +72 -26
- data/assets/platform/include/mruby/class.h +157 -0
- data/assets/{include → platform/include}/mruby/common.h +30 -1
- data/assets/{include → platform/include}/mruby/compile.h +52 -74
- data/assets/{include → platform/include}/mruby/data.h +2 -2
- data/assets/{include → platform/include}/mruby/debug.h +12 -5
- data/assets/{include → platform/include}/mruby/dump.h +7 -9
- data/assets/{include → platform/include}/mruby/endian.h +1 -1
- data/assets/platform/include/mruby/error.h +173 -0
- data/assets/platform/include/mruby/gc.h +79 -0
- data/assets/{include → platform/include}/mruby/hash.h +1 -7
- data/assets/platform/include/mruby/internal.h +282 -0
- data/assets/platform/include/mruby/irep.h +143 -0
- data/assets/{include → platform/include}/mruby/istruct.h +1 -1
- data/assets/platform/include/mruby/khash.h +455 -0
- data/assets/platform/include/mruby/mempool.h +19 -0
- data/assets/{include → platform/include}/mruby/numeric.h +7 -10
- data/assets/platform/include/mruby/object.h +51 -0
- data/assets/{include → platform/include}/mruby/opcode.h +5 -5
- data/assets/{include → platform/include}/mruby/ops.h +19 -6
- data/assets/platform/include/mruby/presym/id.h +1447 -0
- data/assets/{include → platform/include}/mruby/presym/scanning.h +10 -7
- data/assets/platform/include/mruby/presym/table.h +2893 -0
- data/assets/platform/include/mruby/presym.h +65 -0
- data/assets/platform/include/mruby/proc.h +184 -0
- data/assets/{include → platform/include}/mruby/range.h +0 -2
- data/assets/{include → platform/include}/mruby/string.h +33 -53
- data/assets/platform/include/mruby/throw.h +81 -0
- data/assets/{include → platform/include}/mruby/value.h +64 -29
- data/assets/{include → platform/include}/mruby/variable.h +6 -23
- data/assets/{include → platform/include}/mruby/version.h +7 -7
- data/assets/{include → platform/include}/mruby.h +238 -116
- data/assets/platform/macos-arm64/bin/mrbc +0 -0
- data/assets/platform/macos-arm64/lib/libSDL3.a +0 -0
- data/assets/platform/macos-arm64/lib/libSDL3_image.a +0 -0
- data/assets/platform/macos-arm64/lib/libSDL3_mixer.a +0 -0
- data/assets/platform/macos-arm64/lib/libSDL3_ttf.a +0 -0
- data/assets/platform/macos-arm64/lib/libmruby.a +0 -0
- data/assets/platform/wasm/lib/libFLAC.a +0 -0
- data/assets/platform/wasm/lib/libSDL3.a +0 -0
- data/assets/platform/wasm/lib/libSDL3_image.a +0 -0
- data/assets/platform/wasm/lib/libSDL3_mixer.a +0 -0
- data/assets/platform/wasm/lib/libSDL3_ttf.a +0 -0
- data/assets/platform/wasm/lib/libfreetype.a +0 -0
- data/assets/platform/wasm/lib/libharfbuzz.a +0 -0
- data/assets/platform/wasm/lib/libmruby.a +0 -0
- data/assets/platform/wasm/lib/libogg.a +0 -0
- data/assets/platform/wasm/lib/libplutosvg.a +0 -0
- data/assets/platform/wasm/lib/libplutovg.a +0 -0
- data/assets/platform/wasm/lib/libpng.a +0 -0
- data/assets/platform/wasm/lib/libpng16.a +0 -0
- data/assets/platform/wasm/lib/libvorbis.a +0 -0
- data/assets/platform/wasm/lib/libvorbisfile.a +0 -0
- data/assets/platform/wasm/lib/libzlibstatic.a +0 -0
- data/assets/platform/windows-arm64-mingw-ucrt/bin/mrbc.exe +0 -0
- data/assets/platform/windows-arm64-mingw-ucrt/lib/libSDL3.a +0 -0
- data/assets/platform/windows-arm64-mingw-ucrt/lib/libSDL3_image.a +0 -0
- data/assets/platform/windows-arm64-mingw-ucrt/lib/libSDL3_mixer.a +0 -0
- data/assets/platform/windows-arm64-mingw-ucrt/lib/libSDL3_ttf.a +0 -0
- data/assets/platform/windows-arm64-mingw-ucrt/lib/libmruby.a +0 -0
- data/assets/platform/windows-x86_64-mingw-ucrt/bin/mrbc.exe +0 -0
- data/assets/platform/windows-x86_64-mingw-ucrt/lib/libSDL3.a +0 -0
- data/assets/platform/windows-x86_64-mingw-ucrt/lib/libSDL3_image.a +0 -0
- data/assets/platform/windows-x86_64-mingw-ucrt/lib/libSDL3_mixer.a +0 -0
- data/assets/platform/windows-x86_64-mingw-ucrt/lib/libSDL3_ttf.a +0 -0
- data/assets/platform/windows-x86_64-mingw-ucrt/lib/libmruby.a +0 -0
- data/assets/resources/fonts/outfit/OFL.txt +93 -0
- data/assets/resources/fonts/outfit/outfit.ttf +0 -0
- data/assets/resources/fonts/roboto_mono/OFL.txt +91 -0
- data/assets/resources/fonts/roboto_mono/roboto_mono.ttf +0 -0
- data/assets/resources/icons/icon.icns +0 -0
- data/assets/resources/icons/icon.png +0 -0
- data/assets/resources/spritesheets/License.txt +28 -0
- data/assets/resources/spritesheets/spritesheet-backgrounds.png +0 -0
- data/assets/resources/spritesheets/spritesheet-backgrounds.xml +16 -0
- data/assets/resources/spritesheets/spritesheet-characters.png +0 -0
- data/assets/resources/spritesheets/spritesheet-characters.xml +47 -0
- data/assets/resources/spritesheets/spritesheet-enemies.png +0 -0
- data/assets/resources/spritesheets/spritesheet-enemies.xml +62 -0
- data/assets/resources/spritesheets/spritesheet-tiles.png +0 -0
- data/assets/resources/spritesheets/spritesheet-tiles.xml +316 -0
- data/assets/{wasm → resources/web}/template.html +1 -1
- data/assets/target.rb +131 -0
- data/bin/ruby2d +281 -82
- data/examples/astar.rb +269 -0
- data/examples/asteroids.rb +403 -0
- data/examples/bezier_editor.rb +96 -0
- data/examples/boids.rb +191 -0
- data/examples/bouncing_balls.rb +119 -0
- data/examples/breakout.rb +186 -0
- data/examples/constellations.rb +100 -0
- data/examples/dashboard.rb +133 -0
- data/examples/double_pendulum.rb +254 -0
- data/examples/falling_sand.rb +291 -0
- data/examples/fireworks.rb +110 -0
- data/examples/fluid_dynamics.rb +340 -0
- data/examples/fourier_epicycles.rb +142 -0
- data/examples/fractal_tree.rb +326 -0
- data/examples/game_of_life.rb +148 -0
- data/examples/gamepads.rb +333 -0
- data/examples/hill_driver.rb +613 -0
- data/examples/logo_animation.rb +251 -0
- data/examples/lorenz_attractor.rb +115 -0
- data/examples/mandelbrot.rb +207 -0
- data/examples/marching_squares.rb +200 -0
- data/examples/maze.rb +323 -0
- data/examples/nbody.rb +338 -0
- data/examples/outrun.rb +391 -0
- data/examples/pixel_paint.rb +313 -0
- data/examples/platformer.rb +335 -0
- data/examples/ray_casting_maze.rb +175 -0
- data/examples/shadow_casting.rb +151 -0
- data/examples/shape_recognizer.rb +908 -0
- data/examples/snake.rb +144 -0
- data/examples/sprite_sheets.rb +246 -0
- data/examples/swarm.rb +206 -0
- data/examples/tsp_annealing.rb +104 -0
- data/examples/ui_controls.rb +163 -0
- data/examples/wireframe_3d.rb +139 -0
- data/ext/ruby2d/audio.c +324 -0
- data/ext/ruby2d/canvas.c +1715 -494
- data/ext/ruby2d/ext.c +541 -0
- data/ext/ruby2d/extconf.rb +122 -145
- data/ext/ruby2d/font.c +566 -20
- data/ext/ruby2d/fps.c +92 -0
- data/ext/ruby2d/image.c +466 -41
- data/ext/ruby2d/ruby2d.c +374 -1890
- data/ext/ruby2d/ruby2d.h +840 -460
- data/ext/ruby2d/shapes.c +931 -101
- data/ext/ruby2d/text.c +586 -21
- data/ext/ruby2d/window.c +1693 -283
- data/lib/ruby2d/atlas_parser.rb +194 -0
- data/lib/ruby2d/audio.rb +73 -0
- data/lib/ruby2d/benchmark.rb +259 -0
- data/lib/ruby2d/bitmap_text.rb +155 -0
- data/lib/ruby2d/button.rb +402 -0
- data/lib/ruby2d/canvas.rb +703 -279
- data/lib/ruby2d/circle.rb +206 -29
- data/lib/ruby2d/cli/browser.rb +314 -0
- data/lib/ruby2d/cli/build.rb +471 -257
- data/lib/ruby2d/cli/colorize.rb +7 -5
- data/lib/ruby2d/cli/examples.rb +127 -0
- data/lib/ruby2d/cli/launch.rb +24 -39
- data/lib/ruby2d/cli/lib_files.rb +48 -0
- data/lib/ruby2d/cli/messages.rb +40 -0
- data/lib/ruby2d/cli/setup.rb +273 -0
- data/lib/ruby2d/cli/static_server.rb +160 -0
- data/lib/ruby2d/cli/usage.rb +255 -0
- data/lib/ruby2d/color.rb +191 -69
- data/lib/ruby2d/core.rb +37 -19
- data/lib/ruby2d/deps_help.rb +89 -0
- data/lib/ruby2d/dsl.rb +51 -12
- data/lib/ruby2d/ellipse.rb +228 -0
- data/lib/ruby2d/exceptions.rb +0 -2
- data/lib/ruby2d/font.rb +34 -74
- data/lib/ruby2d/gamepad.rb +323 -0
- data/lib/ruby2d/gem_paths.rb +19 -0
- data/lib/ruby2d/image.rb +155 -52
- data/lib/ruby2d/interactive.rb +103 -0
- data/lib/ruby2d/json_parser.rb +268 -0
- data/lib/ruby2d/line.rb +194 -85
- data/lib/ruby2d/mruby_compat.rb +12 -0
- data/lib/ruby2d/polygon.rb +297 -0
- data/lib/ruby2d/polyline.rb +368 -0
- data/lib/ruby2d/quad.rb +358 -94
- data/lib/ruby2d/rectangle.rb +77 -19
- data/lib/ruby2d/renderable.rb +411 -11
- data/lib/ruby2d/sprite.rb +471 -180
- data/lib/ruby2d/sprite_sheet.rb +64 -0
- data/lib/ruby2d/square.rb +29 -17
- data/lib/ruby2d/text.rb +196 -65
- data/lib/ruby2d/tileset.rb +139 -81
- data/lib/ruby2d/triangle.rb +324 -89
- data/lib/ruby2d/version.rb +1 -3
- data/lib/ruby2d/vertices.rb +62 -85
- data/lib/ruby2d/warnings.rb +29 -0
- data/lib/ruby2d/window/class_methods.rb +218 -0
- data/lib/ruby2d/window/gamepad_events.rb +141 -0
- data/lib/ruby2d/window/key_events.rb +74 -0
- data/lib/ruby2d/window/mouse_events.rb +171 -0
- data/lib/ruby2d/window/object_events.rb +168 -0
- data/lib/ruby2d/window.rb +632 -585
- data/lib/ruby2d.rb +14 -19
- metadata +275 -443
- data/assets/app.icns +0 -0
- data/assets/include/GL/glew.h +0 -26427
- data/assets/include/GLES2/gl2.h +0 -656
- data/assets/include/GLES2/gl2ext.h +0 -3949
- data/assets/include/GLES2/gl2ext_angle.h +0 -701
- data/assets/include/GLES2/gl2platform.h +0 -27
- data/assets/include/GLES3/gl3.h +0 -1192
- data/assets/include/GLES3/gl31.h +0 -1507
- data/assets/include/GLES3/gl32.h +0 -1808
- data/assets/include/GLES3/gl3platform.h +0 -27
- data/assets/include/KHR/khrplatform.h +0 -290
- data/assets/include/SDL2/SDL.h +0 -233
- data/assets/include/SDL2/SDL_assert.h +0 -326
- data/assets/include/SDL2/SDL_atomic.h +0 -415
- data/assets/include/SDL2/SDL_audio.h +0 -1500
- data/assets/include/SDL2/SDL_clipboard.h +0 -141
- data/assets/include/SDL2/SDL_config.h +0 -61
- data/assets/include/SDL2/SDL_config_android.h +0 -194
- data/assets/include/SDL2/SDL_config_emscripten.h +0 -218
- data/assets/include/SDL2/SDL_config_iphoneos.h +0 -217
- data/assets/include/SDL2/SDL_config_macosx.h +0 -277
- data/assets/include/SDL2/SDL_config_minimal.h +0 -95
- data/assets/include/SDL2/SDL_config_ngage.h +0 -89
- data/assets/include/SDL2/SDL_config_os2.h +0 -207
- data/assets/include/SDL2/SDL_config_pandora.h +0 -141
- data/assets/include/SDL2/SDL_config_windows.h +0 -331
- data/assets/include/SDL2/SDL_config_wingdk.h +0 -253
- data/assets/include/SDL2/SDL_config_winrt.h +0 -220
- data/assets/include/SDL2/SDL_config_xbox.h +0 -235
- data/assets/include/SDL2/SDL_cpuinfo.h +0 -594
- data/assets/include/SDL2/SDL_endian.h +0 -348
- data/assets/include/SDL2/SDL_error.h +0 -163
- data/assets/include/SDL2/SDL_events.h +0 -1166
- data/assets/include/SDL2/SDL_filesystem.h +0 -149
- data/assets/include/SDL2/SDL_gamecontroller.h +0 -1074
- data/assets/include/SDL2/SDL_gesture.h +0 -117
- data/assets/include/SDL2/SDL_guid.h +0 -100
- data/assets/include/SDL2/SDL_haptic.h +0 -1341
- data/assets/include/SDL2/SDL_hidapi.h +0 -451
- data/assets/include/SDL2/SDL_hints.h +0 -2569
- data/assets/include/SDL2/SDL_image.h +0 -2173
- data/assets/include/SDL2/SDL_joystick.h +0 -1066
- data/assets/include/SDL2/SDL_keyboard.h +0 -353
- data/assets/include/SDL2/SDL_keycode.h +0 -358
- data/assets/include/SDL2/SDL_loadso.h +0 -115
- data/assets/include/SDL2/SDL_log.h +0 -404
- data/assets/include/SDL2/SDL_main.h +0 -275
- data/assets/include/SDL2/SDL_mixer.h +0 -2784
- data/assets/include/SDL2/SDL_mouse.h +0 -465
- data/assets/include/SDL2/SDL_mutex.h +0 -471
- data/assets/include/SDL2/SDL_name.h +0 -33
- data/assets/include/SDL2/SDL_pixels.h +0 -644
- data/assets/include/SDL2/SDL_platform.h +0 -261
- data/assets/include/SDL2/SDL_quit.h +0 -58
- data/assets/include/SDL2/SDL_rect.h +0 -376
- data/assets/include/SDL2/SDL_render.h +0 -1919
- data/assets/include/SDL2/SDL_revision.h +0 -6
- data/assets/include/SDL2/SDL_rwops.h +0 -841
- data/assets/include/SDL2/SDL_sensor.h +0 -322
- data/assets/include/SDL2/SDL_shape.h +0 -155
- data/assets/include/SDL2/SDL_stdinc.h +0 -830
- data/assets/include/SDL2/SDL_surface.h +0 -997
- data/assets/include/SDL2/SDL_system.h +0 -623
- data/assets/include/SDL2/SDL_syswm.h +0 -386
- data/assets/include/SDL2/SDL_test_images.h +0 -78
- data/assets/include/SDL2/SDL_test_random.h +0 -115
- data/assets/include/SDL2/SDL_thread.h +0 -464
- data/assets/include/SDL2/SDL_timer.h +0 -222
- data/assets/include/SDL2/SDL_touch.h +0 -150
- data/assets/include/SDL2/SDL_ttf.h +0 -2316
- data/assets/include/SDL2/SDL_types.h +0 -29
- data/assets/include/SDL2/SDL_version.h +0 -204
- data/assets/include/SDL2/SDL_video.h +0 -2150
- data/assets/include/SDL2/SDL_vulkan.h +0 -215
- data/assets/include/SDL2/begin_code.h +0 -187
- data/assets/include/mruby/boxing_no.h +0 -58
- data/assets/include/mruby/class.h +0 -108
- data/assets/include/mruby/error.h +0 -147
- data/assets/include/mruby/gc.h +0 -94
- data/assets/include/mruby/irep.h +0 -147
- data/assets/include/mruby/khash.h +0 -284
- data/assets/include/mruby/object.h +0 -43
- data/assets/include/mruby/presym/disable.h +0 -70
- data/assets/include/mruby/presym/enable.h +0 -37
- data/assets/include/mruby/presym.h +0 -40
- data/assets/include/mruby/proc.h +0 -211
- data/assets/include/mruby/throw.h +0 -66
- data/assets/macos/universal/bin/mrbc +0 -0
- data/assets/macos/universal/lib/libFLAC.a +0 -0
- data/assets/macos/universal/lib/libSDL2.a +0 -0
- data/assets/macos/universal/lib/libSDL2_image.a +0 -0
- data/assets/macos/universal/lib/libSDL2_mixer.a +0 -0
- data/assets/macos/universal/lib/libSDL2_ttf.a +0 -0
- data/assets/macos/universal/lib/libavif.a +0 -0
- data/assets/macos/universal/lib/libbrotlicommon-static.a +0 -0
- data/assets/macos/universal/lib/libbrotlidec-static.a +0 -0
- data/assets/macos/universal/lib/libfreetype.a +0 -0
- data/assets/macos/universal/lib/libgraphite2.a +0 -0
- data/assets/macos/universal/lib/libharfbuzz.a +0 -0
- data/assets/macos/universal/lib/libhwy.a +0 -0
- data/assets/macos/universal/lib/libjpeg.a +0 -0
- data/assets/macos/universal/lib/libjxl.a +0 -0
- data/assets/macos/universal/lib/libmodplug.a +0 -0
- data/assets/macos/universal/lib/libmpg123.a +0 -0
- data/assets/macos/universal/lib/libmruby.a +0 -0
- data/assets/macos/universal/lib/libogg.a +0 -0
- data/assets/macos/universal/lib/libpng.a +0 -0
- data/assets/macos/universal/lib/libtiff.a +0 -0
- data/assets/macos/universal/lib/libvorbis.a +0 -0
- data/assets/macos/universal/lib/libvorbisfile.a +0 -0
- data/assets/macos/universal/lib/libwebp.a +0 -0
- data/assets/macos/universal/lib/libzstd.a +0 -0
- data/assets/test_media/README.md +0 -3
- data/assets/test_media/bitstream_vera/COPYRIGHT.txt +0 -124
- data/assets/test_media/bitstream_vera/vera.ttf +0 -0
- data/assets/test_media/boom.png +0 -0
- data/assets/test_media/coin.png +0 -0
- data/assets/test_media/colors.png +0 -0
- data/assets/test_media/controller.png +0 -0
- data/assets/test_media/dial.wav +0 -0
- data/assets/test_media/hero.png +0 -0
- data/assets/test_media/image.bmp +0 -0
- data/assets/test_media/image.jpg +0 -0
- data/assets/test_media/image.png +0 -0
- data/assets/test_media/music.flac +0 -0
- data/assets/test_media/music.mp3 +0 -0
- data/assets/test_media/music.ogg +0 -0
- data/assets/test_media/music.wav +0 -0
- data/assets/test_media/originals/boom.pxm +0 -0
- data/assets/test_media/originals/coin.pxm +0 -0
- data/assets/test_media/originals/controller.sketch +0 -0
- data/assets/test_media/originals/hero.pxm +0 -0
- data/assets/test_media/originals/image.pxm +0 -0
- data/assets/test_media/originals/music.caf +0 -0
- data/assets/test_media/originals/texture_atlas.pxm +0 -0
- data/assets/test_media/rondo_alla_turka.ogg +0 -0
- data/assets/test_media/sound.flac +0 -0
- data/assets/test_media/sound.mp3 +0 -0
- data/assets/test_media/sound.ogg +0 -0
- data/assets/test_media/sound.wav +0 -0
- data/assets/test_media/sprite_sheet.png +0 -0
- data/assets/test_media/texture_atlas.png +0 -0
- data/assets/wasm/libmruby.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/bin/mrbc.exe +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libFLAC.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libLerc.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libSDL2.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libSDL2_image.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libSDL2_mixer.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libSDL2_ttf.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libbrotlicommon.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libbrotlidec.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libbz2.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libdeflate.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libfreetype.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libglew32.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libgraphite2.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libharfbuzz.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libhwy.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libjbig.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libjpeg.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libjxl.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/liblzma.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libmodplug.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libmpg123.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libmruby.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libogg.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libopus.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libopusfile.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libpng.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libsndfile.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libssp.a +0 -1
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libstdc++.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libtiff.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libvorbis.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libvorbisfile.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libwebp.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libz.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libzstd.a +0 -0
- data/assets/windows/mingw-w64-x86_64/bin/mrbc.exe +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libFLAC.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libLerc.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libSDL2.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libSDL2_image.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libSDL2_mixer.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libSDL2_ttf.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libbrotlicommon.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libbrotlidec.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libbz2.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libdeflate.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libfreetype.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libglew32.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libgraphite2.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libharfbuzz.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libhwy.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libjbig.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libjpeg.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libjxl.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/liblzma.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libmodplug.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libmpg123.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libmruby.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libogg.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libopus.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libopusfile.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libpng.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libsndfile.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libssp.a +0 -1
- data/assets/windows/mingw-w64-x86_64/lib/libstdc++.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libtiff.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libvorbis.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libvorbisfile.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libwebp.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libz.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libzstd.a +0 -0
- data/assets/xcode/ios/Assets.xcassets/AppIcon.appiconset/Contents.json +0 -98
- data/assets/xcode/ios/Assets.xcassets/Contents.json +0 -6
- data/assets/xcode/ios/Base.lproj/LaunchScreen.storyboard +0 -27
- data/assets/xcode/ios/Info.plist +0 -43
- data/assets/xcode/ios/MRuby.framework/Headers/mrbconf.h +0 -143
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/array.h +0 -280
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/boxing_nan.h +0 -102
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/boxing_no.h +0 -56
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/boxing_word.h +0 -144
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/class.h +0 -97
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/common.h +0 -77
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/compile.h +0 -195
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/data.h +0 -75
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/debug.h +0 -67
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/dump.h +0 -196
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/error.h +0 -75
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/gc.h +0 -91
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/hash.h +0 -215
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/irep.h +0 -75
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/istruct.h +0 -47
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/khash.h +0 -274
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/numeric.h +0 -161
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/object.h +0 -44
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/opcode.h +0 -69
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/ops.h +0 -117
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/proc.h +0 -131
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/range.h +0 -49
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/re.h +0 -16
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/string.h +0 -444
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/throw.h +0 -55
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/value.h +0 -309
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/variable.h +0 -136
- data/assets/xcode/ios/MRuby.framework/Headers/mruby/version.h +0 -110
- data/assets/xcode/ios/MRuby.framework/Headers/mruby.h +0 -1282
- data/assets/xcode/ios/MRuby.framework/Info.plist +0 -20
- data/assets/xcode/ios/MRuby.framework/MRuby +0 -0
- data/assets/xcode/ios/MyApp.xcodeproj/project.pbxproj +0 -368
- data/assets/xcode/ios/MyApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
- data/assets/xcode/ios/MyApp.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
- data/assets/xcode/ios/MyApp.xcodeproj/project.xcworkspace/xcshareddata/MyApp.xcscmblueprint +0 -30
- data/assets/xcode/ios/main.c +0 -1
- data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Back.imagestacklayer/Content.imageset/Contents.json +0 -16
- data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Back.imagestacklayer/Contents.json +0 -6
- data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Contents.json +0 -17
- data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Front.imagestacklayer/Content.imageset/Contents.json +0 -16
- data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Front.imagestacklayer/Contents.json +0 -6
- data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json +0 -16
- data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Middle.imagestacklayer/Contents.json +0 -6
- data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Back.imagestacklayer/Content.imageset/Contents.json +0 -16
- data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Back.imagestacklayer/Contents.json +0 -6
- data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Contents.json +0 -17
- data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Front.imagestacklayer/Content.imageset/Contents.json +0 -16
- data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Front.imagestacklayer/Contents.json +0 -6
- data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json +0 -16
- data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Middle.imagestacklayer/Contents.json +0 -6
- data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Contents.json +0 -32
- data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image Wide.imageset/Contents.json +0 -16
- data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image.imageset/Contents.json +0 -16
- data/assets/xcode/tvos/Assets.xcassets/Contents.json +0 -6
- data/assets/xcode/tvos/Assets.xcassets/LaunchImage.launchimage/Contents.json +0 -22
- data/assets/xcode/tvos/Info.plist +0 -30
- data/assets/xcode/tvos/MRuby.framework/Headers/mrbconf.h +0 -143
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/array.h +0 -280
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/boxing_nan.h +0 -102
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/boxing_no.h +0 -56
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/boxing_word.h +0 -144
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/class.h +0 -97
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/common.h +0 -77
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/compile.h +0 -195
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/data.h +0 -75
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/debug.h +0 -67
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/dump.h +0 -196
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/error.h +0 -75
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/gc.h +0 -91
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/hash.h +0 -215
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/irep.h +0 -75
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/istruct.h +0 -47
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/khash.h +0 -274
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/numeric.h +0 -161
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/object.h +0 -44
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/opcode.h +0 -69
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/ops.h +0 -117
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/proc.h +0 -131
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/range.h +0 -49
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/re.h +0 -16
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/string.h +0 -444
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/throw.h +0 -55
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/value.h +0 -309
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/variable.h +0 -136
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby/version.h +0 -110
- data/assets/xcode/tvos/MRuby.framework/Headers/mruby.h +0 -1282
- data/assets/xcode/tvos/MRuby.framework/Info.plist +0 -20
- data/assets/xcode/tvos/MRuby.framework/MRuby +0 -0
- data/assets/xcode/tvos/MyApp.xcodeproj/project.pbxproj +0 -350
- data/assets/xcode/tvos/MyApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
- data/assets/xcode/tvos/MyApp.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
- data/assets/xcode/tvos/MyApp.xcodeproj/project.xcworkspace/xcshareddata/MyApp.xcscmblueprint +0 -30
- data/assets/xcode/tvos/main.c +0 -1
- data/ext/ruby2d/common.c +0 -185
- data/ext/ruby2d/controllers.c +0 -110
- data/ext/ruby2d/gl.c +0 -398
- data/ext/ruby2d/gl2.c +0 -86
- data/ext/ruby2d/gl3.c +0 -304
- data/ext/ruby2d/gles.c +0 -302
- data/ext/ruby2d/input.c +0 -48
- data/ext/ruby2d/music.c +0 -127
- data/ext/ruby2d/sound.c +0 -132
- data/lib/ruby2d/cli/console.rb +0 -65
- data/lib/ruby2d/cli/enable_console.rb +0 -7
- data/lib/ruby2d/cli/platform.rb +0 -17
- data/lib/ruby2d/music.rb +0 -77
- data/lib/ruby2d/pixel.rb +0 -18
- data/lib/ruby2d/pixmap.rb +0 -39
- data/lib/ruby2d/pixmap_atlas.rb +0 -56
- data/lib/ruby2d/sound.rb +0 -61
- data/lib/ruby2d/texture.rb +0 -38
- /data/assets/{include/SDL2 → platform/include/SDL3}/SDL_opengles2_gl2.h +0 -0
- /data/assets/{include/SDL2 → platform/include/SDL3}/SDL_opengles2_gl2ext.h +0 -0
- /data/assets/{include/SDL2 → platform/include/SDL3}/SDL_opengles2_gl2platform.h +0 -0
- /data/assets/{include/SDL2 → platform/include/SDL3}/SDL_opengles2_khrplatform.h +0 -0
- /data/assets/{include → platform/include}/mruby/re.h +0 -0
data/lib/ruby2d/color.rb
CHANGED
|
@@ -1,55 +1,80 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
1
|
# Ruby2D::Color
|
|
4
2
|
|
|
5
3
|
module Ruby2D
|
|
6
|
-
#
|
|
7
|
-
# (based on css), a hexadecimal value or an array containing a collection of
|
|
8
|
-
# red, green, blue, and alpha (transparency) values expressed as a Float from 0.0 to 1.0.
|
|
4
|
+
# A color from a keyword, hex value, or RGBA array
|
|
9
5
|
class Color
|
|
10
|
-
#
|
|
6
|
+
# An array of colors
|
|
11
7
|
class Set
|
|
12
8
|
include Enumerable
|
|
13
9
|
|
|
10
|
+
# Create a color set from an array of colors
|
|
14
11
|
def initialize(colors)
|
|
12
|
+
raise Error, 'a Color::Set requires at least one color, got an empty array' if colors.empty?
|
|
13
|
+
|
|
15
14
|
@colors = colors.map { |c| Color.new(c) }
|
|
16
15
|
end
|
|
17
16
|
|
|
17
|
+
# Get a color by index
|
|
18
18
|
def [](index)
|
|
19
19
|
@colors[index]
|
|
20
20
|
end
|
|
21
21
|
|
|
22
|
+
# Get the number of colors in the set
|
|
22
23
|
def length
|
|
23
24
|
@colors.length
|
|
24
25
|
end
|
|
25
26
|
|
|
26
|
-
|
|
27
|
-
|
|
27
|
+
# Iterate over each color
|
|
28
28
|
def each(&block)
|
|
29
29
|
@colors.each(&block)
|
|
30
30
|
end
|
|
31
31
|
|
|
32
|
-
|
|
33
|
-
|
|
32
|
+
# Get the first color, or the first `n` colors if a count is given
|
|
33
|
+
def first(*args)
|
|
34
|
+
@colors.first(*args)
|
|
34
35
|
end
|
|
35
36
|
|
|
36
|
-
|
|
37
|
-
|
|
37
|
+
# Get the last color, or the last `n` colors if a count is given
|
|
38
|
+
def last(*args)
|
|
39
|
+
@colors.last(*args)
|
|
38
40
|
end
|
|
39
41
|
|
|
42
|
+
# Get the opacity of the first color
|
|
40
43
|
def opacity
|
|
41
44
|
@colors.first.opacity
|
|
42
45
|
end
|
|
43
46
|
|
|
47
|
+
# Set the opacity for all colors
|
|
44
48
|
def opacity=(opacity)
|
|
49
|
+
unless opacity.is_a?(Numeric)
|
|
50
|
+
raise ArgumentError, "opacity must be a number between 0.0 and 1.0, got #{opacity.inspect}"
|
|
51
|
+
end
|
|
52
|
+
|
|
45
53
|
@colors.each do |color|
|
|
46
54
|
color.opacity = opacity
|
|
47
55
|
end
|
|
48
56
|
end
|
|
57
|
+
|
|
58
|
+
# The color for the i-th vertex. Paired with `Color#vertex` so per-vertex
|
|
59
|
+
# rendering code can uniformly call `color.vertex(i)` whether it holds a
|
|
60
|
+
# single `Color` (every vertex is the same) or a `Color::Set`.
|
|
61
|
+
def vertex(i)
|
|
62
|
+
@colors[i]
|
|
63
|
+
end
|
|
49
64
|
end
|
|
50
65
|
|
|
51
66
|
attr_accessor :r, :g, :b, :a
|
|
52
67
|
|
|
68
|
+
# Bounded cache of parsed color strings, keyed by the user input.
|
|
69
|
+
# `'random'` is never cached (re-randomized on each call).
|
|
70
|
+
PARSE_CACHE_MAX = 256
|
|
71
|
+
@parse_cache = {}
|
|
72
|
+
|
|
73
|
+
# Bounded cache of shared Color instances for immediate-mode `.render`
|
|
74
|
+
# calls, keyed by the color string. See `Color.for_render`.
|
|
75
|
+
RENDER_CACHE_MAX = 256
|
|
76
|
+
@render_cache = {}
|
|
77
|
+
|
|
53
78
|
# Based on clrs.cc
|
|
54
79
|
NAMED_COLORS = {
|
|
55
80
|
'navy' => '#001F3F',
|
|
@@ -73,17 +98,18 @@ module Ruby2D
|
|
|
73
98
|
'random' => ''
|
|
74
99
|
}.freeze
|
|
75
100
|
|
|
101
|
+
# Create a color from a keyword, hex string, array, or Color
|
|
76
102
|
def initialize(color)
|
|
77
|
-
raise Error, "
|
|
103
|
+
raise Error, "#{color.inspect} is not a valid color" unless self.class.valid? color
|
|
78
104
|
|
|
79
105
|
case color
|
|
80
106
|
when String
|
|
81
107
|
init_from_string color
|
|
82
108
|
when Array
|
|
83
|
-
@r = color[0]
|
|
84
|
-
@g = color[1]
|
|
85
|
-
@b = color[2]
|
|
86
|
-
@a = color[3]
|
|
109
|
+
@r = channel(color[0])
|
|
110
|
+
@g = channel(color[1])
|
|
111
|
+
@b = channel(color[2])
|
|
112
|
+
@a = color.length == 4 ? channel(color[3]) : 1.0
|
|
87
113
|
when Color
|
|
88
114
|
@r = color.r
|
|
89
115
|
@g = color.g
|
|
@@ -93,10 +119,15 @@ module Ruby2D
|
|
|
93
119
|
end
|
|
94
120
|
|
|
95
121
|
class << self
|
|
96
|
-
#
|
|
122
|
+
# Create a Color or Color::Set from the given value
|
|
97
123
|
def set(colors)
|
|
98
|
-
#
|
|
99
|
-
if colors.is_a?(
|
|
124
|
+
# Already a Color::Set (e.g. re-applying a gradient fill): pass through.
|
|
125
|
+
return colors if colors.is_a?(Color::Set)
|
|
126
|
+
|
|
127
|
+
# A non-empty array of valid colors becomes a `Color::Set`. An empty
|
|
128
|
+
# array is not a valid gradient, so it falls through to `Color.new`,
|
|
129
|
+
# which raises a clear "not a valid color" at the mistake site.
|
|
130
|
+
if colors.is_a?(Array) && !colors.empty? && colors.all? { |el| Color.valid? el }
|
|
100
131
|
Color::Set.new(colors)
|
|
101
132
|
# Otherwise, return single color
|
|
102
133
|
else
|
|
@@ -104,86 +135,177 @@ module Ruby2D
|
|
|
104
135
|
end
|
|
105
136
|
end
|
|
106
137
|
|
|
107
|
-
#
|
|
138
|
+
# Resolve a color for an immediate-mode class-level `.render` call.
|
|
139
|
+
# Behaves like `.set`, except string colors and flat `[r, g, b(, a)]`
|
|
140
|
+
# numeric arrays return a shared cached Color instance, skipping the
|
|
141
|
+
# validation re-scan and object allocation `.new` pays on every call —
|
|
142
|
+
# those two forms are the common case in per-frame draws, and on the web
|
|
143
|
+
# (mruby/wasm) that per-call cost dominates the frame budget. The cached
|
|
144
|
+
# instance is read and forwarded to the native draw call immediately; it
|
|
145
|
+
# must never be stored on an object or handed to user code (a later
|
|
146
|
+
# mutation would corrupt every subsequent lookup) — use `.set` anywhere
|
|
147
|
+
# the color is kept. `'random'` is never cached, so each call still
|
|
148
|
+
# rolls a fresh color.
|
|
149
|
+
def for_render(colors)
|
|
150
|
+
if colors.is_a?(String)
|
|
151
|
+
cached = @render_cache[colors]
|
|
152
|
+
return cached if cached
|
|
153
|
+
return Color.new(colors) if colors == 'random'
|
|
154
|
+
|
|
155
|
+
@render_cache.shift if @render_cache.size >= RENDER_CACHE_MAX
|
|
156
|
+
@render_cache[colors] = Color.new(colors)
|
|
157
|
+
elsif colors.is_a?(Array) && colors[0].is_a?(Numeric) && rgba_array?(colors)
|
|
158
|
+
# ^ The two inline checks pre-screen the non-match cases (an array of
|
|
159
|
+
# colors starts with a String/Array/Color, never a Numeric) so this
|
|
160
|
+
# per-draw-call path only pays the `rgba_array?` method call when the
|
|
161
|
+
# input is almost certainly a cacheable [r, g, b(, a)] array.
|
|
162
|
+
# Array keys are looked up by value, so mutating a previously seen
|
|
163
|
+
# array can't corrupt the mapping — it just misses and inserts a new
|
|
164
|
+
# entry. The stored key is a frozen copy for the same reason.
|
|
165
|
+
cached = @render_cache[colors]
|
|
166
|
+
return cached if cached
|
|
167
|
+
|
|
168
|
+
c = Color.new(colors)
|
|
169
|
+
@render_cache.shift if @render_cache.size >= RENDER_CACHE_MAX
|
|
170
|
+
@render_cache[colors.dup.freeze] = c
|
|
171
|
+
else
|
|
172
|
+
set(colors)
|
|
173
|
+
end
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
# A flat `[r, g, b]` or `[r, g, b, a]` numeric array — the array form a
|
|
177
|
+
# single color takes (an array of *colors* is a `Color::Set`, and its
|
|
178
|
+
# elements are never bare Numerics). `while`, not blocks — this guards
|
|
179
|
+
# the per-draw-call render path and block calls dominate on wasm mruby.
|
|
180
|
+
def rgba_array?(colors)
|
|
181
|
+
return false unless colors.is_a?(Array)
|
|
182
|
+
|
|
183
|
+
n = colors.length
|
|
184
|
+
return false unless n == 3 || n == 4
|
|
185
|
+
|
|
186
|
+
i = 0
|
|
187
|
+
while i < n
|
|
188
|
+
return false unless colors[i].is_a?(Numeric)
|
|
189
|
+
i += 1
|
|
190
|
+
end
|
|
191
|
+
true
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
# Check if the string is a valid hex color value
|
|
195
|
+
# Byte comparisons, not slicing: `valid?` calls this on every `Color.new`
|
|
196
|
+
# and on every per-vertex color of every immediate-mode draw, and the
|
|
197
|
+
# readable form (`[0]`, `[1..]`, `.chars`, plus a fresh literal for the
|
|
198
|
+
# allowed set) allocated about ten short-lived strings each time.
|
|
108
199
|
def hex?(color_string)
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
200
|
+
return false unless color_string.instance_of?(String) &&
|
|
201
|
+
color_string.getbyte(0) == 35 # '#'
|
|
202
|
+
|
|
203
|
+
len = color_string.length
|
|
204
|
+
return false unless len == 4 || len == 7 || len == 9
|
|
205
|
+
|
|
206
|
+
i = 1
|
|
207
|
+
while i < len
|
|
208
|
+
b = color_string.getbyte(i)
|
|
209
|
+
return false unless (b >= 48 && b <= 57) || # 0-9
|
|
210
|
+
(b >= 65 && b <= 70) || # A-F
|
|
211
|
+
(b >= 97 && b <= 102) # a-f
|
|
212
|
+
|
|
213
|
+
i += 1
|
|
214
|
+
end
|
|
215
|
+
true
|
|
114
216
|
end
|
|
115
217
|
|
|
116
|
-
# Check if the
|
|
218
|
+
# Check if the value is a valid color
|
|
117
219
|
def valid?(color)
|
|
118
220
|
color.is_a?(Color) || # color object
|
|
119
221
|
NAMED_COLORS.key?(color) || # keyword
|
|
120
222
|
hex?(color) || # hexadecimal value
|
|
121
|
-
( #
|
|
223
|
+
( # [r, g, b] or [r, g, b, a] numbers
|
|
122
224
|
color.instance_of?(Array) &&
|
|
123
|
-
color.length == 4 &&
|
|
225
|
+
(color.length == 3 || color.length == 4) &&
|
|
124
226
|
color.all? { |el| el.is_a?(Numeric) }
|
|
125
227
|
)
|
|
126
228
|
end
|
|
127
229
|
|
|
128
|
-
#
|
|
129
|
-
#
|
|
130
|
-
|
|
131
|
-
|
|
230
|
+
# Parse a color string into a frozen `[r, g, b, a]` tuple, caching the
|
|
231
|
+
# result. Named colors and hex strings are cached; `'random'` is not.
|
|
232
|
+
# Callers must not mutate the returned array.
|
|
233
|
+
def parse_string(color)
|
|
234
|
+
# Check the cache first so the hot path (a previously-seen named or hex
|
|
235
|
+
# color) returns before the `'random'` literal comparison, which would
|
|
236
|
+
# otherwise allocate a fresh `'random'` string on every call. `'random'`
|
|
237
|
+
# is never cached, so it still falls through to a fresh value below.
|
|
238
|
+
cached = @parse_cache[color]
|
|
239
|
+
return cached if cached
|
|
240
|
+
|
|
241
|
+
return [rand, rand, rand, 1.0] if color == 'random'
|
|
242
|
+
|
|
243
|
+
source = hex?(color) ? color : NAMED_COLORS[color]
|
|
244
|
+
rgba = hex_to_f(source).freeze
|
|
245
|
+
@parse_cache.shift if @parse_cache.size >= PARSE_CACHE_MAX
|
|
246
|
+
@parse_cache[color] = rgba
|
|
247
|
+
end
|
|
248
|
+
|
|
249
|
+
private
|
|
250
|
+
|
|
251
|
+
# Convert a hex color (e.g. #FFF, #FFF000, #FFF000FF) to [r, g, b, a]
|
|
252
|
+
# floats in 0.0..1.0.
|
|
253
|
+
def hex_to_f(hex_color)
|
|
254
|
+
hex = hex_color[1..]
|
|
255
|
+
hex = hex.chars.map { |c| c * 2 }.join if hex.length == 3
|
|
256
|
+
rgba = hex.chars.each_slice(2).map { |pair| pair.join.to_i(16) }
|
|
257
|
+
rgba << 255 if rgba.length == 3
|
|
258
|
+
rgba.map { |n| n / 255.0 }
|
|
259
|
+
end
|
|
132
260
|
end
|
|
133
261
|
|
|
134
|
-
#
|
|
262
|
+
# Get the opacity
|
|
135
263
|
def opacity
|
|
136
264
|
@a
|
|
137
265
|
end
|
|
138
266
|
|
|
267
|
+
# Set the opacity. Must be a single number; per-vertex opacity (an array)
|
|
268
|
+
# is only supported by shapes that handle it explicitly, such as Polyline.
|
|
269
|
+
# The value is clamped to 0.0..1.0 so an animation that momentarily drives
|
|
270
|
+
# opacity out of range degrades to fully transparent/opaque rather than
|
|
271
|
+
# wrapping the Uint8 alpha cast into a wrong, near-opaque byte.
|
|
139
272
|
def opacity=(opacity)
|
|
140
|
-
|
|
273
|
+
unless opacity.is_a?(Numeric)
|
|
274
|
+
raise ArgumentError, "opacity must be a number between 0.0 and 1.0, got #{opacity.inspect}"
|
|
275
|
+
end
|
|
276
|
+
|
|
277
|
+
@a = opacity.clamp(0.0, 1.0)
|
|
141
278
|
end
|
|
142
279
|
|
|
143
|
-
# Return
|
|
280
|
+
# Return the color components as an array
|
|
144
281
|
def to_a
|
|
145
282
|
[@r, @g, @b, @a]
|
|
146
283
|
end
|
|
147
284
|
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
elsif self.class.hex?(color)
|
|
154
|
-
@r, @g, @b, @a = hex_to_f(color)
|
|
155
|
-
else
|
|
156
|
-
@r, @g, @b, @a = hex_to_f(NAMED_COLORS[color])
|
|
157
|
-
end
|
|
285
|
+
# The color for the i-th vertex. A single `Color` represents "every vertex
|
|
286
|
+
# is the same color," so every index returns self. Mirrors `Color::Set#vertex`
|
|
287
|
+
# so per-vertex rendering code can call `color.vertex(i)` without branching.
|
|
288
|
+
def vertex(_i)
|
|
289
|
+
self
|
|
158
290
|
end
|
|
159
291
|
|
|
160
|
-
|
|
161
|
-
@r = rand
|
|
162
|
-
@g = rand
|
|
163
|
-
@b = rand
|
|
164
|
-
@a = 1.0
|
|
165
|
-
end
|
|
292
|
+
private
|
|
166
293
|
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
b = []
|
|
170
|
-
color_array.each do |n|
|
|
171
|
-
b.push(n / 255.0)
|
|
172
|
-
end
|
|
173
|
-
b
|
|
294
|
+
def init_from_string(color)
|
|
295
|
+
@r, @g, @b, @a = self.class.parse_string(color)
|
|
174
296
|
end
|
|
175
297
|
|
|
176
|
-
#
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
298
|
+
# Interpret a color channel on the 0.0..1.0 scale — the graphics-programming
|
|
299
|
+
# convention also used internally and by the renderer. Both integers and
|
|
300
|
+
# floats are taken at face value on this scale, so `1` is full intensity and
|
|
301
|
+
# `0` is none; for 0..255 byte values, use a hex string like `'#FF8000'`. An
|
|
302
|
+
# out-of-range value warns once and clamps to the nearest bound so the stored
|
|
303
|
+
# color always stays in range.
|
|
304
|
+
def channel(value)
|
|
305
|
+
return value.to_f if value >= 0.0 && value <= 1.0
|
|
184
306
|
|
|
185
|
-
|
|
186
|
-
|
|
307
|
+
Ruby2D.warn("color value #{value} is out of range; components must be 0.0..1.0")
|
|
308
|
+
value < 0.0 ? 0.0 : 1.0
|
|
187
309
|
end
|
|
188
310
|
end
|
|
189
311
|
|
data/lib/ruby2d/core.rb
CHANGED
|
@@ -1,32 +1,50 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
1
|
# Ruby2D module and native extension loader
|
|
4
2
|
|
|
5
3
|
unless RUBY_ENGINE == 'mruby'
|
|
6
4
|
require 'ruby2d/cli/colorize'
|
|
7
5
|
require 'ruby2d/exceptions'
|
|
6
|
+
require 'ruby2d/warnings'
|
|
7
|
+
require 'ruby2d/window/class_methods'
|
|
8
|
+
require 'ruby2d/window/key_events'
|
|
9
|
+
require 'ruby2d/window/mouse_events'
|
|
10
|
+
require 'ruby2d/window/gamepad_events'
|
|
11
|
+
require 'ruby2d/window/object_events'
|
|
12
|
+
require 'ruby2d/gamepad'
|
|
13
|
+
require 'ruby2d/window'
|
|
14
|
+
require 'ruby2d/interactive'
|
|
8
15
|
require 'ruby2d/renderable'
|
|
9
16
|
require 'ruby2d/color'
|
|
10
|
-
require 'ruby2d/
|
|
11
|
-
require 'ruby2d/
|
|
12
|
-
require 'ruby2d/quad'
|
|
13
|
-
require 'ruby2d/line'
|
|
17
|
+
require 'ruby2d/audio'
|
|
18
|
+
require 'ruby2d/canvas'
|
|
14
19
|
require 'ruby2d/circle'
|
|
15
|
-
require 'ruby2d/
|
|
16
|
-
require 'ruby2d/
|
|
17
|
-
require 'ruby2d/triangle'
|
|
18
|
-
require 'ruby2d/pixel'
|
|
19
|
-
require 'ruby2d/pixmap'
|
|
20
|
-
require 'ruby2d/pixmap_atlas'
|
|
20
|
+
require 'ruby2d/ellipse'
|
|
21
|
+
require 'ruby2d/font'
|
|
21
22
|
require 'ruby2d/image'
|
|
23
|
+
require 'ruby2d/json_parser'
|
|
24
|
+
require 'ruby2d/atlas_parser'
|
|
25
|
+
require 'ruby2d/sprite_sheet'
|
|
26
|
+
require 'ruby2d/line'
|
|
27
|
+
require 'ruby2d/polygon'
|
|
28
|
+
require 'ruby2d/polyline'
|
|
29
|
+
require 'ruby2d/quad'
|
|
30
|
+
require 'ruby2d/rectangle'
|
|
22
31
|
require 'ruby2d/sprite'
|
|
23
|
-
require 'ruby2d/
|
|
24
|
-
require 'ruby2d/font'
|
|
32
|
+
require 'ruby2d/square'
|
|
25
33
|
require 'ruby2d/text'
|
|
26
|
-
require 'ruby2d/
|
|
27
|
-
require 'ruby2d/
|
|
28
|
-
require 'ruby2d/
|
|
29
|
-
require 'ruby2d/
|
|
34
|
+
require 'ruby2d/bitmap_text'
|
|
35
|
+
require 'ruby2d/tileset'
|
|
36
|
+
require 'ruby2d/triangle'
|
|
37
|
+
require 'ruby2d/button'
|
|
30
38
|
require 'ruby2d/vertices'
|
|
31
|
-
|
|
39
|
+
begin
|
|
40
|
+
require 'ruby2d/ruby2d' # load native extension
|
|
41
|
+
rescue LoadError
|
|
42
|
+
# The extension isn't built — most often because SDL3 wasn't available at
|
|
43
|
+
# install time (see ext/ruby2d/extconf.rb, which then installs without it).
|
|
44
|
+
# Print the same recovery guidance the install shows and stop cleanly, so
|
|
45
|
+
# the user gets the notice — not a cryptic "cannot load such file" backtrace.
|
|
46
|
+
require 'ruby2d/deps_help'
|
|
47
|
+
abort Ruby2D::DepsHelp.notice
|
|
48
|
+
end
|
|
49
|
+
require 'ruby2d/dsl' # must loaded last, needs native extension
|
|
32
50
|
end
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# Extension-free guidance for when Ruby 2D's native dependency, SDL3, isn't
|
|
2
|
+
# available. Shared by `ext/ruby2d/extconf.rb` (install time, when the extension
|
|
3
|
+
# can't link) and the native-load rescue in `ruby2d/core` (run time, when the
|
|
4
|
+
# extension was never built) — so the message is authored once and can't drift.
|
|
5
|
+
#
|
|
6
|
+
# `require_relative` (not `require`) so it resolves both at install time, when
|
|
7
|
+
# `lib/` isn't on the load path, and at run time, when it is.
|
|
8
|
+
|
|
9
|
+
require_relative 'cli/colorize'
|
|
10
|
+
require_relative '../../assets/target'
|
|
11
|
+
|
|
12
|
+
module Ruby2D
|
|
13
|
+
module DepsHelp
|
|
14
|
+
module_function
|
|
15
|
+
|
|
16
|
+
# Detect the Linux distribution family from /etc/os-release.
|
|
17
|
+
def linux_distro
|
|
18
|
+
return :unknown unless File.exist?('/etc/os-release')
|
|
19
|
+
|
|
20
|
+
ids = File.read('/etc/os-release')
|
|
21
|
+
.scan(/^(?:ID|ID_LIKE)="?([^"\n]+)"?/)
|
|
22
|
+
.flatten
|
|
23
|
+
.flat_map(&:split)
|
|
24
|
+
|
|
25
|
+
return :debian if ids.any? { |id| %w[ubuntu debian linuxmint].include?(id) }
|
|
26
|
+
return :fedora if ids.any? { |id| %w[fedora rhel centos rocky almalinux].include?(id) }
|
|
27
|
+
return :arch if ids.any? { |id| %w[arch manjaro endeavouros].include?(id) }
|
|
28
|
+
return :opensuse if ids.any? { |id| id.include?('suse') }
|
|
29
|
+
|
|
30
|
+
:unknown
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# The package-manager command that installs the SDL3 development libraries on
|
|
34
|
+
# this platform, or nil when we can't name one (unknown Linux distro or BSD).
|
|
35
|
+
def sdl3_install_command
|
|
36
|
+
case AssetsTarget.host_os
|
|
37
|
+
when 'macos'
|
|
38
|
+
'brew install sdl3 sdl3_image sdl3_mixer sdl3_ttf'
|
|
39
|
+
when 'windows'
|
|
40
|
+
'pacman -S mingw-w64-ucrt-x86_64-SDL3 mingw-w64-ucrt-x86_64-SDL3_image mingw-w64-ucrt-x86_64-SDL3_mixer mingw-w64-ucrt-x86_64-SDL3_ttf'
|
|
41
|
+
when 'linux'
|
|
42
|
+
{
|
|
43
|
+
debian: 'sudo apt install libsdl3-dev libsdl3-image-dev libsdl3-mixer-dev libsdl3-ttf-dev',
|
|
44
|
+
fedora: 'sudo dnf install SDL3-devel SDL3_image-devel SDL3_mixer-devel SDL3_ttf-devel',
|
|
45
|
+
arch: 'sudo pacman -S sdl3 sdl3_image sdl3_mixer sdl3_ttf',
|
|
46
|
+
opensuse: 'sudo zypper install libSDL3-devel libSDL3_image-devel libSDL3_mixer-devel libSDL3_ttf-devel',
|
|
47
|
+
}[linux_distro]
|
|
48
|
+
when 'bsd'
|
|
49
|
+
host = RbConfig::CONFIG['host_os'].downcase
|
|
50
|
+
if host.include?('freebsd') then 'sudo pkg install sdl3 sdl3_image sdl3_mixer sdl3_ttf'
|
|
51
|
+
elsif host.include?('openbsd') then 'doas pkg_add sdl3 sdl3-image sdl3-mixer sdl3-ttf'
|
|
52
|
+
elsif host.include?('netbsd') then 'sudo pkgin install SDL3 SDL3_image SDL3_mixer SDL3_ttf'
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# The two-path recovery notice, framed like the install banner. Either
|
|
58
|
+
# install SDL3 with a package manager and rebuild with `gem pristine`, or
|
|
59
|
+
# build the libraries locally with `ruby2d setup` (which rebuilds the
|
|
60
|
+
# extension for you). Shown when no SDL3 — bundled, cached, or system — is
|
|
61
|
+
# found, both at install time and when a Ruby 2D app is run before setup.
|
|
62
|
+
def notice
|
|
63
|
+
cmd = sdl3_install_command
|
|
64
|
+
|
|
65
|
+
body = []
|
|
66
|
+
body << "Ruby 2D installed, but its native extension isn't built —"
|
|
67
|
+
body << "no SDL3 libraries were found for #{AssetsTarget.target_id}."
|
|
68
|
+
body << ''
|
|
69
|
+
body << 'To finish, choose one:'
|
|
70
|
+
body << ''
|
|
71
|
+
if cmd
|
|
72
|
+
body << '• Install SDL3 with your package manager (easiest), then rebuild:'
|
|
73
|
+
body << " #{cmd.bold}"
|
|
74
|
+
body << " #{'gem pristine ruby2d'.bold}"
|
|
75
|
+
else
|
|
76
|
+
body << "• Install the SDL3 development libraries, then run #{'gem pristine ruby2d'.bold}"
|
|
77
|
+
end
|
|
78
|
+
body << ''
|
|
79
|
+
body << '• Build the libraries locally (no system packages needed):'
|
|
80
|
+
body << " #{'ruby2d setup'.bold}"
|
|
81
|
+
body << ''
|
|
82
|
+
body << "See #{'ruby2d.com'.bold} for help."
|
|
83
|
+
|
|
84
|
+
header = '== Ruby 2D: native extension not built '.ljust(70, '=')
|
|
85
|
+
lines = ['', header, '', *body.map { |l| l.empty? ? '' : " #{l}" }, '', '=' * 70, '']
|
|
86
|
+
lines.join("\n")
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end
|
data/lib/ruby2d/dsl.rb
CHANGED
|
@@ -1,52 +1,91 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
1
|
module Ruby2D
|
|
4
|
-
# Ruby2D
|
|
2
|
+
# Domain-specific language methods for the top-level Ruby2D interface
|
|
5
3
|
module DSL
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
# Get the DSL window instance, constructing a default on first access
|
|
8
5
|
def self.window
|
|
9
|
-
@window
|
|
6
|
+
@window ||= Ruby2D::Window.new
|
|
10
7
|
end
|
|
11
8
|
|
|
9
|
+
# Set the DSL window instance
|
|
12
10
|
def self.window=(window)
|
|
13
11
|
@window = window
|
|
14
12
|
end
|
|
15
13
|
|
|
16
|
-
|
|
17
|
-
|
|
14
|
+
# Whether a DSL window already exists, without constructing one. Used to
|
|
15
|
+
# enforce the single-window rule (reading `window` would auto-create one).
|
|
16
|
+
def self.window?
|
|
17
|
+
!@window.nil?
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# Get a window attribute by name
|
|
21
|
+
def get(sym)
|
|
22
|
+
DSL.window.get(sym)
|
|
18
23
|
end
|
|
19
24
|
|
|
25
|
+
# Set window attributes
|
|
20
26
|
def set(opts)
|
|
21
27
|
DSL.window.set(opts)
|
|
22
28
|
end
|
|
23
29
|
|
|
24
|
-
|
|
25
|
-
|
|
30
|
+
# Take a screenshot, saving to `path` (or a timestamped file if omitted)
|
|
31
|
+
def screenshot(path = nil)
|
|
32
|
+
DSL.window.screenshot(path)
|
|
26
33
|
end
|
|
27
34
|
|
|
35
|
+
# Register an event handler
|
|
36
|
+
def on(event = nil, **filters, &proc)
|
|
37
|
+
DSL.window.on(event, **filters, &proc)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# Remove an event handler
|
|
28
41
|
def off(event_descriptor)
|
|
29
42
|
DSL.window.off(event_descriptor)
|
|
30
43
|
end
|
|
31
44
|
|
|
45
|
+
# Set the update callback
|
|
32
46
|
def update(&proc)
|
|
33
47
|
DSL.window.update(&proc)
|
|
34
48
|
end
|
|
35
49
|
|
|
36
|
-
|
|
37
|
-
|
|
50
|
+
# Set the render callback. `z:` positions the block in the scene's
|
|
51
|
+
# z-order — `:foreground` (default), `:background`, or a number.
|
|
52
|
+
def render(z: :foreground, &proc)
|
|
53
|
+
DSL.window.render(z: z, &proc)
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
# Monotonic seconds since the engine started (see `Window#elapsed`)
|
|
57
|
+
def elapsed
|
|
58
|
+
DSL.window.elapsed
|
|
38
59
|
end
|
|
39
60
|
|
|
61
|
+
# Clear all objects from the window
|
|
40
62
|
def clear
|
|
41
63
|
DSL.window.clear
|
|
42
64
|
end
|
|
43
65
|
|
|
66
|
+
# The connected gamepads, in connect order
|
|
67
|
+
def gamepads
|
|
68
|
+
DSL.window.gamepads
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
# Load a gamepad mapping from a file path or a single mapping string
|
|
72
|
+
def add_gamepad_mapping(path_or_string)
|
|
73
|
+
DSL.window.add_gamepad_mapping(path_or_string)
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
# Show the window
|
|
44
77
|
def show
|
|
45
78
|
DSL.window.show
|
|
46
79
|
end
|
|
47
80
|
|
|
81
|
+
# Close the window
|
|
48
82
|
def close
|
|
49
83
|
DSL.window.close
|
|
50
84
|
end
|
|
85
|
+
|
|
86
|
+
# Request a render on the next tick (for :on_demand render mode)
|
|
87
|
+
def request_render
|
|
88
|
+
DSL.window.request_render
|
|
89
|
+
end
|
|
51
90
|
end
|
|
52
91
|
end
|