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.
Files changed (370) hide show
  1. data/README.md +235 -32
  2. data/Rakefile +20 -49
  3. data/ext/audio.c +68 -0
  4. data/ext/audio_source.c +197 -0
  5. data/ext/buffer_renderer.c +130 -0
  6. data/ext/color.c +179 -0
  7. data/ext/drawable.c +446 -0
  8. data/ext/event.c +337 -0
  9. data/ext/extconf.rb +80 -6
  10. data/ext/font.c +97 -0
  11. data/ext/gl.c +114 -0
  12. data/ext/gl_buffer.c +224 -0
  13. data/ext/gl_index_buffer.c +202 -0
  14. data/ext/gl_int_array.c +139 -0
  15. data/ext/gl_vertex.c +157 -0
  16. data/ext/image.c +263 -0
  17. data/ext/image_target.c +84 -0
  18. data/ext/input.c +53 -0
  19. data/ext/matrix.c +374 -0
  20. data/ext/music.c +113 -0
  21. data/ext/polygon.c +426 -0
  22. data/ext/ray.c +59 -0
  23. data/ext/ray.h +168 -0
  24. data/ext/rect.c +255 -0
  25. data/ext/say.h +31 -0
  26. data/ext/say_all.h +77 -0
  27. data/ext/say_arial.h +14689 -0
  28. data/ext/say_array.c +124 -0
  29. data/ext/say_array.h +34 -0
  30. data/ext/say_audio.c +64 -0
  31. data/ext/say_audio.h +170 -0
  32. data/ext/say_audio_context.c +40 -0
  33. data/ext/say_audio_source.c +96 -0
  34. data/ext/say_basic_type.c +17 -0
  35. data/ext/say_basic_type.h +47 -0
  36. data/ext/say_buffer.c +277 -0
  37. data/ext/say_buffer.h +37 -0
  38. data/ext/say_buffer_renderer.c +121 -0
  39. data/ext/say_buffer_renderer.h +33 -0
  40. data/ext/say_buffer_slice.c +247 -0
  41. data/ext/say_buffer_slice.h +29 -0
  42. data/ext/say_clean_up.c +14 -0
  43. data/ext/say_context.c +163 -0
  44. data/ext/say_context.h +26 -0
  45. data/ext/say_drawable.c +350 -0
  46. data/ext/say_drawable.h +100 -0
  47. data/ext/say_error.c +27 -0
  48. data/ext/say_event.h +213 -0
  49. data/ext/say_font.c +335 -0
  50. data/ext/say_font.h +51 -0
  51. data/ext/say_image.c +283 -0
  52. data/ext/say_image.h +52 -0
  53. data/ext/say_image_target.c +134 -0
  54. data/ext/say_image_target.h +25 -0
  55. data/ext/say_imp.h +70 -0
  56. data/ext/say_index_buffer.c +90 -0
  57. data/ext/say_index_buffer.h +29 -0
  58. data/ext/say_index_buffer_slice.c +227 -0
  59. data/ext/say_index_buffer_slice.h +28 -0
  60. data/ext/say_input.c +35 -0
  61. data/ext/say_matrix.c +314 -0
  62. data/ext/say_matrix.h +55 -0
  63. data/ext/say_music.c +225 -0
  64. data/ext/say_osx.h +62 -0
  65. data/ext/say_osx_context.h +98 -0
  66. data/ext/say_osx_window.h +766 -0
  67. data/ext/say_polygon.c +358 -0
  68. data/ext/say_polygon.h +62 -0
  69. data/ext/say_renderer.c +42 -0
  70. data/ext/say_renderer.h +22 -0
  71. data/ext/say_shader.c +375 -0
  72. data/ext/say_shader.h +91 -0
  73. data/ext/say_sound.c +67 -0
  74. data/ext/say_sound_buffer.c +96 -0
  75. data/ext/say_sprite.c +273 -0
  76. data/ext/say_sprite.h +53 -0
  77. data/ext/say_string.c +9 -0
  78. data/ext/say_table.c +86 -0
  79. data/ext/say_table.h +24 -0
  80. data/ext/say_target.c +264 -0
  81. data/ext/say_target.h +67 -0
  82. data/ext/say_text.c +441 -0
  83. data/ext/say_text.h +56 -0
  84. data/ext/say_thread.c +46 -0
  85. data/ext/say_thread.h +39 -0
  86. data/ext/say_thread_variable.c +44 -0
  87. data/ext/say_utf.c +62 -0
  88. data/ext/say_vertex_type.c +113 -0
  89. data/ext/say_vertex_type.h +40 -0
  90. data/ext/say_vfile.c +57 -0
  91. data/ext/say_view.c +150 -0
  92. data/ext/say_view.h +44 -0
  93. data/ext/say_win.h +24 -0
  94. data/ext/say_win_context.h +91 -0
  95. data/ext/say_win_window.h +670 -0
  96. data/ext/say_window.c +155 -0
  97. data/ext/say_window.h +43 -0
  98. data/ext/say_x11.h +41 -0
  99. data/ext/say_x11_context.h +96 -0
  100. data/ext/say_x11_window.h +818 -0
  101. data/ext/shader.c +302 -0
  102. data/ext/sound.c +118 -0
  103. data/ext/sound_buffer.c +75 -0
  104. data/ext/sprite.c +241 -0
  105. data/ext/stb_image.h +4971 -0
  106. data/ext/stb_image_write.h +511 -0
  107. data/ext/target.c +184 -0
  108. data/ext/text.c +162 -0
  109. data/ext/utils.c +10 -0
  110. data/ext/vector.c +261 -0
  111. data/ext/vendor/freetype/bin/freetype6.dll +0 -0
  112. data/ext/vendor/freetype/bin/zlib1.dll +0 -0
  113. data/ext/vendor/freetype/include/freetype2/freetype/config/ftconfig.h +350 -0
  114. data/ext/vendor/freetype/include/freetype2/freetype/config/ftheader.h +729 -0
  115. data/ext/vendor/freetype/include/freetype2/freetype/config/ftmodule.h +22 -0
  116. data/ext/vendor/freetype/include/freetype2/freetype/config/ftoption.h +695 -0
  117. data/ext/vendor/freetype/include/freetype2/freetype/config/ftstdlib.h +180 -0
  118. data/ext/vendor/freetype/include/freetype2/freetype/freetype.h +3434 -0
  119. data/ext/vendor/freetype/include/freetype2/freetype/ftbbox.h +94 -0
  120. data/ext/vendor/freetype/include/freetype2/freetype/ftbdf.h +200 -0
  121. data/ext/vendor/freetype/include/freetype2/freetype/ftbitmap.h +206 -0
  122. data/ext/vendor/freetype/include/freetype2/freetype/ftcache.h +1110 -0
  123. data/ext/vendor/freetype/include/freetype2/freetype/ftchapters.h +100 -0
  124. data/ext/vendor/freetype/include/freetype2/freetype/fterrdef.h +239 -0
  125. data/ext/vendor/freetype/include/freetype2/freetype/fterrors.h +206 -0
  126. data/ext/vendor/freetype/include/freetype2/freetype/ftgasp.h +113 -0
  127. data/ext/vendor/freetype/include/freetype2/freetype/ftglyph.h +575 -0
  128. data/ext/vendor/freetype/include/freetype2/freetype/ftgxval.h +358 -0
  129. data/ext/vendor/freetype/include/freetype2/freetype/ftgzip.h +102 -0
  130. data/ext/vendor/freetype/include/freetype2/freetype/ftimage.h +1237 -0
  131. data/ext/vendor/freetype/include/freetype2/freetype/ftincrem.h +331 -0
  132. data/ext/vendor/freetype/include/freetype2/freetype/ftlcdfil.h +166 -0
  133. data/ext/vendor/freetype/include/freetype2/freetype/ftlist.h +273 -0
  134. data/ext/vendor/freetype/include/freetype2/freetype/ftlzw.h +99 -0
  135. data/ext/vendor/freetype/include/freetype2/freetype/ftmac.h +272 -0
  136. data/ext/vendor/freetype/include/freetype2/freetype/ftmm.h +378 -0
  137. data/ext/vendor/freetype/include/freetype2/freetype/ftmodapi.h +406 -0
  138. data/ext/vendor/freetype/include/freetype2/freetype/ftmoderr.h +155 -0
  139. data/ext/vendor/freetype/include/freetype2/freetype/ftotval.h +198 -0
  140. data/ext/vendor/freetype/include/freetype2/freetype/ftoutln.h +526 -0
  141. data/ext/vendor/freetype/include/freetype2/freetype/ftpfr.h +172 -0
  142. data/ext/vendor/freetype/include/freetype2/freetype/ftrender.h +229 -0
  143. data/ext/vendor/freetype/include/freetype2/freetype/ftsizes.h +159 -0
  144. data/ext/vendor/freetype/include/freetype2/freetype/ftsnames.h +170 -0
  145. data/ext/vendor/freetype/include/freetype2/freetype/ftstroke.h +716 -0
  146. data/ext/vendor/freetype/include/freetype2/freetype/ftsynth.h +73 -0
  147. data/ext/vendor/freetype/include/freetype2/freetype/ftsystem.h +346 -0
  148. data/ext/vendor/freetype/include/freetype2/freetype/fttrigon.h +350 -0
  149. data/ext/vendor/freetype/include/freetype2/freetype/fttypes.h +583 -0
  150. data/ext/vendor/freetype/include/freetype2/freetype/ftwinfnt.h +263 -0
  151. data/ext/vendor/freetype/include/freetype2/freetype/ftxf86.h +80 -0
  152. data/ext/vendor/freetype/include/freetype2/freetype/t1tables.h +450 -0
  153. data/ext/vendor/freetype/include/freetype2/freetype/ttnameid.h +1132 -0
  154. data/ext/vendor/freetype/include/freetype2/freetype/tttables.h +756 -0
  155. data/ext/vendor/freetype/include/freetype2/freetype/tttags.h +99 -0
  156. data/ext/vendor/freetype/include/freetype2/freetype/ttunpat.h +59 -0
  157. data/ext/vendor/freetype/include/ft2build.h +61 -0
  158. data/ext/vendor/freetype/lib/freetype-bcc.lib +0 -0
  159. data/ext/vendor/freetype/lib/freetype6.def +249 -0
  160. data/ext/vendor/freetype/lib/libfreetype.dll.a +0 -0
  161. data/ext/vendor/freetype/lib/tmp.freetype.lib +0 -0
  162. data/ext/vendor/glew/LICENSE.txt +73 -0
  163. data/ext/vendor/glew/README.txt +18 -0
  164. data/ext/vendor/glew/include/GL/glew.h +15507 -0
  165. data/ext/vendor/glew/include/GL/glxew.h +1568 -0
  166. data/ext/vendor/glew/include/GL/wglew.h +1361 -0
  167. data/ext/vendor/glew/lib/glew32.dll +0 -0
  168. data/ext/vendor/glew/lib/glew32mx.dll +0 -0
  169. data/ext/vendor/glew/lib/libglew32.a +0 -0
  170. data/ext/vendor/glew/lib/libglew32.dll.a +0 -0
  171. data/ext/vendor/glew/lib/libglew32mx.a +0 -0
  172. data/ext/vendor/glew/lib/libglew32mx.dll.a +0 -0
  173. data/ext/vendor/openal/COPYING +484 -0
  174. data/ext/vendor/openal/Win32/soft_oal.dll +0 -0
  175. data/ext/vendor/openal/include/AL/al.h +724 -0
  176. data/ext/vendor/openal/include/AL/alc.h +277 -0
  177. data/ext/vendor/openal/include/AL/alext.h +165 -0
  178. data/ext/vendor/openal/include/AL/efx-creative.h +3 -0
  179. data/ext/vendor/openal/include/AL/efx.h +758 -0
  180. data/ext/vendor/openal/lib/libOpenAL32.dll.a +0 -0
  181. data/ext/vendor/sndfile/bin/libsndfile-1.dll +0 -0
  182. data/ext/vendor/sndfile/include/sndfile.h +666 -0
  183. data/ext/vendor/sndfile/include/sndfile.hh +422 -0
  184. data/ext/vendor/sndfile/lib/libsndfile-1.def +41 -0
  185. data/ext/vendor/sndfile/lib/libsndfile-1.lib +0 -0
  186. data/ext/vertex.c +96 -0
  187. data/ext/view.c +131 -0
  188. data/ext/window.c +183 -0
  189. data/lib/ray/animation.rb +248 -0
  190. data/lib/ray/animation/block_animation.rb +36 -0
  191. data/lib/ray/animation/circular_motion.rb +57 -0
  192. data/lib/ray/animation/color_variation.rb +102 -0
  193. data/lib/ray/animation/combination.rb +71 -0
  194. data/lib/ray/animation/float_variation.rb +76 -0
  195. data/lib/ray/animation/sequence.rb +65 -0
  196. data/lib/ray/animation/sprite_animation.rb +68 -0
  197. data/lib/ray/animation/vector_variation.rb +111 -0
  198. data/lib/ray/animation_list.rb +50 -0
  199. data/lib/ray/audio.rb +4 -7
  200. data/lib/ray/buffer_renderer.rb +9 -0
  201. data/lib/ray/color.rb +41 -6
  202. data/lib/ray/drawable.rb +34 -9
  203. data/lib/ray/dsl.rb +6 -0
  204. data/lib/ray/dsl/event.rb +1 -1
  205. data/lib/ray/dsl/event_listener.rb +14 -10
  206. data/lib/ray/dsl/event_raiser.rb +5 -2
  207. data/lib/ray/dsl/event_runner.rb +4 -10
  208. data/lib/ray/dsl/event_translator.rb +67 -99
  209. data/lib/ray/dsl/handler.rb +1 -1
  210. data/lib/ray/dsl/matcher.rb +40 -27
  211. data/lib/ray/event.rb +22 -0
  212. data/lib/ray/font.rb +0 -42
  213. data/lib/ray/font_set.rb +3 -7
  214. data/lib/ray/game.rb +33 -73
  215. data/lib/ray/gl/int_array.rb +24 -0
  216. data/lib/ray/gl/vertex.rb +106 -0
  217. data/lib/ray/helper.rb +25 -11
  218. data/lib/ray/image.rb +9 -154
  219. data/lib/ray/image_set.rb +3 -8
  220. data/lib/ray/image_target.rb +12 -0
  221. data/lib/ray/matrix.rb +90 -0
  222. data/lib/ray/music.rb +12 -0
  223. data/lib/ray/polygon.rb +77 -0
  224. data/lib/ray/ray.rb +45 -13
  225. data/lib/ray/rect.rb +14 -3
  226. data/lib/ray/resource_set.rb +18 -35
  227. data/lib/ray/scene.rb +43 -81
  228. data/lib/ray/scene_list.rb +12 -5
  229. data/lib/ray/shader.rb +82 -0
  230. data/lib/ray/sound.rb +18 -0
  231. data/lib/ray/sound_buffer.rb +6 -0
  232. data/lib/ray/sound_buffer_set.rb +32 -0
  233. data/lib/ray/sprite.rb +111 -97
  234. data/lib/ray/target.rb +18 -0
  235. data/lib/ray/text.rb +80 -58
  236. data/lib/ray/text_helper.rb +21 -27
  237. data/lib/ray/turtle.rb +49 -38
  238. data/lib/ray/vector.rb +76 -1
  239. data/lib/ray/vertex.rb +24 -0
  240. data/lib/ray/view.rb +47 -0
  241. data/lib/ray/window.rb +23 -0
  242. data/samples/_media/Beep.wav +0 -0
  243. data/samples/_media/CptnRuby Gem.png +0 -0
  244. data/samples/_media/CptnRuby Map.txt +25 -0
  245. data/samples/_media/CptnRuby Tileset.png +0 -0
  246. data/samples/_media/CptnRuby.png +0 -0
  247. data/samples/_media/Space.png +0 -0
  248. data/samples/_media/Star.png +0 -0
  249. data/samples/_media/Starfighter.png +0 -0
  250. data/samples/animation/chain.rb +33 -0
  251. data/samples/animation/circle.rb +38 -0
  252. data/samples/animation/color.rb +18 -0
  253. data/samples/animation/rotation.rb +17 -0
  254. data/samples/animation/sequence.rb +33 -0
  255. data/samples/animation/shader.rb +65 -0
  256. data/samples/animation/sprite_motion.rb +103 -0
  257. data/samples/animation/translation.rb +23 -0
  258. data/samples/audio/spacial.rb +25 -11
  259. data/samples/buffer/buffer.rb +28 -0
  260. data/samples/buffer/index_buffer.rb +36 -0
  261. data/samples/buffer/renderer.rb +27 -0
  262. data/samples/cptn_ruby/cptn_ruby.rb +279 -0
  263. data/samples/hello_world/hello.rb +2 -2
  264. data/samples/hello_world/hello_dsl.rb +3 -3
  265. data/samples/hello_world/text.rb +2 -2
  266. data/samples/opengl/cube.rb +124 -0
  267. data/samples/opengl/image.rb +36 -16
  268. data/samples/opengl/obj_loader.rb +99 -0
  269. data/samples/opengl/opengl.rb +24 -18
  270. data/samples/opengl/shader.rb +36 -26
  271. data/samples/pong/pong.rb +41 -39
  272. data/samples/{run_scene.rb → scenes/run_scene.rb} +21 -7
  273. data/samples/shaders/geometry.rb +98 -0
  274. data/samples/shaders/scene.rb +19 -12
  275. data/samples/shaders/shaders.rb +34 -17
  276. data/samples/shaders/shape.rb +12 -7
  277. data/samples/sokoban/level_1 +11 -7
  278. data/samples/sokoban/sokoban.rb +36 -63
  279. data/samples/starfighter/starfighter.rb +159 -0
  280. data/samples/test/actual_scene.rb +3 -3
  281. data/samples/test/scene_riot.rb +4 -4
  282. data/samples/test/scene_spec.rb +3 -3
  283. data/samples/test/scene_test_unit.rb +1 -1
  284. data/samples/turtle/byzantium.rb +10 -5
  285. data/samples/turtle/hilbert.rb +16 -11
  286. data/samples/turtle/koch.rb +16 -11
  287. data/samples/turtle/mandala.rb +43 -38
  288. data/samples/turtle/tree.rb +13 -8
  289. data/samples/view/resize.rb +26 -0
  290. data/samples/view/view.rb +35 -0
  291. data/samples/window/all_events.rb +44 -0
  292. data/samples/window/change_title.rb +16 -0
  293. data/samples/window/fullscreen.rb +18 -0
  294. data/samples/window/get_pixel.rb +29 -0
  295. data/samples/window/icon.rb +88 -0
  296. data/samples/window/input.rb +27 -0
  297. data/samples/window/no_border.rb +16 -0
  298. data/samples/window/resize.rb +24 -0
  299. data/test/animation/color_variation_test.rb +64 -0
  300. data/test/animation/combination_test.rb +35 -0
  301. data/test/animation/float_variation_test.rb +75 -0
  302. data/test/animation/vector_variation_test.rb +123 -0
  303. data/test/animation_list_test.rb +122 -0
  304. data/test/animation_test.rb +83 -0
  305. data/test/audio_test.rb +88 -33
  306. data/test/buffer_renderer_test.rb +38 -0
  307. data/test/color_test.rb +31 -22
  308. data/test/drawable_test.rb +207 -7
  309. data/test/dsl_test.rb +25 -7
  310. data/test/font_test.rb +6 -40
  311. data/test/game_test.rb +76 -0
  312. data/test/gl_buffer_test.rb +26 -0
  313. data/test/gl_index_buffer_test.rb +17 -0
  314. data/test/gl_vertex_test.rb +117 -0
  315. data/test/helpers.rb +45 -5
  316. data/test/image_target_test.rb +19 -0
  317. data/test/image_test.rb +73 -53
  318. data/test/int_array_test.rb +64 -0
  319. data/test/matrix_test.rb +134 -0
  320. data/test/polygon_test.rb +126 -0
  321. data/test/rect_test.rb +6 -8
  322. data/test/res/frag.c +14 -0
  323. data/test/res/frag3d.c +10 -0
  324. data/test/res/frag_gray.c +17 -0
  325. data/test/res/frag_light3d.c +20 -0
  326. data/test/res/light3d.c +20 -0
  327. data/test/res/sprite.png +0 -0
  328. data/test/res/teapot.obj +12831 -0
  329. data/test/res/vert.c +17 -0
  330. data/test/res/vertex3d.c +14 -0
  331. data/test/resource_set_test.rb +8 -45
  332. data/test/run_all.rb +1 -1
  333. data/test/scene_list_test.rb +79 -0
  334. data/test/scene_test.rb +168 -0
  335. data/test/shader_test.rb +58 -0
  336. data/test/sprite_test.rb +46 -41
  337. data/test/target_test.rb +34 -0
  338. data/test/text_test.rb +20 -31
  339. data/test/turtle_test.rb +35 -20
  340. data/test/vector_test.rb +61 -19
  341. data/test/vertex_test.rb +43 -0
  342. data/test/view_test.rb +61 -0
  343. metadata +347 -126
  344. data/.yardopts +0 -4
  345. data/VERSION +0 -1
  346. data/ext/audio.cpp +0 -723
  347. data/ext/color.cpp +0 -159
  348. data/ext/drawable.cpp +0 -91
  349. data/ext/event.cpp +0 -460
  350. data/ext/font.cpp +0 -190
  351. data/ext/image.cpp +0 -733
  352. data/ext/input.cpp +0 -74
  353. data/ext/ray.cpp +0 -168
  354. data/ext/ray.hpp +0 -356
  355. data/ext/rect.cpp +0 -245
  356. data/ext/shader.cpp +0 -169
  357. data/ext/shape.cpp +0 -409
  358. data/ext/sprite.cpp +0 -306
  359. data/ext/text.cpp +0 -181
  360. data/ext/vector.cpp +0 -215
  361. data/guide.md +0 -619
  362. data/lib/ray/input.rb +0 -10
  363. data/lib/ray/music_set.rb +0 -37
  364. data/lib/ray/rmagick.rb +0 -41
  365. data/lib/ray/shape.rb +0 -132
  366. data/lib/ray/sound_set.rb +0 -37
  367. data/samples/opengl/binding.rb +0 -38
  368. data/test/ray_test.rb +0 -25
  369. data/test/shape_test.rb +0 -101
  370. data/yard_ext.rb +0 -63
