ruby2d 0.11.2 → 0.12.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/assets/include/GLES2/gl2.h +656 -0
- data/assets/include/GLES2/gl2ext.h +3949 -0
- data/assets/include/GLES2/gl2ext_angle.h +701 -0
- data/assets/include/GLES2/gl2platform.h +27 -0
- data/assets/include/GLES3/gl3.h +1192 -0
- data/assets/include/GLES3/gl31.h +1507 -0
- data/assets/include/GLES3/gl32.h +1808 -0
- data/assets/include/GLES3/gl3platform.h +27 -0
- data/assets/include/KHR/khrplatform.h +290 -0
- data/assets/include/SDL2/SDL.h +1 -0
- data/assets/include/SDL2/SDL_assert.h +4 -2
- data/assets/include/SDL2/SDL_atomic.h +20 -0
- data/assets/include/SDL2/SDL_audio.h +40 -4
- data/assets/include/SDL2/SDL_blendmode.h +4 -6
- data/assets/include/SDL2/SDL_clipboard.h +47 -0
- data/assets/include/SDL2/SDL_config.h +6 -2
- data/assets/include/SDL2/SDL_config_android.h +2 -0
- data/assets/include/SDL2/SDL_config_emscripten.h +2 -0
- data/assets/include/SDL2/SDL_config_iphoneos.h +3 -1
- data/assets/include/SDL2/SDL_config_macosx.h +3 -6
- data/assets/include/SDL2/SDL_config_minimal.h +18 -11
- data/assets/include/SDL2/SDL_config_ngage.h +89 -0
- data/assets/include/SDL2/SDL_config_os2.h +5 -3
- data/assets/include/SDL2/SDL_config_pandora.h +1 -0
- data/assets/include/SDL2/SDL_config_windows.h +71 -45
- data/assets/include/SDL2/SDL_config_wingdk.h +253 -0
- data/assets/include/SDL2/SDL_config_winrt.h +11 -49
- data/assets/include/SDL2/SDL_config_xbox.h +235 -0
- data/assets/include/SDL2/SDL_cpuinfo.h +39 -4
- data/assets/include/SDL2/SDL_egl.h +59 -9
- data/assets/include/SDL2/SDL_endian.h +34 -3
- data/assets/include/SDL2/SDL_events.h +32 -1
- data/assets/include/SDL2/SDL_filesystem.h +5 -1
- data/assets/include/SDL2/SDL_gamecontroller.h +78 -5
- data/assets/include/SDL2/SDL_guid.h +100 -0
- data/assets/include/SDL2/SDL_hints.h +645 -43
- data/assets/include/SDL2/SDL_image.h +2045 -33
- data/assets/include/SDL2/SDL_joystick.h +127 -7
- data/assets/include/SDL2/SDL_keyboard.h +38 -1
- data/assets/include/SDL2/SDL_keycode.h +6 -1
- data/assets/include/SDL2/SDL_log.h +2 -2
- data/assets/include/SDL2/SDL_main.h +42 -2
- data/assets/include/SDL2/SDL_metal.h +2 -1
- data/assets/include/SDL2/SDL_mixer.h +2529 -396
- data/assets/include/SDL2/SDL_mouse.h +12 -1
- data/assets/include/SDL2/SDL_opengl.h +0 -51
- data/assets/include/SDL2/SDL_opengl_glext.h +2260 -231
- data/assets/include/SDL2/SDL_opengles2_gl2.h +374 -339
- data/assets/include/SDL2/SDL_opengles2_gl2ext.h +3479 -1496
- data/assets/include/SDL2/SDL_opengles2_gl2platform.h +6 -9
- data/assets/include/SDL2/SDL_opengles2_khrplatform.h +43 -14
- data/assets/include/SDL2/SDL_platform.h +32 -6
- data/assets/include/SDL2/SDL_rect.h +154 -2
- data/assets/include/SDL2/SDL_render.h +46 -17
- data/assets/include/SDL2/SDL_revision.h +4 -0
- data/assets/include/SDL2/SDL_rwops.h +1 -15
- data/assets/include/SDL2/SDL_scancode.h +46 -21
- data/assets/include/SDL2/SDL_sensor.h +24 -3
- data/assets/include/SDL2/SDL_stdinc.h +119 -8
- data/assets/include/SDL2/SDL_surface.h +3 -1
- data/assets/include/SDL2/SDL_system.h +66 -6
- data/assets/include/SDL2/SDL_syswm.h +2 -0
- data/assets/include/SDL2/SDL_test_common.h +1 -0
- data/assets/include/SDL2/SDL_test_font.h +90 -3
- data/assets/include/SDL2/SDL_thread.h +3 -3
- data/assets/include/SDL2/SDL_touch.h +8 -0
- data/assets/include/SDL2/SDL_ttf.h +2084 -155
- data/assets/include/SDL2/SDL_version.h +19 -3
- data/assets/include/SDL2/SDL_video.h +71 -9
- data/assets/include/SDL2/begin_code.h +4 -4
- data/assets/include/mrbconf.h +15 -17
- data/assets/include/mruby/array.h +8 -21
- data/assets/include/mruby/boxing_nan.h +115 -86
- data/assets/include/mruby/boxing_word.h +104 -78
- data/assets/include/mruby/common.h +6 -0
- data/assets/include/mruby/compile.h +3 -4
- data/assets/include/mruby/debug.h +4 -2
- data/assets/include/mruby/dump.h +5 -2
- data/assets/include/mruby/error.h +12 -2
- data/assets/include/mruby/gc.h +2 -0
- data/assets/include/mruby/hash.h +1 -3
- data/assets/include/mruby/irep.h +4 -4
- data/assets/include/mruby/numeric.h +21 -13
- data/assets/include/mruby/opcode.h +30 -0
- data/assets/include/mruby/ops.h +99 -101
- data/assets/include/mruby/presym/scanning.h +15 -9
- data/assets/include/mruby/proc.h +4 -2
- data/assets/include/mruby/string.h +3 -24
- data/assets/include/mruby/value.h +80 -40
- data/assets/include/mruby/variable.h +0 -15
- data/assets/include/mruby/version.h +5 -5
- data/assets/include/mruby.h +86 -16
- 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/wasm/libmruby.a +0 -0
- data/assets/wasm/template.html +52 -4
- 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 +1 -0
- 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/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/libharfbuzz.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libhwy.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/libmpg123.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libmruby.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libopus.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 -0
- 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/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/ext/ruby2d/canvas.c +540 -0
- data/ext/ruby2d/extconf.rb +39 -21
- data/ext/ruby2d/gl.c +3 -3
- data/ext/ruby2d/image.c +7 -7
- data/ext/ruby2d/ruby2d.c +741 -24
- data/ext/ruby2d/ruby2d.h +66 -3
- data/ext/ruby2d/sound.c +16 -2
- data/lib/ruby2d/canvas.rb +315 -0
- data/lib/ruby2d/circle.rb +30 -15
- data/lib/ruby2d/cli/build.rb +11 -4
- data/lib/ruby2d/cli/enable_console.rb +3 -1
- data/lib/ruby2d/color.rb +133 -77
- data/lib/ruby2d/core.rb +32 -0
- data/lib/ruby2d/dsl.rb +38 -32
- data/lib/ruby2d/exceptions.rb +2 -1
- data/lib/ruby2d/font.rb +97 -62
- data/lib/ruby2d/image.rb +48 -27
- data/lib/ruby2d/line.rb +84 -45
- data/lib/ruby2d/music.rb +33 -23
- data/lib/ruby2d/pixel.rb +10 -9
- data/lib/ruby2d/pixmap.rb +39 -0
- data/lib/ruby2d/pixmap_atlas.rb +56 -0
- data/lib/ruby2d/quad.rb +98 -49
- data/lib/ruby2d/rectangle.rb +35 -36
- data/lib/ruby2d/renderable.rb +7 -6
- data/lib/ruby2d/sound.rb +23 -17
- data/lib/ruby2d/sprite.rb +181 -140
- data/lib/ruby2d/square.rb +21 -20
- data/lib/ruby2d/text.rb +47 -19
- data/lib/ruby2d/texture.rb +13 -3
- data/lib/ruby2d/tileset.rb +97 -44
- data/lib/ruby2d/triangle.rb +91 -42
- data/lib/ruby2d/version.rb +3 -1
- data/lib/ruby2d/vertices.rb +81 -45
- data/lib/ruby2d/window.rb +508 -371
- data/lib/ruby2d.rb +11 -29
- metadata +84 -16
- data/assets/include/SDL2/SDL_config_psp.h +0 -165
- data/assets/include/SDL2/SDL_config_wiz.h +0 -154
- data/assets/include/glew.h +0 -23686
- data/assets/macos/universal/lib/libpng16.a +0 -0
- data/assets/wasm/build_config.rb +0 -13
- data/assets/windows/glew/README.md +0 -10
- data/assets/windows/glew/glew.h +0 -23686
- data/assets/windows/glew/libglew32.a +0 -0
- data/assets/windows/mingw-w64-x86_64/lib/libpng16.a +0 -0
- data/lib/ruby2d/entity.rb +0 -17
data/lib/ruby2d/window.rb
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
# Ruby2D::Window
|
|
2
|
-
# Represents a window on screen, responsible for storing renderable graphics,
|
|
3
|
-
# event handlers, the update loop, showing and closing the window.
|
|
4
4
|
|
|
5
5
|
module Ruby2D
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
# Represents a window on screen, responsible for storing renderable graphics,
|
|
7
|
+
# event handlers, the update loop, showing and closing the window.
|
|
8
|
+
|
|
9
|
+
attr_reader :width, :height
|
|
8
10
|
|
|
11
|
+
class Window
|
|
9
12
|
# Event structures
|
|
10
13
|
EventDescriptor = Struct.new(:type, :id)
|
|
11
14
|
MouseEvent = Struct.new(:type, :button, :direction, :x, :y, :delta_x, :delta_y)
|
|
@@ -14,137 +17,124 @@ module Ruby2D
|
|
|
14
17
|
ControllerAxisEvent = Struct.new(:which, :axis, :value)
|
|
15
18
|
ControllerButtonEvent = Struct.new(:which, :button)
|
|
16
19
|
|
|
17
|
-
|
|
18
|
-
|
|
20
|
+
#
|
|
21
|
+
# Create a Window
|
|
22
|
+
# @param title [String] Title for the window
|
|
23
|
+
# @param width [Numeric] In pixels
|
|
24
|
+
# @param height [Numeric] in pixels
|
|
25
|
+
# @param fps_cap [Numeric] Over-ride the default (60fps) frames-per-second
|
|
26
|
+
# @param vsync [Boolean] Enabled by default, use this to override it (Not recommended)
|
|
27
|
+
def initialize(title: 'Ruby 2D', width: 640, height: 480, fps_cap: 60, vsync: true)
|
|
19
28
|
# Title of the window
|
|
20
|
-
@title =
|
|
21
|
-
|
|
22
|
-
# Window background color
|
|
23
|
-
@background = Color.new([0.0, 0.0, 0.0, 1.0])
|
|
24
|
-
|
|
25
|
-
# Window icon
|
|
26
|
-
@icon = nil
|
|
27
|
-
|
|
28
|
-
# Window size and characteristics
|
|
29
|
-
@width = args[:width] || 640
|
|
30
|
-
@height = args[:height] || 480
|
|
31
|
-
@resizable = false
|
|
32
|
-
@borderless = false
|
|
33
|
-
@fullscreen = false
|
|
34
|
-
@highdpi = false
|
|
35
|
-
|
|
36
|
-
# Size of the window's viewport (the drawable area)
|
|
37
|
-
@viewport_width, @viewport_height = nil, nil
|
|
38
|
-
|
|
39
|
-
# Size of the computer's display
|
|
40
|
-
@display_width, @display_height = nil, nil
|
|
29
|
+
@title = title
|
|
41
30
|
|
|
42
|
-
#
|
|
43
|
-
@
|
|
31
|
+
# Window size
|
|
32
|
+
@width = width
|
|
33
|
+
@height = height
|
|
44
34
|
|
|
45
35
|
# Frames per second upper limit, and the actual FPS
|
|
46
|
-
@fps_cap =
|
|
36
|
+
@fps_cap = fps_cap
|
|
47
37
|
@fps = @fps_cap
|
|
48
38
|
|
|
49
39
|
# Vertical synchronization, set to prevent screen tearing (recommended)
|
|
50
|
-
@vsync =
|
|
40
|
+
@vsync = vsync
|
|
41
|
+
|
|
42
|
+
# Total number of frames that have been rendered
|
|
43
|
+
@frames = 0
|
|
51
44
|
|
|
52
45
|
# Renderable objects currently in the window, like a linear scene graph
|
|
53
46
|
@objects = []
|
|
54
47
|
|
|
55
|
-
|
|
56
|
-
|
|
48
|
+
_init_window_defaults
|
|
49
|
+
_init_event_stores
|
|
50
|
+
_init_event_registrations
|
|
51
|
+
_init_procs_dsl_console
|
|
52
|
+
end
|
|
57
53
|
|
|
58
|
-
|
|
59
|
-
|
|
54
|
+
# Track open window state in a class instance variable
|
|
55
|
+
@open_window = false
|
|
60
56
|
|
|
61
|
-
|
|
62
|
-
|
|
57
|
+
# Class methods for convenient access to properties
|
|
58
|
+
class << self
|
|
59
|
+
def current
|
|
60
|
+
get(:window)
|
|
61
|
+
end
|
|
63
62
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
@keys_up = []
|
|
68
|
-
@mouse_buttons_down = []
|
|
69
|
-
@mouse_buttons_up = []
|
|
70
|
-
@mouse_scroll_event = false
|
|
71
|
-
@mouse_scroll_direction = nil
|
|
72
|
-
@mouse_scroll_delta_x = 0
|
|
73
|
-
@mouse_scroll_delta_y = 0
|
|
74
|
-
@mouse_move_event = false
|
|
75
|
-
@mouse_move_delta_x = 0
|
|
76
|
-
@mouse_move_delta_y = 0
|
|
77
|
-
@controller_id = nil
|
|
78
|
-
@controller_axes_moved = []
|
|
79
|
-
@controller_axis_left_x = 0
|
|
80
|
-
@controller_axis_left_y = 0
|
|
81
|
-
@controller_axis_right_x = 0
|
|
82
|
-
@controller_axis_right_y = 0
|
|
83
|
-
@controller_buttons_down = []
|
|
84
|
-
@controller_buttons_up = []
|
|
63
|
+
def title
|
|
64
|
+
get(:title)
|
|
65
|
+
end
|
|
85
66
|
|
|
86
|
-
|
|
87
|
-
|
|
67
|
+
def background
|
|
68
|
+
get(:background)
|
|
69
|
+
end
|
|
88
70
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
key_down: {},
|
|
93
|
-
key_held: {},
|
|
94
|
-
key_up: {},
|
|
95
|
-
mouse: {},
|
|
96
|
-
mouse_up: {},
|
|
97
|
-
mouse_down: {},
|
|
98
|
-
mouse_scroll: {},
|
|
99
|
-
mouse_move: {},
|
|
100
|
-
controller: {},
|
|
101
|
-
controller_axis: {},
|
|
102
|
-
controller_button_down: {},
|
|
103
|
-
controller_button_up: {}
|
|
104
|
-
}
|
|
71
|
+
def width
|
|
72
|
+
get(:width)
|
|
73
|
+
end
|
|
105
74
|
|
|
106
|
-
|
|
107
|
-
|
|
75
|
+
def height
|
|
76
|
+
get(:height)
|
|
77
|
+
end
|
|
108
78
|
|
|
109
|
-
|
|
110
|
-
|
|
79
|
+
def viewport_width
|
|
80
|
+
get(:viewport_width)
|
|
81
|
+
end
|
|
111
82
|
|
|
112
|
-
|
|
113
|
-
|
|
83
|
+
def viewport_height
|
|
84
|
+
get(:viewport_height)
|
|
85
|
+
end
|
|
114
86
|
|
|
115
|
-
|
|
116
|
-
|
|
87
|
+
def display_width
|
|
88
|
+
get(:display_width)
|
|
89
|
+
end
|
|
117
90
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
@console = defined?($ruby2d_console_mode) ? true : false
|
|
121
|
-
else
|
|
122
|
-
@console = false
|
|
91
|
+
def display_height
|
|
92
|
+
get(:display_height)
|
|
123
93
|
end
|
|
124
|
-
end
|
|
125
94
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
def
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
def
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
def
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
def
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
def
|
|
147
|
-
|
|
95
|
+
def resizable
|
|
96
|
+
get(:resizable)
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
def borderless
|
|
100
|
+
get(:borderless)
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def fullscreen
|
|
104
|
+
get(:fullscreen)
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def highdpi
|
|
108
|
+
get(:highdpi)
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
def frames
|
|
112
|
+
get(:frames)
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
def fps
|
|
116
|
+
get(:fps)
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
def fps_cap
|
|
120
|
+
get(:fps_cap)
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
def mouse_x
|
|
124
|
+
get(:mouse_x)
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
def mouse_y
|
|
128
|
+
get(:mouse_y)
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
def diagnostics
|
|
132
|
+
get(:diagnostics)
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
def screenshot(opts = nil)
|
|
136
|
+
get(:screenshot, opts)
|
|
137
|
+
end
|
|
148
138
|
|
|
149
139
|
def get(sym, opts = nil)
|
|
150
140
|
DSL.window.get(sym, opts)
|
|
@@ -162,12 +152,12 @@ module Ruby2D
|
|
|
162
152
|
DSL.window.off(event_descriptor)
|
|
163
153
|
end
|
|
164
154
|
|
|
165
|
-
def add(
|
|
166
|
-
DSL.window.add(
|
|
155
|
+
def add(object)
|
|
156
|
+
DSL.window.add(object)
|
|
167
157
|
end
|
|
168
158
|
|
|
169
|
-
def remove(
|
|
170
|
-
DSL.window.remove(
|
|
159
|
+
def remove(object)
|
|
160
|
+
DSL.window.remove(object)
|
|
171
161
|
end
|
|
172
162
|
|
|
173
163
|
def clear
|
|
@@ -191,24 +181,42 @@ module Ruby2D
|
|
|
191
181
|
end
|
|
192
182
|
|
|
193
183
|
def render_ready_check
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
184
|
+
return if opened?
|
|
185
|
+
|
|
186
|
+
raise Error,
|
|
187
|
+
'Attempting to draw before the window is ready. Please put calls to draw() inside of a render block.'
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
def opened?
|
|
191
|
+
@open_window
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
private
|
|
195
|
+
|
|
196
|
+
def opened!
|
|
197
|
+
@open_window = true
|
|
197
198
|
end
|
|
198
199
|
end
|
|
199
200
|
|
|
200
201
|
# Public instance methods
|
|
201
202
|
|
|
203
|
+
# --- start exception
|
|
204
|
+
# Exception from lint check for the #get method which is what it is. :)
|
|
205
|
+
#
|
|
206
|
+
# rubocop:disable Metrics/CyclomaticComplexity
|
|
207
|
+
# rubocop:disable Metrics/AbcSize
|
|
208
|
+
|
|
202
209
|
# Retrieve an attribute of the window
|
|
210
|
+
# @param sym [Symbol] The name of an attribute to retrieve.
|
|
203
211
|
def get(sym, opts = nil)
|
|
204
212
|
case sym
|
|
205
|
-
when :window
|
|
206
|
-
when :title
|
|
207
|
-
when :background
|
|
208
|
-
when :width
|
|
209
|
-
when :height
|
|
210
|
-
when :viewport_width
|
|
211
|
-
when :viewport_height
|
|
213
|
+
when :window then self
|
|
214
|
+
when :title then @title
|
|
215
|
+
when :background then @background
|
|
216
|
+
when :width then @width
|
|
217
|
+
when :height then @height
|
|
218
|
+
when :viewport_width then @viewport_width
|
|
219
|
+
when :viewport_height then @viewport_height
|
|
212
220
|
when :display_width, :display_height
|
|
213
221
|
ext_get_display_dimensions
|
|
214
222
|
if sym == :display_width
|
|
@@ -216,76 +224,75 @@ module Ruby2D
|
|
|
216
224
|
else
|
|
217
225
|
@display_height
|
|
218
226
|
end
|
|
219
|
-
when :resizable
|
|
220
|
-
when :borderless
|
|
221
|
-
when :fullscreen
|
|
222
|
-
when :highdpi
|
|
223
|
-
when :frames
|
|
224
|
-
when :fps
|
|
225
|
-
when :fps_cap
|
|
226
|
-
when :mouse_x
|
|
227
|
-
when :mouse_y
|
|
228
|
-
when :diagnostics
|
|
229
|
-
when :screenshot
|
|
230
|
-
end
|
|
231
|
-
end
|
|
227
|
+
when :resizable then @resizable
|
|
228
|
+
when :borderless then @borderless
|
|
229
|
+
when :fullscreen then @fullscreen
|
|
230
|
+
when :highdpi then @highdpi
|
|
231
|
+
when :frames then @frames
|
|
232
|
+
when :fps then @fps
|
|
233
|
+
when :fps_cap then @fps_cap
|
|
234
|
+
when :mouse_x then @mouse_x
|
|
235
|
+
when :mouse_y then @mouse_y
|
|
236
|
+
when :diagnostics then @diagnostics
|
|
237
|
+
when :screenshot then screenshot(opts)
|
|
238
|
+
end
|
|
239
|
+
end
|
|
240
|
+
# rubocop:enable Metrics/CyclomaticComplexity
|
|
241
|
+
# rubocop:enable Metrics/AbcSize
|
|
242
|
+
# --- end exception
|
|
232
243
|
|
|
233
244
|
# Set a window attribute
|
|
245
|
+
# @param opts [Hash] The attributes to set
|
|
246
|
+
# @option opts [Color] :background
|
|
247
|
+
# @option opts [String] :title
|
|
248
|
+
# @option opts [Numeric] :width
|
|
249
|
+
# @option opts [Numeric] :height
|
|
250
|
+
# @option opts [Numeric] :viewport_width
|
|
251
|
+
# @option opts [Numeric] :viewport_height
|
|
252
|
+
# @option opts [Boolean] :highdpi
|
|
253
|
+
# @option opts [Boolean] :resizable
|
|
254
|
+
# @option opts [Boolean] :borderless
|
|
255
|
+
# @option opts [Boolean] :fullscreen
|
|
256
|
+
# @option opts [Numeric] :fps_cap
|
|
257
|
+
# @option opts [Numeric] :diagnostics
|
|
234
258
|
def set(opts)
|
|
235
259
|
# Store new window attributes, or ignore if nil
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
@
|
|
243
|
-
@
|
|
244
|
-
@viewport_width = opts[:viewport_width] || @viewport_width
|
|
245
|
-
@viewport_height = opts[:viewport_height] || @viewport_height
|
|
246
|
-
@resizable = opts[:resizable] || @resizable
|
|
247
|
-
@borderless = opts[:borderless] || @borderless
|
|
248
|
-
@fullscreen = opts[:fullscreen] || @fullscreen
|
|
249
|
-
@highdpi = opts[:highdpi] || @highdpi
|
|
250
|
-
unless opts[:diagnostics].nil?
|
|
251
|
-
@diagnostics = opts[:diagnostics]
|
|
252
|
-
ext_diagnostics(@diagnostics)
|
|
253
|
-
end
|
|
260
|
+
_set_any_window_properties opts
|
|
261
|
+
_set_any_window_dimensions opts
|
|
262
|
+
|
|
263
|
+
@fps_cap = opts[:fps_cap] if opts[:fps_cap]
|
|
264
|
+
return if opts[:diagnostics].nil?
|
|
265
|
+
|
|
266
|
+
@diagnostics = opts[:diagnostics]
|
|
267
|
+
ext_diagnostics(@diagnostics)
|
|
254
268
|
end
|
|
255
269
|
|
|
256
270
|
# Add an object to the window
|
|
257
|
-
def add(
|
|
258
|
-
case
|
|
271
|
+
def add(object)
|
|
272
|
+
case object
|
|
259
273
|
when nil
|
|
260
|
-
raise Error, "Cannot add '#{
|
|
261
|
-
when Entity
|
|
262
|
-
@entities.push(o)
|
|
274
|
+
raise Error, "Cannot add '#{object.class}' to window!"
|
|
263
275
|
when Array
|
|
264
|
-
|
|
276
|
+
object.each { |x| add_object(x) }
|
|
265
277
|
else
|
|
266
|
-
add_object(
|
|
278
|
+
add_object(object)
|
|
267
279
|
end
|
|
268
280
|
end
|
|
269
281
|
|
|
270
282
|
# Remove an object from the window
|
|
271
|
-
def remove(
|
|
272
|
-
|
|
273
|
-
raise Error, "Cannot remove '#{o.class}' from window!"
|
|
274
|
-
end
|
|
283
|
+
def remove(object)
|
|
284
|
+
raise Error, "Cannot remove '#{object.class}' from window!" if object.nil?
|
|
275
285
|
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
false
|
|
282
|
-
end
|
|
286
|
+
ix = @objects.index(object)
|
|
287
|
+
return false if ix.nil?
|
|
288
|
+
|
|
289
|
+
@objects.delete_at(ix)
|
|
290
|
+
true
|
|
283
291
|
end
|
|
284
292
|
|
|
285
293
|
# Clear all objects from the window
|
|
286
294
|
def clear
|
|
287
295
|
@objects.clear
|
|
288
|
-
@entities.clear
|
|
289
296
|
end
|
|
290
297
|
|
|
291
298
|
# Set the update callback
|
|
@@ -307,9 +314,8 @@ module Ruby2D
|
|
|
307
314
|
|
|
308
315
|
# Set an event handler
|
|
309
316
|
def on(event, &proc)
|
|
310
|
-
unless @events.
|
|
311
|
-
|
|
312
|
-
end
|
|
317
|
+
raise Error, "`#{event}` is not a valid event type" unless @events.key? event
|
|
318
|
+
|
|
313
319
|
event_id = new_event_key
|
|
314
320
|
@events[event][event_id] = proc
|
|
315
321
|
EventDescriptor.new(event, event_id)
|
|
@@ -340,50 +346,20 @@ module Ruby2D
|
|
|
340
346
|
key = key.downcase
|
|
341
347
|
|
|
342
348
|
# All key events
|
|
343
|
-
@events[:key].each do |
|
|
349
|
+
@events[:key].each do |_id, e|
|
|
344
350
|
e.call(KeyEvent.new(type, key))
|
|
345
351
|
end
|
|
346
352
|
|
|
347
353
|
case type
|
|
348
354
|
# When key is pressed, fired once
|
|
349
355
|
when :down
|
|
350
|
-
|
|
351
|
-
unless @using_dsl
|
|
352
|
-
unless @keys_down.include? key
|
|
353
|
-
@keys_down << key
|
|
354
|
-
end
|
|
355
|
-
end
|
|
356
|
-
|
|
357
|
-
# Call event handler
|
|
358
|
-
@events[:key_down].each do |id, e|
|
|
359
|
-
e.call(KeyEvent.new(type, key))
|
|
360
|
-
end
|
|
356
|
+
_handle_key_down type, key
|
|
361
357
|
# When key is being held down, fired every frame
|
|
362
358
|
when :held
|
|
363
|
-
|
|
364
|
-
unless @using_dsl
|
|
365
|
-
unless @keys_held.include? key
|
|
366
|
-
@keys_held << key
|
|
367
|
-
end
|
|
368
|
-
end
|
|
369
|
-
|
|
370
|
-
# Call event handler
|
|
371
|
-
@events[:key_held].each do |id, e|
|
|
372
|
-
e.call(KeyEvent.new(type, key))
|
|
373
|
-
end
|
|
359
|
+
_handle_key_held type, key
|
|
374
360
|
# When key released, fired once
|
|
375
361
|
when :up
|
|
376
|
-
|
|
377
|
-
unless @using_dsl
|
|
378
|
-
unless @keys_up.include? key
|
|
379
|
-
@keys_up << key
|
|
380
|
-
end
|
|
381
|
-
end
|
|
382
|
-
|
|
383
|
-
# Call event handler
|
|
384
|
-
@events[:key_up].each do |id, e|
|
|
385
|
-
e.call(KeyEvent.new(type, key))
|
|
386
|
-
end
|
|
362
|
+
_handle_key_up type, key
|
|
387
363
|
end
|
|
388
364
|
end
|
|
389
365
|
|
|
@@ -410,72 +386,29 @@ module Ruby2D
|
|
|
410
386
|
# Mouse callback method, called by the native and web extentions
|
|
411
387
|
def mouse_callback(type, button, direction, x, y, delta_x, delta_y)
|
|
412
388
|
# All mouse events
|
|
413
|
-
@events[:mouse].each do |
|
|
389
|
+
@events[:mouse].each do |_id, e|
|
|
414
390
|
e.call(MouseEvent.new(type, button, direction, x, y, delta_x, delta_y))
|
|
415
391
|
end
|
|
416
392
|
|
|
417
393
|
case type
|
|
418
394
|
# When mouse button pressed
|
|
419
395
|
when :down
|
|
420
|
-
|
|
421
|
-
unless @using_dsl
|
|
422
|
-
unless @mouse_buttons_down.include? button
|
|
423
|
-
@mouse_buttons_down << button
|
|
424
|
-
end
|
|
425
|
-
end
|
|
426
|
-
|
|
427
|
-
# Call event handler
|
|
428
|
-
@events[:mouse_down].each do |id, e|
|
|
429
|
-
e.call(MouseEvent.new(type, button, nil, x, y, nil, nil))
|
|
430
|
-
end
|
|
396
|
+
_handle_mouse_down type, button, x, y
|
|
431
397
|
# When mouse button released
|
|
432
398
|
when :up
|
|
433
|
-
|
|
434
|
-
unless @using_dsl
|
|
435
|
-
unless @mouse_buttons_up.include? button
|
|
436
|
-
@mouse_buttons_up << button
|
|
437
|
-
end
|
|
438
|
-
end
|
|
439
|
-
|
|
440
|
-
# Call event handler
|
|
441
|
-
@events[:mouse_up].each do |id, e|
|
|
442
|
-
e.call(MouseEvent.new(type, button, nil, x, y, nil, nil))
|
|
443
|
-
end
|
|
399
|
+
_handle_mouse_up type, button, x, y
|
|
444
400
|
# When mouse motion / movement
|
|
445
401
|
when :scroll
|
|
446
|
-
|
|
447
|
-
unless @using_dsl
|
|
448
|
-
@mouse_scroll_event = true
|
|
449
|
-
@mouse_scroll_direction = direction
|
|
450
|
-
@mouse_scroll_delta_x = delta_x
|
|
451
|
-
@mouse_scroll_delta_y = delta_y
|
|
452
|
-
end
|
|
453
|
-
|
|
454
|
-
# Call event handler
|
|
455
|
-
@events[:mouse_scroll].each do |id, e|
|
|
456
|
-
e.call(MouseEvent.new(type, nil, direction, nil, nil, delta_x, delta_y))
|
|
457
|
-
end
|
|
402
|
+
_handle_mouse_scroll type, direction, delta_x, delta_y
|
|
458
403
|
# When mouse scrolling, wheel or trackpad
|
|
459
404
|
when :move
|
|
460
|
-
|
|
461
|
-
unless @using_dsl
|
|
462
|
-
@mouse_move_event = true
|
|
463
|
-
@mouse_move_delta_x = delta_x
|
|
464
|
-
@mouse_move_delta_y = delta_y
|
|
465
|
-
end
|
|
466
|
-
|
|
467
|
-
# Call event handler
|
|
468
|
-
@events[:mouse_move].each do |id, e|
|
|
469
|
-
e.call(MouseEvent.new(type, nil, nil, x, y, delta_x, delta_y))
|
|
470
|
-
end
|
|
405
|
+
_handle_mouse_move type, x, y, delta_x, delta_y
|
|
471
406
|
end
|
|
472
407
|
end
|
|
473
408
|
|
|
474
409
|
# Add controller mappings from file
|
|
475
410
|
def add_controller_mappings
|
|
476
|
-
if File.exist? @controller_mappings
|
|
477
|
-
ext_add_controller_mappings(@controller_mappings)
|
|
478
|
-
end
|
|
411
|
+
ext_add_controller_mappings(@controller_mappings) if File.exist? @controller_mappings
|
|
479
412
|
end
|
|
480
413
|
|
|
481
414
|
# Controller axis event method for class pattern
|
|
@@ -496,136 +429,48 @@ module Ruby2D
|
|
|
496
429
|
# Controller callback method, called by the native and web extentions
|
|
497
430
|
def controller_callback(which, type, axis, value, button)
|
|
498
431
|
# All controller events
|
|
499
|
-
@events[:controller].each do |
|
|
432
|
+
@events[:controller].each do |_id, e|
|
|
500
433
|
e.call(ControllerEvent.new(which, type, axis, value, button))
|
|
501
434
|
end
|
|
502
435
|
|
|
503
436
|
case type
|
|
504
437
|
# When controller axis motion, like analog sticks
|
|
505
438
|
when :axis
|
|
506
|
-
|
|
507
|
-
# For class pattern
|
|
508
|
-
unless @using_dsl
|
|
509
|
-
@controller_id = which
|
|
510
|
-
|
|
511
|
-
unless @controller_axes_moved.include? axis
|
|
512
|
-
@controller_axes_moved << axis
|
|
513
|
-
end
|
|
514
|
-
|
|
515
|
-
case axis
|
|
516
|
-
when :left_x
|
|
517
|
-
@controller_axis_left_x = value
|
|
518
|
-
when :left_y
|
|
519
|
-
@controller_axis_left_y = value
|
|
520
|
-
when :right_x
|
|
521
|
-
@controller_axis_right_x = value
|
|
522
|
-
when :right_y
|
|
523
|
-
@controller_axis_right_y = value
|
|
524
|
-
end
|
|
525
|
-
end
|
|
526
|
-
|
|
527
|
-
# Call event handler
|
|
528
|
-
@events[:controller_axis].each do |id, e|
|
|
529
|
-
e.call(ControllerAxisEvent.new(which, axis, value))
|
|
530
|
-
end
|
|
439
|
+
_handle_controller_axis which, axis, value
|
|
531
440
|
# When controller button is pressed
|
|
532
441
|
when :button_down
|
|
533
|
-
|
|
534
|
-
unless @using_dsl
|
|
535
|
-
@controller_id = which
|
|
536
|
-
unless @controller_buttons_down.include? button
|
|
537
|
-
@controller_buttons_down << button
|
|
538
|
-
end
|
|
539
|
-
end
|
|
540
|
-
|
|
541
|
-
# Call event handler
|
|
542
|
-
@events[:controller_button_down].each do |id, e|
|
|
543
|
-
e.call(ControllerButtonEvent.new(which, button))
|
|
544
|
-
end
|
|
442
|
+
_handle_controller_button_down which, button
|
|
545
443
|
# When controller button is released
|
|
546
444
|
when :button_up
|
|
547
|
-
|
|
548
|
-
unless @using_dsl
|
|
549
|
-
@controller_id = which
|
|
550
|
-
unless @controller_buttons_up.include? button
|
|
551
|
-
@controller_buttons_up << button
|
|
552
|
-
end
|
|
553
|
-
end
|
|
554
|
-
|
|
555
|
-
# Call event handler
|
|
556
|
-
@events[:controller_button_up].each do |id, e|
|
|
557
|
-
e.call(ControllerButtonEvent.new(which, button))
|
|
558
|
-
end
|
|
445
|
+
_handle_controller_button_up which, button
|
|
559
446
|
end
|
|
560
447
|
end
|
|
561
448
|
|
|
562
449
|
# Update callback method, called by the native and web extentions
|
|
563
450
|
def update_callback
|
|
564
|
-
unless @using_dsl
|
|
565
|
-
update
|
|
566
|
-
end
|
|
451
|
+
update unless @using_dsl
|
|
567
452
|
|
|
568
453
|
@update_proc.call
|
|
569
454
|
|
|
570
|
-
# Run update method on all entities
|
|
571
|
-
@entities.each do |e|
|
|
572
|
-
e.update
|
|
573
|
-
end
|
|
574
|
-
|
|
575
455
|
# Accept and eval commands if in console mode
|
|
576
|
-
if @console
|
|
577
|
-
if STDIN.ready?
|
|
578
|
-
cmd = STDIN.gets
|
|
579
|
-
begin
|
|
580
|
-
res = eval(cmd, TOPLEVEL_BINDING)
|
|
581
|
-
STDOUT.puts "=> #{res.inspect}"
|
|
582
|
-
STDOUT.flush
|
|
583
|
-
rescue SyntaxError => se
|
|
584
|
-
STDOUT.puts se
|
|
585
|
-
STDOUT.flush
|
|
586
|
-
rescue Exception => e
|
|
587
|
-
STDOUT.puts e
|
|
588
|
-
STDOUT.flush
|
|
589
|
-
end
|
|
590
|
-
end
|
|
591
|
-
end
|
|
456
|
+
_handle_console_input if @console && $stdin.ready?
|
|
592
457
|
|
|
593
458
|
# Clear inputs if using class pattern
|
|
594
|
-
unless @using_dsl
|
|
595
|
-
@keys_down.clear
|
|
596
|
-
@keys_held.clear
|
|
597
|
-
@keys_up.clear
|
|
598
|
-
@mouse_buttons_down.clear
|
|
599
|
-
@mouse_buttons_up.clear
|
|
600
|
-
@mouse_scroll_event = false
|
|
601
|
-
@mouse_move_event = false
|
|
602
|
-
@controller_axes_moved.clear
|
|
603
|
-
@controller_buttons_down.clear
|
|
604
|
-
@controller_buttons_up.clear
|
|
605
|
-
end
|
|
459
|
+
_clear_event_stores unless @using_dsl
|
|
606
460
|
end
|
|
607
461
|
|
|
608
462
|
# Render callback method, called by the native and web extentions
|
|
609
463
|
def render_callback
|
|
610
|
-
unless @using_dsl
|
|
611
|
-
render
|
|
612
|
-
end
|
|
464
|
+
render unless @using_dsl
|
|
613
465
|
|
|
614
466
|
@render_proc.call
|
|
615
|
-
|
|
616
|
-
# Run render method on all entities
|
|
617
|
-
@entities.each do |e|
|
|
618
|
-
e.render
|
|
619
|
-
end
|
|
620
467
|
end
|
|
621
468
|
|
|
622
469
|
# Show the window
|
|
623
470
|
def show
|
|
624
|
-
if
|
|
625
|
-
raise Error, "Window#show called multiple times, Ruby2D only supports a single open window"
|
|
626
|
-
end
|
|
471
|
+
raise Error, 'Window#show called multiple times, Ruby2D only supports a single open window' if Window.opened?
|
|
627
472
|
|
|
628
|
-
|
|
473
|
+
Window.send(:opened!)
|
|
629
474
|
ext_show
|
|
630
475
|
end
|
|
631
476
|
|
|
@@ -634,11 +479,11 @@ module Ruby2D
|
|
|
634
479
|
if path
|
|
635
480
|
ext_screenshot(path)
|
|
636
481
|
else
|
|
637
|
-
if RUBY_ENGINE == 'ruby'
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
482
|
+
time = if RUBY_ENGINE == 'ruby'
|
|
483
|
+
Time.now.utc.strftime '%Y-%m-%d--%H-%M-%S'
|
|
484
|
+
else
|
|
485
|
+
Time.now.utc.to_i
|
|
486
|
+
end
|
|
642
487
|
ext_screenshot("./screenshot-#{time}.png")
|
|
643
488
|
end
|
|
644
489
|
end
|
|
@@ -653,15 +498,15 @@ module Ruby2D
|
|
|
653
498
|
private
|
|
654
499
|
|
|
655
500
|
# An an object to the window, used by the public `add` method
|
|
656
|
-
def add_object(
|
|
657
|
-
if !@objects.include?(
|
|
658
|
-
index = @objects.index do |
|
|
659
|
-
|
|
501
|
+
def add_object(object)
|
|
502
|
+
if !@objects.include?(object)
|
|
503
|
+
index = @objects.index do |obj|
|
|
504
|
+
obj.z > object.z
|
|
660
505
|
end
|
|
661
506
|
if index
|
|
662
|
-
@objects.insert(index,
|
|
507
|
+
@objects.insert(index, object)
|
|
663
508
|
else
|
|
664
|
-
@objects.push(
|
|
509
|
+
@objects.push(object)
|
|
665
510
|
end
|
|
666
511
|
true
|
|
667
512
|
else
|
|
@@ -669,5 +514,297 @@ module Ruby2D
|
|
|
669
514
|
end
|
|
670
515
|
end
|
|
671
516
|
|
|
517
|
+
def _set_any_window_properties(opts)
|
|
518
|
+
@background = Color.new(opts[:background]) if Color.valid? opts[:background]
|
|
519
|
+
@title = opts[:title] if opts[:title]
|
|
520
|
+
@icon = opts[:icon] if opts[:icon]
|
|
521
|
+
@resizable = opts[:resizable] if opts[:resizable]
|
|
522
|
+
@borderless = opts[:borderless] if opts[:borderless]
|
|
523
|
+
@fullscreen = opts[:fullscreen] if opts[:fullscreen]
|
|
524
|
+
end
|
|
525
|
+
|
|
526
|
+
def _set_any_window_dimensions(opts)
|
|
527
|
+
@width = opts[:width] if opts[:width]
|
|
528
|
+
@height = opts[:height] if opts[:height]
|
|
529
|
+
@viewport_width = opts[:viewport_width] if opts[:viewport_width]
|
|
530
|
+
@viewport_height = opts[:viewport_height] if opts[:viewport_height]
|
|
531
|
+
@highdpi = opts[:highdpi] unless opts[:highdpi].nil?
|
|
532
|
+
end
|
|
533
|
+
|
|
534
|
+
def _handle_key_down(type, key)
|
|
535
|
+
# For class pattern
|
|
536
|
+
@keys_down << key if !@using_dsl && !(@keys_down.include? key)
|
|
537
|
+
|
|
538
|
+
# Call event handler
|
|
539
|
+
@events[:key_down].each do |_id, e|
|
|
540
|
+
e.call(KeyEvent.new(type, key))
|
|
541
|
+
end
|
|
542
|
+
end
|
|
543
|
+
|
|
544
|
+
def _handle_key_held(type, key)
|
|
545
|
+
# For class pattern
|
|
546
|
+
@keys_held << key if !@using_dsl && !(@keys_held.include? key)
|
|
547
|
+
|
|
548
|
+
# Call event handler
|
|
549
|
+
@events[:key_held].each do |_id, e|
|
|
550
|
+
e.call(KeyEvent.new(type, key))
|
|
551
|
+
end
|
|
552
|
+
end
|
|
553
|
+
|
|
554
|
+
def _handle_key_up(type, key)
|
|
555
|
+
# For class pattern
|
|
556
|
+
@keys_up << key if !@using_dsl && !(@keys_up.include? key)
|
|
557
|
+
|
|
558
|
+
# Call event handler
|
|
559
|
+
@events[:key_up].each do |_id, e|
|
|
560
|
+
e.call(KeyEvent.new(type, key))
|
|
561
|
+
end
|
|
562
|
+
end
|
|
563
|
+
|
|
564
|
+
def _handle_mouse_down(type, button, x, y)
|
|
565
|
+
# For class pattern
|
|
566
|
+
@mouse_buttons_down << button if !@using_dsl && !(@mouse_buttons_down.include? button)
|
|
567
|
+
|
|
568
|
+
# Call event handler
|
|
569
|
+
@events[:mouse_down].each do |_id, e|
|
|
570
|
+
e.call(MouseEvent.new(type, button, nil, x, y, nil, nil))
|
|
571
|
+
end
|
|
572
|
+
end
|
|
573
|
+
|
|
574
|
+
def _handle_mouse_up(type, button, x, y)
|
|
575
|
+
# For class pattern
|
|
576
|
+
@mouse_buttons_up << button if !@using_dsl && !(@mouse_buttons_up.include? button)
|
|
577
|
+
|
|
578
|
+
# Call event handler
|
|
579
|
+
@events[:mouse_up].each do |_id, e|
|
|
580
|
+
e.call(MouseEvent.new(type, button, nil, x, y, nil, nil))
|
|
581
|
+
end
|
|
582
|
+
end
|
|
583
|
+
|
|
584
|
+
def _handle_mouse_scroll(type, direction, delta_x, delta_y)
|
|
585
|
+
# For class pattern
|
|
586
|
+
unless @using_dsl
|
|
587
|
+
@mouse_scroll_event = true
|
|
588
|
+
@mouse_scroll_direction = direction
|
|
589
|
+
@mouse_scroll_delta_x = delta_x
|
|
590
|
+
@mouse_scroll_delta_y = delta_y
|
|
591
|
+
end
|
|
592
|
+
|
|
593
|
+
# Call event handler
|
|
594
|
+
@events[:mouse_scroll].each do |_id, e|
|
|
595
|
+
e.call(MouseEvent.new(type, nil, direction, nil, nil, delta_x, delta_y))
|
|
596
|
+
end
|
|
597
|
+
end
|
|
598
|
+
|
|
599
|
+
def _handle_mouse_move(type, x, y, delta_x, delta_y)
|
|
600
|
+
# For class pattern
|
|
601
|
+
unless @using_dsl
|
|
602
|
+
@mouse_move_event = true
|
|
603
|
+
@mouse_move_delta_x = delta_x
|
|
604
|
+
@mouse_move_delta_y = delta_y
|
|
605
|
+
end
|
|
606
|
+
|
|
607
|
+
# Call event handler
|
|
608
|
+
@events[:mouse_move].each do |_id, e|
|
|
609
|
+
e.call(MouseEvent.new(type, nil, nil, x, y, delta_x, delta_y))
|
|
610
|
+
end
|
|
611
|
+
end
|
|
612
|
+
|
|
613
|
+
def _handle_controller_axis(which, axis, value)
|
|
614
|
+
# For class pattern
|
|
615
|
+
unless @using_dsl
|
|
616
|
+
@controller_id = which
|
|
617
|
+
@controller_axes_moved << axis unless @controller_axes_moved.include? axis
|
|
618
|
+
_set_controller_axis_value axis, value
|
|
619
|
+
end
|
|
620
|
+
|
|
621
|
+
# Call event handler
|
|
622
|
+
@events[:controller_axis].each do |_id, e|
|
|
623
|
+
e.call(ControllerAxisEvent.new(which, axis, value))
|
|
624
|
+
end
|
|
625
|
+
end
|
|
626
|
+
|
|
627
|
+
def _set_controller_axis_value(axis, value)
|
|
628
|
+
case axis
|
|
629
|
+
when :left_x
|
|
630
|
+
@controller_axis_left_x = value
|
|
631
|
+
when :left_y
|
|
632
|
+
@controller_axis_left_y = value
|
|
633
|
+
when :right_x
|
|
634
|
+
@controller_axis_right_x = value
|
|
635
|
+
when :right_y
|
|
636
|
+
@controller_axis_right_y = value
|
|
637
|
+
end
|
|
638
|
+
end
|
|
639
|
+
|
|
640
|
+
def _handle_controller_button_down(which, button)
|
|
641
|
+
# For class pattern
|
|
642
|
+
unless @using_dsl
|
|
643
|
+
@controller_id = which
|
|
644
|
+
@controller_buttons_down << button unless @controller_buttons_down.include? button
|
|
645
|
+
end
|
|
646
|
+
|
|
647
|
+
# Call event handler
|
|
648
|
+
@events[:controller_button_down].each do |_id, e|
|
|
649
|
+
e.call(ControllerButtonEvent.new(which, button))
|
|
650
|
+
end
|
|
651
|
+
end
|
|
652
|
+
|
|
653
|
+
def _handle_controller_button_up(which, button)
|
|
654
|
+
# For class pattern
|
|
655
|
+
unless @using_dsl
|
|
656
|
+
@controller_id = which
|
|
657
|
+
@controller_buttons_up << button unless @controller_buttons_up.include? button
|
|
658
|
+
end
|
|
659
|
+
|
|
660
|
+
# Call event handler
|
|
661
|
+
@events[:controller_button_up].each do |_id, e|
|
|
662
|
+
e.call(ControllerButtonEvent.new(which, button))
|
|
663
|
+
end
|
|
664
|
+
end
|
|
665
|
+
|
|
666
|
+
# --- start exception
|
|
667
|
+
# Exception from lint check for this method only
|
|
668
|
+
#
|
|
669
|
+
# rubocop:disable Lint/RescueException
|
|
670
|
+
# rubocop:disable Security/Eval
|
|
671
|
+
def _handle_console_input
|
|
672
|
+
cmd = $stdin.gets
|
|
673
|
+
begin
|
|
674
|
+
res = eval(cmd, TOPLEVEL_BINDING)
|
|
675
|
+
$stdout.puts "=> #{res.inspect}"
|
|
676
|
+
$stdout.flush
|
|
677
|
+
rescue SyntaxError => e
|
|
678
|
+
$stdout.puts e
|
|
679
|
+
$stdout.flush
|
|
680
|
+
rescue Exception => e
|
|
681
|
+
$stdout.puts e
|
|
682
|
+
$stdout.flush
|
|
683
|
+
end
|
|
684
|
+
end
|
|
685
|
+
# rubocop:enable Lint/RescueException
|
|
686
|
+
# rubocop:enable Security/Eval
|
|
687
|
+
# ---- end exception
|
|
688
|
+
|
|
689
|
+
def _clear_event_stores
|
|
690
|
+
@keys_down.clear
|
|
691
|
+
@keys_held.clear
|
|
692
|
+
@keys_up.clear
|
|
693
|
+
@mouse_buttons_down.clear
|
|
694
|
+
@mouse_buttons_up.clear
|
|
695
|
+
@mouse_scroll_event = false
|
|
696
|
+
@mouse_move_event = false
|
|
697
|
+
@controller_axes_moved.clear
|
|
698
|
+
@controller_buttons_down.clear
|
|
699
|
+
@controller_buttons_up.clear
|
|
700
|
+
end
|
|
701
|
+
|
|
702
|
+
def _init_window_defaults
|
|
703
|
+
# Window background color
|
|
704
|
+
@background = Color.new([0.0, 0.0, 0.0, 1.0])
|
|
705
|
+
|
|
706
|
+
# Window icon
|
|
707
|
+
@icon = nil
|
|
708
|
+
|
|
709
|
+
# Window characteristics
|
|
710
|
+
@resizable = false
|
|
711
|
+
@borderless = false
|
|
712
|
+
@fullscreen = false
|
|
713
|
+
@highdpi = false
|
|
714
|
+
|
|
715
|
+
# Size of the window's viewport (the drawable area)
|
|
716
|
+
@viewport_width = nil
|
|
717
|
+
@viewport_height = nil
|
|
718
|
+
|
|
719
|
+
# Size of the computer's display
|
|
720
|
+
@display_width = nil
|
|
721
|
+
@display_height = nil
|
|
722
|
+
end
|
|
723
|
+
|
|
724
|
+
def _init_event_stores
|
|
725
|
+
_init_key_event_stores
|
|
726
|
+
_init_mouse_event_stores
|
|
727
|
+
_init_controller_event_stores
|
|
728
|
+
end
|
|
729
|
+
|
|
730
|
+
def _init_key_event_stores
|
|
731
|
+
# Event stores for class pattern
|
|
732
|
+
@keys_down = []
|
|
733
|
+
@keys_held = []
|
|
734
|
+
@keys_up = []
|
|
735
|
+
end
|
|
736
|
+
|
|
737
|
+
def _init_mouse_event_stores
|
|
738
|
+
@mouse_buttons_down = []
|
|
739
|
+
@mouse_buttons_up = []
|
|
740
|
+
@mouse_scroll_event = false
|
|
741
|
+
@mouse_scroll_direction = nil
|
|
742
|
+
@mouse_scroll_delta_x = 0
|
|
743
|
+
@mouse_scroll_delta_y = 0
|
|
744
|
+
@mouse_move_event = false
|
|
745
|
+
@mouse_move_delta_x = 0
|
|
746
|
+
@mouse_move_delta_y = 0
|
|
747
|
+
end
|
|
748
|
+
|
|
749
|
+
def _init_controller_event_stores
|
|
750
|
+
@controller_id = nil
|
|
751
|
+
@controller_axes_moved = []
|
|
752
|
+
@controller_axis_left_x = 0
|
|
753
|
+
@controller_axis_left_y = 0
|
|
754
|
+
@controller_axis_right_x = 0
|
|
755
|
+
@controller_axis_right_y = 0
|
|
756
|
+
@controller_buttons_down = []
|
|
757
|
+
@controller_buttons_up = []
|
|
758
|
+
end
|
|
759
|
+
|
|
760
|
+
def _init_event_registrations
|
|
761
|
+
# Mouse X and Y position in the window
|
|
762
|
+
@mouse_x = 0
|
|
763
|
+
@mouse_y = 0
|
|
764
|
+
|
|
765
|
+
# Controller axis and button mappings file
|
|
766
|
+
@controller_mappings = "#{File.expand_path('~')}/.ruby2d/controllers.txt"
|
|
767
|
+
|
|
768
|
+
# Unique ID for the input event being registered
|
|
769
|
+
@event_key = 0
|
|
770
|
+
|
|
771
|
+
# Registered input events
|
|
772
|
+
@events = {
|
|
773
|
+
key: {},
|
|
774
|
+
key_down: {},
|
|
775
|
+
key_held: {},
|
|
776
|
+
key_up: {},
|
|
777
|
+
mouse: {},
|
|
778
|
+
mouse_up: {},
|
|
779
|
+
mouse_down: {},
|
|
780
|
+
mouse_scroll: {},
|
|
781
|
+
mouse_move: {},
|
|
782
|
+
controller: {},
|
|
783
|
+
controller_axis: {},
|
|
784
|
+
controller_button_down: {},
|
|
785
|
+
controller_button_up: {}
|
|
786
|
+
}
|
|
787
|
+
end
|
|
788
|
+
|
|
789
|
+
def _init_procs_dsl_console
|
|
790
|
+
# The window update block
|
|
791
|
+
@update_proc = proc {}
|
|
792
|
+
|
|
793
|
+
# The window render block
|
|
794
|
+
@render_proc = proc {}
|
|
795
|
+
|
|
796
|
+
# Detect if window is being used through the DSL or as a class instance
|
|
797
|
+
@using_dsl = !(method(:update).parameters.empty? || method(:render).parameters.empty?)
|
|
798
|
+
|
|
799
|
+
# Whether diagnostic messages should be printed
|
|
800
|
+
@diagnostics = false
|
|
801
|
+
|
|
802
|
+
# Console mode, enabled at command line
|
|
803
|
+
@console = if RUBY_ENGINE == 'ruby'
|
|
804
|
+
ENV['RUBY2D_ENABLE_CONSOLE'] == 'true'
|
|
805
|
+
else
|
|
806
|
+
false
|
|
807
|
+
end
|
|
808
|
+
end
|
|
672
809
|
end
|
|
673
810
|
end
|