ray 0.1.1 → 0.2.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.
- data/README.md +9 -6
- data/Rakefile +1 -5
- data/ext/audio.c +25 -19
- data/ext/audio_source.c +67 -39
- data/ext/color.c +19 -19
- data/ext/drawable.c +190 -31
- data/ext/extconf.rb +16 -14
- data/ext/gl.c +310 -30
- data/ext/gl_buffer.c +223 -2
- data/ext/gl_index_buffer.c +11 -0
- data/ext/gl_int_array.c +24 -22
- data/ext/gl_vertex.c +84 -49
- data/ext/image.c +115 -51
- data/ext/image_target.c +58 -10
- data/ext/input.c +73 -6
- data/ext/mo.c +583 -0
- data/ext/mo.h +189 -0
- data/ext/music.c +9 -8
- data/ext/pixel_bus.c +349 -0
- data/ext/polygon.c +68 -45
- data/ext/ray.c +1 -0
- data/ext/ray.h +19 -1
- data/ext/rect.c +9 -47
- data/ext/say.h +1 -2
- data/ext/say_all.h +6 -0
- data/ext/say_audio.h +3 -0
- data/ext/say_audio_context.c +1 -4
- data/ext/say_basic_type.c +24 -0
- data/ext/say_basic_type.h +4 -0
- data/ext/say_buffer.c +217 -88
- data/ext/say_buffer.h +20 -5
- data/ext/say_buffer_renderer.c +10 -7
- data/ext/say_buffer_renderer.h +1 -1
- data/ext/say_buffer_slice.c +70 -76
- data/ext/say_context.c +109 -22
- data/ext/say_context.h +14 -0
- data/ext/say_drawable.c +113 -25
- data/ext/say_drawable.h +23 -2
- data/ext/say_error.c +7 -2
- data/ext/say_font.c +30 -27
- data/ext/say_font.h +3 -6
- data/ext/say_get_proc.c +35 -0
- data/ext/say_image.c +102 -27
- data/ext/say_image.h +11 -4
- data/ext/say_image_target.c +88 -34
- data/ext/say_image_target.h +3 -2
- data/ext/say_index_buffer.c +31 -19
- data/ext/say_index_buffer.h +4 -2
- data/ext/say_index_buffer_slice.c +78 -70
- data/ext/say_music.c +4 -2
- data/ext/say_osx.h +3 -2
- data/ext/say_osx_context.h +37 -4
- data/ext/say_osx_window.h +32 -37
- data/ext/say_pixel_bus.c +163 -0
- data/ext/say_pixel_bus.h +44 -0
- data/ext/say_polygon.c +2 -2
- data/ext/say_shader.c +66 -62
- data/ext/say_shader.h +2 -0
- data/ext/say_sprite.c +1 -2
- data/ext/say_target.c +14 -23
- data/ext/say_target.h +3 -1
- data/ext/say_text.c +45 -7
- data/ext/say_text.h +12 -3
- data/ext/say_thread.c +13 -6
- data/ext/say_thread.h +1 -1
- data/ext/say_thread_variable.c +5 -5
- data/ext/say_vertex_type.c +79 -41
- data/ext/say_vertex_type.h +6 -2
- data/ext/say_view.c +10 -31
- data/ext/say_view.h +1 -5
- data/ext/say_win.h +2 -2
- data/ext/say_win_context.h +49 -11
- data/ext/say_win_window.h +30 -27
- data/ext/say_window.c +3 -3
- data/ext/say_x11.h +3 -1
- data/ext/say_x11_context.h +64 -10
- data/ext/say_x11_window.h +22 -17
- data/ext/shader.c +9 -0
- data/ext/sprite.c +7 -1
- data/ext/target.c +80 -28
- data/ext/text.c +43 -1
- data/ext/view.c +53 -1
- data/ext/window.c +4 -0
- data/lib/ray/animation_list.rb +17 -2
- data/lib/ray/audio_source.rb +11 -0
- data/lib/ray/color.rb +14 -0
- data/lib/ray/drawable.rb +23 -0
- data/lib/ray/dsl/event.rb +1 -9
- data/lib/ray/dsl/event_runner.rb +3 -4
- data/lib/ray/dsl/matcher.rb +20 -1
- data/lib/ray/effect.rb +116 -0
- data/lib/ray/effect/black_and_white.rb +38 -0
- data/lib/ray/effect/color_inversion.rb +16 -0
- data/lib/ray/effect/generator.rb +145 -0
- data/lib/ray/effect/grayscale.rb +32 -0
- data/lib/ray/game.rb +25 -5
- data/lib/ray/gl/vertex.rb +105 -26
- data/lib/ray/helper.rb +5 -0
- data/lib/ray/image.rb +54 -13
- data/lib/ray/image_target.rb +7 -0
- data/lib/ray/matrix.rb +26 -0
- data/lib/ray/music.rb +4 -0
- data/lib/ray/pixel_bus.rb +22 -0
- data/lib/ray/polygon.rb +17 -0
- data/lib/ray/pp.rb +28 -0
- data/lib/ray/ray.rb +7 -1
- data/lib/ray/rect.rb +7 -13
- data/lib/ray/scene.rb +24 -5
- data/lib/ray/scene_list.rb +9 -0
- data/lib/ray/shader.rb +11 -2
- data/lib/ray/sound.rb +4 -0
- data/lib/ray/sprite.rb +23 -62
- data/lib/ray/target.rb +25 -0
- data/lib/ray/text.rb +10 -0
- data/lib/ray/turtle.rb +9 -3
- data/lib/ray/vector.rb +18 -0
- data/lib/ray/vertex.rb +6 -0
- data/lib/ray/view.rb +22 -0
- data/samples/animation/sprite_motion.rb +0 -60
- data/samples/audio/{spacial.rb → spatial.rb} +1 -1
- data/samples/buffer/buffer.rb +1 -0
- data/samples/buffer/index_buffer.rb +2 -0
- data/samples/cptn_ruby/cptn_ruby.rb +6 -7
- data/samples/effects/effect.rb +39 -0
- data/samples/effects/grayscale.rb +27 -0
- data/samples/opengl/image.rb +7 -5
- data/samples/opengl/instancing.rb +159 -0
- data/samples/opengl/instancing.rbc +3231 -0
- data/samples/opengl/obj_loader.rb +9 -8
- data/samples/opengl/shader.rb +1 -3
- data/samples/shaders/geometry.rb +108 -38
- data/samples/shaders/geometry.rbc +2074 -0
- data/samples/shaders/shape.rb +2 -2
- data/samples/starfighter/starfighter.rb +5 -5
- data/samples/window/get_pixel.rb +1 -1
- data/test/animation_list_test.rb +18 -4
- data/test/drawable_test.rb +70 -1
- data/test/effect_generator_test.rb +63 -0
- data/test/effect_test.rb +61 -0
- data/test/game_test.rb +18 -0
- data/test/gl_buffer_test.rb +43 -1
- data/test/gl_index_buffer_test.rb +5 -0
- data/test/gl_vertex_test.rb +28 -1
- data/test/image_test.rb +5 -5
- data/test/input_test.rb +49 -0
- data/test/pixel_bus_test.rb +28 -0
- data/test/rect_test.rb +4 -0
- data/{samples/_media → test/res}/Beep.wav +0 -0
- data/samples/_media/CptnRuby Gem.png b/data/test/res/CptnRuby → Gem.png +0 -0
- data/samples/_media/CptnRuby Map.txt b/data/test/res/CptnRuby → Map.txt +0 -0
- data/samples/_media/CptnRuby Tileset.png b/data/test/res/CptnRuby → Tileset.png +0 -0
- data/{samples/_media → test/res}/CptnRuby.png +0 -0
- data/{samples/_media → test/res}/Space.png +0 -0
- data/{samples/_media → test/res}/Star.png +0 -0
- data/{samples/_media → test/res}/Starfighter.png +0 -0
- data/test/res/cube.obj +28 -0
- data/test/res/light3d.c +2 -2
- data/test/res/stone.png +0 -0
- data/test/scene_test.rb +3 -0
- data/test/sprite_test.rb +10 -0
- data/test/text_test.rb +31 -2
- data/test/view_test.rb +13 -1
- metadata +38 -17
- data/ext/say_array.c +0 -124
- data/ext/say_array.h +0 -34
- data/ext/say_table.c +0 -86
- data/ext/say_table.h +0 -24
data/lib/ray/sound.rb
CHANGED
data/lib/ray/sprite.rb
CHANGED
@@ -44,74 +44,20 @@ module Ray
|
|
44
44
|
# @sprite_sheet_pos = Ray::Vector2[0, 0]
|
45
45
|
end
|
46
46
|
|
47
|
-
# # Sets the size of the sprite sheet. For instance,
|
48
|
-
# # sprite.sheet_size = [3, 4]
|
49
|
-
# # would mean there are 4 rows and 3 columns in the sprite (and each cell
|
50
|
-
# # has the same size).
|
51
|
-
# def sheet_size=(ary)
|
52
|
-
# @uses_sprite_sheet = true
|
53
|
-
# @sprite_sheet_size = ary.to_vector2
|
54
|
-
|
55
|
-
# self.sheet_pos = [0, 0]
|
56
|
-
# end
|
57
|
-
|
58
|
-
# # Sets which cell of the sprite sheet should be displayed.
|
59
|
-
# # sprite.sheet_pos = [0, 1] # Uses the first cell of the second line.
|
60
|
-
# #
|
61
|
-
# # pos.x and pos.y are rounded to floor.
|
62
|
-
# # Passing a too high value will make the sprite use the previous cells.
|
63
|
-
# # sprite.sheet_size = [4, 4]
|
64
|
-
# # sprite.sheet_size = [5, 5]
|
65
|
-
# # sprite.sheet_size == [1, 1] # => true
|
66
|
-
# def sheet_pos=(pos)
|
67
|
-
# pos = pos.to_vector2.dup
|
68
|
-
# pos.x = pos.x.floor % @sprite_sheet_size.w
|
69
|
-
# pos.y = pos.y.floor % @sprite_sheet_size.h
|
70
|
-
|
71
|
-
# self.sub_rect = Ray::Rect.new(pos.x * sprite_width,
|
72
|
-
# pos.y * sprite_height,
|
73
|
-
# sprite_width, sprite_height)
|
74
|
-
|
75
|
-
# @sheet_pos = pos
|
76
|
-
# end
|
77
|
-
|
78
|
-
# # @return [Ray::Vector2] the position of the cell which is being used.
|
79
|
-
# attr_reader :sheet_pos
|
80
|
-
|
81
|
-
# # @return [Integer, nil] The width of each cell in the sprite sheet
|
82
|
-
# def sprite_width
|
83
|
-
# if uses_sprite_sheet?
|
84
|
-
# image.w / @sprite_sheet_size.w
|
85
|
-
# end
|
86
|
-
# end
|
87
|
-
|
88
|
-
# # @return [Integer, nil] The height of each cell in the sprite sheet
|
89
|
-
# def sprite_height
|
90
|
-
# if uses_sprite_sheet?
|
91
|
-
# image.h / @sprite_sheet_size.h
|
92
|
-
# end
|
93
|
-
# end
|
94
|
-
|
95
|
-
# # Disables the sprite sheet
|
96
|
-
# def disable_sprite_sheet
|
97
|
-
# self.sub_rect = Ray::Rect.new(0, 0, image.w, image.h) if image
|
98
|
-
|
99
|
-
# @sprite_sheet_size = nil
|
100
|
-
# @uses_sprite_sheet = false
|
101
|
-
# end
|
102
|
-
|
103
|
-
# def uses_sprite_sheet?
|
104
|
-
# @uses_sprite_sheet
|
105
|
-
# end
|
106
|
-
|
107
47
|
# @return [Ray::Rect] The rect where this sprite will be drawn, taking
|
108
48
|
# position and scale in account.
|
109
49
|
def rect
|
110
50
|
pos = self.pos
|
111
51
|
sub_rect = self.sub_rect
|
112
|
-
|
52
|
+
origin = self.origin
|
53
|
+
scale = self.scale
|
54
|
+
|
55
|
+
top_left = (-origin * scale) + pos
|
113
56
|
|
114
|
-
Ray::Rect.new(
|
57
|
+
Ray::Rect.new(top_left.x,
|
58
|
+
top_left.y,
|
59
|
+
sub_rect.w * scale.w,
|
60
|
+
sub_rect.h * scale.h)
|
115
61
|
end
|
116
62
|
|
117
63
|
# @param [Ray::Rect, #to_rect] An object with which the receiver may collide
|
@@ -132,5 +78,20 @@ module Ray
|
|
132
78
|
def to_rect
|
133
79
|
rect
|
134
80
|
end
|
81
|
+
|
82
|
+
def pretty_print(q, other_attr = [])
|
83
|
+
attr = [
|
84
|
+
"image",
|
85
|
+
"color",
|
86
|
+
"x_flipped?", "y_flipped?",
|
87
|
+
"sub_rect", "rect"
|
88
|
+
]
|
89
|
+
|
90
|
+
if uses_sprite_sheet?
|
91
|
+
attr.concat ["sheet_size", "sheet_pos", "sprite_width", "sprite_height"]
|
92
|
+
end
|
93
|
+
|
94
|
+
super q, attr + other_attr
|
95
|
+
end
|
135
96
|
end
|
136
97
|
end
|
data/lib/ray/target.rb
CHANGED
@@ -1,12 +1,31 @@
|
|
1
1
|
module Ray
|
2
2
|
class Target
|
3
|
+
include Ray::PP
|
4
|
+
|
5
|
+
# Shader used when drawing on this target
|
6
|
+
#
|
7
|
+
# Notice this method will always return the same object, and that modifying
|
8
|
+
# this object will modify the shader used internally be the target.
|
9
|
+
#
|
3
10
|
# @return [Ray::Shader] Shader used when drawing on this target
|
4
11
|
def shader
|
5
12
|
@shader ||= simple_shader # must always remain the same object
|
6
13
|
end
|
7
14
|
|
15
|
+
# @group Manipulating views
|
16
|
+
|
17
|
+
# Changes the view temporarily
|
18
|
+
#
|
8
19
|
# @param [Ray::View] view A new view
|
9
20
|
# @yield a block where the view has been changed
|
21
|
+
#
|
22
|
+
# @example
|
23
|
+
# old_view = target.view
|
24
|
+
# target.with_view new_view do
|
25
|
+
# target.view == new_view # => true
|
26
|
+
# end
|
27
|
+
#
|
28
|
+
# target.view == old_view # => true
|
10
29
|
def with_view(view)
|
11
30
|
old_view = self.view
|
12
31
|
self.view = view
|
@@ -14,5 +33,11 @@ module Ray
|
|
14
33
|
ensure
|
15
34
|
self.view = old_view
|
16
35
|
end
|
36
|
+
|
37
|
+
# @endgroup
|
38
|
+
|
39
|
+
def pretty_print(q, other_attr = [])
|
40
|
+
pretty_print_attributes q, ["view", "shader", "size"] + other_attr
|
41
|
+
end
|
17
42
|
end
|
18
43
|
end
|
data/lib/ray/text.rb
CHANGED
@@ -97,6 +97,16 @@ module Ray
|
|
97
97
|
|
98
98
|
alias :to_s :string
|
99
99
|
|
100
|
+
def pretty_print(q, other_attributes = [])
|
101
|
+
attr = [
|
102
|
+
"string",
|
103
|
+
"font", "color", "size", "style",
|
104
|
+
"rect", "auto_center"
|
105
|
+
]
|
106
|
+
|
107
|
+
super q, (attr + other_attributes)
|
108
|
+
end
|
109
|
+
|
100
110
|
private
|
101
111
|
def parse_style(style)
|
102
112
|
case style
|
data/lib/ray/turtle.rb
CHANGED
@@ -210,9 +210,15 @@ module Ray
|
|
210
210
|
end
|
211
211
|
|
212
212
|
class Target
|
213
|
-
# Creates a turtle operating on the receiver
|
214
|
-
#
|
215
|
-
#
|
213
|
+
# Creates a turtle operating on the receiver
|
214
|
+
#
|
215
|
+
# If a block is passed, it is instance-evaluated (self becoming the turtle)
|
216
|
+
# and the receiver gets updated automatically.
|
217
|
+
#
|
218
|
+
# @yield Optionally perform drawing in the block
|
219
|
+
#
|
220
|
+
# @return [Ray::Turtle] The turtle it created
|
221
|
+
# @see Ray::Turtle
|
216
222
|
def turtle(&block)
|
217
223
|
turtle = Ray::Turtle.new(self)
|
218
224
|
if block
|
data/lib/ray/vector.rb
CHANGED
@@ -141,6 +141,14 @@ module Ray
|
|
141
141
|
"(%g, %g)" % [x, y]
|
142
142
|
end
|
143
143
|
|
144
|
+
def pretty_print(q)
|
145
|
+
q.text "("
|
146
|
+
q.pp(("%g" % x).to_f) # hides simple-precision inacurracy
|
147
|
+
q.text ", "
|
148
|
+
q.pp(("%g" % y).to_f)
|
149
|
+
q.text ")"
|
150
|
+
end
|
151
|
+
|
144
152
|
alias :w :x
|
145
153
|
alias :h :y
|
146
154
|
|
@@ -278,6 +286,16 @@ module Ray
|
|
278
286
|
"(%g, %g, %g)" % [x, y, z]
|
279
287
|
end
|
280
288
|
|
289
|
+
def pretty_print(q)
|
290
|
+
q.text "("
|
291
|
+
q.pp(("%g" % x).to_f) # hides simple-precision inacurracy
|
292
|
+
q.text ", "
|
293
|
+
q.pp(("%g" % y).to_f)
|
294
|
+
q.text ", "
|
295
|
+
q.pp(("%g" % z).to_f)
|
296
|
+
q.text ")"
|
297
|
+
end
|
298
|
+
|
281
299
|
def to_a
|
282
300
|
[x, y, z]
|
283
301
|
end
|
data/lib/ray/vertex.rb
CHANGED
@@ -3,6 +3,8 @@ module Ray
|
|
3
3
|
# Important settings
|
4
4
|
@vertex_type_id = 0
|
5
5
|
|
6
|
+
include Ray::PP
|
7
|
+
|
6
8
|
def x; pos.x; end
|
7
9
|
def y; pos.y; end
|
8
10
|
|
@@ -15,6 +17,10 @@ module Ray
|
|
15
17
|
def tex_x=(val); self.tex = [val, tex_y]; end
|
16
18
|
def tex_y=(val); self.tex = [tex_x, val]; end
|
17
19
|
|
20
|
+
def pretty_print(q)
|
21
|
+
pretty_print_attributes q, ["pos", "col", "tex"]
|
22
|
+
end
|
23
|
+
|
18
24
|
alias color col
|
19
25
|
alias color= col=
|
20
26
|
|
data/lib/ray/view.rb
CHANGED
@@ -1,5 +1,23 @@
|
|
1
1
|
module Ray
|
2
2
|
class View
|
3
|
+
include Ray::PP
|
4
|
+
|
5
|
+
# @param [Ray::Rect] rect Rect to show, in pixels.
|
6
|
+
# @param [Ray::Vector2] target_size Size of the complete target, in pixels.
|
7
|
+
#
|
8
|
+
# @return [Ray::View] A view that allows to clip rendering to a given region
|
9
|
+
# of the target, without scaling.
|
10
|
+
def self.clip(rect, target_size)
|
11
|
+
rect, target_size = rect.to_rect, target_size.to_vector2
|
12
|
+
|
13
|
+
viewport = Ray::Rect[rect.x / target_size.w,
|
14
|
+
rect.y / target_size.h,
|
15
|
+
rect.w / target_size.w,
|
16
|
+
rect.h / target_size.y]
|
17
|
+
|
18
|
+
Ray::View.new(rect.center, rect.size, viewport)
|
19
|
+
end
|
20
|
+
|
3
21
|
def ==(other)
|
4
22
|
other.is_a?(Ray::View) && self.matrix == other.matrix
|
5
23
|
end
|
@@ -43,5 +61,9 @@ module Ray
|
|
43
61
|
def inspect
|
44
62
|
"#<#{self.class} center=#{center} size=#{size} viewport=#{viewport}>"
|
45
63
|
end
|
64
|
+
|
65
|
+
def pretty_print(q)
|
66
|
+
pretty_print_attributes q, ["center", "size", "matrix", "viewport"]
|
67
|
+
end
|
46
68
|
end
|
47
69
|
end
|
@@ -7,66 +7,6 @@ def path_of(res)
|
|
7
7
|
File.expand_path File.join(File.dirname(__FILE__), '../../test/res', res)
|
8
8
|
end
|
9
9
|
|
10
|
-
class SpriteAnimation < Ray::Animation
|
11
|
-
register_for :sprite_animation
|
12
|
-
|
13
|
-
# @option opts [Ray::Vector2] :from First sprite position
|
14
|
-
# @option opts [Ray::Vector2] :to Last sprite position
|
15
|
-
# @option opts [true, false] :loop Whether to reset to the first step at the
|
16
|
-
# end of the animation.
|
17
|
-
# @option opts [Float] :duration Duration of the animation, in seconds.
|
18
|
-
def setup(opts)
|
19
|
-
self.duration = opts[:duration]
|
20
|
-
|
21
|
-
@initial_value = opts[:from].to_vector2.dup
|
22
|
-
|
23
|
-
delta = opts[:to].to_vector2 - opts[:from].to_vector2
|
24
|
-
|
25
|
-
@x_steps = delta.x.to_i.abs + 1
|
26
|
-
@y_steps = delta.y.to_i.abs + 1
|
27
|
-
|
28
|
-
@negative_x = delta.x < 0
|
29
|
-
@negative_y = delta.y < 0
|
30
|
-
|
31
|
-
@loop = opts[:loop]
|
32
|
-
end
|
33
|
-
|
34
|
-
def update_target
|
35
|
-
progress = progression
|
36
|
-
|
37
|
-
x_prog = ((progress / 100) * @x_steps).floor
|
38
|
-
y_prog = ((progress / 100) * @y_steps).floor
|
39
|
-
|
40
|
-
x_prog = @x_steps - 1 if x_prog == @x_steps
|
41
|
-
y_prog = @y_steps - 1 if y_prog == @y_steps
|
42
|
-
|
43
|
-
target.sheet_pos = @initial_value + variation(x_prog, y_prog)
|
44
|
-
end
|
45
|
-
|
46
|
-
def end_animation
|
47
|
-
target.sheet_pos = @initial_value if @loop
|
48
|
-
end
|
49
|
-
|
50
|
-
def variation(x, y)
|
51
|
-
Ray::Vector2[@negative_x ? -x : x, @negative_y ? -y : y]
|
52
|
-
end
|
53
|
-
|
54
|
-
def -@
|
55
|
-
last_value = @initial_value + variation(@x_steps - 1, @y_steps - 1)
|
56
|
-
|
57
|
-
sprite_animation(:from => @initial_value,
|
58
|
-
:to => last_value,
|
59
|
-
:loop => @loop,
|
60
|
-
:duration => @duration)
|
61
|
-
end
|
62
|
-
|
63
|
-
attr_reader :current_value
|
64
|
-
|
65
|
-
attr_reader :initial_value
|
66
|
-
attr_reader :x_steps, :y_steps
|
67
|
-
attr_reader :negative_x, :negative_y
|
68
|
-
end
|
69
|
-
|
70
10
|
Ray.game "Sprite motion" do
|
71
11
|
register { add_hook :quit, method(:exit!) }
|
72
12
|
|
data/samples/buffer/buffer.rb
CHANGED
@@ -30,10 +30,9 @@ $:.unshift File.expand_path(File.dirname(__FILE__) + "/../../ext")
|
|
30
30
|
require 'ray'
|
31
31
|
|
32
32
|
def path_of(resource)
|
33
|
-
File.
|
33
|
+
File.join(File.dirname(__FILE__), "../../test/res", resource)
|
34
34
|
end
|
35
35
|
|
36
|
-
|
37
36
|
class CptnRuby
|
38
37
|
include Ray::Helper
|
39
38
|
|
@@ -51,7 +50,7 @@ class CptnRuby
|
|
51
50
|
@map = map
|
52
51
|
@vy = 0
|
53
52
|
|
54
|
-
@sprite = Ray::Sprite.new path_of("
|
53
|
+
@sprite = Ray::Sprite.new path_of("CptnRuby.png"), :at => pos
|
55
54
|
@sprite.sheet_size = [4, 1]
|
56
55
|
|
57
56
|
@size = Ray::Vector2[@sprite.sprite_width, @sprite.sprite_height]
|
@@ -151,7 +150,7 @@ class CollectibleGem
|
|
151
150
|
include Ray::Helper
|
152
151
|
|
153
152
|
def initialize(pos)
|
154
|
-
@sprite = Ray::Sprite.new path_of("
|
153
|
+
@sprite = Ray::Sprite.new path_of("CptnRuby Gem.png"), :at => pos
|
155
154
|
@sprite.origin = @sprite.image.size / 2
|
156
155
|
|
157
156
|
@animation = rotation(:from => -30, :to => 30, :duration => 0.6)
|
@@ -182,7 +181,7 @@ class CollectibleGem
|
|
182
181
|
end
|
183
182
|
|
184
183
|
class Map
|
185
|
-
Tileset = path_of("
|
184
|
+
Tileset = path_of("CptnRuby Tileset.png")
|
186
185
|
PartSize = 60
|
187
186
|
TileSize = 50
|
188
187
|
|
@@ -241,9 +240,9 @@ Ray.game "Captain Ruby" do
|
|
241
240
|
scene :game do
|
242
241
|
@half_size = window.size / 2
|
243
242
|
|
244
|
-
@sky = sprite path_of("
|
243
|
+
@sky = sprite path_of("Space.png")
|
245
244
|
|
246
|
-
@map = Map.new path_of("
|
245
|
+
@map = Map.new path_of("CptnRuby Map.txt")
|
247
246
|
@cptn = CptnRuby.new(@map, [400, 100])
|
248
247
|
|
249
248
|
@camera = Ray::View.new @cptn.pos, window.size
|
@@ -0,0 +1,39 @@
|
|
1
|
+
$:.unshift File.expand_path(File.dirname(__FILE__) + "/../../lib")
|
2
|
+
$:.unshift File.expand_path(File.dirname(__FILE__) + "/../../ext")
|
3
|
+
|
4
|
+
def path_of(res)
|
5
|
+
File.expand_path(File.dirname(__FILE__) + "/../../test/res/#{res}")
|
6
|
+
end
|
7
|
+
|
8
|
+
require 'ray'
|
9
|
+
|
10
|
+
Ray.game "Some effects" do
|
11
|
+
register { add_hook :quit, method(:exit!) }
|
12
|
+
|
13
|
+
scene :shader do
|
14
|
+
@obj = sprite path_of("sprite.png")
|
15
|
+
|
16
|
+
effect_generator do |gen|
|
17
|
+
gen << color_inversion << grayscale
|
18
|
+
gen.build window.shader
|
19
|
+
end
|
20
|
+
|
21
|
+
@states = Hash.new(true)
|
22
|
+
|
23
|
+
{
|
24
|
+
:color_inversion => :i,
|
25
|
+
:grayscale => :g
|
26
|
+
}.each do |state, key_name|
|
27
|
+
on :key_press, key(key_name) do
|
28
|
+
@states[state] = !@states[state]
|
29
|
+
window.shader["#{state}.enabled"] = @states[state]
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
render do |win|
|
34
|
+
win.draw @obj
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
scenes << :shader
|
39
|
+
end
|