@@ -0,0 +1,12 @@
1
+ module Ray
2
+ class Music
3
+ def initialize(filename = nil)
4
+ open(filename) if filename
5
+ end
6
+
7
+ alias time= seek
8
+
9
+ alias position pos
10
+ alias position= pos=
11
+ end
12
+ end
@@ -0,0 +1,77 @@
1
+ module Ray
2
+ class Polygon < Drawable
3
+ include Enumerable
4
+
5
+ # One of the points contained in a polygon.
6
+ class Point
7
+ def initialize(polygon, id)
8
+ @polygon, @id = polygon, id
9
+ end
10
+
11
+ # @return [Ray::Vector2] Position of the point.
12
+ def pos
13
+ @polygon.pos_of(@id)
14
+ end
15
+
16
+ # @return [Color] Color of the point
17
+ def color
18
+ @polygon.color_of(@id)
19
+ end
20
+
21
+ # @return [Color] Outline color of the point
22
+ def outline
23
+ @polygon.outline_of(@id)
24
+ end
25
+
26
+ # Sets the position of the point
27
+ def pos=(pos)
28
+ @polygon.set_pos_of(@id, pos)
29
+ end
30
+
31
+ # Sets the color of the point
32
+ def color=(color)
33
+ @polygon.set_color_of(@id, color)
34
+ end
35
+
36
+ # Sets the outline color of the point
37
+ def outline=(outline)
38
+ @polygon.set_outline_of(@id, outline)
39
+ end
40
+
41
+ def inspect
42
+ "#<#{self.class} polygon=#{polygon} id=#{id} pos=#{pos} color=#{color} \
43
+ outline=#{outline}>"
44
+ end
45
+
46
+ attr_reader :polygon, :id
47
+ end
48
+
49
+ # @param [Integer, nil] size Size of the polygon. If non nil, size points
50
+ # will be added to the polygon and then yielded.
51
+ #
52
+ # @example
53
+ # polygon = Ray::Polygon.new
54
+ #
55
+ # other_polygon = Ray::Polygon.new(10) do |point|
56
+ # point.pos = [point.id, point.id]
57
+ # point.color = Ray::Color.new(point.id * 10, 0, 0)
58
+ # end
59
+ def initialize(size = nil, &block)
60
+ if size
61
+ resize size
62
+ each(&block) if block
63
+ end
64
+ end
65
+
66
+ # @yieldparam [Ray::Polygon::Point] point Each point of the polygon
67
+ def each
68
+ 0.upto(size - 1) { |n| yield self[n] }
69
+ end
70
+
71
+ # @return [Ray::Polygon::Point] idth point of the polygon (id should be less
72
+ # than size)
73
+ def [](id)
74
+ Point.new(self, id)
75
+ end
76
+ end
77
+ end
@@ -1,39 +1,71 @@
1
1
  require 'enumerator'
