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
@@ -0,0 +1,306 @@
1
+ #include "ray.hpp"
2
+
3
+ ray_sprite::ray_sprite():
4
+ self(Qnil)
5
+ {}
6
+
7
+ ray_sprite::~ray_sprite()
8
+ {}
9
+
10
+ void ray_sprite::copy(const ray_sprite &other) {
11
+ sprite = other.sprite;
12
+ }
13
+
14
+ void ray_sprite::set_self(VALUE new_self) {
15
+ self = new_self;
16
+ }
17
+
18
+ ray_rect ray_sprite::from_rect() const {
19
+ return RAY_RECT(sprite.GetSubRect());
20
+ }
21
+
22
+ void ray_sprite::set_from_rect(const ray_rect &rect) {
23
+ sprite.SetSubRect(RAY_INT_RECT(rect));
24
+ }
25
+
26
+ ray_vector2 ray_sprite::position() const {
27
+ return sprite.GetPosition();
28
+ }
29
+
30
+ void ray_sprite::set_position(const ray_vector2 &pos) {
31
+ sprite.SetPosition(pos);
32
+ }
33
+
34
+ float ray_sprite::angle() const {
35
+ return sprite.GetRotation();
36
+ }
37
+
38
+ void ray_sprite::set_angle(float angle) {
39
+ sprite.SetRotation(angle);
40
+ }
41
+
42
+ ray_vector2 ray_sprite::scale() const {
43
+ return sprite.GetScale();
44
+ }
45
+ void ray_sprite::set_scale(const ray_vector2 &scale) {
46
+ sprite.SetScale(scale);
47
+ }
48
+
49
+ ray_color ray_sprite::color() const {
50
+ return sprite.GetColor();
51
+ }
52
+
53
+ void ray_sprite::set_color(const ray_color &color) {
54
+ sprite.SetColor(color);
55
+ }
56
+
57
+ VALUE ray_sprite::get_shader() const {
58
+ return rb_iv_get(self, "@shader");
59
+ }
60
+
61
+ void ray_sprite::set_shader(VALUE new_shader) {
62
+ rb_iv_set(self, "@shader", new_shader);
63
+ }
64
+
65
+ VALUE ray_sprite::get_image() const {
66
+ return rb_iv_get(self, "@image");
67
+ }
68
+
69
+ void ray_sprite::set_image(VALUE new_image) {
70
+ rb_iv_set(self, "@image", new_image);
71
+
72
+ ray_image *img_ptr = ray_rb2image(new_image);
73
+ if (img_ptr->is_image())
74
+ sprite.SetImage(img_ptr->image(), true);
75
+ else
76
+ sprite.SetSubRect(sf::IntRect(0, 0, img_ptr->width(), img_ptr->height()));
77
+ }
78
+
79
+ void ray_sprite::draw_on(ray_image &target) {
80
+ ray_image *img_ptr = ray_rb2image(get_image());
81
+
82
+ sf::Image screen_copy;
83
+ if (!img_ptr->is_image()) {
84
+ if (!screen_copy.CopyScreen(ray_screen, sf::IntRect(0, 0, img_ptr->width(),
85
+ img_ptr->height()))) {
86
+ return;
87
+ }
88
+
89
+ sprite.SetImage(screen_copy);
90
+ }
91
+
92
+ sf::Shader *shader_ptr = NULL;
93
+ VALUE shader = get_shader();
94
+ if (!NIL_P(shader))
95
+ shader_ptr = ray_rb2shader(shader);
96
+
97
+ if (shader_ptr)
98
+ target.target().Draw(sprite, *shader_ptr);
99
+ else
100
+ target.target().Draw(sprite, *shader_ptr);
101
+ }
102
+
103
+ VALUE ray_cSprite = Qnil;
104
+
105
+ void ray_free_sprite(ray_sprite *ptr) {
106
+ delete ptr;
107
+ }
108
+
109
+ VALUE ray_alloc_sprite(VALUE self) {
110
+ ray_sprite *sprite = new ray_sprite;
111
+ VALUE ret = Data_Wrap_Struct(self, 0, ray_free_sprite, sprite);
112
+ sprite->set_self(ret);
113
+
114
+ return ret;
115
+ }
116
+
117
+ ray_sprite *ray_rb2sprite(VALUE obj) {
118
+ if (!RAY_IS_A(obj, ray_cSprite)) {
119
+ rb_raise(rb_eTypeError, "Can't convert %s into Ray::Sprite",
120
+ RAY_OBJ_CLASSNAME(obj));
121
+ }
122
+
123
+ ray_sprite *sprite;
124
+ Data_Get_Struct(obj, ray_sprite, sprite);
125
+
126
+ return sprite;
127
+ }
128
+
129
+ /*
130
+ @overload initialize(image, opts = {})
131
+ Creates a sprite.
132
+
133
+ @param [String, Ray::Image] The image this object will wrap;
134
+ @option opts [Ray::Vecor2, #to_Vector2] :at Position of the sprite
135
+ (defaults to 0,0)
136
+ @option opts [Ray::Rect, Array<Integer>] :rect Rect of the image which will
137
+ be drawn (defaults to the
138
+ whole image)
139
+ @option opts [Float] :angle The angle which will be used to draw the image
140
+ in degrees. Defaults to 0.
141
+ @option opts [Ray::Vector2] :zoom The zoom level which will be used to draw the image.
142
+ @option opts [Ray::Vector2] :scale Alias for :zoom
143
+ @option opts [Ray::Shader] :shader Shader used when drawing the sprite
144
+ @option opts [Ray::Color] :color Color used, multiplying each pixel of the sprite.
145
+ */
146
+ VALUE ray_init_sprite(int argc, VALUE *argv, VALUE self) {
147
+ ray_sprite *sprite = ray_rb2sprite(self);
148
+
149
+ VALUE image, opts;
150
+ rb_scan_args(argc, argv, "11", &image, &opts);
151
+
152
+ if (RAY_IS_A(image, rb_cString))
153
+ image = rb_funcall(rb_path2class("Ray::ImageSet"), RAY_METH("[]"), 1, image);
154
+
155
+ sprite->set_image(image);
156
+
157
+ if (NIL_P(opts))
158
+ opts = rb_hash_new();
159
+
160
+ VALUE from_rect = rb_hash_aref(opts, RAY_SYM("rect"));
161
+ if (!NIL_P(from_rect))
162
+ sprite->set_from_rect(ray_convert_to_rect(from_rect));
163
+
164
+ VALUE pos = rb_hash_aref(opts, RAY_SYM("at"));
165
+ if (!NIL_P(pos))
166
+ sprite->set_position(ray_convert_to_vector2(pos));
167
+
168
+ VALUE angle = rb_hash_aref(opts, RAY_SYM("angle"));
169
+ if (!NIL_P(angle))
170
+ sprite->set_angle(NUM2DBL(angle));
171
+
172
+ VALUE zoom = rb_hash_aref(opts, RAY_SYM("zoom"));
173
+ if (NIL_P(zoom)) zoom = rb_hash_aref(opts, RAY_SYM("scale"));
174
+ if (!NIL_P(zoom))
175
+ sprite->set_scale(ray_convert_to_vector2(zoom));
176
+
177
+ sprite->set_shader(rb_hash_aref(opts, RAY_SYM("shader")));
178
+
179
+ VALUE color = rb_hash_aref(opts, RAY_SYM("color"));
180
+ if (!NIL_P(color))
181
+ sprite->set_color(ray_rb2col(color));
182
+
183
+ return self;
184
+ }
185
+
186
+ VALUE ray_init_sprite_copy(VALUE self, VALUE other) {
187
+ ray_rb2sprite(self)->copy(*ray_rb2sprite(other));
188
+ return self;
189
+ }
190
+
191
+ /* @return [Ray::Image] */
192
+ VALUE ray_sprite_image(VALUE self) {
193
+ return ray_rb2sprite(self)->get_image();
194
+ }
195
+
196
+ /* @return [Ray::Rect] The part of the image which will be drawn */
197
+ VALUE ray_sprite_from_rect(VALUE self) {
198
+ return ray_rect2rb(ray_rb2sprite(self)->from_rect());
199
+ }
200
+
201
+ /* Sets the part of the image which will be displayed */
202
+ VALUE ray_sprite_set_from_rect(VALUE self, VALUE rect) {
203
+ rb_check_frozen(self);
204
+ ray_rb2sprite(self)->set_from_rect(ray_convert_to_rect(rect));
205
+ return rect;
206
+ }
207
+
208
+ /* @return [Ray::Shader] shader used when drawing the sprite */
209
+ VALUE ray_sprite_shader(VALUE self) {
210
+ return ray_rb2sprite(self)->get_shader();
211
+ }
212
+
213
+ /* Sets the shader used when drawing the sprite */
214
+ VALUE ray_sprite_set_shader(VALUE self, VALUE shader) {
215
+ rb_check_frozen(self);
216
+ ray_rb2sprite(self)->set_shader(shader);
217
+ return shader;
218
+ }
219
+
220
+ /* @return [Ray::Color] Color used when drawing the sprite */
221
+ VALUE ray_sprite_color(VALUE self) {
222
+ return ray_col2rb(ray_rb2sprite(self)->color());
223
+ }
224
+
225
+ /* Sets the color used when drawing the sprite */
226
+ VALUE ray_sprite_set_color(VALUE self, VALUE color) {
227
+ rb_check_frozen(self);
228
+ ray_rb2sprite(self)->set_color(ray_rb2col(color));
229
+ return color;
230
+ }
231
+
232
+ /* @return [Ray::Vector2] The position of the sprite */
233
+ VALUE ray_sprite_pos(VALUE self) {
234
+ return ray_vector2_to_rb(ray_rb2sprite(self)->position());
235
+ }
236
+
237
+ /* Sets the position of the sprite */
238
+ VALUE ray_sprite_set_pos(VALUE self, VALUE pos) {
239
+ rb_check_frozen(self);
240
+ ray_rb2sprite(self)->set_position(ray_convert_to_vector2(pos));
241
+ return pos;
242
+ }
243
+
244
+ /* @return [Float] The angle used when the sprite is drawn */
245
+ VALUE ray_sprite_angle(VALUE self) {
246
+ return rb_float_new(ray_rb2sprite(self)->angle());
247
+ }
248
+
249
+ /* Sets the angle used when the sprite is drawn */
250
+ VALUE ray_sprite_set_angle(VALUE self, VALUE angle) {
251
+ rb_check_frozen(self);
252
+ ray_rb2sprite(self)->set_angle(NUM2DBL(angle));
253
+ return angle;
254
+ }
255
+
256
+ /* @return [Ray::Vector2] The scale applied to the image when it is drawn */
257
+ VALUE ray_sprite_scale(VALUE self) {
258
+ return ray_vector2_to_rb(ray_rb2sprite(self)->scale());
259
+ }
260
+
261
+ /* Set the scale applied to the image */
262
+ VALUE ray_sprite_set_scale(VALUE self, VALUE scale) {
263
+ rb_check_frozen(self);
264
+ ray_rb2sprite(self)->set_scale(ray_convert_to_vector2(scale));
265
+ return scale;
266
+ }
267
+
268
+ /*
269
+ @overload draw_on(imaage)
270
+ Draws the sprite on an image.
271
+ @param [Ray::Image] image The image to draw on.
272
+ */
273
+ VALUE ray_sprite_draw_on(VALUE self, VALUE image) {
274
+ rb_check_frozen(image);
275
+ ray_rb2sprite(self)->draw_on(*ray_rb2image(image));
276
+ return image;
277
+ }
278
+
279
+ void Init_ray_sprite() {
280
+ ray_cSprite = rb_define_class_under(ray_mRay, "Sprite", rb_cObject);
281
+ rb_define_alloc_func(ray_cSprite, ray_alloc_sprite);
282
+ rb_define_method(ray_cSprite, "initialize", ray_init_sprite, -1);
283
+ rb_define_method(ray_cSprite, "initialize_copy", ray_init_sprite_copy, 1);
284
+
285
+ rb_define_method(ray_cSprite, "image", ray_sprite_image, 0);
286
+
287
+ rb_define_method(ray_cSprite, "from_rect", ray_sprite_from_rect, 0);
288
+ rb_define_method(ray_cSprite, "from_rect=", ray_sprite_set_from_rect, 1);
289
+
290
+ rb_define_method(ray_cSprite, "shader", ray_sprite_shader, 0);
291
+ rb_define_method(ray_cSprite, "shader=", ray_sprite_set_shader, 1);
292
+
293
+ rb_define_method(ray_cSprite, "color", ray_sprite_color, 0);
294
+ rb_define_method(ray_cSprite, "color=", ray_sprite_set_color, 1);
295
+
296
+ rb_define_method(ray_cSprite, "pos", ray_sprite_pos, 0);
297
+ rb_define_method(ray_cSprite, "pos=", ray_sprite_set_pos, 1);
298
+
299
+ rb_define_method(ray_cSprite, "angle", ray_sprite_angle, 0);
300
+ rb_define_method(ray_cSprite, "angle=", ray_sprite_set_angle, 1);
301
+
302
+ rb_define_method(ray_cSprite, "scale", ray_sprite_scale, 0);
303
+ rb_define_method(ray_cSprite, "scale=", ray_sprite_set_scale, 1);
304
+
305
+ rb_define_method(ray_cSprite, "draw_on", ray_sprite_draw_on, 1);
306
+ }
@@ -0,0 +1,181 @@
1
+ #include "ray.hpp"
2
+
3
+ VALUE ray_cText = Qnil;
4
+
5
+ sf::Text *ray_rb2text(VALUE obj) {
6
+ if (!RAY_IS_A(obj, ray_cText)) {
7
+ rb_raise(rb_eTypeError, "can't convert %s into Ray::Text",
8
+ RAY_OBJ_CLASSNAME(obj));
9
+ }
10
+
11
+ sf::Text *text = NULL;
12
+ Data_Get_Struct(obj, sf::Text, text);
13
+
14
+ return text;
15
+ }
16
+
17
+ void ray_free_text(sf::Text *text) {
18
+ delete text;
19
+ }
20
+
21
+ VALUE ray_alloc_text(VALUE self) {
22
+ sf::Text *text = new sf::Text;
23
+ return Data_Wrap_Struct(self, 0, ray_free_text, text);
24
+ }
25
+
26
+ VALUE ray_init_text_copy(VALUE self, VALUE other) {
27
+ *ray_rb2text(self) = *ray_rb2text(other);
28
+ return self;
29
+ }
30
+
31
+ VALUE ray_text_basic_set_content(VALUE self, VALUE content) {
32
+ rb_check_frozen(self);
33
+
34
+ sf::Text *text = ray_rb2text(self);
35
+
36
+ char *c_str = StringValuePtr(content);
37
+ sf::String str((uint32_t*)c_str);
38
+
39
+ text->SetString(str);
40
+
41
+ return content;
42
+ }
43
+
44
+ VALUE ray_text_basic_content(VALUE self) {
45
+ const sf::String &str = ray_rb2text(self)->GetString();
46
+
47
+ const uint32_t *c_str = str.GetData();
48
+ return rb_str_new((char*)c_str, str.GetSize() * 4);
49
+ }
50
+
51
+ VALUE ray_text_basic_set_style(VALUE self, VALUE style) {
52
+ rb_check_frozen(self);
53
+ ray_rb2text(self)->SetStyle(NUM2INT(style));
54
+ return style;
55
+ }
56
+
57
+ /* @return [Integer] The style of the text */
58
+ VALUE ray_text_style(VALUE self) {
59
+ return INT2FIX(ray_rb2text(self)->GetStyle());
60
+ }
61
+
62
+ /* Sets the position of the text */
63
+ VALUE ray_text_set_pos(VALUE self, VALUE val) {
64
+ rb_check_frozen(self);
65
+ ray_rb2text(self)->SetPosition(ray_convert_to_vector2(val));
66
+ return val;
67
+ }
68
+
69
+ /* @return [Vector2] The position of the tet */
70
+ VALUE ray_text_pos(VALUE self) {
71
+ return ray_vector2_to_rb(ray_rb2text(self)->GetPosition());
72
+ }
73
+
74
+ /* Sets the scale applied to the text */
75
+ VALUE ray_text_set_scale(VALUE self, VALUE val) {
76
+ rb_check_frozen(self);
77
+ ray_rb2text(self)->SetScale(ray_convert_to_vector2(val));
78
+ return val;
79
+ }
80
+
81
+ /* @return [Ray::Vector2] The scale applied to the text */
82
+ VALUE ray_text_scale(VALUE self) {
83
+ return ray_vector2_to_rb(ray_rb2text(self)->GetScale());
84
+ }
85
+
86
+ /* Sets the rotation applied to the text when it is drawn. */
87
+ VALUE ray_text_set_angle(VALUE self, VALUE val) {
88
+ ray_rb2text(self)->SetRotation(NUM2DBL(val));
89
+ return val;
90
+ }
91
+
92
+ /* @return [Float] The rotation applied to the text when it is drawn. */
93
+ VALUE ray_text_angle(VALUE self) {
94
+ return rb_float_new(ray_rb2text(self)->GetRotation());
95
+ }
96
+
97
+ /* @return [Integer] The character size of the text */
98
+ VALUE ray_text_character_size(VALUE self) {
99
+ return INT2FIX(ray_rb2text(self)->GetCharacterSize());
100
+ }
101
+
102
+ /* Sets the character size of the text */
103
+ VALUE ray_text_set_character_size(VALUE self, VALUE val) {
104
+ rb_check_frozen(self);
105
+ ray_rb2text(self)->SetCharacterSize(NUM2INT(val));
106
+ return val;
107
+ }
108
+
109
+ /* @return [Ray::Font] The font used to draw the text */
110
+ VALUE ray_text_font(VALUE self) {
111
+ return ray_font2rb(ray_rb2text(self)->GetFont());
112
+ }
113
+
114
+ /* Sets the font used to draw the text */
115
+ VALUE ray_text_set_font(VALUE self, VALUE val) {
116
+ ray_rb2text(self)->SetFont(*ray_rb2font(val));
117
+ rb_iv_set(self, "@font", val); /* Keep a reference to the font */
118
+
119
+ return val;
120
+ }
121
+
122
+ /* @return [Ray::Color] Returns the color used to draw the text */
123
+ VALUE ray_text_color(VALUE self) {
124
+ return ray_col2rb(ray_rb2text(self)->GetColor());
125
+ }
126
+
127
+ /* Sets the color used to draw the text */
128
+ VALUE ray_text_set_color(VALUE self, VALUE val) {
129
+ rb_check_frozen(self);
130
+ ray_rb2text(self)->SetColor(ray_rb2col(val));
131
+ return val;
132
+ }
133
+
134
+ /* @return [Ray::Rect] Rect occupied by the text. Scale is taken in acount. */
135
+ VALUE ray_text_rect(VALUE self) {
136
+ ray_rect rect(ray_rb2text(self)->GetRect());
137
+ return ray_rect2rb(rect);
138
+ }
139
+
140
+ /*
141
+ @overload draw_on(image)
142
+ Draws the text on an image.
143
+ */
144
+ VALUE ray_text_draw_on(VALUE self, VALUE target) {
145
+ ray_rb2image(target)->draw(*ray_rb2text(self));
146
+ return target;
147
+ }
148
+
149
+ void Init_ray_text() {
150
+ ray_cText = rb_define_class_under(ray_mRay, "Text", rb_cObject);
151
+ rb_define_alloc_func(ray_cText, ray_alloc_text);
152
+ rb_define_method(ray_cText, "initialize_copy", ray_init_text_copy, 1);
153
+
154
+ rb_define_method(ray_cText, "basic_set_content", ray_text_basic_set_content, 1);
155
+ rb_define_method(ray_cText, "basic_content", ray_text_basic_content, 0);
156
+
157
+ rb_define_method(ray_cText, "basic_set_style", ray_text_basic_set_style, 1);
158
+ rb_define_method(ray_cText, "style", ray_text_style, 0);
159
+
160
+ rb_define_method(ray_cText, "pos=", ray_text_set_pos, 1);
161
+ rb_define_method(ray_cText, "pos", ray_text_pos, 0);
162
+
163
+ rb_define_method(ray_cText, "scale=", ray_text_set_scale, 1);
164
+ rb_define_method(ray_cText, "scale", ray_text_scale, 0);
165
+
166
+ rb_define_method(ray_cText, "angle", ray_text_angle, 0);
167
+ rb_define_method(ray_cText, "angle=", ray_text_set_angle, 1);
168
+
169
+ rb_define_method(ray_cText, "character_size", ray_text_character_size, 0);
170
+ rb_define_method(ray_cText, "character_size=", ray_text_set_character_size, 1);
171
+
172
+ rb_define_method(ray_cText, "font", ray_text_font, 0);
173
+ rb_define_method(ray_cText, "font=", ray_text_set_font, 1);
174
+
175
+ rb_define_method(ray_cText, "color", ray_text_color, 0);
176
+ rb_define_method(ray_cText, "color=", ray_text_set_color, 1);
177
+
178
+ rb_define_method(ray_cText, "rect", ray_text_rect, 0);
179
+
180
+ rb_define_method(ray_cText, "draw_on", ray_text_draw_on, 1);
181
+ }