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,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
+ }