ray 0.0.1 → 0.1.0.pre1

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -1,145 +0,0 @@
1
- #include "ray.h"
2
-
3
- VALUE ray_cJoystick = Qnil;
4
-
5
- SDL_Joystick *ray_rb2joystick(VALUE object) {
6
- if (!RAY_IS_A(object, ray_cJoystick)) {
7
- rb_raise(rb_eTypeError, "Can't convert %s into Ray::Joystick",
8
- RAY_OBJ_CLASSNAME(object));
9
- }
10
-
11
- ray_joystick *joy = NULL;
12
- Data_Get_Struct(object, ray_joystick, joy);
13
-
14
- if (!joy->joystick)
15
- rb_raise(rb_eRuntimeError, "Trying to get a joystick that is not opened.");
16
-
17
- return joy->joystick;
18
- }
19
-
20
- void ray_free_joystick(ray_joystick *ptr) {
21
- if (ptr->joystick) SDL_JoystickClose(ptr->joystick);
22
- free(ptr);
23
- }
24
-
25
- VALUE ray_alloc_joystick(VALUE self) {
26
- ray_joystick *ptr = malloc(sizeof(ray_joystick));
27
- ptr->joystick = NULL;
28
-
29
- return Data_Wrap_Struct(self, NULL, ray_free_joystick, ptr);
30
- }
31
-
32
- /*
33
- Creates a new joystick, and open it. You don't need to close it explictly,
34
- although doing multiple call to
35
- @param [Integer] stick_id Identifier for this stick. Should be smaller
36
- than Ray::Joystick.count.
37
- */
38
- VALUE ray_init_joystick(VALUE self, VALUE stick_id) {
39
- rb_iv_set(self, "@id", stick_id);
40
- rb_funcall2(self, RAY_METH("open"), 0, NULL);
41
- return Qnil;
42
- }
43
-
44
- /* @return [Integer] the number of joysticks available */
45
- VALUE ray_joystick_count(VALUE self) {
46
- return INT2FIX(SDL_NumJoysticks());
47
- }
48
-
49
- /*
50
- @return [true, false] True if events coming from the joystick are handled.
51
- */
52
- VALUE ray_joystick_handle_event(VALUE self) {
53
- return SDL_JoystickEventState(SDL_QUERY) ? Qtrue : Qfalse;
54
- }
55
-
56
- /*
57
- Sets whether we should handle events coming from the joystick.
58
- */
59
- VALUE ray_joystick_set_handle_event(VALUE self, VALUE val) {
60
- SDL_JoystickEventState(RTEST(val) ? SDL_ENABLE : SDL_DISABLE);
61
- return val;
62
- }
63
-
64
- /* Opens the joystick */
65
- VALUE ray_joystick_open(VALUE self) {
66
- int id = NUM2INT(rb_iv_get(self, "@id"));
67
- SDL_Joystick *ptr = SDL_JoystickOpen(id);
68
-
69
- if (!ptr) {
70
- rb_raise(rb_eArgError, "Failled to open joystick %d (%s)",
71
- id, SDL_GetError());
72
- }
73
-
74
- ray_joystick *joy = NULL;
75
- Data_Get_Struct(self, ray_joystick, joy);
76
-
77
- joy->joystick = ptr;
78
-
79
- return self;
80
- }
81
-
82
- /* @return [true, false] true if the joystick is closed */
83
- VALUE ray_joystick_closed(VALUE self) {
84
- ray_joystick *joy = NULL;
85
- Data_Get_Struct(self, ray_joystick, joy);
86
-
87
- return joy->joystick == NULL ? Qtrue : Qfalse;
88
- }
89
-
90
- /* Closes the joystick. Can be called even if closed? is true. */
91
- VALUE ray_joystick_close(VALUE self) {
92
- if (ray_joystick_closed(self) == Qtrue)
93
- return Qnil;
94
-
95
- SDL_JoystickClose(ray_rb2joystick(self));
96
-
97
- ray_joystick *joy = NULL;
98
- Data_Get_Struct(self, ray_joystick, joy);
99
-
100
- joy->joystick = NULL;
101
-
102
- return Qnil;
103
- }
104
-
105
- /* @return [Integer] The number of buttons on this joystick */
106
- VALUE ray_joystick_button_count(VALUE self) {
107
- return INT2FIX(SDL_JoystickNumButtons(ray_rb2joystick(self)));
108
- }
109
-
110
- /* @return [Integer] The number of axes on this joystick */
111
- VALUE ray_joystick_axe_count(VALUE self) {
112
- return INT2FIX(SDL_JoystickNumAxes(ray_rb2joystick(self)));
113
- }
114
-
115
- /* @return [Integer] The number of trackballs on this joystick */
116
- VALUE ray_joystick_ball_count(VALUE self) {
117
- return INT2FIX(SDL_JoystickNumBalls(ray_rb2joystick(self)));
118
- }
119
-
120
- /* @return [Integer] The number of hats on this joystick */
121
- VALUE ray_joystick_hat_count(VALUE self) {
122
- return INT2FIX(SDL_JoystickNumHats(ray_rb2joystick(self)));
123
- }
124
-
125
- void Init_ray_joystick() {
126
- ray_cJoystick = rb_define_class_under(ray_mRay, "Joystick", rb_cObject);
127
- rb_define_alloc_func(ray_cJoystick, ray_alloc_joystick);
128
- rb_define_method(ray_cJoystick, "initialize", ray_init_joystick, 1);
129
-
130
- rb_define_module_function(ray_cJoystick, "count", ray_joystick_count, 0);
131
-
132
- rb_define_module_function(ray_cJoystick, "handle_event=",
133
- ray_joystick_set_handle_event, 1);
134
- rb_define_module_function(ray_cJoystick, "handle_event",
135
- ray_joystick_handle_event, 0);
136
-
137
- rb_define_method(ray_cJoystick, "open", ray_joystick_open, 0);
138
- rb_define_method(ray_cJoystick, "close", ray_joystick_close, 0);
139
- rb_define_method(ray_cJoystick, "closed?", ray_joystick_closed, 0);
140
-
141
- rb_define_method(ray_cJoystick, "button_count", ray_joystick_button_count, 0);
142
- rb_define_method(ray_cJoystick, "axe_count", ray_joystick_axe_count, 0);
143
- rb_define_method(ray_cJoystick, "hat_count", ray_joystick_hat_count, 0);
144
- rb_define_method(ray_cJoystick, "ball_count", ray_joystick_ball_count, 0);
145
- }
data/ext/ray.c DELETED
@@ -1,489 +0,0 @@
1
- #include "ray.h"
2
-
3
- #ifdef HAVE_COCOA
4
- extern void ray_osx_init();
5
- extern void ray_osx_close();
6
- #endif
7
-
8
- VALUE ray_mRay = Qnil;
9
-
10
- /*
11
- @overload init(opts = {})
12
- Inits Ray.
13
-
14
- @option opts [Integer] :frequency Audio frequency (defaults to 22050)
15
- @option opts [Integer] :format A constant declared in Ray::Audio
16
- @option opts [true] :mono or :stereo Set :mono or :stereo to true to enable
17
- one of them.
18
- @option opts [Integer] :chunk_size Size of a chunk (defaults to 1024)
19
- */
20
- VALUE ray_init(int argc, VALUE *argv, VALUE self) {
21
- VALUE hash = Qnil;
22
- rb_scan_args(argc, argv, "01", &hash);
23
-
24
- #ifdef HAVE_COCOA
25
- ray_osx_init();
26
- #endif
27
-
28
- if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_JOYSTICK) == -1) {
29
- rb_raise(rb_eRuntimeError, "Couldn't init the SDL (%s)",
30
- SDL_GetError());
31
- }
32
-
33
- #ifdef HAVE_SDL_TTF
34
- if (!TTF_WasInit()) {
35
- if (TTF_Init() == -1) {
36
- rb_raise(rb_eRuntimeError, "Couldn't init SDL_TTF (%s)",
37
- TTF_GetError());
38
- }
39
- }
40
- #endif
41
-
42
- #ifdef HAVE_SDL_MIXER
43
- int frequency = MIX_DEFAULT_FREQUENCY;
44
- uint16_t format = MIX_DEFAULT_FORMAT;
45
- int channels = MIX_DEFAULT_CHANNELS;
46
- int chunk_size = 1024;
47
-
48
- if (!NIL_P(hash)) {
49
- VALUE rb_freq, rb_format, rb_chunk_size;
50
- if (!NIL_P(rb_freq = rb_hash_aref(hash, RAY_SYM("frequency"))))
51
- frequency = NUM2INT(rb_freq);
52
-
53
- if (!NIL_P(rb_format = rb_hash_aref(hash, RAY_SYM("format"))))
54
- format = NUM2INT(rb_format);
55
-
56
- if (RTEST(rb_hash_aref(hash, RAY_SYM("mono"))))
57
- channels = 1;
58
- else if (RTEST(rb_hash_aref(hash, RAY_SYM("stereo"))))
59
- channels = 2;
60
-
61
- if (!NIL_P(rb_chunk_size = rb_hash_aref(hash, RAY_SYM("chunk_size"))))
62
- chunk_size = NUM2INT(rb_chunk_size);
63
- }
64
-
65
- if (Mix_OpenAudio(frequency, format, channels, chunk_size) == -1) {
66
- rb_raise(rb_eRuntimeError, "Couldn't open audio (%s)",
67
- Mix_GetError());
68
- }
69
- #endif
70
-
71
- return Qnil;
72
- }
73
-
74
- /* Stops ray */
75
- VALUE ray_stop(VALUE self) {
76
- #ifdef HAVE_SDL_MIXER
77
- Mix_CloseAudio();
78
- #endif
79
-
80
- #ifdef HAVE_SDL_TTF
81
- /*
82
- Freeing a font after TTF_Quit causes a segfault, but, Ruby being
83
- garbage called, we can't be sure a font won't be freed later.
84
- */
85
-
86
- /* TTF_Quit(); */
87
- #endif
88
-
89
- SDL_Quit();
90
- /* The pool is never drained on OSX */
91
- return Qnil;
92
- }
93
-
94
- ray_video_mode ray_parse_video_mode(VALUE hash) {
95
- VALUE width = rb_hash_aref(hash, RAY_SYM("width"));
96
- VALUE height = rb_hash_aref(hash, RAY_SYM("height"));
97
-
98
- if (NIL_P(width)) width = rb_hash_aref(hash, RAY_SYM("w"));
99
- if (NIL_P(height)) height = rb_hash_aref(hash, RAY_SYM("h"));
100
-
101
- if (NIL_P(width) || NIL_P(height))
102
- rb_raise(rb_eArgError, "Missing parameter: width or height");
103
-
104
- VALUE bitsperpixel = rb_hash_aref(hash, RAY_SYM("bits_per_pixel"));
105
- if (NIL_P(bitsperpixel)) bitsperpixel = rb_hash_aref(hash, RAY_SYM("bpp"));
106
-
107
- if (NIL_P(bitsperpixel))
108
- bitsperpixel = INT2FIX(32);
109
-
110
- uint32_t flags = 0;
111
- if (RTEST(rb_hash_aref(hash, RAY_SYM("sw_surface"))))
112
- flags |= SDL_SWSURFACE;
113
- else
114
- flags |= SDL_HWSURFACE; /* even if hwsurface was false and not nil */
115
-
116
- if (RTEST(rb_hash_aref(hash, RAY_SYM("async_blit"))))
117
- flags |= SDL_ASYNCBLIT;
118
-
119
- if (!(flags & SDL_SWSURFACE) &&
120
- RTEST(rb_hash_aref(hash, RAY_SYM("double_buf")))) {
121
- flags |= SDL_DOUBLEBUF;
122
- }
123
-
124
- if (RTEST(rb_hash_aref(hash, RAY_SYM("fullscreen"))))
125
- flags |= SDL_FULLSCREEN;
126
-
127
- if (RTEST(rb_hash_aref(hash, RAY_SYM("no_frame"))))
128
- flags |= SDL_NOFRAME;
129
-
130
- if (RTEST(rb_hash_aref(hash, RAY_SYM("resizable"))))
131
- flags |= SDL_RESIZABLE;
132
-
133
- ray_video_mode mode = {
134
- NUM2INT(width),
135
- NUM2INT(height),
136
-
137
- NUM2INT(bitsperpixel),
138
-
139
- flags
140
- };
141
-
142
- return mode;
143
- }
144
-
145
- /*
146
- @overload create_window(hash)
147
- Creates a new window.
148
-
149
- If both hw_surface and sws_urface are false, hw_surface
150
- will be considered as true. :sw_surface should be true
151
- if you want to acess
152
-
153
- @return [Ray::Image] An image representing the window
154
-
155
- @option hash [Integer] :width Width of the window
156
- @option hash [Integer] :height Height of the window
157
-
158
- @option hash [Integer] :w Alias for width
159
- @option hash [Integer] :h Alias for height
160
-
161
- @option hash [Integer] :bits_per_pixel Bits per pixel. Valid values are
162
- 8, 15, 16, 24, and 32.
163
- @option hash [Integer] :bpp Alias for bits_per_pixel
164
-
165
- @option hash [true, false] :hw_surface Creates the surface in video memory
166
- (default)
167
- @option hash [true, false] :sw_surface Creates the surface in system memory
168
- @option hash [true, false] :async_blit Enables asynchronous updates of the
169
- the surface
170
- @option hash [true, false] :double_buf Enables double buffering. Ignored
171
- if sw_surface is set.
172
- @option hash [true, false] :fullscreen Creates a full screen window.
173
- @option hash [true, false] :resizable Creates a resizable window.
174
- @option hash [true, false] :no_frame Disables window decoration if
175
- possible.
176
- */
177
- VALUE ray_create_window(VALUE self, VALUE hash) {
178
- ray_video_mode mode = ray_parse_video_mode(hash);
179
- SDL_Surface *screen = SDL_SetVideoMode(mode.width, mode.height,
180
- mode.bpp, mode.flags);
181
-
182
- if (!screen) {
183
- rb_raise(rb_eRuntimeError, "Could not create the window (%s)",
184
- SDL_GetError());
185
- }
186
-
187
- return ray_create_image(screen);
188
- }
189
-
190
- /*
191
- @overload can_use_mode?(hash)
192
- @param [Hash] hash Same options as in create_window
193
- @return [true, false] True if the video mode described by hash
194
- can be used.
195
- */
196
- VALUE ray_can_use_mode(VALUE self, VALUE hash) {
197
- ray_video_mode mode = ray_parse_video_mode(hash);
198
-
199
- int res = SDL_VideoModeOK(mode.width, mode.height, mode.bpp, mode.flags);
200
- return res ? Qtrue : Qfalse;
201
- }
202
-
203
- /*
204
- @overload icon=(icon)
205
- Sets the window icon
206
- @param [Ray::Image] icon The icon to display
207
- */
208
- VALUE ray_set_icon(VALUE self, VALUE icon) {
209
- SDL_WM_SetIcon(ray_rb2surface(icon), NULL);
210
- return icon;
211
- }
212
-
213
- /* @return [String, nil] The window title */
214
- VALUE ray_window_title(VALUE self) {
215
- char *title = NULL;
216
- SDL_WM_GetCaption(&title, NULL);
217
-
218
- if (!title)
219
- return Qnil;
220
- return rb_str_new2(title);
221
- }
222
-
223
- /*
224
- @overload window_title=(title)
225
- Sets the window title
226
- */
227
- VALUE ray_set_window_title(VALUE self, VALUE title) {
228
- char *icon = NULL;
229
-
230
- if (!NIL_P(title)) title = rb_String(title);
231
-
232
- SDL_WM_GetCaption(NULL, &icon);
233
- SDL_WM_SetCaption(NIL_P(title) ? NULL : StringValuePtr(title), icon);
234
-
235
- return title;
236
- }
237
-
238
- /* @return [String, nil] The window text icon */
239
- VALUE ray_text_icon(VALUE self) {
240
- char *icon = NULL;
241
- SDL_WM_GetCaption(NULL, &icon);
242
-
243
- if (!icon)
244
- return Qnil;
245
- return rb_str_new2(icon);
246
- }
247
-
248
- /*
249
- @overload text_icon=(val)
250
- Sets the window text icon
251
- */
252
- VALUE ray_set_text_icon(VALUE self, VALUE icon) {
253
- char *title;
254
-
255
- if (!NIL_P(icon)) icon = rb_String(icon);
256
-
257
- SDL_WM_GetCaption(&title, NULL);
258
- SDL_WM_SetCaption(title, NIL_P(icon) ? NULL : StringValuePtr(icon));
259
-
260
- return icon;
261
- }
262
-
263
- /*
264
- @return [true, false] True if the input is grabbed, which means the mouse
265
- is confined in the window, and keyboard input is sent
266
- directly to the window.
267
- */
268
- VALUE ray_grab_input(VALUE self) {
269
- SDL_GrabMode mode = SDL_WM_GrabInput(SDL_GRAB_QUERY);
270
- return (mode == SDL_GRAB_ON) ? Qtrue : Qfalse;
271
- }
272
-
273
- /*
274
- @overload grab_input=(grab)
275
- Sets the grab input to true or false
276
- */
277
- VALUE ray_set_grab_input(VALUE self, VALUE grab) {
278
- SDL_WM_GrabInput(RTEST(grab) ? SDL_GRAB_ON : SDL_GRAB_OFF);
279
- return grab;
280
- }
281
-
282
- /* @return [Ray::Image, nil] The current screen, created by create_window */
283
- VALUE ray_screen(VALUE self) {
284
- SDL_Surface *surf = SDL_GetVideoSurface();
285
-
286
- if (!surf)
287
- return Qnil;
288
- return ray_create_image(surf);
289
- }
290
-
291
- /* @return [true, false] true if Ray supports other image formats than BMP */
292
- VALUE ray_has_image_support(VALUE self) {
293
- #ifdef HAVE_SDL_IMAGE
294
- return Qtrue;
295
- #else
296
- return Qfalse;
297
- #endif
298
- }
299
-
300
- /* @return [true, false] true if Ray supports graphical effect like rotations */
301
- VALUE ray_has_gfx_support(VALUE self) {
302
- #ifdef HAVE_SDL_GFX
303
- return Qtrue;
304
- #else
305
- return Qfalse;
306
- #endif
307
- }
308
-
309
- /* @return [true, false] true if Ray supports ttf fonts */
310
- VALUE ray_has_font_support(VALUE self) {
311
- #ifdef HAVE_SDL_TTF
312
- return Qtrue;
313
- #else
314
- return Qfalse;
315
- #endif
316
- }
317
-
318
- /* @return [true, false] true if Ray supports audio playback */
319
- VALUE ray_has_audio_support(VALUE self) {
320
- #ifdef HAVE_SDL_MIXER
321
- return Qtrue;
322
- #else
323
- return Qfalse;
324
- #endif
325
- }
326
-
327
- void Init_ray_ext() {
328
- ray_mRay = rb_define_module("Ray");
329
-
330
- rb_define_module_function(ray_mRay, "init", ray_init, -1);
331
- rb_define_module_function(ray_mRay, "stop", ray_stop, 0);
332
-
333
- rb_define_module_function(ray_mRay, "create_window", ray_create_window, 1);
334
- rb_define_module_function(ray_mRay, "can_use_mode?", ray_can_use_mode, 1);
335
- rb_define_module_function(ray_mRay, "screen", ray_screen, 0);
336
-
337
- rb_define_module_function(ray_mRay, "icon=", ray_set_icon, 1);
338
- rb_define_module_function(ray_mRay, "window_title=", ray_set_window_title,
339
- 1);
340
- rb_define_module_function(ray_mRay, "text_icon=", ray_set_text_icon, 1);
341
-
342
- rb_define_module_function(ray_mRay, "window_title", ray_window_title, 0);
343
- rb_define_module_function(ray_mRay, "text_icon", ray_text_icon, 0);
344
-
345
- rb_define_module_function(ray_mRay, "grab_input", ray_grab_input, 0);
346
- rb_define_module_function(ray_mRay, "grab_input=", ray_set_grab_input, 1);
347
-
348
- rb_define_module_function(ray_mRay, "has_image_support?",
349
- ray_has_image_support, 0);
350
- rb_define_module_function(ray_mRay, "has_gfx_support?",
351
- ray_has_gfx_support, 0);
352
- rb_define_module_function(ray_mRay, "has_font_support?",
353
- ray_has_font_support, 0);
354
- rb_define_module_function(ray_mRay, "has_audio_support?",
355
- ray_has_audio_support, 0);
356
-
357
- Init_ray_image();
358
- Init_ray_color();
359
- Init_ray_rect();
360
- Init_ray_event();
361
- Init_ray_joystick();
362
-
363
- #ifdef HAVE_SDL_TTF
364
- Init_ray_font();
365
- #endif
366
-
367
- #ifdef HAVE_SDL_MIXER
368
- Init_ray_audio();
369
- #endif
370
-
371
- #ifdef PSP
372
- Init_ray_psp();
373
- #endif
374
- }
375
-
376
- #ifdef PSP
377
-
378
- PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER | THREAD_ATTR_VFPU);
379
- PSP_HEAP_SIZE_KB(-512);
380
-
381
- #include <unistd.h>
382
-
383
- #define RGB(r, g, b) ((r) | ((g)<<8) | ((b)<<16) | (0xff<<24))
384
-
385
- VALUE ray_safe_load(VALUE self) {
386
- return rb_require("./script.rb");
387
- }
388
-
389
- int SDL_main(int argc, char *argv[]) {
390
- ruby_init();
391
-
392
- ruby_incpush("./ruby/1.8");
393
- ruby_incpush("./ruby/site_ruby");
394
- ruby_incpush("./ruby/site_ruby/1.8");
395
-
396
- ruby_incpush("ms0:/ruby/1.8");
397
- ruby_incpush("ms0:/ruby/site_ruby");
398
- ruby_incpush("ms0:/ruby/site_ruby/1.8");
399
-
400
- ruby_incpush(".");
401
-
402
- ruby_script("ray");
403
-
404
- Init_ray_ext();
405
-
406
- int error = 0;
407
- VALUE res = rb_protect(ray_safe_load, 0, &error);
408
-
409
- if (error != 0) {
410
- pspDebugScreenInit();
411
-
412
- pspDebugScreenSetBackColor(RGB(0, 0, 0));
413
- pspDebugScreenEnableBackColor(1);
414
-
415
- pspDebugScreenClear();
416
- pspDebugScreenSetXY(0, 0);
417
-
418
- pspDebugScreenSetTextColor(RGB(255, 0, 0));
419
- pspDebugScreenPrintf("Ray - error manager\n\n\n");
420
- pspDebugScreenSetTextColor(RGB(255, 255, 255));
421
-
422
- pspDebugScreenPrintf("This is Ray's error manager.An exception ");
423
- pspDebugScreenPrintf("has been thrown, and the script ");
424
- pspDebugScreenPrintf("cannot be run. If you're the developper of");
425
- pspDebugScreenPrintf(" this application,\ncheck yout script.");
426
- pspDebugScreenPrintf(" If it seems fine to you, consider ");
427
- pspDebugScreenPrintf("filling a bug report.\n");
428
- pspDebugScreenPrintf("If you're not the developper, consider");
429
- pspDebugScreenPrintf(" contacting him.\n\n\n");
430
-
431
- pspDebugScreenSetTextColor(RGB(255, 0, 0));
432
- pspDebugScreenPrintf("Errors informations :\n\n\n");
433
- pspDebugScreenSetTextColor(RGB(255, 255, 255));
434
-
435
- // Now, we get the error.
436
- VALUE error = rb_gv_get("$!");
437
-
438
- // And the information we want to have about it.
439
- VALUE backtrace = rb_funcall(error, RAY_METH("backtrace"), 0);
440
- VALUE type = rb_funcall(error, RAY_METH("class"), 0);
441
- VALUE msg = rb_funcall(error, RAY_METH("message"), 0);
442
-
443
- type = rb_funcall(type, RAY_METH("to_s"), 0);
444
-
445
- VALUE first = rb_ary_entry(backtrace, 0);
446
-
447
- FILE *log = fopen("ray-error.log", "w");
448
- if (!log) {
449
- sceKernelExitGame();
450
- return 1;
451
- }
452
-
453
- pspDebugScreenPrintf("%s: %s: %s\n", StringValuePtr(first),
454
- StringValuePtr(type),
455
- StringValuePtr(msg));
456
- fprintf(log, "%s: %s: %s\n", StringValuePtr(first), StringValuePtr(type),
457
- StringValuePtr(msg));
458
-
459
- int i = 1;
460
- for (i = 1; i < RARRAY_LEN(backtrace); ++i) {
461
- VALUE entry = rb_ary_entry(backtrace, i);
462
- pspDebugScreenPrintf("%s\n", StringValuePtr(entry));
463
- fprintf(log, "%s\n", StringValuePtr(entry));
464
- }
465
-
466
- fclose(log);
467
-
468
- pspDebugScreenPrintf("\nThese informations can be found in ");
469
- pspDebugScreenPrintf("ray-error.log\n\n");
470
-
471
- pspDebugScreenPrintf("Press X to quit.");
472
-
473
- SceCtrlData pad;
474
-
475
- sceCtrlSetSamplingCycle(0);
476
- sceCtrlSetSamplingMode(PSP_CTRL_MODE_ANALOG);
477
- sceCtrlReadBufferPositive(&pad, 1);
478
-
479
- while (!(pad.Buttons & PSP_CTRL_CROSS))
480
- sceCtrlReadBufferPositive(&pad, 1);
481
-
482
- sceKernelExitGame();
483
- return 0;
484
- }
485
-
486
- return res;
487
- }
488
-
489
- #endif