ray 0.1.0.pre1 → 0.1.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 +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/README.md
CHANGED
@@ -1,58 +1,261 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
What is Ray?
|
2
|
+
============
|
3
|
+
|
4
|
+
Ray is a library than can create windows, play music, and draw 2D graphics (or
|
5
|
+
not too complex 3D by doing just a bit more work, thanks to OpenGL). It is meant
|
6
|
+
to be easy and fun to use (à la Shoes), and still flexible and powerful.
|
7
|
+
|
8
|
+
Tutorial & Installation
|
9
|
+
=======================
|
10
|
+
|
11
|
+
See [on this page](http://mon-ouie.github.com/projects/ray.html).
|
12
|
+
|
13
|
+
Features
|
14
|
+
========
|
15
|
+
|
16
|
+
Fun DSL
|
17
|
+
-------
|
18
|
+
|
3
19
|
require 'ray'
|
4
20
|
|
5
|
-
|
6
|
-
|
21
|
+
Ray.game "Hello" do
|
22
|
+
register { add_hook :quit, method(:exit!) }
|
23
|
+
|
24
|
+
scene :hello do
|
25
|
+
@text = text "Hello world!", :size => 30, :angle => 30, :at => [50, 50]
|
26
|
+
render { |win| win.draw @text }
|
27
|
+
end
|
28
|
+
|
29
|
+
scenes << :hello
|
30
|
+
end
|
31
|
+
|
32
|
+
Flexible for more complex games
|
33
|
+
-------------------------------
|
34
|
+
|
35
|
+
require 'ray'
|
36
|
+
|
37
|
+
class TitleScene < Ray::Scene
|
38
|
+
scene_name :title
|
7
39
|
|
8
40
|
def setup
|
9
|
-
|
41
|
+
# setup resources
|
42
|
+
end
|
43
|
+
|
44
|
+
def register
|
45
|
+
# register for events
|
10
46
|
end
|
11
47
|
|
12
48
|
def render(win)
|
13
|
-
|
49
|
+
# draw!
|
14
50
|
end
|
51
|
+
|
52
|
+
def clean_up
|
53
|
+
# perform cleanup
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
class GameScene < Ray::Scene
|
58
|
+
scene_name :game
|
59
|
+
|
60
|
+
# same stuff
|
15
61
|
end
|
16
62
|
|
17
|
-
|
63
|
+
# ...
|
64
|
+
|
65
|
+
class Game < Ray::Game
|
18
66
|
def initialize
|
19
|
-
super
|
67
|
+
super "Awesome Game"
|
20
68
|
|
21
|
-
|
22
|
-
|
69
|
+
TitleScene.bind(self)
|
70
|
+
GameScene.bind(self)
|
71
|
+
# ...
|
72
|
+
|
73
|
+
scenes << :title
|
23
74
|
end
|
75
|
+
end
|
24
76
|
|
25
|
-
|
26
|
-
|
77
|
+
Drawable API
|
78
|
+
------------
|
79
|
+
|
80
|
+
Ray has a drawable class that specifies a common interface to all the drawable
|
81
|
+
objects – how to perform transformations to them and how to draw them.
|
82
|
+
|
83
|
+
|
84
|
+
obj = AnyDrawable.new
|
85
|
+
|
86
|
+
window.draw obj
|
87
|
+
|
88
|
+
obj.pos = [0, 2] # set position
|
89
|
+
obj.angle = 40 # rotation
|
90
|
+
obj.origin = [20, 20] # just sets the origin of transformations
|
91
|
+
# ...
|
92
|
+
|
93
|
+
# You can even have a completely custom transformation matrix:
|
94
|
+
obj.matrix = Ray::Matrix.translation [2, 3, 4]
|
95
|
+
|
96
|
+
Off-screen rendering
|
97
|
+
--------------------
|
98
|
+
|
99
|
+
When rendering to a window is not enough, you can render on an image just fine:
|
100
|
+
|
101
|
+
Ray::ImageTarget.new some_image do |target|
|
102
|
+
target.clear Ray::Color.red
|
103
|
+
target.draw Ray::Polygon.circle([50, 50], 10, Ray::Color.green)
|
104
|
+
target.update
|
105
|
+
end
|
106
|
+
|
107
|
+
OpenGL integration
|
108
|
+
------------------
|
109
|
+
|
110
|
+
Ray uses OpenGL, and provides some classes and methods to allow using it from
|
111
|
+
Ray. In fact, ``Ray::Drawable`` can simply be used for OpenGL rendering:
|
112
|
+
|
113
|
+
# Ray has a more advanced sprite class, of course!
|
114
|
+
class CustomSprite < Ray::Drawable
|
115
|
+
def initialize(image)
|
116
|
+
super() # very important: creating the actual drawable
|
117
|
+
|
118
|
+
# Ray allocates a VBO to store your vertices.
|
119
|
+
# You could just use your own OpenGL binding to call glBegin and glEnd
|
120
|
+
# if you don't want to use it.
|
121
|
+
self.vertex_count = 4
|
122
|
+
|
123
|
+
# Tells Ray to enable texturing for this drawable
|
124
|
+
self.textured = true
|
125
|
+
|
126
|
+
@image = image
|
127
|
+
end
|
128
|
+
|
129
|
+
# return an array of vertices
|
130
|
+
def fill_vertices
|
131
|
+
[
|
132
|
+
Ray::Vertex.new([0, 0], Ray::Color.white, [0, 0]),
|
133
|
+
Ray::Vertex.new([@img.w, 0], Ray::Color.white, [1, 0]),
|
134
|
+
Ray::Vertex.new([@img.w, @img.h], Ray::Color.white, [1, 1]),
|
135
|
+
Ray::Vertex.new([0, @img.h], Ray::Color.white, [0, 1]),
|
136
|
+
]
|
137
|
+
end
|
138
|
+
|
139
|
+
# The index parameter is there in case you'd want to use
|
140
|
+
# draw_elements. You can fill indices by defining a fill_indices method
|
141
|
+
# and setting index_count.
|
142
|
+
def render(first, index)
|
143
|
+
@image.bind
|
144
|
+
|
145
|
+
# Some low level OpenGL calls are available
|
146
|
+
Ray::GL.draw_arrays :triangle_fan, first, 4
|
27
147
|
end
|
28
148
|
end
|
29
149
|
|
30
|
-
|
31
|
-
|
32
|
-
|
150
|
+
You can also create and use shaders from Ruby:
|
151
|
+
|
152
|
+
shader = Ray::Shader.new :vertex => "vertex_shader.glsl",
|
153
|
+
:frag => "frag_shader.glsl"
|
154
|
+
drawable.shader = shader
|
155
|
+
|
156
|
+
# You can't assign an image to a render target, but you can recompile it:
|
157
|
+
window.shader.compile :vertex => "vertex.glsl", :frag => "frag.glsl"
|
158
|
+
|
159
|
+
3D rendering
|
160
|
+
------------
|
161
|
+
|
162
|
+
3D rendering is a very cool thing! Even if Ray's graphics module only uses 2D, a
|
163
|
+
3D API can be created with it. You can just use ``Ray::Drawable`` again, but you
|
164
|
+
will ned to specify the layout of your vertices and to write your own shaders
|
165
|
+
(the default shaders are only designed for 2D). You will probably need a custom
|
166
|
+
projection matrix too.
|
33
167
|
|
34
|
-
Ray::
|
35
|
-
|
36
|
-
|
168
|
+
class Cube < Ray::Drawable
|
169
|
+
include Ray::GL
|
170
|
+
|
171
|
+
Vertex = Ray::GL::Vertex.make [
|
172
|
+
[:pos, "in_Position", :vector3],
|
173
|
+
[:col, "in_Color", :color]
|
174
|
+
]
|
175
|
+
|
176
|
+
def initialize
|
177
|
+
super Vertex
|
178
|
+
# ...
|
37
179
|
end
|
38
180
|
|
39
|
-
|
40
|
-
|
181
|
+
# ...
|
182
|
+
end
|
183
|
+
|
184
|
+
# ...
|
185
|
+
|
186
|
+
# Tell the shader what vertex layout to use.
|
187
|
+
window.shader.apply_vertex Cube::Vertex
|
188
|
+
window.shader.compile :vertex => "vertex.glsl", :frag => "frag.glsl"
|
189
|
+
|
190
|
+
# Ray::Matrix can create 3D transformation and projection matrices!
|
191
|
+
window.view = Ray::View.new Ray::Matrix.perspective(90, 1, 1, 100)
|
192
|
+
|
193
|
+
Audio playback
|
194
|
+
--------------
|
195
|
+
|
196
|
+
Ray can play short sounds right away and stream longer ones — it uses OpenAL for
|
197
|
+
this. 3D audio effects can be added as well.
|
41
198
|
|
42
|
-
|
43
|
-
|
44
|
-
|
199
|
+
@sound = sound "test.wav"
|
200
|
+
@music = music "test.ogg"
|
201
|
+
|
202
|
+
@sound.pause
|
203
|
+
@music.play
|
204
|
+
|
205
|
+
@music.pause
|
206
|
+
|
207
|
+
@music.volume = 80
|
208
|
+
@music.pitch = 0.9
|
209
|
+
@music.pos = [10, 20, 30]
|
210
|
+
|
211
|
+
@music.play
|
212
|
+
|
213
|
+
Testing
|
214
|
+
-------
|
215
|
+
|
216
|
+
Ray's events can be faked so that you can simulate user input in your tests:
|
217
|
+
|
218
|
+
require 'awesome_scene'
|
219
|
+
|
220
|
+
describe AwesomeScene do
|
221
|
+
before :each do
|
222
|
+
@game = AwesomeGame.new
|
223
|
+
@scene = @game.registered_scene(:awesome_scene)
|
224
|
+
|
225
|
+
@scene.register
|
226
|
+
@scene.setup
|
227
|
+
end
|
228
|
+
|
229
|
+
it "has a cursor at (0, 0)" do
|
230
|
+
@scene.cursor.pos.should == [0, 0]
|
231
|
+
end
|
232
|
+
|
233
|
+
it "moves its cursor after the mouse moved" do
|
234
|
+
@game.raise_event :mouse_motion, Ray::Vector2[100, 100]
|
235
|
+
@game.event_runner.run
|
236
|
+
|
237
|
+
@scene.cursor.pos.should == [100, 100]
|
238
|
+
end
|
239
|
+
|
240
|
+
it "draws its cursor" do
|
241
|
+
@scene.window.should_receive(:draw, @scene.cursor)
|
242
|
+
@scene.render @scene.window
|
45
243
|
end
|
46
244
|
|
47
|
-
|
245
|
+
after :each do
|
246
|
+
@scene.clean_up
|
247
|
+
end
|
48
248
|
end
|
49
249
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
250
|
+
Animations
|
251
|
+
----------
|
252
|
+
|
253
|
+
You can animate the fact the state of an object is changing (its position, etc.)
|
254
|
+
using Ray's animation objects:
|
255
|
+
|
256
|
+
animations << translation(:from => [0, 0], :to => [100, 100],
|
257
|
+
:duration => 4).start(@some_drawable)
|
258
|
+
|
259
|
+
(They can really be used to animate any change, not just those that are visible,
|
260
|
+
and not just those applied to a drawable.)
|
56
261
|
|
57
|
-
# Installation & Getting started
|
58
|
-
See [the guide](guide.md)
|
data/Rakefile
CHANGED
@@ -1,9 +1,15 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
begin
|
4
|
+
require 'devkit' # only used on windows
|
5
|
+
rescue LoadError
|
6
|
+
end
|
7
|
+
|
2
8
|
begin
|
3
9
|
require 'yard'
|
4
10
|
|
5
11
|
YARD::Rake::YardocTask.new do |t|
|
6
|
-
t.files = ['lib/**/*.rb', 'ext/**/*.
|
12
|
+
t.files = ['lib/**/*.rb', 'ext/**/*.c']
|
7
13
|
t.options |= ["--private", "-e", "./yard_ext.rb"]
|
8
14
|
end
|
9
15
|
rescue LoadError
|
@@ -11,69 +17,34 @@ rescue LoadError
|
|
11
17
|
"with the following command: gem install yard")
|
12
18
|
end
|
13
19
|
|
14
|
-
begin
|
15
|
-
require 'jeweler'
|
16
|
-
|
17
|
-
Jeweler::Tasks.new do |s|
|
18
|
-
s.name = "ray"
|
19
|
-
|
20
|
-
s.summary = "A library to write games (or to play with) in Ruby"
|
21
|
-
s.description = "Written to play with Ruby"
|
22
|
-
s.homepage = "http://github.com/Mon-Ouie/ray"
|
23
|
-
|
24
|
-
s.email = "mon.ouie@gmail.com"
|
25
|
-
s.authors = ["Mon ouïe"]
|
26
|
-
|
27
|
-
s.files |= FileList["lib/**/*.rb"]
|
28
|
-
s.files |= FileList["ext/**/*.{cpp,h}"]
|
29
|
-
s.files |= FileList["*.md"]
|
30
|
-
s.files << ".gemtest" << "Rakefile"
|
31
|
-
|
32
|
-
s.has_rdoc = "yard"
|
33
|
-
|
34
|
-
s.extensions = ["ext/extconf.rb"]
|
35
|
-
|
36
|
-
s.add_development_dependency "jeweler"
|
37
|
-
s.add_development_dependency "yard"
|
38
|
-
s.add_development_dependency "riot"
|
39
|
-
s.add_development_dependency "rr"
|
40
|
-
end
|
41
|
-
rescue LoadError
|
42
|
-
$stderr.puts("Jeweler is not installed. Please install it " +
|
43
|
-
"with the following command: gem intall jeweler")
|
44
|
-
end
|
45
|
-
|
46
20
|
namespace :ext do
|
47
21
|
desc "Rebuilds the C extension"
|
48
22
|
task :rebuild do
|
49
23
|
cd "ext/"
|
50
|
-
|
24
|
+
ruby "extconf.rb" and sh "make clean && make"
|
51
25
|
end
|
52
26
|
|
53
27
|
desc "Builds the C extension"
|
54
28
|
task :build do
|
55
29
|
cd "ext/"
|
56
|
-
|
30
|
+
ruby "extconf.rb" and sh "make"
|
57
31
|
end
|
58
32
|
end
|
59
33
|
|
60
34
|
desc "Builds the C extension"
|
61
35
|
task :ext => ["ext:build"]
|
62
36
|
|
63
|
-
desc "Starts IRB"
|
64
|
-
task :irb do
|
65
|
-
require 'irb'
|
66
|
-
ARGV.clear
|
67
|
-
|
68
|
-
$:.unshift File.expand_path(File.join(File.dirname(__FILE__), "ext"))
|
69
|
-
$:.unshift File.expand_path(File.join(File.dirname(__FILE__), "lib"))
|
70
|
-
|
71
|
-
require 'ray'
|
72
|
-
|
73
|
-
IRB.start
|
74
|
-
end
|
75
|
-
|
76
37
|
desc "Runs tests"
|
77
38
|
task :test do
|
78
|
-
|
39
|
+
test_file = File.expand_path("test/run_all.rb", File.dirname(__FILE__))
|
40
|
+
|
41
|
+
begin
|
42
|
+
if defined?(RUBY_ENGINE) && RUBY_ENGINE == "jruby"
|
43
|
+
ruby "-X+O", test_file
|
44
|
+
else
|
45
|
+
ruby test_file
|
46
|
+
end
|
47
|
+
rescue
|
48
|
+
exit 1
|
49
|
+
end
|
79
50
|
end
|
data/ext/audio.c
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
#include "ray.h"
|
2
|
+
|
3
|
+
VALUE ray_mAudio = Qnil;
|
4
|
+
|
5
|
+
/*
|
6
|
+
@return [Float] The global volume. 0 is the minimum volume, whereas 100
|
7
|
+
is the maximum.
|
8
|
+
*/
|
9
|
+
VALUE ray_audio_volume(VALUE self) {
|
10
|
+
return rb_float_new(say_audio_get_volume());
|
11
|
+
}
|
12
|
+
|
13
|
+
/*
|
14
|
+
@overload volume=(val)
|
15
|
+
Sets the global volume.
|
16
|
+
@param [Float] val The new value for the volume.
|
17
|
+
*/
|
18
|
+
VALUE ray_audio_set_volume(VALUE self, VALUE value) {
|
19
|
+
float volume = (float)NUM2DBL(value);
|
20
|
+
say_audio_set_volume(volume);
|
21
|
+
|
22
|
+
return value;
|
23
|
+
}
|
24
|
+
|
25
|
+
/*
|
26
|
+
@return [Ray::Vector3] The position of the listener.
|
27
|
+
*/
|
28
|
+
VALUE ray_audio_pos(VALUE self) {
|
29
|
+
return ray_vector3_to_rb(say_audio_get_pos());
|
30
|
+
}
|
31
|
+
|
32
|
+
/*
|
33
|
+
@overload pos=(pos)
|
34
|
+
Sets the position of the listener.
|
35
|
+
@param [Ray::Vector3, #to_vector3] pos The new position of the
|
36
|
+
listener.
|
37
|
+
*/
|
38
|
+
VALUE ray_audio_set_pos(VALUE self, VALUE pos) {
|
39
|
+
say_audio_set_pos(ray_convert_to_vector3(pos));
|
40
|
+
return pos;
|
41
|
+
}
|
42
|
+
|
43
|
+
/*
|
44
|
+
@return [Ray::Vector3] The orientation of the listener.
|
45
|
+
*/
|
46
|
+
VALUE ray_audio_direction(VALUE self) {
|
47
|
+
return ray_vector3_to_rb(say_audio_get_direction());
|
48
|
+
}
|
49
|
+
|
50
|
+
/*
|
51
|
+
@overload direction=(dir)
|
52
|
+
Sets the orientation of the listener.
|
53
|
+
@param [Ray::Vector3, #to_vector3] dir The new orientation of the listener.
|
54
|
+
*/
|
55
|
+
VALUE ray_audio_set_direction(VALUE self, VALUE dir) {
|
56
|
+
say_audio_set_direction(ray_convert_to_vector3(dir));
|
57
|
+
return dir;
|
58
|
+
}
|
59
|
+
|
60
|
+
void Init_ray_audio() {
|
61
|
+
ray_mAudio = rb_define_module_under(ray_mRay, "Audio");
|
62
|
+
rb_define_module_function(ray_mAudio, "volume", ray_audio_volume, 0);
|
63
|
+
rb_define_module_function(ray_mAudio, "volume=", ray_audio_set_volume, 1);
|
64
|
+
rb_define_module_function(ray_mAudio, "pos", ray_audio_pos, 0);
|
65
|
+
rb_define_module_function(ray_mAudio, "pos=", ray_audio_set_pos, 1);
|
66
|
+
rb_define_module_function(ray_mAudio, "direction", ray_audio_direction, 0);
|
67
|
+
rb_define_module_function(ray_mAudio, "direction=", ray_audio_set_direction, 1);
|
68
|
+
}
|