2
2
  require 'iconv'
3
3
 
4
+ # Change PATH so as to find DLLs on windows.
5
+ if RUBY_PLATFORM =~ /mingw/
6
+ ext_dir = File.expand_path("../../ext", File.dirname(__FILE__))
7
+ ENV["PATH"] = ENV["PATH"] + File::PATH_SEPARATOR + ext_dir
8
+ end
9
+
4
10
  require 'ray_ext'
5
11
 
6
12
  module Ray
7
- BIG_ENDIAN = ([1].pack("I") == [1].pack("N"))
8
- INTERNAL_ENCODING = BIG_ENDIAN ? "UTF-32BE" : "UTF-32LE"
13
+ # True for big endian
14
+ BigEndian = ([1].pack("I") == [1].pack("N"))
15
+
16
+ # Encoding used by Ray for text_entered events.
17
+ InternalEncoding = BigEndian ? "UTF-32BE" : "UTF-32LE"
9
18
  end
10
19
 
11
20
  require 'ray/resource_set'
12
21
 
13
- require 'ray/color'
14
- require 'ray/rect'
15
22
  require 'ray/vector'
23
+ require 'ray/rect'
24
+ require 'ray/matrix'
25
+ require 'ray/view'
26
+ require 'ray/color'
27
+ require 'ray/vertex'
28
+ require 'ray/gl/vertex'
29
+ require 'ray/gl/int_array'
30
+ require 'ray/buffer_renderer'
31
+ require 'ray/shader'
32
+
16
33
  require 'ray/image'
