ray 0.0.1 → 0.1.0.pre1

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.
Files changed (188) hide show
  1. data/.gemtest +0 -0
  2. data/.yardopts +4 -0
  3. data/README.md +17 -21
  4. data/Rakefile +18 -139
  5. data/VERSION +1 -1
  6. data/ext/audio.cpp +723 -0
  7. data/ext/{color.c → color.cpp} +25 -13
  8. data/ext/drawable.cpp +91 -0
  9. data/ext/event.cpp +460 -0
  10. data/ext/extconf.rb +5 -104
  11. data/ext/font.cpp +190 -0
  12. data/ext/image.cpp +733 -0
  13. data/ext/input.cpp +74 -0
  14. data/ext/ray.cpp +168 -0
  15. data/ext/ray.hpp +356 -0
  16. data/ext/{rect.c → rect.cpp} +51 -37
  17. data/ext/shader.cpp +169 -0
  18. data/ext/shape.cpp +409 -0
  19. data/ext/sprite.cpp +306 -0
  20. data/ext/text.cpp +181 -0
  21. data/ext/vector.cpp +215 -0
  22. data/guide.md +619 -0
  23. data/lib/ray/audio.rb +0 -41
  24. data/lib/ray/color.rb +32 -10
  25. data/lib/ray/drawable.rb +16 -0
  26. data/lib/ray/dsl/event_listener.rb +25 -2
  27. data/lib/ray/dsl/event_runner.rb +33 -5
  28. data/lib/ray/dsl/event_translator.rb +66 -30
  29. data/lib/ray/dsl/handler.rb +3 -2
  30. data/lib/ray/dsl/matcher.rb +58 -14
  31. data/lib/ray/font.rb +38 -96
  32. data/lib/ray/font_set.rb +8 -8
  33. data/lib/ray/game.rb +87 -66
  34. data/lib/ray/helper.rb +105 -10
  35. data/lib/ray/image.rb +150 -24
  36. data/lib/ray/image_set.rb +3 -1
  37. data/lib/ray/input.rb +10 -0
  38. data/lib/ray/music_set.rb +5 -3
  39. data/lib/ray/ray.rb +21 -9
  40. data/lib/ray/rect.rb +48 -7
  41. data/lib/ray/rmagick.rb +41 -0
  42. data/lib/ray/scene.rb +99 -43
  43. data/lib/ray/scene_list.rb +67 -0
  44. data/lib/ray/shape.rb +132 -0
  45. data/lib/ray/sound_set.rb +4 -2
  46. data/lib/ray/sprite.rb +49 -111
  47. data/lib/ray/text.rb +101 -0
  48. data/lib/ray/text_helper.rb +37 -0
  49. data/lib/ray/turtle.rb +215 -0
  50. data/lib/ray/vector.rb +226 -0
  51. data/samples/audio/spacial.rb +44 -0
  52. data/samples/hello_world/hello.rb +9 -13
  53. data/samples/hello_world/hello_dsl.rb +8 -12
  54. data/samples/hello_world/text.rb +15 -0
  55. data/samples/opengl/binding.rb +38 -0
  56. data/samples/opengl/image.rb +32 -0
  57. data/samples/opengl/opengl.rb +34 -0
  58. data/samples/opengl/shader.rb +42 -0
  59. data/samples/pong/pong.rb +14 -10
  60. data/samples/run_scene.rb +53 -0
  61. data/samples/shaders/scene.rb +40 -0
  62. data/samples/shaders/shaders.rb +42 -0
  63. data/samples/shaders/shape.rb +34 -0
  64. data/samples/sokoban/sokoban.rb +18 -18
  65. data/samples/test/actual_scene.rb +41 -0
  66. data/samples/test/scene_riot.rb +39 -0
  67. data/samples/test/scene_spec.rb +32 -0
  68. data/samples/test/scene_test_unit.rb +25 -0
  69. data/samples/turtle/byzantium.rb +45 -0
  70. data/samples/turtle/hilbert.rb +48 -0
  71. data/samples/turtle/koch.rb +55 -0
  72. data/samples/turtle/mandala.rb +61 -0
  73. data/samples/turtle/tree.rb +57 -0
  74. data/test/audio_test.rb +69 -0
  75. data/test/color_test.rb +77 -0
  76. data/test/drawable_test.rb +19 -0
  77. data/test/dsl_test.rb +93 -0
  78. data/test/font_test.rb +57 -0
  79. data/test/helpers.rb +94 -0
  80. data/test/image_test.rb +82 -0
  81. data/test/ray_test.rb +25 -0
  82. data/test/rect_test.rb +121 -0
  83. data/{spec → test}/res/VeraMono.ttf +0 -0
  84. data/{spec → test}/res/aqua.bmp +0 -0
  85. data/{spec → test}/res/aqua.png +0 -0
  86. data/{spec → test}/res/aqua2.bmp +0 -0
  87. data/{spec → test}/res/not_a_jpeg.jpeg +0 -0
  88. data/{spec → test}/res/pop.wav +0 -0
  89. data/test/resource_set_test.rb +99 -0
  90. data/test/run_all.rb +7 -0
  91. data/test/shape_test.rb +101 -0
  92. data/test/sprite_test.rb +89 -0
  93. data/test/text_test.rb +78 -0
  94. data/test/turtle_test.rb +176 -0
  95. data/test/vector_test.rb +111 -0
  96. data/yard_ext.rb +0 -28
  97. metadata +95 -139
  98. data/.gitignore +0 -23
  99. data/.gitmodules +0 -3
  100. data/.rspec +0 -3
  101. data/ext/audio.c +0 -473
  102. data/ext/event.c +0 -557
  103. data/ext/font.c +0 -287
  104. data/ext/image.c +0 -933
  105. data/ext/joystick.c +0 -145
  106. data/ext/ray.c +0 -489
  107. data/ext/ray.h +0 -245
  108. data/ext/ray_osx.m +0 -161
  109. data/lib/ray/joystick.rb +0 -30
  110. data/psp/SDL_psp_main.c +0 -84
  111. data/psp/bigdecimal/README +0 -60
  112. data/psp/bigdecimal/bigdecimal.c +0 -4697
  113. data/psp/bigdecimal/bigdecimal.h +0 -216
  114. data/psp/bigdecimal/lib/bigdecimal/jacobian.rb +0 -85
  115. data/psp/bigdecimal/lib/bigdecimal/ludcmp.rb +0 -84
  116. data/psp/bigdecimal/lib/bigdecimal/math.rb +0 -235
  117. data/psp/bigdecimal/lib/bigdecimal/newton.rb +0 -77
  118. data/psp/bigdecimal/lib/bigdecimal/util.rb +0 -65
  119. data/psp/digest/bubblebabble/bubblebabble.c +0 -142
  120. data/psp/digest/defs.h +0 -20
  121. data/psp/digest/digest.c +0 -643
  122. data/psp/digest/digest.h +0 -32
  123. data/psp/digest/lib/digest.rb +0 -50
  124. data/psp/digest/lib/md5.rb +0 -27
  125. data/psp/digest/lib/sha1.rb +0 -27
  126. data/psp/digest/md5/md5.c +0 -420
  127. data/psp/digest/md5/md5.h +0 -80
  128. data/psp/digest/md5/md5init.c +0 -40
  129. data/psp/digest/rmd160/rmd160.c +0 -457
  130. data/psp/digest/rmd160/rmd160.h +0 -56
  131. data/psp/digest/rmd160/rmd160init.c +0 -40
  132. data/psp/digest/sha1/sha1.c +0 -269
  133. data/psp/digest/sha1/sha1.h +0 -39
  134. data/psp/digest/sha1/sha1init.c +0 -40
  135. data/psp/digest/sha2/lib/sha2.rb +0 -73
  136. data/psp/digest/sha2/sha2.c +0 -919
  137. data/psp/digest/sha2/sha2.h +0 -109
  138. data/psp/digest/sha2/sha2init.c +0 -52
  139. data/psp/enumerator/enumerator.c +0 -298
  140. data/psp/etc/etc.c +0 -559
  141. data/psp/ext.c +0 -289
  142. data/psp/fcntl/fcntl.c +0 -187
  143. data/psp/lib/rbconfig.rb +0 -178
  144. data/psp/nkf/lib/kconv.rb +0 -367
  145. data/psp/nkf/nkf-utf8/config.h +0 -88
  146. data/psp/nkf/nkf-utf8/nkf.c +0 -6040
  147. data/psp/nkf/nkf-utf8/utf8tbl.c +0 -8500
  148. data/psp/nkf/nkf-utf8/utf8tbl.h +0 -34
  149. data/psp/nkf/nkf.c +0 -654
  150. data/psp/socket/addrinfo.h +0 -173
  151. data/psp/socket/getaddrinfo.c +0 -676
  152. data/psp/socket/getnameinfo.c +0 -270
  153. data/psp/socket/pspsocket.c +0 -71
  154. data/psp/socket/pspsocket.h +0 -28
  155. data/psp/socket/socket.c +0 -4662
  156. data/psp/socket/sockport.h +0 -76
  157. data/psp/stringio/stringio.c +0 -1306
  158. data/psp/strscan/strscan.c +0 -1320
  159. data/psp/syck/bytecode.c +0 -1166
  160. data/psp/syck/emitter.c +0 -1242
  161. data/psp/syck/gram.c +0 -1894
  162. data/psp/syck/gram.h +0 -79
  163. data/psp/syck/handler.c +0 -174
  164. data/psp/syck/implicit.c +0 -2990
  165. data/psp/syck/node.c +0 -408
  166. data/psp/syck/rubyext.c +0 -2367
  167. data/psp/syck/syck.c +0 -504
  168. data/psp/syck/syck.h +0 -456
  169. data/psp/syck/token.c +0 -2725
  170. data/psp/syck/yaml2byte.c +0 -257
  171. data/psp/syck/yamlbyte.h +0 -170
  172. data/psp/thread/thread.c +0 -1175
  173. data/psp/zlib/zlib.c +0 -3547
  174. data/script.rb +0 -10
  175. data/spec/ray/audio_spec.rb +0 -146
  176. data/spec/ray/color_spec.rb +0 -57
  177. data/spec/ray/event_spec.rb +0 -80
  178. data/spec/ray/font_spec.rb +0 -93
  179. data/spec/ray/image_set_spec.rb +0 -48
  180. data/spec/ray/image_spec.rb +0 -162
  181. data/spec/ray/joystick_spec.rb +0 -21
  182. data/spec/ray/matcher_spec.rb +0 -50
  183. data/spec/ray/ray_spec.rb +0 -88
  184. data/spec/ray/rect_spec.rb +0 -154
  185. data/spec/ray/resource_set_spec.rb +0 -105
  186. data/spec/ray/sprite_spec.rb +0 -163
  187. data/spec/spec.opts +0 -4
  188. data/spec/spec_helper.rb +0 -8
