ruby2d 0.11.3 → 0.12.0
Sign up to get free protection for your applications and to get access to all the features.
- 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/template.html +2 -1
- 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/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/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/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/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/libopus.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 -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/libwebp.a +0 -0
- data/assets/windows/mingw-w64-ucrt-x86_64/lib/libz.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 +33 -20
- 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 +5 -3
- 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 +51 -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/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-ucrt-x86_64/lib/libpng16.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
|