17
- require 'ray/shape'
18
- require 'ray/drawable'
19
34
  require 'ray/text_helper'
20
35
  require 'ray/font'
36
+
37
+ require 'ray/target'
38
+ require 'ray/window'
39
+ require 'ray/image_target'
40
+
41
+ require 'ray/event'
42
+
43
+ require 'ray/drawable'
44
+ require 'ray/polygon'
45
+ require 'ray/sprite'
21
46
  require 'ray/text'
47
+ require 'ray/turtle'
48
+
22
49
  require 'ray/audio'
23
- require 'ray/input'
50
+ require 'ray/sound_buffer'
51
+ require 'ray/sound'
52
+ require 'ray/music'
24
53
 
25
54
  require 'ray/image_set'
26
55
  require 'ray/font_set'
27
- require 'ray/sound_set'
28
- require 'ray/music_set'
29
-
30
- require 'ray/turtle'
56
+ require 'ray/sound_buffer_set'
31
57
 
32
58
  require 'ray/dsl'
33
59
  require 'ray/helper'
34
60
 
35
- require 'ray/sprite'
61
+ require 'ray/animation'
62
+ require 'ray/animation_list'
36
63
 
37
- require 'ray/scene'
38
64
  require 'ray/scene_list'
65
+ require 'ray/scene'
66
+
39
67
  require 'ray/game'