@@ -0,0 +1,44 @@
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
+ SPEED = 5
11
+
12
+ Ray::Game.new("Spacial sounds") do
13
+ register do
14
+ add_hook :quit, method(:exit!)
15
+ end
16
+
17
+ scene :spacial do
18
+ @sound = sound path_of("pop.wav")
19
+ @sound.attenuation = 0.1
20
+ @sound.min_distance = 10
21
+ @sound.pos = [(640 / 2) - 5, (480 / 2) - 5, 0]
22
+
23
+ @rect = Ray::Rect.new(0, 0, 10, 10)
24
+
25
+ always do
26
+ @sound.play if (Time.now.to_i % 2) == 0
27
+
28
+ @rect.x += SPEED if holding? :right
29
+ @rect.x -= SPEED if holding? :left
30
+ @rect.y += SPEED if holding? :down
31
+ @rect.y -= SPEED if holding? :up
32
+
33
+ Ray::Audio.pos = [@rect.x, @rect.y, 0]
34
+ end
35
+
36
+ render do |win|
37
+ win.fill(Ray::Color.black)
38
+ win.draw_filled_rect(@rect, Ray::Color.green)
39
+ win.draw_filled_rect([(640 / 2) - 5, (480 / 2) - 5, 10, 10], Ray::Color.red)
40
+ end
41
+ end
42
+
43
+ push_scene :spacial
44
+ end
@@ -1,35 +1,31 @@
1
- $: << File.expand_path(File.dirname(__FILE__) + "/../../lib")
2
- $: << File.expand_path(File.dirname(__FILE__) + "/../../ext")
3
-
4
- def path_of(res)
5
- File.expand_path(File.dirname(__FILE__) + "/../../spec/res/#{res}")
6
- end
1
+ $:.unshift File.expand_path(File.dirname(__FILE__) + "/../../lib")
2
+ $:.unshift File.expand_path(File.dirname(__FILE__) + "/../../ext")
7
3
 
