ray 0.0.1 → 0.1.0.pre1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gemtest +0 -0
- data/.yardopts +4 -0
- data/README.md +17 -21
- data/Rakefile +18 -139
- data/VERSION +1 -1
- data/ext/audio.cpp +723 -0
- data/ext/{color.c → color.cpp} +25 -13
- data/ext/drawable.cpp +91 -0
- data/ext/event.cpp +460 -0
- data/ext/extconf.rb +5 -104
- data/ext/font.cpp +190 -0
- data/ext/image.cpp +733 -0
- data/ext/input.cpp +74 -0
- data/ext/ray.cpp +168 -0
- data/ext/ray.hpp +356 -0
- data/ext/{rect.c → rect.cpp} +51 -37
- data/ext/shader.cpp +169 -0
- data/ext/shape.cpp +409 -0
- data/ext/sprite.cpp +306 -0
- data/ext/text.cpp +181 -0
- data/ext/vector.cpp +215 -0
- data/guide.md +619 -0
- data/lib/ray/audio.rb +0 -41
- data/lib/ray/color.rb +32 -10
- data/lib/ray/drawable.rb +16 -0
- data/lib/ray/dsl/event_listener.rb +25 -2
- data/lib/ray/dsl/event_runner.rb +33 -5
- data/lib/ray/dsl/event_translator.rb +66 -30
- data/lib/ray/dsl/handler.rb +3 -2
- data/lib/ray/dsl/matcher.rb +58 -14
- data/lib/ray/font.rb +38 -96
- data/lib/ray/font_set.rb +8 -8
- data/lib/ray/game.rb +87 -66
- data/lib/ray/helper.rb +105 -10
- data/lib/ray/image.rb +150 -24
- data/lib/ray/image_set.rb +3 -1
- data/lib/ray/input.rb +10 -0
- data/lib/ray/music_set.rb +5 -3
- data/lib/ray/ray.rb +21 -9
- data/lib/ray/rect.rb +48 -7
- data/lib/ray/rmagick.rb +41 -0
- data/lib/ray/scene.rb +99 -43
- data/lib/ray/scene_list.rb +67 -0
- data/lib/ray/shape.rb +132 -0
- data/lib/ray/sound_set.rb +4 -2
- data/lib/ray/sprite.rb +49 -111
- data/lib/ray/text.rb +101 -0
- data/lib/ray/text_helper.rb +37 -0
- data/lib/ray/turtle.rb +215 -0
- data/lib/ray/vector.rb +226 -0
- data/samples/audio/spacial.rb +44 -0
- data/samples/hello_world/hello.rb +9 -13
- data/samples/hello_world/hello_dsl.rb +8 -12
- data/samples/hello_world/text.rb +15 -0
- data/samples/opengl/binding.rb +38 -0
- data/samples/opengl/image.rb +32 -0
- data/samples/opengl/opengl.rb +34 -0
- data/samples/opengl/shader.rb +42 -0
- data/samples/pong/pong.rb +14 -10
- data/samples/run_scene.rb +53 -0
- data/samples/shaders/scene.rb +40 -0
- data/samples/shaders/shaders.rb +42 -0
- data/samples/shaders/shape.rb +34 -0
- data/samples/sokoban/sokoban.rb +18 -18
- data/samples/test/actual_scene.rb +41 -0
- data/samples/test/scene_riot.rb +39 -0
- data/samples/test/scene_spec.rb +32 -0
- data/samples/test/scene_test_unit.rb +25 -0
- data/samples/turtle/byzantium.rb +45 -0
- data/samples/turtle/hilbert.rb +48 -0
- data/samples/turtle/koch.rb +55 -0
- data/samples/turtle/mandala.rb +61 -0
- data/samples/turtle/tree.rb +57 -0
- data/test/audio_test.rb +69 -0
- data/test/color_test.rb +77 -0
- data/test/drawable_test.rb +19 -0
- data/test/dsl_test.rb +93 -0
- data/test/font_test.rb +57 -0
- data/test/helpers.rb +94 -0
- data/test/image_test.rb +82 -0
- data/test/ray_test.rb +25 -0
- data/test/rect_test.rb +121 -0
- data/{spec → test}/res/VeraMono.ttf +0 -0
- data/{spec → test}/res/aqua.bmp +0 -0
- data/{spec → test}/res/aqua.png +0 -0
- data/{spec → test}/res/aqua2.bmp +0 -0
- data/{spec → test}/res/not_a_jpeg.jpeg +0 -0
- data/{spec → test}/res/pop.wav +0 -0
- data/test/resource_set_test.rb +99 -0
- data/test/run_all.rb +7 -0
- data/test/shape_test.rb +101 -0
- data/test/sprite_test.rb +89 -0
- data/test/text_test.rb +78 -0
- data/test/turtle_test.rb +176 -0
- data/test/vector_test.rb +111 -0
- data/yard_ext.rb +0 -28
- metadata +95 -139
- data/.gitignore +0 -23
- data/.gitmodules +0 -3
- data/.rspec +0 -3
- data/ext/audio.c +0 -473
- data/ext/event.c +0 -557
- data/ext/font.c +0 -287
- data/ext/image.c +0 -933
- data/ext/joystick.c +0 -145
- data/ext/ray.c +0 -489
- data/ext/ray.h +0 -245
- data/ext/ray_osx.m +0 -161
- data/lib/ray/joystick.rb +0 -30
- data/psp/SDL_psp_main.c +0 -84
- data/psp/bigdecimal/README +0 -60
- data/psp/bigdecimal/bigdecimal.c +0 -4697
- data/psp/bigdecimal/bigdecimal.h +0 -216
- data/psp/bigdecimal/lib/bigdecimal/jacobian.rb +0 -85
- data/psp/bigdecimal/lib/bigdecimal/ludcmp.rb +0 -84
- data/psp/bigdecimal/lib/bigdecimal/math.rb +0 -235
- data/psp/bigdecimal/lib/bigdecimal/newton.rb +0 -77
- data/psp/bigdecimal/lib/bigdecimal/util.rb +0 -65
- data/psp/digest/bubblebabble/bubblebabble.c +0 -142
- data/psp/digest/defs.h +0 -20
- data/psp/digest/digest.c +0 -643
- data/psp/digest/digest.h +0 -32
- data/psp/digest/lib/digest.rb +0 -50
- data/psp/digest/lib/md5.rb +0 -27
- data/psp/digest/lib/sha1.rb +0 -27
- data/psp/digest/md5/md5.c +0 -420
- data/psp/digest/md5/md5.h +0 -80
- data/psp/digest/md5/md5init.c +0 -40
- data/psp/digest/rmd160/rmd160.c +0 -457
- data/psp/digest/rmd160/rmd160.h +0 -56
- data/psp/digest/rmd160/rmd160init.c +0 -40
- data/psp/digest/sha1/sha1.c +0 -269
- data/psp/digest/sha1/sha1.h +0 -39
- data/psp/digest/sha1/sha1init.c +0 -40
- data/psp/digest/sha2/lib/sha2.rb +0 -73
- data/psp/digest/sha2/sha2.c +0 -919
- data/psp/digest/sha2/sha2.h +0 -109
- data/psp/digest/sha2/sha2init.c +0 -52
- data/psp/enumerator/enumerator.c +0 -298
- data/psp/etc/etc.c +0 -559
- data/psp/ext.c +0 -289
- data/psp/fcntl/fcntl.c +0 -187
- data/psp/lib/rbconfig.rb +0 -178
- data/psp/nkf/lib/kconv.rb +0 -367
- data/psp/nkf/nkf-utf8/config.h +0 -88
- data/psp/nkf/nkf-utf8/nkf.c +0 -6040
- data/psp/nkf/nkf-utf8/utf8tbl.c +0 -8500
- data/psp/nkf/nkf-utf8/utf8tbl.h +0 -34
- data/psp/nkf/nkf.c +0 -654
- data/psp/socket/addrinfo.h +0 -173
- data/psp/socket/getaddrinfo.c +0 -676
- data/psp/socket/getnameinfo.c +0 -270
- data/psp/socket/pspsocket.c +0 -71
- data/psp/socket/pspsocket.h +0 -28
- data/psp/socket/socket.c +0 -4662
- data/psp/socket/sockport.h +0 -76
- data/psp/stringio/stringio.c +0 -1306
- data/psp/strscan/strscan.c +0 -1320
- data/psp/syck/bytecode.c +0 -1166
- data/psp/syck/emitter.c +0 -1242
- data/psp/syck/gram.c +0 -1894
- data/psp/syck/gram.h +0 -79
- data/psp/syck/handler.c +0 -174
- data/psp/syck/implicit.c +0 -2990
- data/psp/syck/node.c +0 -408
- data/psp/syck/rubyext.c +0 -2367
- data/psp/syck/syck.c +0 -504
- data/psp/syck/syck.h +0 -456
- data/psp/syck/token.c +0 -2725
- data/psp/syck/yaml2byte.c +0 -257
- data/psp/syck/yamlbyte.h +0 -170
- data/psp/thread/thread.c +0 -1175
- data/psp/zlib/zlib.c +0 -3547
- data/script.rb +0 -10
- data/spec/ray/audio_spec.rb +0 -146
- data/spec/ray/color_spec.rb +0 -57
- data/spec/ray/event_spec.rb +0 -80
- data/spec/ray/font_spec.rb +0 -93
- data/spec/ray/image_set_spec.rb +0 -48
- data/spec/ray/image_spec.rb +0 -162
- data/spec/ray/joystick_spec.rb +0 -21
- data/spec/ray/matcher_spec.rb +0 -50
- data/spec/ray/ray_spec.rb +0 -88
- data/spec/ray/rect_spec.rb +0 -154
- data/spec/ray/resource_set_spec.rb +0 -105
- data/spec/ray/sprite_spec.rb +0 -163
- data/spec/spec.opts +0 -4
- data/spec/spec_helper.rb +0 -8
data/lib/ray/image.rb
CHANGED
@@ -4,7 +4,6 @@ module Ray
|
|
4
4
|
"#<#{self.class} w=#{w} h=#{h}>"
|
5
5
|
end
|
6
6
|
|
7
|
-
alias :bits_per_pixel :bpp
|
8
7
|
alias :w :width
|
9
8
|
alias :h :height
|
10
9
|
|
@@ -14,13 +13,151 @@ module Ray
|
|
14
13
|
extend Ray::ResourceSet
|
15
14
|
add_set(/^(.*)$/) { |filename| new(filename) }
|
16
15
|
|
16
|
+
# @return [Ray::Vector2] Size of the image
|
17
|
+
def size
|
18
|
+
Ray::Vector2[w, h]
|
19
|
+
end
|
20
|
+
|
21
|
+
# Draws a point.
|
22
|
+
#
|
23
|
+
# @param [Ray::Vector2, #to_vector2] point The point which should be drawn.
|
24
|
+
# @param [Ray::Color] color Its new color.
|
25
|
+
def draw_pixel(point, color)
|
26
|
+
point = point.to_vector2
|
27
|
+
draw_filled_rect(Ray::Rect.new(point.x, point.y, 1, 1), color)
|
28
|
+
end
|
29
|
+
|
30
|
+
# Draws a line.
|
31
|
+
#
|
32
|
+
# @param [Ray::Vector2, #to_vector2] p1 First point of the line.
|
33
|
+
# @param [Ray::Vector2, #to_vector2] p2 Second point of the line.
|
34
|
+
# @param [Ray::Color] color Color of the line.
|
35
|
+
# @param [Integer] size Thickness of the line.
|
36
|
+
def draw_line(p1, p2, color, size = 1)
|
37
|
+
draw_shape Ray::Shape.line(p1, p2, size, color)
|
38
|
+
end
|
39
|
+
|
40
|
+
# Draws a rect.
|
41
|
+
#
|
42
|
+
# @param [Ray::Rect, Array<Integer>] rect Rect to draw.
|
43
|
+
# @param [Ray::Color] color Color of the rect.
|
44
|
+
def draw_rect(rect, color)
|
45
|
+
shape = Ray::Shape.rectangle(rect, Ray::Color.none, 1, color)
|
46
|
+
shape.filled = false
|
47
|
+
|
48
|
+
draw_shape shape
|
49
|
+
end
|
50
|
+
|
51
|
+
# Draws a filled rect.
|
52
|
+
#
|
53
|
+
# @param [Ray::Rect, Array<Integer>] rect Rect to draw.
|
54
|
+
# @param [Ray::Color] color color of the rect.
|
55
|
+
def draw_filled_rect(rect, color)
|
56
|
+
draw_shape Ray::Shape.rectangle(rect, color)
|
57
|
+
end
|
58
|
+
|
59
|
+
# Draws a circle.
|
60
|
+
#
|
61
|
+
# @param [Ray::Vector2, #to_vector2] center Center of the circle.
|
62
|
+
# @param [Integer] radius Radius of the circle.
|
63
|
+
# @param [Ray::Color] color Color of the circle.
|
64
|
+
def draw_circle(center, radius, color)
|
65
|
+
shape = Ray::Shape.circle(center, radius, Ray::Color.none, 1, color)
|
66
|
+
shape.filled = false
|
67
|
+
|
68
|
+
draw_shape shape
|
69
|
+
end
|
70
|
+
|
71
|
+
# Draws a filled circle.
|
72
|
+
#
|
73
|
+
# @param [Ray::Vector2, #to_vector2] center Center of the circle.
|
74
|
+
# @param [Integer] radius Radius of the circle.
|
75
|
+
# @param [Ray::Color] color Color of the circle.
|
76
|
+
def draw_filled_circle(center, radius, color)
|
77
|
+
draw_shape Ray::Shape.circle(center, radius, color)
|
78
|
+
end
|
79
|
+
|
80
|
+
# Draws an ellipse.
|
81
|
+
#
|
82
|
+
# @param [Ray::Vector2, #to_vector2] center Center of the ellipse
|
83
|
+
# @param [Float] rx x radius (half of the width)
|
84
|
+
# @param [Float] ry y radius (half of the height)
|
85
|
+
# @param [Ray::Color] color Color in which the ellipse should be drawn.
|
86
|
+
def draw_ellipse(center, rx, ry, color)
|
87
|
+
ellipse = Ray::Shape.ellipse(center, rx, ry, Ray::Color.none, 1, color)
|
88
|
+
ellipse.filled = false
|
89
|
+
|
90
|
+
draw_shape ellipse
|
91
|
+
end
|
92
|
+
|
93
|
+
# Draws a filled ellipse.
|
94
|
+
#
|
95
|
+
# @param [Ray::Vector2, #to_vector2] center Center of the ellipse
|
96
|
+
# @param [Float] rx x radius (half of the width)
|
97
|
+
# @param [Float] ry y radius (half of the height)
|
98
|
+
# @param [Ray::Color] color Color in which the ellipse should be drawn.
|
99
|
+
def draw_filled_ellipse(center, rx, ry, color)
|
100
|
+
draw_shape Ray::Shape.ellipse(center, rx, ry, color)
|
101
|
+
end
|
102
|
+
|
103
|
+
# Draws a triangle.
|
104
|
+
def draw_triangle(p1, p2, p3, color)
|
105
|
+
shape = Ray::Shape.new
|
106
|
+
|
107
|
+
shape.add_point(p1, Ray::Color.none, color)
|
108
|
+
shape.add_point(p2, Ray::Color.none, color)
|
109
|
+
shape.add_point(p3, Ray::Color.none, color)
|
110
|
+
|
111
|
+
shape.filled = false
|
112
|
+
shape.outline_width = 1.0
|
113
|
+
|
114
|
+
draw_shape shape
|
115
|
+
end
|
116
|
+
|
117
|
+
# Draws a filled triangle.
|
118
|
+
def draw_filled_triangle(p1, p2, p3, color)
|
119
|
+
shape = Ray::Shape.new
|
120
|
+
|
121
|
+
shape.add_point(p1, color)
|
122
|
+
shape.add_point(p2, color)
|
123
|
+
shape.add_point(p3, color)
|
124
|
+
|
125
|
+
draw_shape shape
|
126
|
+
end
|
127
|
+
|
128
|
+
# Draws a polygon.
|
129
|
+
#
|
130
|
+
# @param [Array<Ray::Vector2, #to_vector2>] points Points which should be joined
|
131
|
+
# to draw the polygon.
|
132
|
+
# @param [Ray::Color] color The color in which the polygon should be drawn.
|
133
|
+
def draw_polygon(points, color)
|
134
|
+
shape = Ray::Shape.new
|
135
|
+
points.each { |p| shape.add_point(p, Ray::Color.none, color) }
|
136
|
+
|
137
|
+
shape.filled = false
|
138
|
+
shape.outline_width = 1.0
|
139
|
+
|
140
|
+
draw_shape shape
|
141
|
+
end
|
142
|
+
|
143
|
+
# Draws a filled polygon.
|
144
|
+
#
|
145
|
+
# @param [Array<Ray::Vector2, #to_vector2>] points Points which should be joined
|
146
|
+
# to draw the polygon.
|
147
|
+
# @param [Ray::Color] color The color in which the polygon should be drawn.
|
148
|
+
def draw_filled_polygon(points, color)
|
149
|
+
shape = Ray::Shape.new
|
150
|
+
points.each { |p| shape.add_point(p, color) }
|
151
|
+
draw_shape shape
|
152
|
+
end
|
153
|
+
|
17
154
|
# @yield [pixel]
|
18
155
|
# @yieldparam [Ray::Color] pixel Color of a point
|
19
156
|
def each
|
20
157
|
return Enumerator.new(self, :each) unless block_given?
|
21
158
|
|
22
|
-
(0...
|
23
|
-
(0...
|
159
|
+
(0...h).each do |y|
|
160
|
+
(0...w).each do |x|
|
24
161
|
yield self[x, y]
|
25
162
|
end
|
26
163
|
end
|
@@ -29,13 +166,13 @@ module Ray
|
|
29
166
|
end
|
30
167
|
|
31
168
|
# Same as each, but also yields the position of each point.
|
32
|
-
# @yield [x, y
|
169
|
+
# @yield [pixel, x, y]
|
33
170
|
def each_with_pos
|
34
171
|
return Enumerator.new(self, :each_with_pos) unless block_given?
|
35
172
|
|
36
|
-
(0...
|
37
|
-
(0...
|
38
|
-
yield x, y,
|
173
|
+
(0...h).each do |y|
|
174
|
+
(0...w).each do |x|
|
175
|
+
yield self[x, y], x, y
|
39
176
|
end
|
40
177
|
end
|
41
178
|
|
@@ -47,8 +184,8 @@ module Ray
|
|
47
184
|
return Enumerator.new(self, :map!) unless block_given?
|
48
185
|
|
49
186
|
lock do
|
50
|
-
(0...
|
51
|
-
(0...
|
187
|
+
(0...h).each do |y|
|
188
|
+
(0...w).each do |x|
|
52
189
|
self[x, y] = yield self[x, y]
|
53
190
|
end
|
54
191
|
end
|
@@ -57,14 +194,14 @@ module Ray
|
|
57
194
|
self
|
58
195
|
end
|
59
196
|
|
60
|
-
# @yield [x, y
|
197
|
+
# @yield [pixel, x, y] Block returning the new color of this pixel
|
61
198
|
def map_with_pos!
|
62
199
|
return Enumerator.new(self, :map_with_pos!) unless block_given?
|
63
200
|
|
64
201
|
lock do
|
65
|
-
(0...
|
66
|
-
(0...
|
67
|
-
self[x, y] = yield x, y,
|
202
|
+
(0...h).each do |y|
|
203
|
+
(0...w).each do |x|
|
204
|
+
self[x, y] = yield self[x, y], x, y
|
68
205
|
end
|
69
206
|
end
|
70
207
|
end
|
@@ -82,17 +219,6 @@ module Ray
|
|
82
219
|
dup.map_with_pos!(&block)
|
83
220
|
end
|
84
221
|
|
85
|
-
def to_image
|
86
|
-
self
|
87
|
-
end
|
88
|
-
|
89
222
|
include Enumerable
|
90
223
|
end
|
91
224
|
end
|
92
|
-
|
93
|
-
class String
|
94
|
-
# Converts the string to an image using Ray::ImageSet.[]
|
95
|
-
def to_image
|
96
|
-
Ray::ImageSet[self]
|
97
|
-
end
|
98
|
-
end
|
data/lib/ray/image_set.rb
CHANGED
@@ -19,9 +19,11 @@ module Ray
|
|
19
19
|
# @param [Regexp] regex Regular expression used to match file
|
20
20
|
# @yield [*args] Block returning the image
|
21
21
|
# @yieldparam args Regex captures
|
22
|
-
def
|
22
|
+
def image_set(regex, &block)
|
23
23
|
Ray::ImageSet.add_set(regex, &block)
|
24
24
|
end
|
25
|
+
|
26
|
+
module_function :image_set
|
25
27
|
end
|
26
28
|
|
27
29
|
begin
|
data/lib/ray/input.rb
ADDED
data/lib/ray/music_set.rb
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
module Ray
|
2
2
|
module MusicSet
|
3
3
|
extend Ray::ResourceSet
|
4
|
-
|
4
|
+
|
5
5
|
class << self
|
6
6
|
def missing_pattern(string)
|
7
|
-
Ray::Music[string
|
7
|
+
Ray::Music[string]
|
8
8
|
end
|
9
9
|
|
10
10
|
def select!(&block)
|
@@ -20,9 +20,11 @@ module Ray
|
|
20
20
|
# @yield [*args] Block returning the music
|
21
21
|
#
|
22
22
|
# @yieldparam args Regex captures
|
23
|
-
def
|
23
|
+
def music_set(regex, &block)
|
24
24
|
Ray::MusicSet.add_set(regex, &block)
|
25
25
|
end
|
26
|
+
|
27
|
+
module_function :music_set
|
26
28
|
end
|
27
29
|
|
28
30
|
begin
|
data/lib/ray/ray.rb
CHANGED
@@ -1,22 +1,33 @@
|
|
1
1
|
require 'enumerator'
|
2
|
+
require 'iconv'
|
2
3
|
|
3
|
-
|
4
|
-
|
5
|
-
|
4
|
+
require 'ray_ext'
|
5
|
+
|
6
|
+
module Ray
|
7
|
+
BIG_ENDIAN = ([1].pack("I") == [1].pack("N"))
|
8
|
+
INTERNAL_ENCODING = BIG_ENDIAN ? "UTF-32BE" : "UTF-32LE"
|
9
|
+
end
|
6
10
|
|
7
11
|
require 'ray/resource_set'
|
8
12
|
|
9
13
|
require 'ray/color'
|
10
14
|
require 'ray/rect'
|
15
|
+
require 'ray/vector'
|
11
16
|
require 'ray/image'
|
12
|
-
require 'ray/
|
13
|
-
require 'ray/
|
14
|
-
require 'ray/
|
17
|
+
require 'ray/shape'
|
18
|
+
require 'ray/drawable'
|
19
|
+
require 'ray/text_helper'
|
20
|
+
require 'ray/font'
|
21
|
+
require 'ray/text'
|
22
|
+
require 'ray/audio'
|
23
|
+
require 'ray/input'
|
15
24
|
|
16
25
|
require 'ray/image_set'
|
17
|
-
require 'ray/font_set'
|
18
|
-
require 'ray/sound_set'
|
19
|
-
require 'ray/music_set'
|
26
|
+
require 'ray/font_set'
|
27
|
+
require 'ray/sound_set'
|
28
|
+
require 'ray/music_set'
|
29
|
+
|
30
|
+
require 'ray/turtle'
|
20
31
|
|
21
32
|
require 'ray/dsl'
|
22
33
|
require 'ray/helper'
|
@@ -24,4 +35,5 @@ require 'ray/helper'
|
|
24
35
|
require 'ray/sprite'
|
25
36
|
|
26
37
|
require 'ray/scene'
|
38
|
+
require 'ray/scene_list'
|
27
39
|
require 'ray/game'
|
data/lib/ray/rect.rb
CHANGED
@@ -7,6 +7,7 @@ module Ray
|
|
7
7
|
# @return [true, false] True if the receiver is inside the rect.
|
8
8
|
# (false if they just collide)
|
9
9
|
def inside?(rect)
|
10
|
+
rect = rect.to_rect
|
10
11
|
(x >= rect.x) && (y >= rect.y) &&
|
11
12
|
(x + w) <= (rect.x + rect.w) &&
|
12
13
|
(y + h) <= (rect.y + rect.h)
|
@@ -14,10 +15,11 @@ module Ray
|
|
14
15
|
|
15
16
|
# @return [true, false] True if the receiver is outside the rect.
|
16
17
|
def outside?(rect)
|
17
|
-
|
18
|
-
|
19
|
-
!rect.contain?(
|
20
|
-
!rect.contain?(
|
18
|
+
rect = rect.to_rect
|
19
|
+
!rect.contain?(top_left) &&
|
20
|
+
!rect.contain?(bottom_left) &&
|
21
|
+
!rect.contain?(top_right) &&
|
22
|
+
!rect.contain?(bottom_right)
|
21
23
|
end
|
22
24
|
|
23
25
|
# @return [true, false] True if the receiver collides with the rect.
|
@@ -26,9 +28,30 @@ module Ray
|
|
26
28
|
end
|
27
29
|
|
28
30
|
# @return [true, false] True if the receiver contians this point
|
29
|
-
def contain?(
|
30
|
-
|
31
|
-
|
31
|
+
def contain?(p)
|
32
|
+
p = p.to_vector2
|
33
|
+
(p.x >= x) && (p.y >= y) &&
|
34
|
+
(p.x < x + w) && (p.y < y + h)
|
35
|
+
end
|
36
|
+
|
37
|
+
# @return [Ray::Vector2] top left corner
|
38
|
+
def top_left
|
39
|
+
Ray::Vector2[x, y]
|
40
|
+
end
|
41
|
+
|
42
|
+
# @return [Ray::Vector2] top right corner
|
43
|
+
def top_right
|
44
|
+
Ray::Vector2[x + w, y]
|
45
|
+
end
|
46
|
+
|
47
|
+
# @return [Ray::Vector2] bottom left corner
|
48
|
+
def bottom_left
|
49
|
+
Ray::Vector2[x, y + h]
|
50
|
+
end
|
51
|
+
|
52
|
+
# @return [Ray::Vector2] bottom right corner
|
53
|
+
def bottom_right
|
54
|
+
Ray::Vector2[x + w, y + h]
|
32
55
|
end
|
33
56
|
|
34
57
|
# @return [true, false] True if the two rects are equal
|
@@ -37,10 +60,28 @@ module Ray
|
|
37
60
|
x == rect.x && y == rect.y && w == rect.w && h == rect.h
|
38
61
|
end
|
39
62
|
|
63
|
+
def eql?(obj)
|
64
|
+
self.class == obj.class && self == obj
|
65
|
+
end
|
66
|
+
|
67
|
+
def hash
|
68
|
+
[x, y, w, h].hash
|
69
|
+
end
|
70
|
+
|
40
71
|
def to_rect
|
41
72
|
self
|
42
73
|
end
|
43
74
|
|
75
|
+
# @return [Ray::Vector2] The position of the rect
|
76
|
+
def pos
|
77
|
+
Vector2[x, y]
|
78
|
+
end
|
79
|
+
|
80
|
+
# @return [Ray::Vector2] The size of the rect
|
81
|
+
def size
|
82
|
+
Vector2[w, h]
|
83
|
+
end
|
84
|
+
|
44
85
|
alias :w :width
|
45
86
|
alias :h :height
|
46
87
|
|
data/lib/ray/rmagick.rb
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'rmagick'
|
2
|
+
|
3
|
+
module Ray
|
4
|
+
class Color
|
5
|
+
# @return [Ray::Color] A color created from an Magick::Pixel
|
6
|
+
def self.from_rmagick(pix)
|
7
|
+
max = Magick::QuantumRange.to_f
|
8
|
+
new((pix.red * 255) / max, (pix.green * 255) / max, (pix.blue * 255) / max,
|
9
|
+
((max - pix.opacity) * 255) / max)
|
10
|
+
end
|
11
|
+
|
12
|
+
# @return [Magick::Pixel] An equivalent color for RMagick
|
13
|
+
def to_rmagick
|
14
|
+
max = Magick::QuantumRange.to_f
|
15
|
+
Magick::Pixel.new((r * max) / 255, (g * max) / 255, (b * max) / 255,
|
16
|
+
((255 - a) * max) / 255)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
class Image
|
21
|
+
# @return [Ray::Image] An image created from a Magic::Image
|
22
|
+
def self.from_rmagick(input)
|
23
|
+
img = new(:w => input.columns, :h => input.rows)
|
24
|
+
|
25
|
+
img.map_with_pos! do |col, x, y|
|
26
|
+
Color.from_rmagick(input.pixel_color(x, y))
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
# @return [Magick::Image] An equivalant image for RMagick
|
31
|
+
def to_rmagick
|
32
|
+
img = Magick::Image.new(width, height)
|
33
|
+
|
34
|
+
each_with_pos do |col, x, y|
|
35
|
+
img.pixel_color(x, y, col.to_rmagick)
|
36
|
+
end
|
37
|
+
|
38
|
+
img
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|