ruby2d 0.2.1 → 0.3.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/README.md +1 -0
- data/assets/opal.js +19532 -0
- data/assets/simple2d.js +1180 -0
- data/assets/template.html +18 -0
- data/bin/ruby2d +161 -46
- data/ext/ruby2d/extconf.rb +17 -8
- data/ext/ruby2d/ruby2d-opal.rb +219 -0
- data/ext/ruby2d/ruby2d.c +665 -154
- data/lib/ruby2d.rb +7 -4
- data/lib/ruby2d/application.rb +14 -2
- data/lib/ruby2d/color.rb +56 -33
- data/lib/ruby2d/dsl.rb +21 -12
- data/lib/ruby2d/exceptions.rb +2 -3
- data/lib/ruby2d/image.rb +22 -9
- data/lib/ruby2d/music.rb +17 -0
- data/lib/ruby2d/quad.rb +24 -15
- data/lib/ruby2d/rectangle.rb +2 -5
- data/lib/ruby2d/sound.rb +6 -9
- data/lib/ruby2d/sprite.rb +91 -0
- data/lib/ruby2d/square.rb +2 -5
- data/lib/ruby2d/text.rb +19 -23
- data/lib/ruby2d/triangle.rb +29 -15
- data/lib/ruby2d/version.rb +1 -1
- data/lib/ruby2d/window.rb +121 -67
- metadata +27 -7
data/lib/ruby2d/square.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# square.rb
|
2
2
|
|
3
3
|
module Ruby2D
|
4
|
-
class Square <
|
4
|
+
class Square < Rectangle
|
5
5
|
|
6
6
|
attr_reader :size
|
7
7
|
|
@@ -11,10 +11,7 @@ module Ruby2D
|
|
11
11
|
@width = @height = @size = s
|
12
12
|
update_coords(x, y, s, s)
|
13
13
|
update_color(c)
|
14
|
-
|
15
|
-
if defined? Ruby2D::DSL
|
16
|
-
Ruby2D::Application.add(self)
|
17
|
-
end
|
14
|
+
add
|
18
15
|
end
|
19
16
|
|
20
17
|
def size=(s)
|
data/lib/ruby2d/text.rb
CHANGED
@@ -3,38 +3,38 @@
|
|
3
3
|
module Ruby2D
|
4
4
|
class Text
|
5
5
|
|
6
|
-
attr_accessor :x, :y, :
|
6
|
+
attr_accessor :x, :y, :data
|
7
|
+
attr_reader :text, :size, :font, :color
|
7
8
|
|
8
|
-
def initialize(x=0, y=0,
|
9
|
+
def initialize(x=0, y=0, text="Hello World!", size=20, font=nil, c="white")
|
9
10
|
|
10
|
-
if File.exists? font
|
11
|
+
# if File.exists? font
|
11
12
|
@font = font
|
12
|
-
else
|
13
|
-
|
14
|
-
end
|
13
|
+
# else
|
14
|
+
# @font = resolve_path(font)
|
15
|
+
# end
|
15
16
|
|
16
|
-
@type_id =
|
17
|
+
@type_id = 5
|
17
18
|
@x, @y, @size = x, y, size
|
18
|
-
@text
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
Ruby2D::Application.add(self)
|
23
|
-
end
|
19
|
+
@text = text
|
20
|
+
@color = Color.new(c)
|
21
|
+
init
|
22
|
+
add
|
24
23
|
end
|
25
24
|
|
26
25
|
def color=(c)
|
27
|
-
@color = c
|
28
|
-
update_color(c)
|
26
|
+
@color = Color.new(c)
|
29
27
|
end
|
30
28
|
|
31
|
-
def
|
32
|
-
|
29
|
+
def add
|
30
|
+
if Module.const_defined? :DSL
|
31
|
+
Application.add(self)
|
32
|
+
end
|
33
33
|
end
|
34
34
|
|
35
35
|
def remove
|
36
|
-
if
|
37
|
-
|
36
|
+
if Module.const_defined? :DSL
|
37
|
+
Application.remove(self)
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
@@ -55,9 +55,5 @@ module Ruby2D
|
|
55
55
|
end
|
56
56
|
end
|
57
57
|
|
58
|
-
def update_color(c)
|
59
|
-
@c = Ruby2D::Color.new(c)
|
60
|
-
end
|
61
|
-
|
62
58
|
end
|
63
59
|
end
|
data/lib/ruby2d/triangle.rb
CHANGED
@@ -6,7 +6,7 @@ module Ruby2D
|
|
6
6
|
attr_accessor :x1, :y1, :c1,
|
7
7
|
:x2, :y2, :c2,
|
8
8
|
:x3, :y3, :c3
|
9
|
-
attr_reader :color
|
9
|
+
attr_reader :color, :type_id
|
10
10
|
|
11
11
|
def initialize(x1=50, y1=0, x2=100, y2=100, x3=0, y3=100, c='white')
|
12
12
|
@type_id = 1
|
@@ -15,10 +15,7 @@ module Ruby2D
|
|
15
15
|
@x3, @y3 = x3, y3
|
16
16
|
@color = c
|
17
17
|
update_color(c)
|
18
|
-
|
19
|
-
if defined? Ruby2D::DSL
|
20
|
-
Ruby2D::Application.add(self)
|
21
|
-
end
|
18
|
+
add
|
22
19
|
end
|
23
20
|
|
24
21
|
def color=(c)
|
@@ -26,25 +23,42 @@ module Ruby2D
|
|
26
23
|
@color = c
|
27
24
|
end
|
28
25
|
|
26
|
+
def add
|
27
|
+
if Module.const_defined? :DSL
|
28
|
+
Application.add(self)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
29
32
|
def remove
|
30
|
-
if
|
31
|
-
|
33
|
+
if Module.const_defined? :DSL
|
34
|
+
Application.remove(self)
|
32
35
|
end
|
33
36
|
end
|
34
37
|
|
35
38
|
private
|
36
39
|
|
37
40
|
def update_color(c)
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
@
|
42
|
-
@
|
41
|
+
|
42
|
+
# If a valid color, use it for each vertex
|
43
|
+
if Color.is_valid? c
|
44
|
+
@c1 = Color.new(c)
|
45
|
+
@c2 = Color.new(c)
|
46
|
+
@c3 = Color.new(c)
|
47
|
+
|
48
|
+
elsif c.class == Array && c.length < 3
|
49
|
+
raise Error, "Triangles require 3 colors, one for each vertex. Only " <<
|
50
|
+
"#{c.length} were given."
|
51
|
+
|
52
|
+
# If a valid array of colors, assign them to each vertex, respectively
|
53
|
+
elsif c.all? { |el| Color.is_valid? el }
|
54
|
+
@c1 = Color.new(c[0])
|
55
|
+
@c2 = Color.new(c[1])
|
56
|
+
@c3 = Color.new(c[2])
|
57
|
+
|
43
58
|
else
|
44
|
-
|
45
|
-
@c2 = Ruby2D::Color.new(c)
|
46
|
-
@c3 = Ruby2D::Color.new(c)
|
59
|
+
raise Error, "Not a valid color for #{self.class}"
|
47
60
|
end
|
61
|
+
|
48
62
|
end
|
49
63
|
|
50
64
|
end
|
data/lib/ruby2d/version.rb
CHANGED
data/lib/ruby2d/window.rb
CHANGED
@@ -2,52 +2,69 @@
|
|
2
2
|
|
3
3
|
module Ruby2D
|
4
4
|
class Window
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
@
|
11
|
-
@
|
12
|
-
@
|
13
|
-
|
14
|
-
@
|
15
|
-
@
|
16
|
-
@
|
17
|
-
@
|
18
|
-
@
|
5
|
+
|
6
|
+
attr_reader :objects
|
7
|
+
attr_accessor :mouse_x, :mouse_y, :frames, :fps
|
8
|
+
|
9
|
+
def initialize(args = {})
|
10
|
+
@title = args[:title] || "Ruby 2D"
|
11
|
+
@background = Color.new([0.0, 0.0, 0.0, 1.0])
|
12
|
+
@width = args[:width] || 640
|
13
|
+
@height = args[:height] || 480
|
14
|
+
@viewport_width, @viewport_height = nil, nil
|
15
|
+
@resizable = false
|
16
|
+
@borderless = false
|
17
|
+
@fullscreen = false
|
18
|
+
@highdpi = false
|
19
|
+
@frames = 0
|
20
|
+
@fps_cap = args[:fps] || 60
|
21
|
+
@fps = @fps_cap
|
22
|
+
@vsync = args[:vsync] || true
|
23
|
+
@mouse_x = 0; @mouse_y = 0
|
24
|
+
@objects = []
|
25
|
+
@keys_down, @keys, @keys_up, @mouse, @controller = {}, {}, {}, {}, {}
|
26
|
+
@on_key_proc = Proc.new {}
|
27
|
+
@on_controller_proc = Proc.new {}
|
28
|
+
@update_proc = Proc.new {}
|
29
|
+
@diagnostics = false
|
19
30
|
end
|
20
31
|
|
21
32
|
def get(sym)
|
22
33
|
case sym
|
23
|
-
when :window
|
24
|
-
|
25
|
-
when :
|
26
|
-
|
27
|
-
when :
|
28
|
-
|
29
|
-
when :
|
30
|
-
|
31
|
-
when :
|
32
|
-
|
33
|
-
when :
|
34
|
-
|
35
|
-
when :
|
36
|
-
|
34
|
+
when :window; self
|
35
|
+
when :title; @title
|
36
|
+
when :background; @background
|
37
|
+
when :width; @width
|
38
|
+
when :height; @height
|
39
|
+
when :viewport_width; @viewport_width
|
40
|
+
when :viewport_height; @viewport_height
|
41
|
+
when :resizable; @resizable
|
42
|
+
when :borderless; @borderless
|
43
|
+
when :fullscreen; @fullscreen
|
44
|
+
when :highdpi; @highdpi
|
45
|
+
when :frames; @frames
|
46
|
+
when :fps; @fps
|
47
|
+
when :mouse_x; @mouse_x
|
48
|
+
when :mouse_y; @mouse_y
|
49
|
+
when :diagnostics; @diagnostics
|
37
50
|
end
|
38
51
|
end
|
39
52
|
|
40
53
|
def set(opts)
|
41
|
-
|
42
|
-
|
43
|
-
if
|
44
|
-
@
|
45
|
-
@width = valid_opts[:width]
|
46
|
-
@height = valid_opts[:height]
|
47
|
-
return true
|
48
|
-
else
|
49
|
-
return false
|
54
|
+
# Store new window attributes, or ignore if nil
|
55
|
+
@title = opts[:title] || @title
|
56
|
+
if Color.is_valid? opts[:background]
|
57
|
+
@background = Color.new(opts[:background])
|
50
58
|
end
|
59
|
+
@width = opts[:width] || @width
|
60
|
+
@height = opts[:height] || @height
|
61
|
+
@viewport_width = opts[:viewport_width] || @viewport_width
|
62
|
+
@viewport_height = opts[:viewport_height] || @viewport_height
|
63
|
+
@resizable = opts[:resizable] || @resizable
|
64
|
+
@borderless = opts[:borderless] || @borderless
|
65
|
+
@fullscreen = opts[:fullscreen] || @fullscreen
|
66
|
+
@highdpi = opts[:highdpi] || @highdpi
|
67
|
+
@diagnostics = opts[:diagnostics] || @diagnostics
|
51
68
|
end
|
52
69
|
|
53
70
|
def add(o)
|
@@ -83,17 +100,28 @@ module Ruby2D
|
|
83
100
|
true
|
84
101
|
end
|
85
102
|
|
86
|
-
def on(mouse: nil, key: nil, key_down: nil, controller: nil, &proc)
|
103
|
+
# def on(mouse: nil, key: nil, key_up: nil, key_down: nil, controller: nil, &proc)
|
104
|
+
def on(args = {}, &proc)
|
105
|
+
mouse = args[:mouse]
|
106
|
+
key = args[:key]
|
107
|
+
key_up = args[:key_up]
|
108
|
+
key_down = args[:key_down]
|
109
|
+
controller = args[:controller]
|
110
|
+
|
87
111
|
unless mouse.nil?
|
88
|
-
|
112
|
+
reg_mouse(mouse, &proc)
|
113
|
+
end
|
114
|
+
|
115
|
+
unless key_down.nil?
|
116
|
+
reg_key_down(key_down, &proc)
|
89
117
|
end
|
90
118
|
|
91
119
|
unless key.nil?
|
92
120
|
reg_key(key, &proc)
|
93
121
|
end
|
94
122
|
|
95
|
-
unless
|
96
|
-
|
123
|
+
unless key_up.nil?
|
124
|
+
reg_key_up(key_up, &proc)
|
97
125
|
end
|
98
126
|
|
99
127
|
unless controller.nil?
|
@@ -101,43 +129,57 @@ module Ruby2D
|
|
101
129
|
end
|
102
130
|
end
|
103
131
|
|
104
|
-
def
|
105
|
-
|
106
|
-
|
107
|
-
@keys[key].call
|
132
|
+
def mouse_callback(btn, x, y)
|
133
|
+
if @mouse.has_key? 'any'
|
134
|
+
@mouse[btn].call(x, y)
|
108
135
|
end
|
109
136
|
end
|
110
137
|
|
138
|
+
def on_key(&proc)
|
139
|
+
@on_key_proc = proc
|
140
|
+
true
|
141
|
+
end
|
142
|
+
|
111
143
|
def key_down_callback(key)
|
112
|
-
key.downcase
|
144
|
+
key = key.downcase
|
145
|
+
if @keys_down.has_key? 'any'
|
146
|
+
@keys_down['any'].call
|
147
|
+
end
|
113
148
|
if @keys_down.has_key? key
|
114
149
|
@keys_down[key].call
|
115
150
|
end
|
116
151
|
end
|
117
152
|
|
118
|
-
def
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
if axis == 0 && val == -32768
|
124
|
-
event = 'left'
|
125
|
-
elsif axis == 0 && val == 32767
|
126
|
-
event = 'right'
|
127
|
-
elsif axis == 1 && val == -32768
|
128
|
-
event = 'up'
|
129
|
-
elsif axis == 1 && val == 32767
|
130
|
-
event = 'down'
|
131
|
-
end
|
132
|
-
elsif is_btn
|
133
|
-
event = btn
|
153
|
+
def key_callback(key)
|
154
|
+
key = key.downcase
|
155
|
+
@on_key_proc.call(key)
|
156
|
+
if @keys.has_key? 'any'
|
157
|
+
@keys['any'].call
|
134
158
|
end
|
135
|
-
|
136
|
-
|
137
|
-
|
159
|
+
if @keys.has_key? key
|
160
|
+
@keys[key].call
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
164
|
+
def key_up_callback(key)
|
165
|
+
key = key.downcase
|
166
|
+
if @keys_up.has_key? 'any'
|
167
|
+
@keys_up['any'].call
|
168
|
+
end
|
169
|
+
if @keys_up.has_key? key
|
170
|
+
@keys_up[key].call
|
138
171
|
end
|
139
172
|
end
|
140
173
|
|
174
|
+
def on_controller(&proc)
|
175
|
+
@on_controller_proc = proc
|
176
|
+
true
|
177
|
+
end
|
178
|
+
|
179
|
+
def controller_callback(which, is_axis, axis, val, is_btn, btn, pressed)
|
180
|
+
@on_controller_proc.call(which, is_axis, axis, val, is_btn, btn, pressed)
|
181
|
+
end
|
182
|
+
|
141
183
|
def update_callback
|
142
184
|
@update_proc.call
|
143
185
|
end
|
@@ -153,6 +195,12 @@ module Ruby2D
|
|
153
195
|
end
|
154
196
|
end
|
155
197
|
|
198
|
+
# Register key string with proc
|
199
|
+
def reg_key_down(key, &proc)
|
200
|
+
@keys_down[key] = proc
|
201
|
+
true
|
202
|
+
end
|
203
|
+
|
156
204
|
# Register key string with proc
|
157
205
|
def reg_key(key, &proc)
|
158
206
|
@keys[key] = proc
|
@@ -160,8 +208,14 @@ module Ruby2D
|
|
160
208
|
end
|
161
209
|
|
162
210
|
# Register key string with proc
|
163
|
-
def
|
164
|
-
@
|
211
|
+
def reg_key_up(key, &proc)
|
212
|
+
@keys_up[key] = proc
|
213
|
+
true
|
214
|
+
end
|
215
|
+
|
216
|
+
# Register mouse button string with proc
|
217
|
+
def reg_mouse(btn, &proc)
|
218
|
+
@mouse[btn] = proc
|
165
219
|
true
|
166
220
|
end
|
167
221
|
|
metadata
CHANGED
@@ -1,40 +1,59 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby2d
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.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:
|
11
|
+
date: 2017-03-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: opal
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0.10'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0.10'
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: rspec
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
16
30
|
requirements:
|
17
31
|
- - "~>"
|
18
32
|
- !ruby/object:Gem::Version
|
19
|
-
version: '3.
|
33
|
+
version: '3.5'
|
20
34
|
type: :development
|
21
35
|
prerelease: false
|
22
36
|
version_requirements: !ruby/object:Gem::Requirement
|
23
37
|
requirements:
|
24
38
|
- - "~>"
|
25
39
|
- !ruby/object:Gem::Version
|
26
|
-
version: '3.
|
40
|
+
version: '3.5'
|
27
41
|
description: Make cross-platform 2D applications in Ruby
|
28
|
-
email:
|
42
|
+
email: tom@blacktm.com
|
29
43
|
executables:
|
30
44
|
- ruby2d
|
31
45
|
extensions:
|
32
46
|
- ext/ruby2d/extconf.rb
|
33
47
|
extra_rdoc_files: []
|
34
48
|
files:
|
49
|
+
- assets/README.md
|
35
50
|
- assets/app.icns
|
51
|
+
- assets/opal.js
|
52
|
+
- assets/simple2d.js
|
53
|
+
- assets/template.html
|
36
54
|
- bin/ruby2d
|
37
55
|
- ext/ruby2d/extconf.rb
|
56
|
+
- ext/ruby2d/ruby2d-opal.rb
|
38
57
|
- ext/ruby2d/ruby2d.c
|
39
58
|
- lib/ruby2d.rb
|
40
59
|
- lib/ruby2d/application.rb
|
@@ -42,9 +61,11 @@ files:
|
|
42
61
|
- lib/ruby2d/dsl.rb
|
43
62
|
- lib/ruby2d/exceptions.rb
|
44
63
|
- lib/ruby2d/image.rb
|
64
|
+
- lib/ruby2d/music.rb
|
45
65
|
- lib/ruby2d/quad.rb
|
46
66
|
- lib/ruby2d/rectangle.rb
|
47
67
|
- lib/ruby2d/sound.rb
|
68
|
+
- lib/ruby2d/sprite.rb
|
48
69
|
- lib/ruby2d/square.rb
|
49
70
|
- lib/ruby2d/text.rb
|
50
71
|
- lib/ruby2d/triangle.rb
|
@@ -70,9 +91,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
70
91
|
version: '0'
|
71
92
|
requirements: []
|
72
93
|
rubyforge_project:
|
73
|
-
rubygems_version: 2.6.
|
94
|
+
rubygems_version: 2.6.10
|
74
95
|
signing_key:
|
75
96
|
specification_version: 4
|
76
97
|
summary: Ruby 2D
|
77
98
|
test_files: []
|
78
|
-
has_rdoc:
|