8
4
  require 'ray'
9
5
 
10
6
  class HelloScene < Ray::Scene
11
7
  scene_name :hello
12
-
8
+
13
9
  def setup
14
- @font = font(path_of("VeraMono.ttf"), 12)
10
+ @font = Ray::Font.default
15
11
  end
16
-
12
+
17
13
  def render(win)
18
- @font.draw("Hello world!", :on => win, :at => [0, 0])
14
+ @font.draw("Hello world!", :on => win, :at => [0, 0], :size => 12)
19
15
  end
20
16
  end
21
17
 
22
18
  class HelloWorld < Ray::Game
23
19
  def initialize
24
20
  super("Hello world!")
25
-
21
+
26
22
  HelloScene.bind(self)
27
23
  push_scene :hello
28
24
  end
29
-
25
+
30
26
  def register
31
27
  add_hook :quit, method(:exit!)
32
28
  end
33
29
  end
34
30
 
35
- HelloWorld.new.run
31
+ HelloWorld.new.run
@@ -1,9 +1,5 @@
1
- $: << File.expand_path(File.dirname(__FILE__) + "/../../lib")
2
- $: << File.expand_path(File.dirname(__FILE__) + "/../../ext")
3
-
4
- def path_of(res)
5
- File.expand_path(File.dirname(__FILE__) + "/../../spec/res/#{res}")
6
- end
1
+ $:.unshift File.expand_path(File.dirname(__FILE__) + "/../../lib")
2
+ $:.unshift File.expand_path(File.dirname(__FILE__) + "/../../ext")
7
3
 
