ruby2d 0.3.1 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|