68
+
69
+ at_exit do # Cleaning Ray
70
+ Ray.send :_clean_up!
71
+ end
@@ -1,9 +1,15 @@
1
1
  module Ray
2
2
  class Rect
3
+ class << self
4
+ alias :[] :new
5
+ end
6
+
3
7
  def inspect
4
- "#<#{self.class} {{#{x}, #{y}}, {#{w}, #{h}}}>"
8
+ "(#{pos}, #{size})"
5
9
  end
6
10
 
11
+ alias :to_s :inspect
12
+
7
13
  # @return [true, false] True if the receiver is inside the rect.
8
14
  # (false if they just collide)
9
15
  def inside?(rect)
@@ -54,6 +60,11 @@ module Ray
54
60
  Ray::Vector2[x + w, y + h]
55
61
  end
56
62
 
63
+ # @return [Ray::Vector2]
64
+ def center
65
+ Ray::Vector2[x + w / 2, y + h / 2]
66
+ end
67
+
57
68
  # @return [true, false] True if the two rects are equal
58
69
  def ==(rect)
59
70
  return false unless rect.is_a? Rect
@@ -91,14 +102,14 @@ module Ray
91
102
  end
92
103
 
93
104
  class Array
94
- # Converts an Array to a rect
105
+ # @return [Ray::Rect] Converts an array to a rect.
95
106
  def to_rect