8
4
  require 'ray'
9
5
 
@@ -11,14 +7,14 @@ Ray::Game.new("Hello world!") do
11
7
  register do
12
8
  add_hook :quit, method(:exit!)
13
9
  end
14
-
10
+
15
11
  scene :hello do
16
- @font = font(path_of("VeraMono.ttf"), 12)
17
-
12
+ @font = Ray::Font.default
13
+
18
14
  render do |win|
19
- @font.draw("Hello world", :on => win, :at => [0, 0])
15
+ @font.draw("Hello world", :on => win, :at => [0, 0], :size => 12)
20
16
  end
21
17
  end
22
-
18
+
23
19
  push_scene :hello
24
- end
20
+ end
@@ -0,0 +1,15 @@
1
+ $:.unshift File.expand_path(File.dirname(__FILE__) + "/../../lib")
2
+ $:.unshift File.expand_path(File.dirname(__FILE__) + "/../../ext")
3
+
4
+ require 'ray'
5
+
6
+ Ray.game "Hello world!" do
7
+ register { add_hook :quit, method(:exit!) }
8
+
9
+ scene :hello do
10
+ @text = text "Hello world!", :angle => 30, :at => [100, 100], :size => 30
11
+ render { |win| @text.draw_on win }
12
+ end
13
+
14
+ push_scene :hello
15
+ end
@@ -0,0 +1,38 @@
1
+ require 'ffi'
2
+
3
+ module GL
4
+ extend FFI::Library
5
+
6
+ if RUBY_PLATFORM.include? "darwin"
7
+ ffi_lib "/System/Library/Frameworks/OpenGL.framework/OpenGL"
8
+ else
9
+ ffi_lib "GL"
10
+ end
11
+
12
+ Triangles = 4
13
+ Quads = 7
14
+
15
+ attach_function :glBegin, [:uint], :void
16
+ attach_function :glEnd, [], :void
17
+
18
+ attach_function :glVertex2f, [:float, :float], :void
19
+ attach_function :glColor3f, [:float, :float, :float], :void
20
+ attach_function :glTexCoord2f, [:float, :float], :void
21
+
22
+ attach_function :glScalef, [:float, :float, :float], :void
23
+
24
+ class << self
25
+ def begin(mode)
26
+ glBegin(mode)
27
+ yield
28
+ ensure
29
+ glEnd
30
+ end
31
+
32
+ alias :vertex :glVertex2f
33
+ alias :color :glColor3f
34
+ alias :tex_coord :glTexCoord2f
35
+
36
+ alias :scale :glScalef
37
+ end
38
+ end
@@ -0,0 +1,32 @@
1
+ $:.unshift File.expand_path(File.dirname(__FILE__) + "/../../lib")
2
+ $:.unshift File.expand_path(File.dirname(__FILE__) + "/../../ext")
3
+
4
+ require File.expand_path(File.dirname(__FILE__)) + "/binding.rb"
5
+ require 'ray'
6
+
7
+ Ray::Game.new("OpenGL test") do
8
+ register do
9
+ add_hook :quit, method(:exit!)
10
+ end
11
+
12
+ scene :triangle do
13
+ image = Ray::Image.new(:w => 50, :h => 50).fill(Ray::Color.blue).update
14
+
15
+ @drawable = Ray::Drawable.new do |img|
16
+ image.bind
17
+
18
+ GL.begin GL::Quads do
19
+ GL.tex_coord(0.0, 0.0); GL.vertex(250.0, 300.0)
20
+ GL.tex_coord(0.0, 1.0); GL.vertex(250.0, 250.0)
21
+ GL.tex_coord(1.0, 1.0); GL.vertex(300.0, 250.0)
22
+ GL.tex_coord(1.0, 0.0); GL.vertex(300.0, 300.0)
23
+ end
24
+ end
25
+
26
+ render do |win|
27
+ @drawable.draw_on win
28
+ end
29
+ end
30
+
31
+ push_scene :triangle
32
+ end
@@ -0,0 +1,34 @@
1
+ # FFI is required to run this sample.
2
+ # You could use any OpenGL binding instead.
3
+ # In fact, using an FFI with hard-coded constants is probably
4
+ # not really a good idea...
5
+
6
+ $:.unshift File.expand_path(File.dirname(__FILE__) + "/../../lib")
7
+ $:.unshift File.expand_path(File.dirname(__FILE__) + "/../../ext")
8
+
9
+ require File.expand_path(File.dirname(__FILE__)) + "/binding.rb"
10
+ require 'ray'
11
+
12
+ Ray::Game.new("OpenGL test") do
13
+ register do
14
+ add_hook :quit, method(:exit!)
15
+ end
16
+
17
+ scene :triangle do
18
+ @drawable = Ray::Drawable.new do |img|
19
+ GL.scale(2.0, 1.0, 1.0)
20
+
21
+ GL.begin GL::Triangles do
22
+ GL.color(1.0, 0.0, 0.0); GL.vertex(300.0, 300.0)
23
+ GL.color(1.0, 1.0, 0.0); GL.vertex(100.0, 300.0)
24
+ GL.color(1.0, 1.0, 1.0); GL.vertex(300.0, 100.0)
25
+ end
26
+ end
27
+
28
+ render do |win|
29
+ @drawable.draw_on win
30
+ end
31
+ end
32
+
33
+ push_scene :triangle
34
+ end
@@ -0,0 +1,42 @@
1
+ $:.unshift File.expand_path(File.dirname(__FILE__) + "/../../lib")
2
+ $:.unshift File.expand_path(File.dirname(__FILE__) + "/../../ext")
3
+
4
+ require File.expand_path(File.dirname(__FILE__)) + "/binding.rb"
5
+ require 'ray'
6
+
7
+ Ray::Game.new("OpenGL test") do
8
+ register do
9
+ add_hook :quit, method(:exit!)
10
+ end
11
+
12
+ scene :triangle do
13
+ shader = Ray::Shader.new StringIO.new(<<-SHADER)
14
+ uniform vec3 ratio;
15
+
16
+ void main() {
17
+ vec4 color = gl_Color;
18
+ float gray = dot(color.xyz, ratio);
19
+
20
+ gl_FragColor = vec4(gray, gray, gray, 1.0);
21
+ }
22
+ SHADER
23
+
24
+ shader["ratio"] = [0.299, 0.587, 0.114]
25
+
26
+ @drawable = Ray::Drawable.new do |img|
27
+ shader.bind do
28
+ GL.begin GL::Triangles do
29
+ GL.color(1.0, 0.0, 0.0); GL.vertex(300.0, 300.0)
30
+ GL.color(1.0, 1.0, 0.0); GL.vertex(100.0, 300.0)
31
+ GL.color(1.0, 1.0, 1.0); GL.vertex(300.0, 100.0)
32
+ end
33
+ end
34
+ end
35
+
36
+ render do |win|
37
+ @drawable.draw_on win
38
+ end
39
+ end
40
+
41
+ push_scene :triangle
42
+ end
@@ -1,8 +1,8 @@
1
- $: << File.expand_path(File.dirname(__FILE__) + "/../../lib")
2
- $: << File.expand_path(File.dirname(__FILE__) + "/../../ext")
1
+ $:.unshift File.expand_path(File.dirname(__FILE__) + "/../../lib")
2
+ $:.unshift File.expand_path(File.dirname(__FILE__) + "/../../ext")
3
3
 
