ray 0.1.0.pre1 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +235 -32
- data/Rakefile +20 -49
- data/ext/audio.c +68 -0
- data/ext/audio_source.c +197 -0
- data/ext/buffer_renderer.c +130 -0
- data/ext/color.c +179 -0
- data/ext/drawable.c +446 -0
- data/ext/event.c +337 -0
- data/ext/extconf.rb +80 -6
- data/ext/font.c +97 -0
- data/ext/gl.c +114 -0
- data/ext/gl_buffer.c +224 -0
- data/ext/gl_index_buffer.c +202 -0
- data/ext/gl_int_array.c +139 -0
- data/ext/gl_vertex.c +157 -0
- data/ext/image.c +263 -0
- data/ext/image_target.c +84 -0
- data/ext/input.c +53 -0
- data/ext/matrix.c +374 -0
- data/ext/music.c +113 -0
- data/ext/polygon.c +426 -0
- data/ext/ray.c +59 -0
- data/ext/ray.h +168 -0
- data/ext/rect.c +255 -0
- data/ext/say.h +31 -0
- data/ext/say_all.h +77 -0
- data/ext/say_arial.h +14689 -0
- data/ext/say_array.c +124 -0
- data/ext/say_array.h +34 -0
- data/ext/say_audio.c +64 -0
- data/ext/say_audio.h +170 -0
- data/ext/say_audio_context.c +40 -0
- data/ext/say_audio_source.c +96 -0
- data/ext/say_basic_type.c +17 -0
- data/ext/say_basic_type.h +47 -0
- data/ext/say_buffer.c +277 -0
- data/ext/say_buffer.h +37 -0
- data/ext/say_buffer_renderer.c +121 -0
- data/ext/say_buffer_renderer.h +33 -0
- data/ext/say_buffer_slice.c +247 -0
- data/ext/say_buffer_slice.h +29 -0
- data/ext/say_clean_up.c +14 -0
- data/ext/say_context.c +163 -0
- data/ext/say_context.h +26 -0
- data/ext/say_drawable.c +350 -0
- data/ext/say_drawable.h +100 -0
- data/ext/say_error.c +27 -0
- data/ext/say_event.h +213 -0
- data/ext/say_font.c +335 -0
- data/ext/say_font.h +51 -0
- data/ext/say_image.c +283 -0
- data/ext/say_image.h +52 -0
- data/ext/say_image_target.c +134 -0
- data/ext/say_image_target.h +25 -0
- data/ext/say_imp.h +70 -0
- data/ext/say_index_buffer.c +90 -0
- data/ext/say_index_buffer.h +29 -0
- data/ext/say_index_buffer_slice.c +227 -0
- data/ext/say_index_buffer_slice.h +28 -0
- data/ext/say_input.c +35 -0
- data/ext/say_matrix.c +314 -0
- data/ext/say_matrix.h +55 -0
- data/ext/say_music.c +225 -0
- data/ext/say_osx.h +62 -0
- data/ext/say_osx_context.h +98 -0
- data/ext/say_osx_window.h +766 -0
- data/ext/say_polygon.c +358 -0
- data/ext/say_polygon.h +62 -0
- data/ext/say_renderer.c +42 -0
- data/ext/say_renderer.h +22 -0
- data/ext/say_shader.c +375 -0
- data/ext/say_shader.h +91 -0
- data/ext/say_sound.c +67 -0
- data/ext/say_sound_buffer.c +96 -0
- data/ext/say_sprite.c +273 -0
- data/ext/say_sprite.h +53 -0
- data/ext/say_string.c +9 -0
- data/ext/say_table.c +86 -0
- data/ext/say_table.h +24 -0
- data/ext/say_target.c +264 -0
- data/ext/say_target.h +67 -0
- data/ext/say_text.c +441 -0
- data/ext/say_text.h +56 -0
- data/ext/say_thread.c +46 -0
- data/ext/say_thread.h +39 -0
- data/ext/say_thread_variable.c +44 -0
- data/ext/say_utf.c +62 -0
- data/ext/say_vertex_type.c +113 -0
- data/ext/say_vertex_type.h +40 -0
- data/ext/say_vfile.c +57 -0
- data/ext/say_view.c +150 -0
- data/ext/say_view.h +44 -0
- data/ext/say_win.h +24 -0
- data/ext/say_win_context.h +91 -0
- data/ext/say_win_window.h +670 -0
- data/ext/say_window.c +155 -0
- data/ext/say_window.h +43 -0
- data/ext/say_x11.h +41 -0
- data/ext/say_x11_context.h +96 -0
- data/ext/say_x11_window.h +818 -0
- data/ext/shader.c +302 -0
- data/ext/sound.c +118 -0
- data/ext/sound_buffer.c +75 -0
- data/ext/sprite.c +241 -0
- data/ext/stb_image.h +4971 -0
- data/ext/stb_image_write.h +511 -0
- data/ext/target.c +184 -0
- data/ext/text.c +162 -0
- data/ext/utils.c +10 -0
- data/ext/vector.c +261 -0
- data/ext/vendor/freetype/bin/freetype6.dll +0 -0
- data/ext/vendor/freetype/bin/zlib1.dll +0 -0
- data/ext/vendor/freetype/include/freetype2/freetype/config/ftconfig.h +350 -0
- data/ext/vendor/freetype/include/freetype2/freetype/config/ftheader.h +729 -0
- data/ext/vendor/freetype/include/freetype2/freetype/config/ftmodule.h +22 -0
- data/ext/vendor/freetype/include/freetype2/freetype/config/ftoption.h +695 -0
- data/ext/vendor/freetype/include/freetype2/freetype/config/ftstdlib.h +180 -0
- data/ext/vendor/freetype/include/freetype2/freetype/freetype.h +3434 -0
- data/ext/vendor/freetype/include/freetype2/freetype/ftbbox.h +94 -0
- data/ext/vendor/freetype/include/freetype2/freetype/ftbdf.h +200 -0
- data/ext/vendor/freetype/include/freetype2/freetype/ftbitmap.h +206 -0
- data/ext/vendor/freetype/include/freetype2/freetype/ftcache.h +1110 -0
- data/ext/vendor/freetype/include/freetype2/freetype/ftchapters.h +100 -0
- data/ext/vendor/freetype/include/freetype2/freetype/fterrdef.h +239 -0
- data/ext/vendor/freetype/include/freetype2/freetype/fterrors.h +206 -0
- data/ext/vendor/freetype/include/freetype2/freetype/ftgasp.h +113 -0
- data/ext/vendor/freetype/include/freetype2/freetype/ftglyph.h +575 -0
- data/ext/vendor/freetype/include/freetype2/freetype/ftgxval.h +358 -0
- data/ext/vendor/freetype/include/freetype2/freetype/ftgzip.h +102 -0
- data/ext/vendor/freetype/include/freetype2/freetype/ftimage.h +1237 -0
- data/ext/vendor/freetype/include/freetype2/freetype/ftincrem.h +331 -0
- data/ext/vendor/freetype/include/freetype2/freetype/ftlcdfil.h +166 -0
- data/ext/vendor/freetype/include/freetype2/freetype/ftlist.h +273 -0
- data/ext/vendor/freetype/include/freetype2/freetype/ftlzw.h +99 -0
- data/ext/vendor/freetype/include/freetype2/freetype/ftmac.h +272 -0
- data/ext/vendor/freetype/include/freetype2/freetype/ftmm.h +378 -0
- data/ext/vendor/freetype/include/freetype2/freetype/ftmodapi.h +406 -0
- data/ext/vendor/freetype/include/freetype2/freetype/ftmoderr.h +155 -0
- data/ext/vendor/freetype/include/freetype2/freetype/ftotval.h +198 -0
- data/ext/vendor/freetype/include/freetype2/freetype/ftoutln.h +526 -0
- data/ext/vendor/freetype/include/freetype2/freetype/ftpfr.h +172 -0
- data/ext/vendor/freetype/include/freetype2/freetype/ftrender.h +229 -0
- data/ext/vendor/freetype/include/freetype2/freetype/ftsizes.h +159 -0
- data/ext/vendor/freetype/include/freetype2/freetype/ftsnames.h +170 -0
- data/ext/vendor/freetype/include/freetype2/freetype/ftstroke.h +716 -0
- data/ext/vendor/freetype/include/freetype2/freetype/ftsynth.h +73 -0
- data/ext/vendor/freetype/include/freetype2/freetype/ftsystem.h +346 -0
- data/ext/vendor/freetype/include/freetype2/freetype/fttrigon.h +350 -0
- data/ext/vendor/freetype/include/freetype2/freetype/fttypes.h +583 -0
- data/ext/vendor/freetype/include/freetype2/freetype/ftwinfnt.h +263 -0
- data/ext/vendor/freetype/include/freetype2/freetype/ftxf86.h +80 -0
- data/ext/vendor/freetype/include/freetype2/freetype/t1tables.h +450 -0
- data/ext/vendor/freetype/include/freetype2/freetype/ttnameid.h +1132 -0
- data/ext/vendor/freetype/include/freetype2/freetype/tttables.h +756 -0
- data/ext/vendor/freetype/include/freetype2/freetype/tttags.h +99 -0
- data/ext/vendor/freetype/include/freetype2/freetype/ttunpat.h +59 -0
- data/ext/vendor/freetype/include/ft2build.h +61 -0
- data/ext/vendor/freetype/lib/freetype-bcc.lib +0 -0
- data/ext/vendor/freetype/lib/freetype6.def +249 -0
- data/ext/vendor/freetype/lib/libfreetype.dll.a +0 -0
- data/ext/vendor/freetype/lib/tmp.freetype.lib +0 -0
- data/ext/vendor/glew/LICENSE.txt +73 -0
- data/ext/vendor/glew/README.txt +18 -0
- data/ext/vendor/glew/include/GL/glew.h +15507 -0
- data/ext/vendor/glew/include/GL/glxew.h +1568 -0
- data/ext/vendor/glew/include/GL/wglew.h +1361 -0
- data/ext/vendor/glew/lib/glew32.dll +0 -0
- data/ext/vendor/glew/lib/glew32mx.dll +0 -0
- data/ext/vendor/glew/lib/libglew32.a +0 -0
- data/ext/vendor/glew/lib/libglew32.dll.a +0 -0
- data/ext/vendor/glew/lib/libglew32mx.a +0 -0
- data/ext/vendor/glew/lib/libglew32mx.dll.a +0 -0
- data/ext/vendor/openal/COPYING +484 -0
- data/ext/vendor/openal/Win32/soft_oal.dll +0 -0
- data/ext/vendor/openal/include/AL/al.h +724 -0
- data/ext/vendor/openal/include/AL/alc.h +277 -0
- data/ext/vendor/openal/include/AL/alext.h +165 -0
- data/ext/vendor/openal/include/AL/efx-creative.h +3 -0
- data/ext/vendor/openal/include/AL/efx.h +758 -0
- data/ext/vendor/openal/lib/libOpenAL32.dll.a +0 -0
- data/ext/vendor/sndfile/bin/libsndfile-1.dll +0 -0
- data/ext/vendor/sndfile/include/sndfile.h +666 -0
- data/ext/vendor/sndfile/include/sndfile.hh +422 -0
- data/ext/vendor/sndfile/lib/libsndfile-1.def +41 -0
- data/ext/vendor/sndfile/lib/libsndfile-1.lib +0 -0
- data/ext/vertex.c +96 -0
- data/ext/view.c +131 -0
- data/ext/window.c +183 -0
- data/lib/ray/animation.rb +248 -0
- data/lib/ray/animation/block_animation.rb +36 -0
- data/lib/ray/animation/circular_motion.rb +57 -0
- data/lib/ray/animation/color_variation.rb +102 -0
- data/lib/ray/animation/combination.rb +71 -0
- data/lib/ray/animation/float_variation.rb +76 -0
- data/lib/ray/animation/sequence.rb +65 -0
- data/lib/ray/animation/sprite_animation.rb +68 -0
- data/lib/ray/animation/vector_variation.rb +111 -0
- data/lib/ray/animation_list.rb +50 -0
- data/lib/ray/audio.rb +4 -7
- data/lib/ray/buffer_renderer.rb +9 -0
- data/lib/ray/color.rb +41 -6
- data/lib/ray/drawable.rb +34 -9
- data/lib/ray/dsl.rb +6 -0
- data/lib/ray/dsl/event.rb +1 -1
- data/lib/ray/dsl/event_listener.rb +14 -10
- data/lib/ray/dsl/event_raiser.rb +5 -2
- data/lib/ray/dsl/event_runner.rb +4 -10
- data/lib/ray/dsl/event_translator.rb +67 -99
- data/lib/ray/dsl/handler.rb +1 -1
- data/lib/ray/dsl/matcher.rb +40 -27
- data/lib/ray/event.rb +22 -0
- data/lib/ray/font.rb +0 -42
- data/lib/ray/font_set.rb +3 -7
- data/lib/ray/game.rb +33 -73
- data/lib/ray/gl/int_array.rb +24 -0
- data/lib/ray/gl/vertex.rb +106 -0
- data/lib/ray/helper.rb +25 -11
- data/lib/ray/image.rb +9 -154
- data/lib/ray/image_set.rb +3 -8
- data/lib/ray/image_target.rb +12 -0
- data/lib/ray/matrix.rb +90 -0
- data/lib/ray/music.rb +12 -0
- data/lib/ray/polygon.rb +77 -0
- data/lib/ray/ray.rb +45 -13
- data/lib/ray/rect.rb +14 -3
- data/lib/ray/resource_set.rb +18 -35
- data/lib/ray/scene.rb +43 -81
- data/lib/ray/scene_list.rb +12 -5
- data/lib/ray/shader.rb +82 -0
- data/lib/ray/sound.rb +18 -0
- data/lib/ray/sound_buffer.rb +6 -0
- data/lib/ray/sound_buffer_set.rb +32 -0
- data/lib/ray/sprite.rb +111 -97
- data/lib/ray/target.rb +18 -0
- data/lib/ray/text.rb +80 -58
- data/lib/ray/text_helper.rb +21 -27
- data/lib/ray/turtle.rb +49 -38
- data/lib/ray/vector.rb +76 -1
- data/lib/ray/vertex.rb +24 -0
- data/lib/ray/view.rb +47 -0
- data/lib/ray/window.rb +23 -0
- data/samples/_media/Beep.wav +0 -0
- data/samples/_media/CptnRuby Gem.png +0 -0
- data/samples/_media/CptnRuby Map.txt +25 -0
- data/samples/_media/CptnRuby Tileset.png +0 -0
- data/samples/_media/CptnRuby.png +0 -0
- data/samples/_media/Space.png +0 -0
- data/samples/_media/Star.png +0 -0
- data/samples/_media/Starfighter.png +0 -0
- data/samples/animation/chain.rb +33 -0
- data/samples/animation/circle.rb +38 -0
- data/samples/animation/color.rb +18 -0
- data/samples/animation/rotation.rb +17 -0
- data/samples/animation/sequence.rb +33 -0
- data/samples/animation/shader.rb +65 -0
- data/samples/animation/sprite_motion.rb +103 -0
- data/samples/animation/translation.rb +23 -0
- data/samples/audio/spacial.rb +25 -11
- data/samples/buffer/buffer.rb +28 -0
- data/samples/buffer/index_buffer.rb +36 -0
- data/samples/buffer/renderer.rb +27 -0
- data/samples/cptn_ruby/cptn_ruby.rb +279 -0
- data/samples/hello_world/hello.rb +2 -2
- data/samples/hello_world/hello_dsl.rb +3 -3
- data/samples/hello_world/text.rb +2 -2
- data/samples/opengl/cube.rb +124 -0
- data/samples/opengl/image.rb +36 -16
- data/samples/opengl/obj_loader.rb +99 -0
- data/samples/opengl/opengl.rb +24 -18
- data/samples/opengl/shader.rb +36 -26
- data/samples/pong/pong.rb +41 -39
- data/samples/{run_scene.rb → scenes/run_scene.rb} +21 -7
- data/samples/shaders/geometry.rb +98 -0
- data/samples/shaders/scene.rb +19 -12
- data/samples/shaders/shaders.rb +34 -17
- data/samples/shaders/shape.rb +12 -7
- data/samples/sokoban/level_1 +11 -7
- data/samples/sokoban/sokoban.rb +36 -63
- data/samples/starfighter/starfighter.rb +159 -0
- data/samples/test/actual_scene.rb +3 -3
- data/samples/test/scene_riot.rb +4 -4
- data/samples/test/scene_spec.rb +3 -3
- data/samples/test/scene_test_unit.rb +1 -1
- data/samples/turtle/byzantium.rb +10 -5
- data/samples/turtle/hilbert.rb +16 -11
- data/samples/turtle/koch.rb +16 -11
- data/samples/turtle/mandala.rb +43 -38
- data/samples/turtle/tree.rb +13 -8
- data/samples/view/resize.rb +26 -0
- data/samples/view/view.rb +35 -0
- data/samples/window/all_events.rb +44 -0
- data/samples/window/change_title.rb +16 -0
- data/samples/window/fullscreen.rb +18 -0
- data/samples/window/get_pixel.rb +29 -0
- data/samples/window/icon.rb +88 -0
- data/samples/window/input.rb +27 -0
- data/samples/window/no_border.rb +16 -0
- data/samples/window/resize.rb +24 -0
- data/test/animation/color_variation_test.rb +64 -0
- data/test/animation/combination_test.rb +35 -0
- data/test/animation/float_variation_test.rb +75 -0
- data/test/animation/vector_variation_test.rb +123 -0
- data/test/animation_list_test.rb +122 -0
- data/test/animation_test.rb +83 -0
- data/test/audio_test.rb +88 -33
- data/test/buffer_renderer_test.rb +38 -0
- data/test/color_test.rb +31 -22
- data/test/drawable_test.rb +207 -7
- data/test/dsl_test.rb +25 -7
- data/test/font_test.rb +6 -40
- data/test/game_test.rb +76 -0
- data/test/gl_buffer_test.rb +26 -0
- data/test/gl_index_buffer_test.rb +17 -0
- data/test/gl_vertex_test.rb +117 -0
- data/test/helpers.rb +45 -5
- data/test/image_target_test.rb +19 -0
- data/test/image_test.rb +73 -53
- data/test/int_array_test.rb +64 -0
- data/test/matrix_test.rb +134 -0
- data/test/polygon_test.rb +126 -0
- data/test/rect_test.rb +6 -8
- data/test/res/frag.c +14 -0
- data/test/res/frag3d.c +10 -0
- data/test/res/frag_gray.c +17 -0
- data/test/res/frag_light3d.c +20 -0
- data/test/res/light3d.c +20 -0
- data/test/res/sprite.png +0 -0
- data/test/res/teapot.obj +12831 -0
- data/test/res/vert.c +17 -0
- data/test/res/vertex3d.c +14 -0
- data/test/resource_set_test.rb +8 -45
- data/test/run_all.rb +1 -1
- data/test/scene_list_test.rb +79 -0
- data/test/scene_test.rb +168 -0
- data/test/shader_test.rb +58 -0
- data/test/sprite_test.rb +46 -41
- data/test/target_test.rb +34 -0
- data/test/text_test.rb +20 -31
- data/test/turtle_test.rb +35 -20
- data/test/vector_test.rb +61 -19
- data/test/vertex_test.rb +43 -0
- data/test/view_test.rb +61 -0
- metadata +347 -126
- data/.yardopts +0 -4
- data/VERSION +0 -1
- data/ext/audio.cpp +0 -723
- data/ext/color.cpp +0 -159
- data/ext/drawable.cpp +0 -91
- data/ext/event.cpp +0 -460
- data/ext/font.cpp +0 -190
- data/ext/image.cpp +0 -733
- data/ext/input.cpp +0 -74
- data/ext/ray.cpp +0 -168
- data/ext/ray.hpp +0 -356
- data/ext/rect.cpp +0 -245
- data/ext/shader.cpp +0 -169
- data/ext/shape.cpp +0 -409
- data/ext/sprite.cpp +0 -306
- data/ext/text.cpp +0 -181
- data/ext/vector.cpp +0 -215
- data/guide.md +0 -619
- data/lib/ray/input.rb +0 -10
- data/lib/ray/music_set.rb +0 -37
- data/lib/ray/rmagick.rb +0 -41
- data/lib/ray/shape.rb +0 -132
- data/lib/ray/sound_set.rb +0 -37
- data/samples/opengl/binding.rb +0 -38
- data/test/ray_test.rb +0 -25
- data/test/shape_test.rb +0 -101
- data/yard_ext.rb +0 -63
data/samples/sokoban/level_1
CHANGED
data/samples/sokoban/sokoban.rb
CHANGED
@@ -11,7 +11,7 @@ module Sokoban
|
|
11
11
|
include Enumerable
|
12
12
|
|
13
13
|
def self.open(filename)
|
14
|
-
level =
|
14
|
+
level = File.open(filename) { |io| new(io) }
|
15
15
|
|
16
16
|
if block_given?
|
17
17
|
yield level
|
@@ -39,6 +39,7 @@ module Sokoban
|
|
39
39
|
|
40
40
|
def []=(x, y, value)
|
41
41
|
@objects[y][x] = value
|
42
|
+
raise_event :tile_changed, self, x, y, value if raiser_runner
|
42
43
|
end
|
43
44
|
|
44
45
|
attr_reader :character_pos
|
@@ -148,14 +149,18 @@ module Sokoban
|
|
148
149
|
def parse_content
|
149
150
|
@objects = []
|
150
151
|
|
151
|
-
@content.each_line do |line|
|
152
|
+
@content.each_line.with_index do |line, y|
|
152
153
|
@objects << []
|
153
154
|
|
154
|
-
line.chomp.each_char do |char|
|
155
|
+
line.chomp.each_char.with_index do |char, x|
|
155
156
|
@objects.last << char_to_object(char)
|
156
157
|
end
|
157
158
|
end
|
158
159
|
|
160
|
+
each_with_pos do |obj, x, y|
|
161
|
+
raise_event :tile_changed, self, x, y, obj if raiser_runner
|
162
|
+
end
|
163
|
+
|
159
164
|
@character_pos = find_character_pos
|
160
165
|
self
|
161
166
|
end
|
@@ -163,7 +168,7 @@ module Sokoban
|
|
163
168
|
def check_solved
|
164
169
|
if !include? :crate
|
165
170
|
@solved = true
|
166
|
-
raise_event(:level_solved, self)
|
171
|
+
raise_event(:level_solved, self) if raiser_runner
|
167
172
|
else
|
168
173
|
@solved = false
|
169
174
|
end
|
@@ -250,13 +255,20 @@ module Sokoban
|
|
250
255
|
class LevelScene < Ray::Scene
|
251
256
|
scene_name :sokoban_level
|
252
257
|
|
253
|
-
|
258
|
+
TileWidth = 32
|
254
259
|
|
255
260
|
def setup(filename)
|
256
261
|
@filename = filename
|
257
262
|
@level = Level.open(filename)
|
258
263
|
|
259
|
-
|
264
|
+
@tiles = []
|
265
|
+
@level.each_with_pos do |obj, x, y|
|
266
|
+
obj = Ray::Polygon.rectangle([0, 0, TileWidth, TileWidth], color_for(obj),
|
267
|
+
1, Ray::Color.black)
|
268
|
+
obj.pos = [TileWidth * x, TileWidth * y]
|
269
|
+
|
270
|
+
(@tiles[y] ||= [])[x] = obj
|
271
|
+
end
|
260
272
|
end
|
261
273
|
|
262
274
|
def register
|
@@ -268,88 +280,49 @@ module Sokoban
|
|
268
280
|
|
269
281
|
if @level.can_move?(dir)
|
270
282
|
@level.move(dir)
|
271
|
-
need_render!
|
272
283
|
end
|
273
284
|
end
|
274
285
|
end
|
275
286
|
|
276
287
|
on :key_press, key(:r) do
|
277
288
|
next if @level.solved?
|
278
|
-
|
279
289
|
@level.reset
|
280
|
-
need_render!
|
281
290
|
end
|
282
291
|
|
283
292
|
on :key_press, key(:u) do
|
284
293
|
next if @level.solved?
|
285
|
-
|
286
294
|
@level.undo
|
287
|
-
need_render!
|
288
295
|
end
|
289
296
|
|
290
297
|
on :level_solved do
|
291
298
|
puts "Level solved!"
|
292
299
|
pop_scene
|
293
300
|
end
|
301
|
+
|
302
|
+
on :tile_changed do |level, x, y, value|
|
303
|
+
color = color_for(value)
|
304
|
+
@tiles[y][x].each { |point| point.color = color }
|
305
|
+
end
|
294
306
|
end
|
295
307
|
|
296
308
|
def render(win)
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
case obj
|
301
|
-
when :man then draw_man(win, x, y)
|
302
|
-
when :crate then draw_crate(win, x, y)
|
303
|
-
when :wall then draw_wall(win, x, y)
|
304
|
-
when :storage then draw_storage(win, x, y)
|
305
|
-
when :crate_on_storage then draw_crate_on_storage(win, x, y)
|
306
|
-
when :man_on_storage then draw_man_on_storage(win, x, y)
|
307
|
-
when :empty then draw_empty_tile(win, x, y)
|
309
|
+
@tiles.each do |line|
|
310
|
+
line.each do |tile|
|
311
|
+
win.draw tile
|
308
312
|
end
|
309
313
|
end
|
310
314
|
end
|
311
315
|
|
312
|
-
def
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
end
|
323
|
-
|
324
|
-
def draw_wall(win, x, y)
|
325
|
-
draw_rect(win, x, y, Ray::Color.new(91, 59, 17))
|
326
|
-
end
|
327
|
-
|
328
|
-
def draw_storage(win, x, y)
|
329
|
-
draw_rect(win, x, y, Ray::Color.yellow)
|
330
|
-
end
|
331
|
-
|
332
|
-
def draw_crate_on_storage(win, x, y)
|
333
|
-
draw_rect(win, x, y, Ray::Color.green)
|
334
|
-
end
|
335
|
-
|
336
|
-
def draw_man_on_storage(win, x, y)
|
337
|
-
draw_rect(win, x, y, Ray::Color.red)
|
338
|
-
end
|
339
|
-
|
340
|
-
def draw_empty_tile(win, x, y)
|
341
|
-
draw_rect(win, x, y, Ray::Color.black)
|
342
|
-
end
|
343
|
-
|
344
|
-
def draw_rect(win, x, y, col)
|
345
|
-
rect = pos_to_rect(x, y)
|
346
|
-
|
347
|
-
win.draw_filled_rect(rect, col)
|
348
|
-
win.draw_rect(rect, Ray::Color.black)
|
349
|
-
end
|
350
|
-
|
351
|
-
def pos_to_rect(x, y)
|
352
|
-
[x * TILE_WIDTH, y * TILE_WIDTH, TILE_WIDTH, TILE_WIDTH]
|
316
|
+
def color_for(obj)
|
317
|
+
case obj
|
318
|
+
when :man then Ray::Color.white
|
319
|
+
when :crate then Ray::Color.gray
|
320
|
+
when :wall then Ray::Color.new(91, 59, 17)
|
321
|
+
when :storage then Ray::Color.yellow
|
322
|
+
when :crate_on_storage then Ray::Color.green
|
323
|
+
when :man_on_storage then Ray::Color.red
|
324
|
+
when :empty then Ray::Color.black
|
325
|
+
end
|
353
326
|
end
|
354
327
|
end
|
355
328
|
|
@@ -0,0 +1,159 @@
|
|
1
|
+
# Ported from the Gosu tutorial by Spooner
|
2
|
+
|
3
|
+
$:.unshift File.expand_path(File.dirname(__FILE__) + "/../../lib")
|
4
|
+
$:.unshift File.expand_path(File.dirname(__FILE__) + "/../../ext")
|
5
|
+
|
6
|
+
require 'ray'
|
7
|
+
require 'forwardable'
|
8
|
+
|
9
|
+
def path_of(resource)
|
10
|
+
File.expand_path File.join(File.dirname(File.dirname(__FILE__)), resource)
|
11
|
+
end
|
12
|
+
|
13
|
+
class Player
|
14
|
+
include Ray::Helper
|
15
|
+
|
16
|
+
extend Forwardable
|
17
|
+
def_delegators :@sprite, :x, :y, :x=, :y=, :pos, :pos=
|
18
|
+
|
19
|
+
attr_reader :score, :window, :sprite
|
20
|
+
|
21
|
+
def initialize(stars)
|
22
|
+
@stars = stars
|
23
|
+
@sprite = Ray::Sprite.new path_of("_media/Starfighter.png")
|
24
|
+
@sprite.origin = @sprite.image.size / 2
|
25
|
+
|
26
|
+
@beep = sound path_of("_media/Beep.wav")
|
27
|
+
|
28
|
+
@vel_x = @vel_y = 0.0
|
29
|
+
|
30
|
+
@score = 0
|
31
|
+
end
|
32
|
+
|
33
|
+
def register(scene)
|
34
|
+
self.event_runner = scene.event_runner
|
35
|
+
@window = scene.window
|
36
|
+
end
|
37
|
+
|
38
|
+
def update
|
39
|
+
if holding? key(:up)
|
40
|
+
@vel_x += Math::sin(@sprite.angle / (180 / Math::PI)) * 0.5
|
41
|
+
@vel_y -= Math::cos(@sprite.angle / (180 / Math::PI)) * 0.5
|
42
|
+
end
|
43
|
+
|
44
|
+
if holding? key(:left)
|
45
|
+
@sprite.angle -= 4.5
|
46
|
+
end
|
47
|
+
|
48
|
+
if holding? key(:right)
|
49
|
+
@sprite.angle += 4.5
|
50
|
+
end
|
51
|
+
|
52
|
+
move
|
53
|
+
|
54
|
+
collect_stars
|
55
|
+
end
|
56
|
+
|
57
|
+
def warp(position)
|
58
|
+
@sprite.pos = position
|
59
|
+
end
|
60
|
+
|
61
|
+
def move
|
62
|
+
self.pos += [@vel_x, @vel_y]
|
63
|
+
self.x %= window.size.width
|
64
|
+
self.y %= window.size.height
|
65
|
+
|
66
|
+
@vel_x *= 0.95
|
67
|
+
@vel_y *= 0.95
|
68
|
+
end
|
69
|
+
|
70
|
+
def collect_stars
|
71
|
+
@stars.reject! do |star|
|
72
|
+
if pos.dist(star.pos) < 35 then
|
73
|
+
@score += 10
|
74
|
+
@beep.play
|
75
|
+
true
|
76
|
+
else
|
77
|
+
false
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
class Star
|
84
|
+
include Ray::Helper
|
85
|
+
|
86
|
+
extend Forwardable
|
87
|
+
def_delegators :@sprite, :x, :y, :x=, :y=, :pos
|
88
|
+
|
89
|
+
attr_reader :sprite
|
90
|
+
|
91
|
+
def initialize(position)
|
92
|
+
@sprite = Ray::Sprite.new path_of("_media/Star.png"), :at => position
|
93
|
+
@sprite.sheet_size = [10, 1]
|
94
|
+
@sprite.origin = (@sprite.image.size / @sprite.sheet_size) / 2
|
95
|
+
@animation = sprite_animation(:from => [0, 0], :to => [9, 0],
|
96
|
+
:duration => 2).start(@sprite)
|
97
|
+
|
98
|
+
color = Ray::Color.white
|
99
|
+
color.red = rand(255 - 40) + 40
|
100
|
+
color.green = rand(255 - 40) + 40
|
101
|
+
color.blue = rand(255 - 40) + 40
|
102
|
+
@sprite.color = color
|
103
|
+
end
|
104
|
+
|
105
|
+
def register(scene)
|
106
|
+
self.event_runner = scene.event_runner
|
107
|
+
@animation.event_runner = event_runner
|
108
|
+
|
109
|
+
on :animation_end, @animation do
|
110
|
+
@animation.start @sprite
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
def update
|
115
|
+
@animation.update
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
Ray::Game.new("Starfighter --- [LEFT/RIGHT/UP to move; collect the stars]") do
|
120
|
+
register do
|
121
|
+
add_hook :quit, method(:exit!)
|
122
|
+
end
|
123
|
+
|
124
|
+
scene :game do
|
125
|
+
@background_image = sprite path_of("_media/Space.png")
|
126
|
+
@score_text = text("", :at => [10, 10], :size => 20,
|
127
|
+
:color => Ray::Color.yellow)
|
128
|
+
|
129
|
+
@stars = Array.new
|
130
|
+
|
131
|
+
@player = Player.new @stars
|
132
|
+
@player.register self
|
133
|
+
@player.warp(window.size / 2)
|
134
|
+
|
135
|
+
add_hook :key_press, key(:escape), method(:exit!)
|
136
|
+
|
137
|
+
always do
|
138
|
+
if rand(100) < 4 and @stars.size < 25 then
|
139
|
+
star = Star.new [window.size.width * rand, window.size.height * rand]
|
140
|
+
star.register self
|
141
|
+
@stars << star
|
142
|
+
end
|
143
|
+
|
144
|
+
@stars.each(&:update)
|
145
|
+
@player.update
|
146
|
+
|
147
|
+
@score_text.string = "Score: #{@player.score}"
|
148
|
+
end
|
149
|
+
|
150
|
+
render do |win|
|
151
|
+
win.draw @background_image
|
152
|
+
@stars.each {|star| win.draw star.sprite }
|
153
|
+
win.draw @player.sprite
|
154
|
+
win.draw @score_text
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
scenes << :game
|
159
|
+
end
|
@@ -7,7 +7,7 @@ class AwesomeScene < Ray::Scene
|
|
7
7
|
scene_name :awesome_scene
|
8
8
|
|
9
9
|
def setup
|
10
|
-
@cursor = Ray::
|
10
|
+
@cursor = Ray::Polygon.rectangle [-10, -10, 20, 20], Ray::Color.red
|
11
11
|
end
|
12
12
|
|
13
13
|
def register
|
@@ -17,7 +17,7 @@ class AwesomeScene < Ray::Scene
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def render(win)
|
20
|
-
@cursor
|
20
|
+
win.draw @cursor
|
21
21
|
end
|
22
22
|
|
23
23
|
attr_reader :cursor
|
@@ -28,7 +28,7 @@ class AwesomeGame < Ray::Game
|
|
28
28
|
super "Hello world!", :size => [600, 600]
|
29
29
|
|
30
30
|
AwesomeScene.bind(self)
|
31
|
-
|
31
|
+
scenes << :awesome_scene
|
32
32
|
end
|
33
33
|
|
34
34
|
def register
|
data/samples/test/scene_riot.rb
CHANGED
@@ -10,7 +10,7 @@ context AwesomeScene do
|
|
10
10
|
|
11
11
|
setup do
|
12
12
|
@game = AwesomeGame.new
|
13
|
-
@scene = @game.
|
13
|
+
@scene = @game.registered_scene(:awesome_scene)
|
14
14
|
|
15
15
|
@scene.register
|
16
16
|
@scene.setup
|
@@ -30,10 +30,10 @@ context AwesomeScene do
|
|
30
30
|
end
|
31
31
|
|
32
32
|
asserts "draws its cursor" do
|
33
|
-
stub(topic.
|
34
|
-
topic.render
|
33
|
+
stub(topic.window).draw
|
34
|
+
topic.render topic.window
|
35
35
|
|
36
|
-
received(topic.
|
36
|
+
received(topic.window).draw(topic.cursor).call
|
37
37
|
true
|
38
38
|
end
|
39
39
|
end
|
data/samples/test/scene_spec.rb
CHANGED
@@ -4,7 +4,7 @@ require 'actual_scene'
|
|
4
4
|
describe AwesomeScene do
|
5
5
|
before :each do
|
6
6
|
@game = AwesomeGame.new
|
7
|
-
@scene = @game.
|
7
|
+
@scene = @game.registered_scene(:awesome_scene)
|
8
8
|
|
9
9
|
@scene.register
|
10
10
|
@scene.setup
|
@@ -22,8 +22,8 @@ describe AwesomeScene do
|
|
22
22
|
end
|
23
23
|
|
24
24
|
it "draws its cursor" do
|
25
|
-
@scene.
|
26
|
-
@scene.render
|
25
|
+
@scene.window.should_receive(:draw, @scene.cursor)
|
26
|
+
@scene.render @scene.window
|
27
27
|
end
|
28
28
|
|
29
29
|
after :each do
|
data/samples/turtle/byzantium.rb
CHANGED
@@ -32,12 +32,17 @@ Ray::Game.new("Turtle") do
|
|
32
32
|
end
|
33
33
|
|
34
34
|
scene :byzantium do
|
35
|
+
img = Ray::Image.new window.size
|
36
|
+
img.turtle do
|
37
|
+
pen_up
|
38
|
+
center
|
39
|
+
byzantium(100, 5)
|
40
|
+
end
|
41
|
+
|
42
|
+
@sprite = sprite img
|
43
|
+
|
35
44
|
render do |win|
|
36
|
-
win.
|
37
|
-
pen_up
|
38
|
-
center
|
39
|
-
byzantium(100, 4)
|
40
|
-
end
|
45
|
+
win.draw @sprite
|
41
46
|
end
|
42
47
|
end
|
43
48
|
|