96
107
  Ray::Rect.new(*self)
97
108
  end
98
109
  end
99
110
 
100
111
  class Hash
101
- # Converts a Hash to a rect
112
+ # @return [Ray::Rect] Converts a hash into a rect.
102
113
  def to_rect
103
114
  Ray::Rect.new(self)
104
115
  end
@@ -18,11 +18,9 @@ module Ray
18
18
  module ResourceSet
19
19
  # Registers a block for handling some resources.
20
20
  def add_set(regexp, &block)
21
- set_hash[regexp] = Hash.new do |hash, args|
22
- regexp =~ args.first
23
-
24
- block_args = $~.captures + args[1..-1]
25
- hash[args] = block.call(*block_args)
21
+ set_hash[regexp] = Hash.new do |hash, key|
22
+ key =~ regexp
23
+ hash[key] = yield(*$~.captures)
26
24
  end
27
25
  end
28
26
 
@@ -30,62 +28,47 @@ module Ray
30
28
  (@set_hash ||= {})
31
29
  end
32
30
 
33
- # @return The object corresponding to a given list of parameters.
34
- def [](value, *params)
35
- if params.size != required_argument_count
36
- raise(ArgumentError, "wrong number of arguments (%d for %d)" %
37
- [params.size, required_argument_count])
38
- end
39
-
31
+ # @return The object corresponding to a given string.
32
+ def [](key)
40
33
  set_hash.each do |regexp, hash|