4
4
  def path_of(res)
5
- File.expand_path(File.dirname(__FILE__) + "/../../spec/res/#{res}")
5
+ File.expand_path(File.dirname(__FILE__) + "/../../test/res/#{res}")
6
6
  end
7
7
 
8
8
  require 'ray'
@@ -12,16 +12,19 @@ module Pong
12
12
  scene_name :pong_scene
13
13
 
14
14
  def setup
15
- @font = font(path_of("VeraMono.ttf"), 12)
15
+ @font = Ray::Font.default
16
16
 
17
17
  player_img = Ray::Image.new(:w => 20, :h => 50)
18
18
  player_img.draw_filled_rect(Ray::Rect.new(0, 0, 20, 50), Ray::Color.blue)
19
+ player_img.update
19
20
 
20
21
  adv_img = Ray::Image.new(:w => 20, :h => 50)
21
22
  adv_img.draw_filled_rect(Ray::Rect.new(0, 0, 20, 50), Ray::Color.red)
23
+ adv_img.update
22
24
 
23
25
  ball_img = Ray::Image.new(:w => 10, :h => 10)
24
26
  ball_img.draw_filled_circle([5, 5], 5, Ray::Color.white)
27
+ ball_img.update
25
28
 
26
29
  @player = sprite(player_img)
