ruby2d 0.3.1 → 0.4.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/opal.js +42 -42
- data/assets/simple2d.js +422 -223
- data/bin/ruby2d +26 -24
- data/ext/ruby2d/extconf.rb +6 -6
- data/ext/ruby2d/ruby2d-opal.rb +133 -69
- data/ext/ruby2d/ruby2d.c +246 -114
- data/lib/ruby2d/application.rb +14 -18
- data/lib/ruby2d/color.rb +50 -12
- data/lib/ruby2d/dsl.rb +12 -16
- data/lib/ruby2d/exceptions.rb +0 -9
- data/lib/ruby2d/image.rb +25 -28
- data/lib/ruby2d/line.rb +64 -0
- data/lib/ruby2d/music.rb +30 -5
- data/lib/ruby2d/quad.rb +52 -44
- data/lib/ruby2d/rectangle.rb +24 -13
- data/lib/ruby2d/renderable.rb +35 -0
- data/lib/ruby2d/sound.rb +15 -5
- data/lib/ruby2d/sprite.rb +21 -19
- data/lib/ruby2d/square.rb +14 -9
- data/lib/ruby2d/text.rb +36 -32
- data/lib/ruby2d/triangle.rb +46 -44
- data/lib/ruby2d/version.rb +1 -1
- data/lib/ruby2d/window.rb +148 -120
- data/lib/ruby2d.rb +2 -0
- metadata +5 -3
data/lib/ruby2d/application.rb
CHANGED
@@ -3,47 +3,43 @@
|
|
3
3
|
module Ruby2D::Application
|
4
4
|
class << self
|
5
5
|
@@window = Ruby2D::Window.new
|
6
|
-
|
6
|
+
|
7
7
|
def get(sym)
|
8
8
|
@@window.get(sym)
|
9
9
|
end
|
10
|
-
|
10
|
+
|
11
11
|
def set(opts)
|
12
12
|
@@window.set(opts)
|
13
13
|
end
|
14
|
-
|
15
|
-
def on(
|
16
|
-
@@window.on(
|
17
|
-
end
|
18
|
-
|
19
|
-
def on_key(&proc)
|
20
|
-
@@window.on_key(&proc)
|
14
|
+
|
15
|
+
def on(event, &proc)
|
16
|
+
@@window.on(event, &proc)
|
21
17
|
end
|
22
|
-
|
23
|
-
def
|
24
|
-
@@window.
|
18
|
+
|
19
|
+
def off(event_descriptor)
|
20
|
+
@@window.off(event_descriptor)
|
25
21
|
end
|
26
|
-
|
22
|
+
|
27
23
|
def add(o)
|
28
24
|
@@window.add(o)
|
29
25
|
end
|
30
|
-
|
26
|
+
|
31
27
|
def remove(o)
|
32
28
|
@@window.remove(o)
|
33
29
|
end
|
34
|
-
|
30
|
+
|
35
31
|
def clear
|
36
32
|
@@window.clear
|
37
33
|
end
|
38
|
-
|
34
|
+
|
39
35
|
def update(&proc)
|
40
36
|
@@window.update(&proc)
|
41
37
|
end
|
42
|
-
|
38
|
+
|
43
39
|
def show
|
44
40
|
@@window.show
|
45
41
|
end
|
46
|
-
|
42
|
+
|
47
43
|
def close
|
48
44
|
@@window.close
|
49
45
|
end
|
data/lib/ruby2d/color.rb
CHANGED
@@ -2,9 +2,31 @@
|
|
2
2
|
|
3
3
|
module Ruby2D
|
4
4
|
class Color
|
5
|
-
|
5
|
+
# Color::Set represents an array of colors
|
6
|
+
class Set
|
7
|
+
def initialize(colors)
|
8
|
+
@colors = colors.map{|c| Color.new(c)}
|
9
|
+
end
|
10
|
+
|
11
|
+
def [](i)
|
12
|
+
@colors[i]
|
13
|
+
end
|
14
|
+
|
15
|
+
def length
|
16
|
+
@colors.length
|
17
|
+
end
|
18
|
+
|
19
|
+
def opacity; @colors[0].opacity end
|
20
|
+
|
21
|
+
def opacity=(opacity)
|
22
|
+
@colors.each do |color|
|
23
|
+
color.opacity = opacity
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
6
28
|
attr_reader :r, :g, :b, :a
|
7
|
-
|
29
|
+
|
8
30
|
# Based on clrs.cc
|
9
31
|
@@colors = {
|
10
32
|
'navy' => '#001F3F',
|
@@ -27,7 +49,7 @@ module Ruby2D
|
|
27
49
|
'black' => '#111111',
|
28
50
|
'random' => ''
|
29
51
|
}
|
30
|
-
|
52
|
+
|
31
53
|
def initialize(c)
|
32
54
|
if !self.class.is_valid? c
|
33
55
|
raise Error, "`#{c}` is not a valid color"
|
@@ -46,28 +68,44 @@ module Ruby2D
|
|
46
68
|
end
|
47
69
|
end
|
48
70
|
end
|
49
|
-
|
71
|
+
|
50
72
|
# Check if string is a proper hex value
|
51
73
|
def self.is_hex?(s)
|
52
74
|
# MRuby doesn't support regex, otherwise we'd do:
|
53
75
|
# !(/^#[0-9A-F]{6}$/i.match(a).nil?)
|
54
76
|
s.class == String && s[0] == '#' && s.length == 7
|
55
77
|
end
|
56
|
-
|
78
|
+
|
57
79
|
# Check if the color is valid
|
58
80
|
def self.is_valid?(c)
|
59
81
|
@@colors.key?(c) || # keyword
|
60
82
|
self.is_hex?(c) || # hexadecimal value
|
61
|
-
|
83
|
+
|
62
84
|
# Array of Floats from 0.0..1.0
|
63
85
|
c.class == Array && c.length == 4 &&
|
64
86
|
c.all? { |el|
|
65
87
|
el.is_a?(Numeric) && (0.0..1.0).include?(el)
|
66
88
|
}
|
67
89
|
end
|
68
|
-
|
90
|
+
|
91
|
+
def self.from(input)
|
92
|
+
# If a valid array of colors, return a Color::Set with those colors
|
93
|
+
# Else return single color
|
94
|
+
if input.is_a? Array and input.all? { |el| Color.is_valid? el }
|
95
|
+
Color::Set.new(input)
|
96
|
+
else
|
97
|
+
Color.new(input)
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
def opacity; @a end
|
102
|
+
|
103
|
+
def opacity=(opacity)
|
104
|
+
@a = opacity
|
105
|
+
end
|
106
|
+
|
69
107
|
private
|
70
|
-
|
108
|
+
|
71
109
|
# TODO: Only `Number` supported in JS
|
72
110
|
# Convert from Fixnum (0..255) to Float (0.0..1.0)
|
73
111
|
def to_f(a)
|
@@ -77,19 +115,19 @@ module Ruby2D
|
|
77
115
|
end
|
78
116
|
return b
|
79
117
|
end
|
80
|
-
|
118
|
+
|
81
119
|
# Convert from hex value (e.g. #FFF000) to Float (0.0..1.0)
|
82
120
|
def hex_to_f(h)
|
83
121
|
h = (h[1..-1]).chars.each_slice(2).map(&:join)
|
84
122
|
a = []
|
85
|
-
|
123
|
+
|
86
124
|
h.each do |el|
|
87
125
|
a.push(el.to_i(16))
|
88
126
|
end
|
89
|
-
|
127
|
+
|
90
128
|
a.push(255)
|
91
129
|
return to_f(a)
|
92
130
|
end
|
93
|
-
|
131
|
+
|
94
132
|
end
|
95
133
|
end
|
data/lib/ruby2d/dsl.rb
CHANGED
@@ -4,37 +4,33 @@ module Ruby2D::DSL
|
|
4
4
|
def get(sym)
|
5
5
|
Application.get(sym)
|
6
6
|
end
|
7
|
-
|
7
|
+
|
8
8
|
def set(opts)
|
9
9
|
Application.set(opts)
|
10
10
|
end
|
11
|
-
|
12
|
-
def on(
|
13
|
-
Application.on(
|
14
|
-
end
|
15
|
-
|
16
|
-
def on_key(&proc)
|
17
|
-
Application.on_key(&proc)
|
11
|
+
|
12
|
+
def on(event, &proc)
|
13
|
+
Application.on(event, &proc)
|
18
14
|
end
|
19
|
-
|
20
|
-
def
|
21
|
-
Application.
|
15
|
+
|
16
|
+
def off(event_descriptor)
|
17
|
+
Application.off(event_descriptor)
|
22
18
|
end
|
23
|
-
|
19
|
+
|
24
20
|
def update(&proc)
|
25
21
|
Application.update(&proc)
|
26
22
|
end
|
27
|
-
|
23
|
+
|
28
24
|
def clear
|
29
25
|
Application.clear
|
30
26
|
end
|
31
|
-
|
27
|
+
|
32
28
|
def show
|
33
29
|
Application.show
|
34
30
|
end
|
35
|
-
|
31
|
+
|
36
32
|
def close
|
37
33
|
Application.close
|
38
34
|
end
|
39
|
-
|
35
|
+
|
40
36
|
end
|
data/lib/ruby2d/exceptions.rb
CHANGED
@@ -2,14 +2,5 @@
|
|
2
2
|
|
3
3
|
module Ruby2D
|
4
4
|
class Error < StandardError
|
5
|
-
def colorize(msg, c); "\e[#{c}m#{msg}\e[0m" end
|
6
|
-
def error(msg); colorize(msg, '4;31') end
|
7
|
-
def bold(msg); colorize(msg, '1') end
|
8
|
-
|
9
|
-
def initialize(msg)
|
10
|
-
super(msg)
|
11
|
-
puts error("\nRuby 2D Error:") << " #{msg}" <<
|
12
|
-
bold("\nOccurred in:\n #{caller.last}\n")
|
13
|
-
end
|
14
5
|
end
|
15
6
|
end
|
data/lib/ruby2d/image.rb
CHANGED
@@ -2,41 +2,38 @@
|
|
2
2
|
|
3
3
|
module Ruby2D
|
4
4
|
class Image
|
5
|
-
|
5
|
+
include Renderable
|
6
|
+
|
6
7
|
attr_accessor :x, :y, :width, :height, :data
|
7
8
|
attr_reader :path, :color
|
8
|
-
|
9
|
-
def initialize(
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
@
|
19
|
-
@
|
20
|
-
@
|
21
|
-
|
9
|
+
|
10
|
+
def initialize(opts = {})
|
11
|
+
@path = opts[:path]
|
12
|
+
|
13
|
+
unless RUBY_ENGINE == 'opal'
|
14
|
+
unless File.exists? @path
|
15
|
+
raise Error, "Cannot find image file `#{@path}`"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
@x = opts[:x] || 0
|
20
|
+
@y = opts[:y] || 0
|
21
|
+
@z = opts[:x] || 0
|
22
|
+
|
23
|
+
@type_id = 4
|
24
|
+
|
25
|
+
self.color = opts[:color] || 'white'
|
26
|
+
|
27
|
+
ext_image_init(@path)
|
22
28
|
add
|
23
29
|
end
|
24
|
-
|
30
|
+
|
25
31
|
def color=(c)
|
26
32
|
@color = Color.new(c)
|
27
33
|
end
|
28
|
-
|
29
|
-
def
|
30
|
-
|
31
|
-
Application.add(self)
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
def remove
|
36
|
-
if Module.const_defined? :DSL
|
37
|
-
Application.remove(self)
|
38
|
-
end
|
34
|
+
|
35
|
+
def contains?(x, y)
|
36
|
+
@x < x and @x + @width > x and @y < y and @y + @height > y
|
39
37
|
end
|
40
|
-
|
41
38
|
end
|
42
39
|
end
|
data/lib/ruby2d/line.rb
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
# line.rb
|
2
|
+
|
3
|
+
module Ruby2D
|
4
|
+
class Line
|
5
|
+
include Renderable
|
6
|
+
attr_accessor :x1, :x2, :y1, :y2, :color, :width
|
7
|
+
|
8
|
+
def initialize(opts = {})
|
9
|
+
@type_id = 3
|
10
|
+
|
11
|
+
@x1 = opts[:x1] || 0
|
12
|
+
@y1 = opts[:y1] || 0
|
13
|
+
@x2 = opts[:x2] || 100
|
14
|
+
@y2 = opts[:y2] || 100
|
15
|
+
@width = opts[:width] || 2
|
16
|
+
@z = opts[:z] || 0
|
17
|
+
self.color = opts[:color] || 'white'
|
18
|
+
|
19
|
+
add
|
20
|
+
end
|
21
|
+
|
22
|
+
def color=(c)
|
23
|
+
@color = Color.from(c)
|
24
|
+
update_color(@color)
|
25
|
+
end
|
26
|
+
|
27
|
+
def length
|
28
|
+
points_distance(@x1, @y1, @x2, @y2)
|
29
|
+
end
|
30
|
+
|
31
|
+
# Line contains a point if the point is closer than the length of line from both ends
|
32
|
+
# and if the distance from point to line is smaller than half of the width.
|
33
|
+
# Check https://en.wikipedia.org/wiki/Distance_from_a_point_to_a_line for reference
|
34
|
+
def contains?(x, y)
|
35
|
+
points_distance(x1, y1, x, y) < length and
|
36
|
+
points_distance(x2, y2, x, y) < length and
|
37
|
+
(((@y2 - @y1) * x - (@x2 - @x1) * y + @x2 * @y1 - @y2 * @x1).abs / length) < 0.5 * @width
|
38
|
+
end
|
39
|
+
|
40
|
+
private
|
41
|
+
|
42
|
+
def points_distance(x1, y1, x2, y2)
|
43
|
+
Math.sqrt((x1 - x2) ** 2 + (y1 - y2) ** 2)
|
44
|
+
end
|
45
|
+
|
46
|
+
def update_color(c)
|
47
|
+
if c.is_a? Color::Set
|
48
|
+
if c.length == 4
|
49
|
+
@c1 = c[0]
|
50
|
+
@c2 = c[1]
|
51
|
+
@c3 = c[2]
|
52
|
+
@c4 = c[3]
|
53
|
+
else
|
54
|
+
raise ArgumentError, "Lines require 4 colors, one for each vertex. #{c.length} were given."
|
55
|
+
end
|
56
|
+
else
|
57
|
+
@c1 = c
|
58
|
+
@c2 = c
|
59
|
+
@c3 = c
|
60
|
+
@c4 = c
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
data/lib/ruby2d/music.rb
CHANGED
@@ -2,16 +2,41 @@
|
|
2
2
|
|
3
3
|
module Ruby2D
|
4
4
|
class Music
|
5
|
-
|
5
|
+
|
6
6
|
attr_accessor :data, :loop
|
7
7
|
attr_reader :path
|
8
|
-
|
8
|
+
|
9
9
|
def initialize(path)
|
10
|
-
|
11
|
-
|
10
|
+
|
11
|
+
unless RUBY_ENGINE == 'opal'
|
12
|
+
unless File.exists? path
|
13
|
+
raise Error, "Cannot find audio file `#{path}`"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
12
17
|
@path = path
|
13
18
|
@loop = false
|
19
|
+
ext_music_init(path)
|
20
|
+
end
|
21
|
+
|
22
|
+
def play
|
23
|
+
ext_music_play
|
24
|
+
end
|
25
|
+
|
26
|
+
def pause
|
27
|
+
ext_music_pause
|
28
|
+
end
|
29
|
+
|
30
|
+
def resume
|
31
|
+
ext_music_resume
|
32
|
+
end
|
33
|
+
|
34
|
+
def stop
|
35
|
+
ext_music_stop
|
36
|
+
end
|
37
|
+
|
38
|
+
def fadeout(ms)
|
39
|
+
ext_music_fadeout(ms)
|
14
40
|
end
|
15
|
-
|
16
41
|
end
|
17
42
|
end
|
data/lib/ruby2d/quad.rb
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
module Ruby2D
|
4
4
|
class Quad
|
5
|
+
include Renderable
|
5
6
|
# Coordinates in clockwise order, starting at top left:
|
6
7
|
# x1,y1 == top left
|
7
8
|
# x2,y2 == top right
|
@@ -11,61 +12,68 @@ module Ruby2D
|
|
11
12
|
:x2, :y2, :c2,
|
12
13
|
:x3, :y3, :c3,
|
13
14
|
:x4, :y4, :c4
|
14
|
-
|
15
|
+
|
15
16
|
attr_reader :color
|
16
|
-
|
17
|
-
def initialize(
|
17
|
+
|
18
|
+
def initialize(opts = {})
|
18
19
|
@type_id = 2
|
19
|
-
|
20
|
-
@
|
21
|
-
|
20
|
+
|
21
|
+
@x1 = opts[:x1] || 0
|
22
|
+
@y1 = opts[:y1] || 0
|
23
|
+
@x2 = opts[:x2] || 100
|
24
|
+
@y2 = opts[:y2] || 0
|
25
|
+
@x3 = opts[:x3] || 100
|
26
|
+
@y3 = opts[:y3] || 100
|
27
|
+
@x4 = opts[:x4] || 0
|
28
|
+
@y4 = opts[:y4] || 100
|
29
|
+
|
30
|
+
@z = opts[:z] || 0
|
31
|
+
|
32
|
+
self.color = opts[:color] || 'white'
|
22
33
|
add
|
23
34
|
end
|
24
|
-
|
35
|
+
|
25
36
|
def color=(c)
|
26
|
-
@color = c
|
27
|
-
update_color(
|
28
|
-
end
|
29
|
-
|
30
|
-
def add
|
31
|
-
if Module.const_defined? :DSL
|
32
|
-
Application.add(self)
|
33
|
-
end
|
37
|
+
@color = Color.from(c)
|
38
|
+
update_color(@color)
|
34
39
|
end
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
+
|
41
|
+
# The logic is the same as for a triangle
|
42
|
+
# See triangle.rb for reference
|
43
|
+
def contains?(x, y)
|
44
|
+
self_area = triangle_area(@x1, @y1, @x2, @y2, @x3, @y3) +
|
45
|
+
triangle_area(@x1, @y1, @x3, @y3, @x4, @y4)
|
46
|
+
|
47
|
+
questioned_area = triangle_area(@x1, @y1, @x2, @y2, x, y) +
|
48
|
+
triangle_area(@x2, @y2, @x3, @y3, x, y) +
|
49
|
+
triangle_area(@x3, @y3, @x4, @y4, x, y) +
|
50
|
+
triangle_area(@x4, @y4, @x1, @y1, x, y)
|
51
|
+
|
52
|
+
questioned_area <= self_area
|
40
53
|
end
|
41
|
-
|
54
|
+
|
42
55
|
private
|
43
|
-
|
56
|
+
|
57
|
+
def triangle_area(x1, y1, x2, y2, x3, y3)
|
58
|
+
(x1*y2 + x2*y3 + x3*y1 - x3*y2 - x1*y3 - x2*y1).abs / 2
|
59
|
+
end
|
60
|
+
|
44
61
|
def update_color(c)
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
raise Error, "Quads require 4 colors, one for each vertex. Only " <<
|
55
|
-
"#{c.length} were given."
|
56
|
-
|
57
|
-
# If a valid array of colors, assign them to each vertex, respectively
|
58
|
-
elsif c.all? { |el| Color.is_valid? el }
|
59
|
-
@c1 = Color.new(c[0])
|
60
|
-
@c2 = Color.new(c[1])
|
61
|
-
@c3 = Color.new(c[2])
|
62
|
-
@c4 = Color.new(c[3])
|
63
|
-
|
62
|
+
if c.is_a? Color::Set
|
63
|
+
if c.length == 4
|
64
|
+
@c1 = c[0]
|
65
|
+
@c2 = c[1]
|
66
|
+
@c3 = c[2]
|
67
|
+
@c4 = c[3]
|
68
|
+
else
|
69
|
+
raise ArgumentError, "Quads require 4 colors, one for each vertex. #{c.length} were given."
|
70
|
+
end
|
64
71
|
else
|
65
|
-
|
72
|
+
@c1 = c
|
73
|
+
@c2 = c
|
74
|
+
@c3 = c
|
75
|
+
@c4 = c
|
66
76
|
end
|
67
|
-
|
68
77
|
end
|
69
|
-
|
70
78
|
end
|
71
79
|
end
|
data/lib/ruby2d/rectangle.rb
CHANGED
@@ -2,43 +2,54 @@
|
|
2
2
|
|
3
3
|
module Ruby2D
|
4
4
|
class Rectangle < Quad
|
5
|
-
|
5
|
+
|
6
6
|
attr_reader :x, :y, :width, :height
|
7
|
-
|
8
|
-
def initialize(
|
7
|
+
|
8
|
+
def initialize(opts = {})
|
9
9
|
@type_id = 2
|
10
|
-
|
11
|
-
|
12
|
-
|
10
|
+
|
11
|
+
@x = opts[:x] || 0
|
12
|
+
@y = opts[:y] || 0
|
13
|
+
@z = opts[:z] || 0
|
14
|
+
@width = opts[:width] || 200
|
15
|
+
@height = opts[:height] || 100
|
16
|
+
|
17
|
+
update_coords(@x, @y, @width, @height)
|
18
|
+
|
19
|
+
self.color = opts[:color] || 'white'
|
13
20
|
add
|
14
21
|
end
|
15
|
-
|
22
|
+
|
16
23
|
def x=(x)
|
17
24
|
@x = @x1 = x
|
18
25
|
@x2 = x + @width
|
19
26
|
@x3 = x + @width
|
20
27
|
@x4 = x
|
21
28
|
end
|
22
|
-
|
29
|
+
|
23
30
|
def y=(y)
|
24
31
|
@y = @y1 = y
|
25
32
|
@y2 = y
|
26
33
|
@y3 = y + @height
|
27
34
|
@y4 = y + @height
|
28
35
|
end
|
29
|
-
|
36
|
+
|
30
37
|
def width=(w)
|
31
38
|
@width = w
|
32
39
|
update_coords(@x, @y, w, @height)
|
33
40
|
end
|
34
|
-
|
41
|
+
|
35
42
|
def height=(h)
|
36
43
|
@height = h
|
37
44
|
update_coords(@x, @y, @width, h)
|
38
45
|
end
|
39
|
-
|
46
|
+
|
47
|
+
def contains?(x, y)
|
48
|
+
@x < x and @x + @width > x and @y < y and @y + @height > y
|
49
|
+
end
|
50
|
+
|
40
51
|
private
|
41
|
-
|
52
|
+
|
42
53
|
def update_coords(x, y, w, h)
|
43
54
|
@x1 = x
|
44
55
|
@y1 = y
|
@@ -49,6 +60,6 @@ module Ruby2D
|
|
49
60
|
@x3 = x + w
|
50
61
|
@y3 = y + h
|
51
62
|
end
|
52
|
-
|
63
|
+
|
53
64
|
end
|
54
65
|
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module Ruby2D
|
2
|
+
module Renderable
|
3
|
+
attr_reader :z
|
4
|
+
|
5
|
+
def z=(z)
|
6
|
+
remove
|
7
|
+
@z = z
|
8
|
+
add
|
9
|
+
end
|
10
|
+
|
11
|
+
def add
|
12
|
+
if Module.const_defined? :DSL
|
13
|
+
Application.add(self)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def remove
|
18
|
+
if Module.const_defined? :DSL
|
19
|
+
Application.remove(self)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def opacity
|
24
|
+
self.color.opacity
|
25
|
+
end
|
26
|
+
|
27
|
+
def opacity=(val)
|
28
|
+
self.color.opacity = val
|
29
|
+
end
|
30
|
+
|
31
|
+
def contains?(x, y)
|
32
|
+
raise "Not implemented yet"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
data/lib/ruby2d/sound.rb
CHANGED
@@ -2,15 +2,25 @@
|
|
2
2
|
|
3
3
|
module Ruby2D
|
4
4
|
class Sound
|
5
|
-
|
5
|
+
|
6
6
|
attr_accessor :data
|
7
7
|
attr_reader :path
|
8
|
-
|
8
|
+
|
9
9
|
def initialize(path)
|
10
|
-
|
11
|
-
|
10
|
+
|
11
|
+
unless RUBY_ENGINE == 'opal'
|
12
|
+
unless File.exists? path
|
13
|
+
raise Error, "Cannot find audio file `#{path}`"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
12
17
|
@path = path
|
18
|
+
ext_sound_init(path)
|
13
19
|
end
|
14
|
-
|
20
|
+
|
21
|
+
def play
|
22
|
+
ext_sound_play
|
23
|
+
end
|
24
|
+
|
15
25
|
end
|
16
26
|
end
|