41
- return hash[([value] + params)] if regexp =~ value
34
+ return hash[key] if regexp =~ key
42
35
  end
43
36
 
44
- missing_pattern(value, *params)
37
+ missing_pattern(key)
45
38
  end
46
39
 
47
40
  # Selects objects matching a condition.
48
41
  #
49
- # @yield *arguments, object
50
- # @yieldparam *arguments All the arguments used to access that object
42
+ # @yield key, object
43
+ # @yieldparam key the key used to refer to the resource
51
44
  # @yieldparam object the actual resource
52
- def select!(&block)
45
+ def select!
53
46
  return Enumerator.new(self, :select!) unless block_given?
54
47
 
55
48
  set_hash.each do |regexp, hash|
56
- hash.delete_if do |key, val|
57
- !block.call(*(key + [val]))
58
- end
49
+ hash.delete_if { |key, val| !yield(key, val) }
59
50
  end
60
51
  end
61
52
 
62
53
  # Removes all the objects from the array but those for which
63
54
  # block returned true.
64
55
  #
65
- # @yield *arguments, object (See #select!)
66
- def reject!(&block)
56
+ # @yield key, object (See #select!)
57
+ def reject!
67
58
  return Enumerator.new(self, :reject!) unless block_given?
68
- select! { |*args| !block.call(*args) }
59
+ select! { |key, obj| !yield(key, obj) }
69
60
  end
70
61
 
71
62
  alias :delete_if :reject!
72
63
 
73
- # Sets the required argument count. The number of arguments passed to []
74
- # must be equal to this + 1 (the first argument isn't counted and is required)
75
- #
76
- # Defaulted to 0.
77
- def need_argument_count(n)
78
- @set_argument_count = n
79
- end
80
-
81
- # Returns the required argument count.
82
- def required_argument_count
83
- @set_argument_count ||= 0
64
+ # Removes all the items from the resource set
65
+ def clear
66
+ set_hash.each { |regexp, hash| hash.clear }
84
67
  end
85
68
 
86
69
  # Method called when a string isn't matched by any pattern.
87
70
  # Raises a NoPatternError excpetion by default.
88
- def missing_pattern(string, *args)
71
+ def missing_pattern(string)
89
72
  raise NoPatternError, "#{string.inspect} not macthed by any pattern"
90
73
  end
91
74
  end
@@ -23,7 +23,7 @@ module Ray
23
23
  #
24
24
  # Or you can override render:
25
25
  # def render(win)
26
- # # Do drawing here
26
+ # # Do draw ing here
27
27
  # end
28
28
  #
29
29
  # Once your scene is loaded, you'll probably want to clean it up (set some
@@ -65,12 +65,6 @@ module Ray
65
65
  # self.loops_per_second = 30 # will sleep some time after each loop
66
66
  # This defaults to 60.
67
67
  #
68
- # == Lazy rendering
69
- # By default, the scene is always rendered. You can enable lazy rendering:
70
- # self.lazy_rendering = true
71
- # In this case, the scene will render in its own Image when requested (using
72
- # #need_render!), and that image will be drawn in every loop.
73
- #
74
68
  # @see Ray::DSL::EventTranslator
75
69
  class Scene
76
70
  include Ray::Helper
@@ -78,15 +72,25 @@ module Ray
78
72
  class << self
79
73
  # Registers a scene to a game object, used for subclasses.
80
74
  def bind(game)
81
- game.scene(scene_name, self)
75
+ game.scene(@scene_name || snake_cased_name, self)
82
76
  end
83
77
 
84
78
  # @overload scene_name
85
79
  # @return [Symbol] the name of the scene
86
80
  # @overload scene_name(value)
