ruby2d 0.5.1 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/ruby2d +15 -11
- data/ext/ruby2d/extconf.rb +2 -2
- data/ext/ruby2d/ruby2d-opal.rb +1 -1
- data/ext/ruby2d/ruby2d.c +92 -34
- data/lib/ruby2d.rb +2 -2
- data/lib/ruby2d/circle.rb +29 -0
- data/lib/ruby2d/color.rb +14 -13
- data/lib/ruby2d/dsl.rb +12 -9
- data/lib/ruby2d/exceptions.rb +1 -1
- data/lib/ruby2d/image.rb +5 -4
- data/lib/ruby2d/line.rb +9 -5
- data/lib/ruby2d/music.rb +8 -2
- data/lib/ruby2d/quad.rb +6 -6
- data/lib/ruby2d/rectangle.rb +6 -8
- data/lib/ruby2d/renderable.rb +25 -9
- data/lib/ruby2d/sound.rb +3 -2
- data/lib/ruby2d/sprite.rb +200 -61
- data/lib/ruby2d/square.rb +4 -4
- data/lib/ruby2d/text.rb +4 -4
- data/lib/ruby2d/triangle.rb +4 -4
- data/lib/ruby2d/version.rb +2 -2
- data/lib/ruby2d/window.rb +153 -24
- metadata +6 -8
- data/assets/ios/MyApp.xcodeproj/project.xcworkspace/xcuserdata/Tom.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- data/assets/ios/MyApp.xcodeproj/xcuserdata/Tom.xcuserdatad/xcschemes/xcschememanagement.plist +0 -14
- data/lib/ruby2d/application.rb +0 -47
data/lib/ruby2d/square.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
#
|
1
|
+
# Ruby2D::Square
|
2
2
|
|
3
3
|
module Ruby2D
|
4
4
|
class Square < Rectangle
|
@@ -10,18 +10,18 @@ module Ruby2D
|
|
10
10
|
@y = opts[:y] || 0
|
11
11
|
@z = opts[:z] || 0
|
12
12
|
@width = @height = @size = opts[:size] || 100
|
13
|
-
|
14
13
|
self.color = opts[:color] || 'white'
|
15
|
-
|
16
14
|
update_coords(@x, @y, @size, @size)
|
17
|
-
|
18
15
|
add
|
19
16
|
end
|
20
17
|
|
18
|
+
# Set the size of the square
|
21
19
|
def size=(s)
|
22
20
|
self.width = self.height = @size = s
|
23
21
|
end
|
24
22
|
|
23
|
+
# Make the inherited width and height attribute accessors private
|
25
24
|
private :width=, :height=
|
25
|
+
|
26
26
|
end
|
27
27
|
end
|
data/lib/ruby2d/text.rb
CHANGED
@@ -1,19 +1,19 @@
|
|
1
|
-
#
|
1
|
+
# Ruby2D::Text
|
2
2
|
|
3
3
|
module Ruby2D
|
4
4
|
class Text
|
5
5
|
include Renderable
|
6
6
|
|
7
|
-
attr_accessor :x, :y, :data
|
8
7
|
attr_reader :text, :size, :width, :height, :font, :color
|
8
|
+
attr_accessor :x, :y, :rotate, :data
|
9
9
|
|
10
10
|
def initialize(opts = {})
|
11
11
|
@x = opts[:x] || 0
|
12
12
|
@y = opts[:y] || 0
|
13
13
|
@z = opts[:z] || 0
|
14
|
-
@text = (opts[:text] || "Hello
|
14
|
+
@text = (opts[:text] || "Hello Ruby!").to_s
|
15
15
|
@size = opts[:size] || 20
|
16
|
-
|
16
|
+
@rotate = opts[:rotate] || 0
|
17
17
|
@font = opts[:font]
|
18
18
|
|
19
19
|
unless RUBY_ENGINE == 'opal'
|
data/lib/ruby2d/triangle.rb
CHANGED
@@ -1,13 +1,13 @@
|
|
1
|
-
#
|
1
|
+
# Ruby2D::Triangle
|
2
2
|
|
3
3
|
module Ruby2D
|
4
4
|
class Triangle
|
5
5
|
include Renderable
|
6
6
|
|
7
|
+
attr_reader :color
|
7
8
|
attr_accessor :x1, :y1, :c1,
|
8
9
|
:x2, :y2, :c2,
|
9
10
|
:x3, :y3, :c3
|
10
|
-
attr_reader :color, :type_id
|
11
11
|
|
12
12
|
def initialize(opts= {})
|
13
13
|
@x1 = opts[:x1] || 50
|
@@ -16,8 +16,7 @@ module Ruby2D
|
|
16
16
|
@y2 = opts[:y2] || 100
|
17
17
|
@x3 = opts[:x3] || 0
|
18
18
|
@y3 = opts[:y3] || 100
|
19
|
-
@z
|
20
|
-
|
19
|
+
@z = opts[:z] || 0
|
21
20
|
self.color = opts[:color] || 'white'
|
22
21
|
add
|
23
22
|
end
|
@@ -61,5 +60,6 @@ module Ruby2D
|
|
61
60
|
@c3 = c
|
62
61
|
end
|
63
62
|
end
|
63
|
+
|
64
64
|
end
|
65
65
|
end
|
data/lib/ruby2d/version.rb
CHANGED
data/lib/ruby2d/window.rb
CHANGED
@@ -1,37 +1,70 @@
|
|
1
|
-
#
|
1
|
+
# Ruby2D::Window
|
2
|
+
# Represents a window on screen, responsible for storing renderable graphics,
|
3
|
+
# event handlers, the update loop, showing and closing the window.
|
2
4
|
|
3
5
|
module Ruby2D
|
4
6
|
class Window
|
5
7
|
|
6
|
-
|
7
|
-
attr_accessor :mouse_x, :mouse_y, :frames, :fps
|
8
|
-
|
8
|
+
# Event structures
|
9
9
|
EventDescriptor = Struct.new(:type, :id)
|
10
10
|
MouseEvent = Struct.new(:type, :button, :direction, :x, :y, :delta_x, :delta_y)
|
11
11
|
KeyEvent = Struct.new(:type, :key)
|
12
|
-
ControllerEvent
|
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
|
+
# Title of the window
|
22
|
+
@title = args[:title] || "Ruby 2D"
|
23
|
+
|
24
|
+
# Window background color
|
18
25
|
@background = Color.new([0.0, 0.0, 0.0, 1.0])
|
19
|
-
|
20
|
-
|
21
|
-
@
|
22
|
-
|
23
|
-
|
26
|
+
|
27
|
+
# Window icon
|
28
|
+
@icon = nil
|
29
|
+
|
30
|
+
# Window size and characteristics
|
31
|
+
@width = args[:width] || 640
|
32
|
+
@height = args[:height] || 480
|
33
|
+
@resizable = false
|
24
34
|
@borderless = false
|
25
35
|
@fullscreen = false
|
26
|
-
@highdpi
|
27
|
-
|
28
|
-
|
29
|
-
@
|
30
|
-
|
36
|
+
@highdpi = false
|
37
|
+
|
38
|
+
# Size of the window's viewport (the drawable area)
|
39
|
+
@viewport_width, @viewport_height = nil, nil
|
40
|
+
|
41
|
+
# Size of the computer's display
|
42
|
+
@display_width, @display_height = nil, nil
|
43
|
+
|
44
|
+
# Total number of frames that have been rendered
|
45
|
+
@frames = 0
|
46
|
+
|
47
|
+
# Frames per second upper limit, and the actual FPS
|
48
|
+
@fps_cap = args[:fps_cap] || 60
|
49
|
+
@fps = @fps_cap
|
50
|
+
|
51
|
+
# Vertical synchronization, set to prevent screen tearing (recommended)
|
52
|
+
@vsync = args[:vsync] || true
|
53
|
+
|
54
|
+
# Mouse X and Y position in the window
|
31
55
|
@mouse_x, @mouse_y = 0, 0
|
32
|
-
|
33
|
-
|
34
|
-
@
|
56
|
+
|
57
|
+
# Controller axis and button mappings file
|
58
|
+
@controller_mappings = File.expand_path('~') + "/.ruby2d/controllers.txt"
|
59
|
+
|
60
|
+
# Renderable objects currently in the window, like a linear scene graph
|
61
|
+
@objects = []
|
62
|
+
|
63
|
+
# Unique ID for the input event being registered
|
64
|
+
@event_key = 0
|
65
|
+
|
66
|
+
# Registered input events
|
67
|
+
@events = {
|
35
68
|
key: {},
|
36
69
|
key_down: {},
|
37
70
|
key_held: {},
|
@@ -46,15 +79,80 @@ module Ruby2D
|
|
46
79
|
controller_button_down: {},
|
47
80
|
controller_button_up: {}
|
48
81
|
}
|
82
|
+
|
83
|
+
# The window update block
|
49
84
|
@update_proc = Proc.new {}
|
85
|
+
|
86
|
+
# Whether diagnostic messages should be printed
|
50
87
|
@diagnostics = false
|
51
|
-
@controller_mappings_path = File.join(Dir.home, ".ruby2d", "controllers.txt")
|
52
88
|
end
|
53
89
|
|
54
|
-
|
55
|
-
|
90
|
+
# Class methods for convenient access to properties
|
91
|
+
class << self
|
92
|
+
def current; get(:window) end
|
93
|
+
def title; get(:title) end
|
94
|
+
def background; get(:background) end
|
95
|
+
def width; get(:width) end
|
96
|
+
def height; get(:height) end
|
97
|
+
def viewport_width; get(:viewport_width) end
|
98
|
+
def viewport_height; get(:viewport_height) end
|
99
|
+
def display_width; get(:display_width) end
|
100
|
+
def display_height; get(:display_height) end
|
101
|
+
def resizable; get(:resizable) end
|
102
|
+
def borderless; get(:borderless) end
|
103
|
+
def fullscreen; get(:fullscreen) end
|
104
|
+
def highdpi; get(:highdpi) end
|
105
|
+
def frames; get(:frames) end
|
106
|
+
def fps; get(:fps) end
|
107
|
+
def fps_cap; get(:fps_cap) end
|
108
|
+
def mouse_x; get(:mouse_x) end
|
109
|
+
def mouse_y; get(:mouse_y) end
|
110
|
+
def diagnostics; get(:diagnostics) end
|
111
|
+
|
112
|
+
def get(sym)
|
113
|
+
@@window.get(sym)
|
114
|
+
end
|
115
|
+
|
116
|
+
def set(opts)
|
117
|
+
@@window.set(opts)
|
118
|
+
end
|
119
|
+
|
120
|
+
def on(event, &proc)
|
121
|
+
@@window.on(event, &proc)
|
122
|
+
end
|
123
|
+
|
124
|
+
def off(event_descriptor)
|
125
|
+
@@window.off(event_descriptor)
|
126
|
+
end
|
127
|
+
|
128
|
+
def add(o)
|
129
|
+
@@window.add(o)
|
130
|
+
end
|
131
|
+
|
132
|
+
def remove(o)
|
133
|
+
@@window.remove(o)
|
134
|
+
end
|
135
|
+
|
136
|
+
def clear
|
137
|
+
@@window.clear
|
138
|
+
end
|
139
|
+
|
140
|
+
def update(&proc)
|
141
|
+
@@window.update(&proc)
|
142
|
+
end
|
143
|
+
|
144
|
+
def show
|
145
|
+
@@window.show
|
146
|
+
end
|
147
|
+
|
148
|
+
def close
|
149
|
+
@@window.close
|
150
|
+
end
|
56
151
|
end
|
57
152
|
|
153
|
+
# Public instance methods
|
154
|
+
|
155
|
+
# Retrieve an attribute of the window
|
58
156
|
def get(sym)
|
59
157
|
case sym
|
60
158
|
when :window; self
|
@@ -77,20 +175,24 @@ module Ruby2D
|
|
77
175
|
when :highdpi; @highdpi
|
78
176
|
when :frames; @frames
|
79
177
|
when :fps; @fps
|
178
|
+
when :fps_cap; @fps_cap
|
80
179
|
when :mouse_x; @mouse_x
|
81
180
|
when :mouse_y; @mouse_y
|
82
181
|
when :diagnostics; @diagnostics
|
83
182
|
end
|
84
183
|
end
|
85
184
|
|
185
|
+
# Set a window attribute
|
86
186
|
def set(opts)
|
87
187
|
# Store new window attributes, or ignore if nil
|
88
188
|
@title = opts[:title] || @title
|
89
189
|
if Color.is_valid? opts[:background]
|
90
190
|
@background = Color.new(opts[:background])
|
91
191
|
end
|
192
|
+
@icon = opts[:icon] || @icon
|
92
193
|
@width = opts[:width] || @width
|
93
194
|
@height = opts[:height] || @height
|
195
|
+
@fps_cap = opts[:fps_cap] || @fps_cap
|
94
196
|
@viewport_width = opts[:viewport_width] || @viewport_width
|
95
197
|
@viewport_height = opts[:viewport_height] || @viewport_height
|
96
198
|
@resizable = opts[:resizable] || @resizable
|
@@ -100,6 +202,7 @@ module Ruby2D
|
|
100
202
|
@diagnostics = opts[:diagnostics] || @diagnostics
|
101
203
|
end
|
102
204
|
|
205
|
+
# Add an object to the window
|
103
206
|
def add(o)
|
104
207
|
case o
|
105
208
|
when nil
|
@@ -111,6 +214,7 @@ module Ruby2D
|
|
111
214
|
end
|
112
215
|
end
|
113
216
|
|
217
|
+
# Remove an object from the window
|
114
218
|
def remove(o)
|
115
219
|
if o == nil
|
116
220
|
raise Error, "Cannot remove '#{o.class}' from window!"
|
@@ -124,15 +228,23 @@ module Ruby2D
|
|
124
228
|
end
|
125
229
|
end
|
126
230
|
|
231
|
+
# Clear all objects from the window
|
127
232
|
def clear
|
128
233
|
@objects.clear
|
129
234
|
end
|
130
235
|
|
236
|
+
# Set an update callback
|
131
237
|
def update(&proc)
|
132
238
|
@update_proc = proc
|
133
239
|
true
|
134
240
|
end
|
135
241
|
|
242
|
+
# Generate a new event key (ID)
|
243
|
+
def new_event_key
|
244
|
+
@event_key = @event_key.next
|
245
|
+
end
|
246
|
+
|
247
|
+
# Set an event handler
|
136
248
|
def on(event, &proc)
|
137
249
|
unless @events.has_key? event
|
138
250
|
raise Error, "`#{event}` is not a valid event type"
|
@@ -142,13 +254,13 @@ module Ruby2D
|
|
142
254
|
EventDescriptor.new(event, event_id)
|
143
255
|
end
|
144
256
|
|
257
|
+
# Remove an event handler
|
145
258
|
def off(event_descriptor)
|
146
259
|
@events[event_descriptor.type].delete(event_descriptor.id)
|
147
260
|
end
|
148
261
|
|
262
|
+
# Key callback method, called by the native and web extentions
|
149
263
|
def key_callback(type, key)
|
150
|
-
# puts "===", "type: #{type}", "key: #{key}"
|
151
|
-
|
152
264
|
key = key.downcase
|
153
265
|
|
154
266
|
# All key events
|
@@ -175,6 +287,7 @@ module Ruby2D
|
|
175
287
|
end
|
176
288
|
end
|
177
289
|
|
290
|
+
# Mouse callback method, called by the native and web extentions
|
178
291
|
def mouse_callback(type, button, direction, x, y, delta_x, delta_y)
|
179
292
|
# All mouse events
|
180
293
|
@events[:mouse].each do |id, e|
|
@@ -205,6 +318,16 @@ module Ruby2D
|
|
205
318
|
end
|
206
319
|
end
|
207
320
|
|
321
|
+
# Add controller mappings from file
|
322
|
+
def add_controller_mappings
|
323
|
+
unless RUBY_ENGINE == 'opal'
|
324
|
+
if File.exists? @controller_mappings
|
325
|
+
ext_add_controller_mappings(@controller_mappings)
|
326
|
+
end
|
327
|
+
end
|
328
|
+
end
|
329
|
+
|
330
|
+
# Controller callback method, called by the native and web extentions
|
208
331
|
def controller_callback(which, type, axis, value, button)
|
209
332
|
# All controller events
|
210
333
|
@events[:controller].each do |id, e|
|
@@ -230,20 +353,26 @@ module Ruby2D
|
|
230
353
|
end
|
231
354
|
end
|
232
355
|
|
356
|
+
# Update callback method, called by the native and web extentions
|
233
357
|
def update_callback
|
234
358
|
@update_proc.call
|
235
359
|
end
|
236
360
|
|
361
|
+
# Show the window
|
237
362
|
def show
|
238
363
|
ext_show
|
239
364
|
end
|
240
365
|
|
366
|
+
# Close the window
|
241
367
|
def close
|
242
368
|
ext_close
|
243
369
|
end
|
244
370
|
|
371
|
+
# Private instance methods
|
372
|
+
|
245
373
|
private
|
246
374
|
|
375
|
+
# An an object to the window, used by the public `add` method
|
247
376
|
def add_object(o)
|
248
377
|
if !@objects.include?(o)
|
249
378
|
index = @objects.index do |object|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby2d
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tom Black
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-09-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: opal
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '3.
|
33
|
+
version: '3.8'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '3.
|
40
|
+
version: '3.8'
|
41
41
|
description: Make cross-platform 2D applications in Ruby
|
42
42
|
email: tom@blacktm.com
|
43
43
|
executables:
|
@@ -86,8 +86,6 @@ files:
|
|
86
86
|
- assets/ios/MyApp.xcodeproj/project.pbxproj
|
87
87
|
- assets/ios/MyApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata
|
88
88
|
- assets/ios/MyApp.xcodeproj/project.xcworkspace/xcshareddata/MyApp.xcscmblueprint
|
89
|
-
- assets/ios/MyApp.xcodeproj/project.xcworkspace/xcuserdata/Tom.xcuserdatad/UserInterfaceState.xcuserstate
|
90
|
-
- assets/ios/MyApp.xcodeproj/xcuserdata/Tom.xcuserdatad/xcschemes/xcschememanagement.plist
|
91
89
|
- assets/ios/main.c
|
92
90
|
- assets/opal.js
|
93
91
|
- assets/simple2d.js
|
@@ -153,7 +151,7 @@ files:
|
|
153
151
|
- ext/ruby2d/ruby2d-opal.rb
|
154
152
|
- ext/ruby2d/ruby2d.c
|
155
153
|
- lib/ruby2d.rb
|
156
|
-
- lib/ruby2d/
|
154
|
+
- lib/ruby2d/circle.rb
|
157
155
|
- lib/ruby2d/color.rb
|
158
156
|
- lib/ruby2d/dsl.rb
|
159
157
|
- lib/ruby2d/exceptions.rb
|
@@ -190,7 +188,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
190
188
|
version: '0'
|
191
189
|
requirements: []
|
192
190
|
rubyforge_project:
|
193
|
-
rubygems_version: 2.7.
|
191
|
+
rubygems_version: 2.7.7
|
194
192
|
signing_key:
|
195
193
|
specification_version: 4
|
196
194
|
summary: Ruby 2D
|