ruby2d 0.9.2 → 0.10.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/assets/README.md +7 -8
- data/assets/Rakefile +85 -0
- data/assets/include/SDL2/SDL.h +4 -1
- data/assets/include/SDL2/SDL_assert.h +3 -1
- data/assets/include/SDL2/SDL_atomic.h +20 -2
- data/assets/include/SDL2/SDL_audio.h +47 -14
- data/assets/include/SDL2/SDL_bits.h +10 -1
- data/assets/include/SDL2/SDL_blendmode.h +10 -7
- data/assets/include/SDL2/SDL_clipboard.h +1 -1
- data/assets/include/SDL2/SDL_config.h +24 -390
- data/assets/include/SDL2/SDL_config_android.h +182 -0
- data/assets/include/SDL2/SDL_config_iphoneos.h +207 -0
- data/assets/include/SDL2/SDL_config_macosx.h +266 -0
- data/assets/include/SDL2/SDL_config_minimal.h +85 -0
- data/assets/include/SDL2/SDL_config_os2.h +188 -0
- data/assets/include/SDL2/SDL_config_pandora.h +135 -0
- data/assets/include/SDL2/SDL_config_psp.h +165 -0
- data/assets/include/SDL2/SDL_config_windows.h +288 -0
- data/assets/include/SDL2/SDL_config_winrt.h +243 -0
- data/assets/include/SDL2/SDL_config_wiz.h +149 -0
- data/assets/include/SDL2/SDL_copying.h +20 -0
- data/assets/include/SDL2/SDL_cpuinfo.h +119 -8
- data/assets/include/SDL2/SDL_egl.h +4 -1
- data/assets/include/SDL2/SDL_endian.h +6 -3
- data/assets/include/SDL2/SDL_error.h +38 -2
- data/assets/include/SDL2/SDL_events.h +67 -28
- data/assets/include/SDL2/SDL_filesystem.h +1 -1
- data/assets/include/SDL2/SDL_gamecontroller.h +160 -9
- data/assets/include/SDL2/SDL_gesture.h +1 -1
- data/assets/include/SDL2/SDL_haptic.h +10 -1
- data/assets/include/SDL2/SDL_hints.h +460 -17
- data/assets/include/SDL2/SDL_image.h +2 -2
- data/assets/include/SDL2/SDL_joystick.h +115 -24
- data/assets/include/SDL2/SDL_keyboard.h +1 -1
- data/assets/include/SDL2/SDL_keycode.h +11 -9
- data/assets/include/SDL2/SDL_loadso.h +1 -1
- data/assets/include/SDL2/SDL_locale.h +101 -0
- data/assets/include/SDL2/SDL_log.h +3 -3
- data/assets/include/SDL2/SDL_main.h +28 -16
- data/assets/include/SDL2/SDL_messagebox.h +6 -4
- data/assets/include/SDL2/SDL_metal.h +117 -0
- data/assets/include/SDL2/SDL_misc.h +75 -0
- data/assets/include/SDL2/SDL_mouse.h +1 -1
- data/assets/include/SDL2/SDL_mutex.h +1 -1
- data/assets/include/SDL2/SDL_name.h +1 -1
- data/assets/include/SDL2/SDL_opengl.h +1 -1
- data/assets/include/SDL2/SDL_opengl_glext.h +3 -0
- data/assets/include/SDL2/SDL_opengles.h +1 -1
- data/assets/include/SDL2/SDL_opengles2.h +1 -1
- data/assets/include/SDL2/SDL_pixels.h +27 -18
- data/assets/include/SDL2/SDL_platform.h +1 -1
- data/assets/include/SDL2/SDL_power.h +1 -1
- data/assets/include/SDL2/SDL_quit.h +1 -1
- data/assets/include/SDL2/SDL_rect.h +29 -3
- data/assets/include/SDL2/SDL_render.h +230 -3
- data/assets/include/SDL2/SDL_revision.h +2 -2
- data/assets/include/SDL2/SDL_rwops.h +51 -22
- data/assets/include/SDL2/SDL_scancode.h +2 -2
- data/assets/include/SDL2/SDL_sensor.h +28 -12
- data/assets/include/SDL2/SDL_shape.h +1 -1
- data/assets/include/SDL2/SDL_stdinc.h +44 -4
- data/assets/include/SDL2/SDL_surface.h +12 -2
- data/assets/include/SDL2/SDL_system.h +50 -4
- data/assets/include/SDL2/SDL_syswm.h +39 -9
- data/assets/include/SDL2/SDL_test.h +1 -1
- data/assets/include/SDL2/SDL_test_assert.h +1 -1
- data/assets/include/SDL2/SDL_test_common.h +32 -2
- data/assets/include/SDL2/SDL_test_compare.h +1 -1
- data/assets/include/SDL2/SDL_test_crc32.h +1 -1
- data/assets/include/SDL2/SDL_test_font.h +1 -1
- data/assets/include/SDL2/SDL_test_fuzzer.h +1 -1
- data/assets/include/SDL2/SDL_test_harness.h +1 -1
- data/assets/include/SDL2/SDL_test_images.h +1 -1
- data/assets/include/SDL2/SDL_test_log.h +1 -1
- data/assets/include/SDL2/SDL_test_md5.h +1 -1
- data/assets/include/SDL2/SDL_test_memory.h +3 -3
- data/assets/include/SDL2/SDL_test_random.h +1 -1
- data/assets/include/SDL2/SDL_thread.h +34 -11
- data/assets/include/SDL2/SDL_timer.h +1 -1
- data/assets/include/SDL2/SDL_touch.h +17 -1
- data/assets/include/SDL2/SDL_types.h +1 -1
- data/assets/include/SDL2/SDL_version.h +2 -2
- data/assets/include/SDL2/SDL_video.h +11 -5
- data/assets/include/SDL2/SDL_vulkan.h +9 -11
- data/assets/include/SDL2/begin_code.h +8 -9
- data/assets/include/SDL2/close_code.h +4 -1
- data/assets/macos/lib/libFLAC.a +0 -0
- data/assets/macos/lib/libSDL2.a +0 -0
- data/assets/macos/lib/libSDL2_image.a +0 -0
- data/assets/macos/lib/libSDL2_mixer.a +0 -0
- data/assets/macos/lib/libSDL2_ttf.a +0 -0
- data/assets/macos/lib/libfreetype.a +0 -0
- data/assets/macos/lib/libjpeg.a +0 -0
- data/assets/macos/lib/libmpg123.a +0 -0
- data/assets/macos/lib/libogg.a +0 -0
- data/assets/macos/lib/libpng16.a +0 -0
- data/assets/macos/lib/libtiff.a +0 -0
- data/assets/macos/lib/libvorbis.a +0 -0
- data/assets/macos/lib/libvorbisfile.a +0 -0
- data/assets/macos/lib/libwebp.a +0 -0
- data/assets/mingw/bin/SDL2.dll +0 -0
- data/assets/mingw/bin/SDL2_image.dll +0 -0
- data/assets/mingw/bin/libpng16-16.dll +0 -0
- data/assets/mingw/bin/libtiff-5.dll +0 -0
- data/assets/mingw/bin/libwebp-7.dll +0 -0
- data/assets/mingw/lib/libSDL2.a +0 -0
- data/assets/mingw/lib/libSDL2.dll.a +0 -0
- data/assets/mingw/lib/libSDL2_image.a +0 -0
- data/assets/mingw/lib/libSDL2_image.dll.a +0 -0
- data/assets/mingw/lib/libSDL2_test.a +0 -0
- data/assets/mingw/lib/libSDL2main.a +0 -0
- data/bin/ruby2d +2 -1
- data/{assets/linux/simple2d/src/simple2d.c → ext/ruby2d/common.c} +32 -32
- data/{assets/linux/simple2d/src → ext/ruby2d}/controllers.c +17 -17
- data/ext/ruby2d/extconf.rb +6 -36
- data/{assets/linux/simple2d/src → ext/ruby2d}/gl.c +106 -85
- data/{assets/linux/simple2d/src → ext/ruby2d}/gl2.c +35 -20
- data/{assets/linux/simple2d/src → ext/ruby2d}/gl3.c +146 -58
- data/{assets/linux/simple2d/src → ext/ruby2d}/gles.c +41 -26
- data/{assets/linux/simple2d/src → ext/ruby2d}/image.c +16 -16
- data/{assets/linux/simple2d/src → ext/ruby2d}/input.c +8 -8
- data/{assets/linux/simple2d/src → ext/ruby2d}/music.c +30 -17
- data/ext/ruby2d/ruby2d.c +427 -290
- data/ext/ruby2d/ruby2d.h +789 -0
- data/{assets/linux/simple2d/src → ext/ruby2d}/shapes.c +18 -18
- data/ext/ruby2d/sound.c +118 -0
- data/{assets/linux/simple2d/src → ext/ruby2d}/sprite.c +16 -16
- data/{assets/linux/simple2d/src → ext/ruby2d}/text.c +22 -22
- data/ext/ruby2d/tileset.c +30 -0
- data/{assets/linux/simple2d/src → ext/ruby2d}/window.c +71 -60
- data/lib/ruby2d.rb +5 -2
- data/lib/ruby2d/circle.rb +18 -2
- data/lib/ruby2d/cli/build.rb +3 -8
- data/lib/ruby2d/cli/colorize.rb +10 -0
- data/lib/ruby2d/dsl.rb +16 -9
- data/lib/ruby2d/entity.rb +17 -0
- data/lib/ruby2d/font.rb +4 -3
- data/lib/ruby2d/image.rb +24 -1
- data/lib/ruby2d/line.rb +20 -0
- data/lib/ruby2d/music.rb +5 -0
- data/lib/ruby2d/pixel.rb +17 -0
- data/lib/ruby2d/quad.rb +18 -0
- data/lib/ruby2d/rectangle.rb +11 -2
- data/lib/ruby2d/renderable.rb +4 -8
- data/lib/ruby2d/sound.rb +5 -0
- data/lib/ruby2d/sprite.rb +35 -3
- data/lib/ruby2d/square.rb +9 -0
- data/lib/ruby2d/text.rb +22 -1
- data/lib/ruby2d/tileset.rb +69 -0
- data/lib/ruby2d/triangle.rb +16 -0
- data/lib/ruby2d/version.rb +1 -1
- data/lib/ruby2d/window.rb +249 -22
- metadata +41 -27
- data/assets/include/simple2d.h +0 -735
- data/assets/linux/simple2d/Makefile +0 -250
- data/assets/linux/simple2d/bin/simple2d.sh +0 -1249
- data/assets/linux/simple2d/include/simple2d.h +0 -735
- data/assets/linux/simple2d/src/sound.c +0 -56
- data/assets/macos/lib/libsimple2d.a +0 -0
- data/assets/mingw/lib/libsimple2d.a +0 -0
- data/lib/ruby2d/colorize.rb +0 -10
data/lib/ruby2d/triangle.rb
CHANGED
@@ -38,8 +38,24 @@ module Ruby2D
|
|
38
38
|
questioned_area <= self_area
|
39
39
|
end
|
40
40
|
|
41
|
+
def self.draw(opts = {})
|
42
|
+
ext_draw([
|
43
|
+
opts[:x1], opts[:y1], opts[:color][0][0], opts[:color][0][1], opts[:color][0][2], opts[:color][0][3],
|
44
|
+
opts[:x2], opts[:y2], opts[:color][1][0], opts[:color][1][1], opts[:color][1][2], opts[:color][1][3],
|
45
|
+
opts[:x3], opts[:y3], opts[:color][2][0], opts[:color][2][1], opts[:color][2][2], opts[:color][2][3]
|
46
|
+
])
|
47
|
+
end
|
48
|
+
|
41
49
|
private
|
42
50
|
|
51
|
+
def render
|
52
|
+
self.class.ext_draw([
|
53
|
+
@x1, @y1, @c1.r, @c1.g, @c1.b, @c1.a,
|
54
|
+
@x2, @y2, @c2.r, @c2.g, @c2.b, @c2.a,
|
55
|
+
@x3, @y3, @c3.r, @c3.g, @c3.b, @c3.a
|
56
|
+
])
|
57
|
+
end
|
58
|
+
|
43
59
|
def triangle_area(x1, y1, x2, y2, x3, y3)
|
44
60
|
(x1*y2 + x2*y3 + x3*y1 - x3*y2 - x1*y3 - x2*y1).abs / 2
|
45
61
|
end
|
data/lib/ruby2d/version.rb
CHANGED
data/lib/ruby2d/window.rb
CHANGED
@@ -6,20 +6,17 @@ module Ruby2D
|
|
6
6
|
class Window
|
7
7
|
|
8
8
|
# Event structures
|
9
|
-
EventDescriptor
|
10
|
-
MouseEvent
|
11
|
-
KeyEvent
|
9
|
+
EventDescriptor = Struct.new(:type, :id)
|
10
|
+
MouseEvent = Struct.new(:type, :button, :direction, :x, :y, :delta_x, :delta_y)
|
11
|
+
KeyEvent = Struct.new(:type, :key)
|
12
12
|
ControllerEvent = Struct.new(:which, :type, :axis, :value, :button)
|
13
13
|
ControllerAxisEvent = Struct.new(:which, :axis, :value)
|
14
14
|
ControllerButtonEvent = Struct.new(:which, :button)
|
15
15
|
|
16
16
|
def initialize(args = {})
|
17
17
|
|
18
|
-
# This window instance, stored so it can be called by the class methods
|
19
|
-
@@window = self
|
20
|
-
|
21
18
|
# Title of the window
|
22
|
-
@title = args[:title]
|
19
|
+
@title = args[:title] || "Ruby 2D"
|
23
20
|
|
24
21
|
# Window background color
|
25
22
|
@background = Color.new([0.0, 0.0, 0.0, 1.0])
|
@@ -51,14 +48,39 @@ module Ruby2D
|
|
51
48
|
# Vertical synchronization, set to prevent screen tearing (recommended)
|
52
49
|
@vsync = args[:vsync] || true
|
53
50
|
|
51
|
+
# Renderable objects currently in the window, like a linear scene graph
|
52
|
+
@objects = []
|
53
|
+
|
54
|
+
# Entities currently in the window
|
55
|
+
@entities = []
|
56
|
+
|
54
57
|
# Mouse X and Y position in the window
|
55
58
|
@mouse_x, @mouse_y = 0, 0
|
56
59
|
|
57
60
|
# Controller axis and button mappings file
|
58
61
|
@controller_mappings = File.expand_path('~') + "/.ruby2d/controllers.txt"
|
59
62
|
|
60
|
-
#
|
61
|
-
@
|
63
|
+
# Event stores for class pattern
|
64
|
+
@keys_down = []
|
65
|
+
@keys_held = []
|
66
|
+
@keys_up = []
|
67
|
+
@mouse_buttons_down = []
|
68
|
+
@mouse_buttons_up = []
|
69
|
+
@mouse_scroll_event = false
|
70
|
+
@mouse_scroll_direction = nil
|
71
|
+
@mouse_scroll_delta_x = 0
|
72
|
+
@mouse_scroll_delta_y = 0
|
73
|
+
@mouse_move_event = false
|
74
|
+
@mouse_move_delta_x = 0
|
75
|
+
@mouse_move_delta_y = 0
|
76
|
+
@controller_id = nil
|
77
|
+
@controller_axes_moved = []
|
78
|
+
@controller_axis_left_x = 0
|
79
|
+
@controller_axis_left_y = 0
|
80
|
+
@controller_axis_right_x = 0
|
81
|
+
@controller_axis_right_y = 0
|
82
|
+
@controller_buttons_down = []
|
83
|
+
@controller_buttons_up = []
|
62
84
|
|
63
85
|
# Unique ID for the input event being registered
|
64
86
|
@event_key = 0
|
@@ -83,6 +105,14 @@ module Ruby2D
|
|
83
105
|
# The window update block
|
84
106
|
@update_proc = Proc.new {}
|
85
107
|
|
108
|
+
# The window render block
|
109
|
+
@render_proc = Proc.new {}
|
110
|
+
|
111
|
+
# Detect if window is being used through the DSL or as a class instance
|
112
|
+
unless method(:update).parameters.empty? || method(:render).parameters.empty?
|
113
|
+
@using_dsl = true
|
114
|
+
end
|
115
|
+
|
86
116
|
# Whether diagnostic messages should be printed
|
87
117
|
@diagnostics = false
|
88
118
|
|
@@ -118,43 +148,47 @@ module Ruby2D
|
|
118
148
|
def screenshot(opts = nil); get(:screenshot, opts) end
|
119
149
|
|
120
150
|
def get(sym, opts = nil)
|
121
|
-
|
151
|
+
DSL.window.get(sym, opts)
|
122
152
|
end
|
123
153
|
|
124
154
|
def set(opts)
|
125
|
-
|
155
|
+
DSL.window.set(opts)
|
126
156
|
end
|
127
157
|
|
128
158
|
def on(event, &proc)
|
129
|
-
|
159
|
+
DSL.window.on(event, &proc)
|
130
160
|
end
|
131
161
|
|
132
162
|
def off(event_descriptor)
|
133
|
-
|
163
|
+
DSL.window.off(event_descriptor)
|
134
164
|
end
|
135
165
|
|
136
166
|
def add(o)
|
137
|
-
|
167
|
+
DSL.window.add(o)
|
138
168
|
end
|
139
169
|
|
140
170
|
def remove(o)
|
141
|
-
|
171
|
+
DSL.window.remove(o)
|
142
172
|
end
|
143
173
|
|
144
174
|
def clear
|
145
|
-
|
175
|
+
DSL.window.clear
|
146
176
|
end
|
147
177
|
|
148
178
|
def update(&proc)
|
149
|
-
|
179
|
+
DSL.window.update(&proc)
|
180
|
+
end
|
181
|
+
|
182
|
+
def render(&proc)
|
183
|
+
DSL.window.render(&proc)
|
150
184
|
end
|
151
185
|
|
152
186
|
def show
|
153
|
-
|
187
|
+
DSL.window.show
|
154
188
|
end
|
155
189
|
|
156
190
|
def close
|
157
|
-
|
191
|
+
DSL.window.close
|
158
192
|
end
|
159
193
|
end
|
160
194
|
|
@@ -219,6 +253,8 @@ module Ruby2D
|
|
219
253
|
case o
|
220
254
|
when nil
|
221
255
|
raise Error, "Cannot add '#{o.class}' to window!"
|
256
|
+
when Entity
|
257
|
+
@entities.push(o)
|
222
258
|
when Array
|
223
259
|
o.each { |x| add_object(x) }
|
224
260
|
else
|
@@ -232,8 +268,9 @@ module Ruby2D
|
|
232
268
|
raise Error, "Cannot remove '#{o.class}' from window!"
|
233
269
|
end
|
234
270
|
|
235
|
-
|
236
|
-
|
271
|
+
collection = o.class.ancestors.include?(Ruby2D::Entity) ? @entities : @objects
|
272
|
+
if i = collection.index(o)
|
273
|
+
collection.delete_at(i)
|
237
274
|
true
|
238
275
|
else
|
239
276
|
false
|
@@ -243,14 +280,21 @@ module Ruby2D
|
|
243
280
|
# Clear all objects from the window
|
244
281
|
def clear
|
245
282
|
@objects.clear
|
283
|
+
@entities.clear
|
246
284
|
end
|
247
285
|
|
248
|
-
# Set
|
286
|
+
# Set the update callback
|
249
287
|
def update(&proc)
|
250
288
|
@update_proc = proc
|
251
289
|
true
|
252
290
|
end
|
253
291
|
|
292
|
+
# Set the render callback
|
293
|
+
def render(&proc)
|
294
|
+
@render_proc = proc
|
295
|
+
true
|
296
|
+
end
|
297
|
+
|
254
298
|
# Generate a new event key (ID)
|
255
299
|
def new_event_key
|
256
300
|
@event_key = @event_key.next
|
@@ -271,6 +315,21 @@ module Ruby2D
|
|
271
315
|
@events[event_descriptor.type].delete(event_descriptor.id)
|
272
316
|
end
|
273
317
|
|
318
|
+
# Key down event method for class pattern
|
319
|
+
def key_down(key)
|
320
|
+
@keys_down.include? key
|
321
|
+
end
|
322
|
+
|
323
|
+
# Key held event method for class pattern
|
324
|
+
def key_held(key)
|
325
|
+
@keys_held.include? key
|
326
|
+
end
|
327
|
+
|
328
|
+
# Key up event method for class pattern
|
329
|
+
def key_up(key)
|
330
|
+
@keys_up.include? key
|
331
|
+
end
|
332
|
+
|
274
333
|
# Key callback method, called by the native and web extentions
|
275
334
|
def key_callback(type, key)
|
276
335
|
key = key.downcase
|
@@ -283,22 +342,66 @@ module Ruby2D
|
|
283
342
|
case type
|
284
343
|
# When key is pressed, fired once
|
285
344
|
when :down
|
345
|
+
# For class pattern
|
346
|
+
unless @using_dsl
|
347
|
+
unless @keys_down.include? key
|
348
|
+
@keys_down << key
|
349
|
+
end
|
350
|
+
end
|
351
|
+
|
352
|
+
# Call event handler
|
286
353
|
@events[:key_down].each do |id, e|
|
287
354
|
e.call(KeyEvent.new(type, key))
|
288
355
|
end
|
289
356
|
# When key is being held down, fired every frame
|
290
357
|
when :held
|
358
|
+
# For class pattern
|
359
|
+
unless @using_dsl
|
360
|
+
unless @keys_held.include? key
|
361
|
+
@keys_held << key
|
362
|
+
end
|
363
|
+
end
|
364
|
+
|
365
|
+
# Call event handler
|
291
366
|
@events[:key_held].each do |id, e|
|
292
367
|
e.call(KeyEvent.new(type, key))
|
293
368
|
end
|
294
369
|
# When key released, fired once
|
295
370
|
when :up
|
371
|
+
# For class pattern
|
372
|
+
unless @using_dsl
|
373
|
+
unless @keys_up.include? key
|
374
|
+
@keys_up << key
|
375
|
+
end
|
376
|
+
end
|
377
|
+
|
378
|
+
# Call event handler
|
296
379
|
@events[:key_up].each do |id, e|
|
297
380
|
e.call(KeyEvent.new(type, key))
|
298
381
|
end
|
299
382
|
end
|
300
383
|
end
|
301
384
|
|
385
|
+
# Mouse down event method for class pattern
|
386
|
+
def mouse_down(btn)
|
387
|
+
@mouse_buttons_down.include? btn
|
388
|
+
end
|
389
|
+
|
390
|
+
# Mouse up event method for class pattern
|
391
|
+
def mouse_up(btn)
|
392
|
+
@mouse_buttons_up.include? btn
|
393
|
+
end
|
394
|
+
|
395
|
+
# Mouse scroll event method for class pattern
|
396
|
+
def mouse_scroll
|
397
|
+
@mouse_scroll_event
|
398
|
+
end
|
399
|
+
|
400
|
+
# Mouse move event method for class pattern
|
401
|
+
def mouse_move
|
402
|
+
@mouse_move_event
|
403
|
+
end
|
404
|
+
|
302
405
|
# Mouse callback method, called by the native and web extentions
|
303
406
|
def mouse_callback(type, button, direction, x, y, delta_x, delta_y)
|
304
407
|
# All mouse events
|
@@ -309,21 +412,54 @@ module Ruby2D
|
|
309
412
|
case type
|
310
413
|
# When mouse button pressed
|
311
414
|
when :down
|
415
|
+
# For class pattern
|
416
|
+
unless @using_dsl
|
417
|
+
unless @mouse_buttons_down.include? button
|
418
|
+
@mouse_buttons_down << button
|
419
|
+
end
|
420
|
+
end
|
421
|
+
|
422
|
+
# Call event handler
|
312
423
|
@events[:mouse_down].each do |id, e|
|
313
424
|
e.call(MouseEvent.new(type, button, nil, x, y, nil, nil))
|
314
425
|
end
|
315
426
|
# When mouse button released
|
316
427
|
when :up
|
428
|
+
# For class pattern
|
429
|
+
unless @using_dsl
|
430
|
+
unless @mouse_buttons_up.include? button
|
431
|
+
@mouse_buttons_up << button
|
432
|
+
end
|
433
|
+
end
|
434
|
+
|
435
|
+
# Call event handler
|
317
436
|
@events[:mouse_up].each do |id, e|
|
318
437
|
e.call(MouseEvent.new(type, button, nil, x, y, nil, nil))
|
319
438
|
end
|
320
439
|
# When mouse motion / movement
|
321
440
|
when :scroll
|
441
|
+
# For class pattern
|
442
|
+
unless @using_dsl
|
443
|
+
@mouse_scroll_event = true
|
444
|
+
@mouse_scroll_direction = direction
|
445
|
+
@mouse_scroll_delta_x = delta_x
|
446
|
+
@mouse_scroll_delta_y = delta_y
|
447
|
+
end
|
448
|
+
|
449
|
+
# Call event handler
|
322
450
|
@events[:mouse_scroll].each do |id, e|
|
323
451
|
e.call(MouseEvent.new(type, nil, direction, nil, nil, delta_x, delta_y))
|
324
452
|
end
|
325
453
|
# When mouse scrolling, wheel or trackpad
|
326
454
|
when :move
|
455
|
+
# For class pattern
|
456
|
+
unless @using_dsl
|
457
|
+
@mouse_move_event = true
|
458
|
+
@mouse_move_delta_x = delta_x
|
459
|
+
@mouse_move_delta_y = delta_y
|
460
|
+
end
|
461
|
+
|
462
|
+
# Call event handler
|
327
463
|
@events[:mouse_move].each do |id, e|
|
328
464
|
e.call(MouseEvent.new(type, nil, nil, x, y, delta_x, delta_y))
|
329
465
|
end
|
@@ -337,6 +473,21 @@ module Ruby2D
|
|
337
473
|
end
|
338
474
|
end
|
339
475
|
|
476
|
+
# Controller axis event method for class pattern
|
477
|
+
def controller_axis(axis)
|
478
|
+
@controller_axes_moved.include? axis
|
479
|
+
end
|
480
|
+
|
481
|
+
# Controller button down event method for class pattern
|
482
|
+
def controller_button_down(btn)
|
483
|
+
@controller_buttons_down.include? btn
|
484
|
+
end
|
485
|
+
|
486
|
+
# Controller button up event method for class pattern
|
487
|
+
def controller_button_up(btn)
|
488
|
+
@controller_buttons_up.include? btn
|
489
|
+
end
|
490
|
+
|
340
491
|
# Controller callback method, called by the native and web extentions
|
341
492
|
def controller_callback(which, type, axis, value, button)
|
342
493
|
# All controller events
|
@@ -347,16 +498,56 @@ module Ruby2D
|
|
347
498
|
case type
|
348
499
|
# When controller axis motion, like analog sticks
|
349
500
|
when :axis
|
501
|
+
|
502
|
+
# For class pattern
|
503
|
+
unless @using_dsl
|
504
|
+
@controller_id = which
|
505
|
+
|
506
|
+
unless @controller_axes_moved.include? axis
|
507
|
+
@controller_axes_moved << axis
|
508
|
+
end
|
509
|
+
|
510
|
+
case axis
|
511
|
+
when :left_x
|
512
|
+
@controller_axis_left_x = value
|
513
|
+
when :left_y
|
514
|
+
@controller_axis_left_y = value
|
515
|
+
when :right_x
|
516
|
+
@controller_axis_right_x = value
|
517
|
+
when :right_y
|
518
|
+
@controller_axis_right_y = value
|
519
|
+
end
|
520
|
+
end
|
521
|
+
|
522
|
+
# Call event handler
|
350
523
|
@events[:controller_axis].each do |id, e|
|
351
524
|
e.call(ControllerAxisEvent.new(which, axis, value))
|
352
525
|
end
|
353
526
|
# When controller button is pressed
|
354
527
|
when :button_down
|
528
|
+
# For class pattern
|
529
|
+
unless @using_dsl
|
530
|
+
@controller_id = which
|
531
|
+
unless @controller_buttons_down.include? button
|
532
|
+
@controller_buttons_down << button
|
533
|
+
end
|
534
|
+
end
|
535
|
+
|
536
|
+
# Call event handler
|
355
537
|
@events[:controller_button_down].each do |id, e|
|
356
538
|
e.call(ControllerButtonEvent.new(which, button))
|
357
539
|
end
|
358
540
|
# When controller button is released
|
359
541
|
when :button_up
|
542
|
+
# For class pattern
|
543
|
+
unless @using_dsl
|
544
|
+
@controller_id = which
|
545
|
+
unless @controller_buttons_up.include? button
|
546
|
+
@controller_buttons_up << button
|
547
|
+
end
|
548
|
+
end
|
549
|
+
|
550
|
+
# Call event handler
|
360
551
|
@events[:controller_button_up].each do |id, e|
|
361
552
|
e.call(ControllerButtonEvent.new(which, button))
|
362
553
|
end
|
@@ -365,8 +556,17 @@ module Ruby2D
|
|
365
556
|
|
366
557
|
# Update callback method, called by the native and web extentions
|
367
558
|
def update_callback
|
559
|
+
unless @using_dsl
|
560
|
+
update
|
561
|
+
end
|
562
|
+
|
368
563
|
@update_proc.call
|
369
564
|
|
565
|
+
# Run update method on all entities
|
566
|
+
@entities.each do |e|
|
567
|
+
e.update
|
568
|
+
end
|
569
|
+
|
370
570
|
# Accept and eval commands if in console mode
|
371
571
|
if @console
|
372
572
|
if STDIN.ready?
|
@@ -385,6 +585,33 @@ module Ruby2D
|
|
385
585
|
end
|
386
586
|
end
|
387
587
|
|
588
|
+
# Clear inputs if using class pattern
|
589
|
+
unless @using_dsl
|
590
|
+
@keys_down.clear
|
591
|
+
@keys_held.clear
|
592
|
+
@keys_up.clear
|
593
|
+
@mouse_buttons_down.clear
|
594
|
+
@mouse_buttons_up.clear
|
595
|
+
@mouse_scroll_event = false
|
596
|
+
@mouse_move_event = false
|
597
|
+
@controller_axes_moved.clear
|
598
|
+
@controller_buttons_down.clear
|
599
|
+
@controller_buttons_up.clear
|
600
|
+
end
|
601
|
+
end
|
602
|
+
|
603
|
+
# Render callback method, called by the native and web extentions
|
604
|
+
def render_callback
|
605
|
+
unless @using_dsl
|
606
|
+
render
|
607
|
+
end
|
608
|
+
|
609
|
+
@render_proc.call
|
610
|
+
|
611
|
+
# Run render method on all entities
|
612
|
+
@entities.each do |e|
|
613
|
+
e.render
|
614
|
+
end
|
388
615
|
end
|
389
616
|
|
390
617
|
# Show the window
|