87
- # Sets the name of the scene
88
- def scene_name(val = nil)
89
- @scene_name = val || @scene_name
81
+ # Sets the name of the scene. Defaulted to the snake cased name of the
82
+ # scene.
83
+ def scene_name(val)
84
+ @scene_name = val
85
+ end
86
+
87
+ private
88
+ def snake_cased_name
89
+ if name
90
+ last_part = name.split("::").last
91
+ last_part[0] = last_part[0, 1].downcase
92
+ last_part.gsub(/[A-Z]/) { |letter| "_#{letter.downcase}" }.to_sym
93
+ end
90
94
  end
91
95
  end
92
96
 
@@ -100,10 +104,9 @@ module Ray
100
104
  @scene_render_block = nil
101
105
  @scene_clean_block = nil
102
106
 
103
- @scene_need_render = true
104
107
  @scene_loops_per_second = 60
105
108
 
106
- @scene_shader = nil
109
+ @scene_animations = Ray::AnimationList.new
107
110
  end
108
111
 
109
112
  def register_events
@@ -132,42 +135,7 @@ module Ray
132
135
  until @scene_exit
133
136
  loop_start = Time.now
134
137
 
135
- ev = Ray::Event.new
136
- until ev.type == Ray::Event::TYPE_NOEVENT
137
- DSL::EventTranslator.translate_event(ev).each do |args|
138
- raise_event(*args)
139
- end
140
-
141
- ev.poll!
142
- end
143
-
144
- @scene_always_block.call if @scene_always_block
145
-
146
- listener_runner.run
147
-
148
- @scene_window.fill(Ray::Color.none)
149
-
150
- if lazy_rendering?
151
- unless @scene_lazy_cache
152
- @scene_lazy_cache = Ray::Image.new(:w => @scene_window.w,
153
- :h => @scene_window.h)
154
- end
155
-
156
- if @scene_need_render
157
- @scene_lazy_cache.fill Ray::Color.none
158
-
159
- render @scene_lazy_cache
160
- @scene_lazy_cache.update
161
-
162
- @scene_need_render = false
163
- end
164
-
165
- @scene_lazy_cache.draw(:on => @scene_window, :shader => @scene_shader)
166
- else
167
- render @scene_window
168
- end
169
-
170
- @scene_window.update
138
+ run_tick
171
139
 
172
140
  if @scene_loops_per_second
173
141
  ellapsed_time = Time.now - loop_start
@@ -180,6 +148,23 @@ module Ray
180
148
  clean_up
181
149
  end
182
150
 
151
+ # Runs one tick of the scene, checking for events, running the event loop,
152
+ # and drawing on the window.
153
+ #
154
+ # @param [true, false] check_events True to check for events
155
+ def run_tick(check_events = true)
156
+ collect_events if check_events
157
+
158
+ @scene_always_block.call if @scene_always_block
159
+ listener_runner.run
160
+
161
+ @scene_animations.update
162
+
163
+ @scene_window.clear Ray::Color.none
164
+ render @scene_window
165
+ @scene_window.update
166
+ end
167
+
183
168
  # Runs another scene over the current one.
184
169
  # This method will return when the scene is done running.
185
170
  def run_scene(name, *args)
@@ -222,11 +207,6 @@ module Ray
222
207
  @scene_always_block = block
223
208
  end
224
209
 
225
- # Marks the scene should be redrawn.
226
- def need_render!
227
- @scene_need_render = true
228
- end
229
-
230
210
  # Registers the block to draw the scene.
231
211
  #
232
212
  # If no block is given, renders the scen on the image passed as
@@ -248,11 +228,6 @@ module Ray
248
228
  exit
249
229
  end
250
230
 
251
- # @see Ray::Game#resize_window
252
- def resize_window(w, h)
253
- game.resize_window(w, h)
254
- end
255
-
256
231
  # Cleans the scene or registers a block to clean it.
257
232
  def clean_up(&block)
258
233
  if block_given?
@@ -295,33 +270,20 @@ module Ray
295
270
  alias :frames_per_second :loops_per_second
296
271
  alias :frames_per_second= :loops_per_second=
297
272
 
298
- def lazy_rendering
299
- @scene_lazy_rendering ||= false
300
- end
301
-
302
- alias :lazy_rendering? :lazy_rendering
303
-
304
- def lazy_rendering=(val)
305
- @scene_lazy_rendering = val
306
-
307
- unless lazy_rendering?
308
- @scene_lazy_cache = nil
309
- end
310
- end
311
-
312
273
  # The arguments passed to the scene with push_scene
313
274
  attr_accessor :scene_arguments
314
275
 
315
- # @return [Ray::Shader] The shader used for this scene.
316
- # It will be used when drawing the scene on the window.
317
- # This won't do anything unless lazy_rendering is enabled.
318
- def shader
319
- @scene_shader
276
+ # @return [Ray::AnimationList] An animation list automatically updated by
277
+ # the scene.
278
+ def animations
279
+ @scene_animations
320
280
  end
321
281
 
322
- # Sets the shader used for this scene
323
- def shader=(value)
324
- @scene_shader = value
282
+ private
283
+ def collect_events
284
+ window.each_event do |ev|
285
+ raise_event(*DSL::EventTranslator.translate_event(ev))
286
+ end
325
287
  end
326
288
  end
327
289
  end