27
30
  @adv = sprite(adv_img)
@@ -68,9 +71,9 @@ module Pong
68
71
  end
69
72
 
70
73
  if @ball.x >= @screen_rect.w
71
- raise_event(:point_gained, :player)
74
+ raise_event :point_gained, :player
72
75
  elsif @ball.x <= 0
73
- raise_event(:point_gained, :adv)
76
+ raise_event :point_gained, :adv
74
77
  end
75
78
 
76
79
  if @ball.collide?(@player) || @ball.collide?(@adv) ||
@@ -101,13 +104,14 @@ module Pong
101
104
  def render(win)
102
105
  win.fill(Ray::Color.black)
103
106
 
104
- @player.draw
105
- @adv.draw
106
- @ball.draw
107
+ @player.draw_on win
108
+ @adv.draw_on win
109
+ @ball.draw_on win
107
110
 
108
111
  @font.draw("#{@scores[:player]} - #{@scores[:adv]}",
109
112
  :at => [0, 0], :on => win,
110
- :color => Ray::Color.white)
113
+ :color => Ray::Color.white,
114
+ :size => 12)
111
115
  end
112
116
  end
113
117
 
@@ -0,0 +1,53 @@
1
+ $:.unshift File.expand_path(File.dirname(__FILE__) + "/../lib")
2
+ $:.unshift File.expand_path(File.dirname(__FILE__) + "/../ext")
3
+
4
+ require 'ray'
5
+
6
+ $stdout = StringIO.new
7
+
8
+ Ray.game "run_scene" do
9
+ register do
10
+ add_hook :quit, method(:exit!)
11
+
12
+ on :key_press, key(:up) do
13
+ puts "#{self} knows you pressed up"
14
+ end
15
+ end
16
+
17
+ font = Ray::Font.default
18
+
19
+ scene :sec do
20
+ on :key_press, key(:down) do
21
+ puts "#{self} knows you pressed down"
22
+ end
23
+
24
+ on :key_press, key(:left) do
25
+ pop_scene
26
+ end
27
+
28
+ puts "In scene :sec"
29
+
30
+ render do |win|
31
+ font.draw($stdout.string, :on => win, :size => 12)
32
+ end
33
+ end
34
+
35
+ scene :first do
36
+ on :key_press, key(:left) do
37
+ puts "#{self} knows you pressed left"
38
+ end
39
+
40
+ on :key_press, key(:right) do
41
+ run_scene :sec
42
+ puts "Back to scene :first"
43
+ end
44
+
45
+ puts "In scene :first"
46
+
47
+ render do |win|
48
+ font.draw($stdout.string, :on => win, :size => 12)
49
+ end
50
+ end
51
+
52
+ push_scene :first
53
+ end
@@ -0,0 +1,40 @@
1
+ $:.unshift File.expand_path(File.dirname(__FILE__) + "/../../lib")
2
+ $:.unshift File.expand_path(File.dirname(__FILE__) + "/../../ext")
3
+
4
+ require 'ray'
5
+
6
+ Ray::Game.new("Shaders test") do
7
+ register do
8
+ add_hook :quit, method(:exit!)
9
+ end
10
+
11
+ scene :shader do
12
+ self.lazy_rendering = true
13
+
14
+ shape = Ray::Shape.rectangle([0, 0, 100, 100], Ray::Color.black)
15
+ shape.each do |point|
16
+ point.color = Ray::Color.new(rand(256), rand(256), rand(256))
17
+ end
18
+
19
+ self.shader = Ray::Shader.new StringIO.new(<<-SHADER)
20
+ uniform sampler2D texture;
21
+ uniform vec3 ratio;
22
+
23
+ void main() {
24
+ vec4 color = texture2D(texture, gl_TexCoord[0].xy);
25
+ float gray = dot(color.xyz, ratio);
26
+
27
+ gl_FragColor = vec4(gray, gray, gray, 1.0);
28
+ }
29
+ SHADER
30
+
31
+ shader["texture"] = :current
32
+ shader["ratio"] = [0.299, 0.587, 0.114]
33
+
34
+ render do |win|
35
+ shape.draw_on win
36
+ end
37
+ end
38
+
39
+ push_scene :shader
40
+ end