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.
- data/.gemtest +0 -0
- data/.yardopts +4 -0
- data/README.md +17 -21
- data/Rakefile +18 -139
- data/VERSION +1 -1
- data/ext/audio.cpp +723 -0
- data/ext/{color.c → color.cpp} +25 -13
- data/ext/drawable.cpp +91 -0
- data/ext/event.cpp +460 -0
- data/ext/extconf.rb +5 -104
- data/ext/font.cpp +190 -0
- data/ext/image.cpp +733 -0
- data/ext/input.cpp +74 -0
- data/ext/ray.cpp +168 -0
- data/ext/ray.hpp +356 -0
- data/ext/{rect.c → rect.cpp} +51 -37
- data/ext/shader.cpp +169 -0
- data/ext/shape.cpp +409 -0
- data/ext/sprite.cpp +306 -0
- data/ext/text.cpp +181 -0
- data/ext/vector.cpp +215 -0
- data/guide.md +619 -0
- data/lib/ray/audio.rb +0 -41
- data/lib/ray/color.rb +32 -10
- data/lib/ray/drawable.rb +16 -0
- data/lib/ray/dsl/event_listener.rb +25 -2
- data/lib/ray/dsl/event_runner.rb +33 -5
- data/lib/ray/dsl/event_translator.rb +66 -30
- data/lib/ray/dsl/handler.rb +3 -2
- data/lib/ray/dsl/matcher.rb +58 -14
- data/lib/ray/font.rb +38 -96
- data/lib/ray/font_set.rb +8 -8
- data/lib/ray/game.rb +87 -66
- data/lib/ray/helper.rb +105 -10
- data/lib/ray/image.rb +150 -24
- data/lib/ray/image_set.rb +3 -1
- data/lib/ray/input.rb +10 -0
- data/lib/ray/music_set.rb +5 -3
- data/lib/ray/ray.rb +21 -9
- data/lib/ray/rect.rb +48 -7
- data/lib/ray/rmagick.rb +41 -0
- data/lib/ray/scene.rb +99 -43
- data/lib/ray/scene_list.rb +67 -0
- data/lib/ray/shape.rb +132 -0
- data/lib/ray/sound_set.rb +4 -2
- data/lib/ray/sprite.rb +49 -111
- data/lib/ray/text.rb +101 -0
- data/lib/ray/text_helper.rb +37 -0
- data/lib/ray/turtle.rb +215 -0
- data/lib/ray/vector.rb +226 -0
- data/samples/audio/spacial.rb +44 -0
- data/samples/hello_world/hello.rb +9 -13
- data/samples/hello_world/hello_dsl.rb +8 -12
- data/samples/hello_world/text.rb +15 -0
- data/samples/opengl/binding.rb +38 -0
- data/samples/opengl/image.rb +32 -0
- data/samples/opengl/opengl.rb +34 -0
- data/samples/opengl/shader.rb +42 -0
- data/samples/pong/pong.rb +14 -10
- data/samples/run_scene.rb +53 -0
- data/samples/shaders/scene.rb +40 -0
- data/samples/shaders/shaders.rb +42 -0
- data/samples/shaders/shape.rb +34 -0
- data/samples/sokoban/sokoban.rb +18 -18
- data/samples/test/actual_scene.rb +41 -0
- data/samples/test/scene_riot.rb +39 -0
- data/samples/test/scene_spec.rb +32 -0
- data/samples/test/scene_test_unit.rb +25 -0
- data/samples/turtle/byzantium.rb +45 -0
- data/samples/turtle/hilbert.rb +48 -0
- data/samples/turtle/koch.rb +55 -0
- data/samples/turtle/mandala.rb +61 -0
- data/samples/turtle/tree.rb +57 -0
- data/test/audio_test.rb +69 -0
- data/test/color_test.rb +77 -0
- data/test/drawable_test.rb +19 -0
- data/test/dsl_test.rb +93 -0
- data/test/font_test.rb +57 -0
- data/test/helpers.rb +94 -0
- data/test/image_test.rb +82 -0
- data/test/ray_test.rb +25 -0
- data/test/rect_test.rb +121 -0
- data/{spec → test}/res/VeraMono.ttf +0 -0
- data/{spec → test}/res/aqua.bmp +0 -0
- data/{spec → test}/res/aqua.png +0 -0
- data/{spec → test}/res/aqua2.bmp +0 -0
- data/{spec → test}/res/not_a_jpeg.jpeg +0 -0
- data/{spec → test}/res/pop.wav +0 -0
- data/test/resource_set_test.rb +99 -0
- data/test/run_all.rb +7 -0
- data/test/shape_test.rb +101 -0
- data/test/sprite_test.rb +89 -0
- data/test/text_test.rb +78 -0
- data/test/turtle_test.rb +176 -0
- data/test/vector_test.rb +111 -0
- data/yard_ext.rb +0 -28
- metadata +95 -139
- data/.gitignore +0 -23
- data/.gitmodules +0 -3
- data/.rspec +0 -3
- data/ext/audio.c +0 -473
- data/ext/event.c +0 -557
- data/ext/font.c +0 -287
- data/ext/image.c +0 -933
- data/ext/joystick.c +0 -145
- data/ext/ray.c +0 -489
- data/ext/ray.h +0 -245
- data/ext/ray_osx.m +0 -161
- data/lib/ray/joystick.rb +0 -30
- data/psp/SDL_psp_main.c +0 -84
- data/psp/bigdecimal/README +0 -60
- data/psp/bigdecimal/bigdecimal.c +0 -4697
- data/psp/bigdecimal/bigdecimal.h +0 -216
- data/psp/bigdecimal/lib/bigdecimal/jacobian.rb +0 -85
- data/psp/bigdecimal/lib/bigdecimal/ludcmp.rb +0 -84
- data/psp/bigdecimal/lib/bigdecimal/math.rb +0 -235
- data/psp/bigdecimal/lib/bigdecimal/newton.rb +0 -77
- data/psp/bigdecimal/lib/bigdecimal/util.rb +0 -65
- data/psp/digest/bubblebabble/bubblebabble.c +0 -142
- data/psp/digest/defs.h +0 -20
- data/psp/digest/digest.c +0 -643
- data/psp/digest/digest.h +0 -32
- data/psp/digest/lib/digest.rb +0 -50
- data/psp/digest/lib/md5.rb +0 -27
- data/psp/digest/lib/sha1.rb +0 -27
- data/psp/digest/md5/md5.c +0 -420
- data/psp/digest/md5/md5.h +0 -80
- data/psp/digest/md5/md5init.c +0 -40
- data/psp/digest/rmd160/rmd160.c +0 -457
- data/psp/digest/rmd160/rmd160.h +0 -56
- data/psp/digest/rmd160/rmd160init.c +0 -40
- data/psp/digest/sha1/sha1.c +0 -269
- data/psp/digest/sha1/sha1.h +0 -39
- data/psp/digest/sha1/sha1init.c +0 -40
- data/psp/digest/sha2/lib/sha2.rb +0 -73
- data/psp/digest/sha2/sha2.c +0 -919
- data/psp/digest/sha2/sha2.h +0 -109
- data/psp/digest/sha2/sha2init.c +0 -52
- data/psp/enumerator/enumerator.c +0 -298
- data/psp/etc/etc.c +0 -559
- data/psp/ext.c +0 -289
- data/psp/fcntl/fcntl.c +0 -187
- data/psp/lib/rbconfig.rb +0 -178
- data/psp/nkf/lib/kconv.rb +0 -367
- data/psp/nkf/nkf-utf8/config.h +0 -88
- data/psp/nkf/nkf-utf8/nkf.c +0 -6040
- data/psp/nkf/nkf-utf8/utf8tbl.c +0 -8500
- data/psp/nkf/nkf-utf8/utf8tbl.h +0 -34
- data/psp/nkf/nkf.c +0 -654
- data/psp/socket/addrinfo.h +0 -173
- data/psp/socket/getaddrinfo.c +0 -676
- data/psp/socket/getnameinfo.c +0 -270
- data/psp/socket/pspsocket.c +0 -71
- data/psp/socket/pspsocket.h +0 -28
- data/psp/socket/socket.c +0 -4662
- data/psp/socket/sockport.h +0 -76
- data/psp/stringio/stringio.c +0 -1306
- data/psp/strscan/strscan.c +0 -1320
- data/psp/syck/bytecode.c +0 -1166
- data/psp/syck/emitter.c +0 -1242
- data/psp/syck/gram.c +0 -1894
- data/psp/syck/gram.h +0 -79
- data/psp/syck/handler.c +0 -174
- data/psp/syck/implicit.c +0 -2990
- data/psp/syck/node.c +0 -408
- data/psp/syck/rubyext.c +0 -2367
- data/psp/syck/syck.c +0 -504
- data/psp/syck/syck.h +0 -456
- data/psp/syck/token.c +0 -2725
- data/psp/syck/yaml2byte.c +0 -257
- data/psp/syck/yamlbyte.h +0 -170
- data/psp/thread/thread.c +0 -1175
- data/psp/zlib/zlib.c +0 -3547
- data/script.rb +0 -10
- data/spec/ray/audio_spec.rb +0 -146
- data/spec/ray/color_spec.rb +0 -57
- data/spec/ray/event_spec.rb +0 -80
- data/spec/ray/font_spec.rb +0 -93
- data/spec/ray/image_set_spec.rb +0 -48
- data/spec/ray/image_spec.rb +0 -162
- data/spec/ray/joystick_spec.rb +0 -21
- data/spec/ray/matcher_spec.rb +0 -50
- data/spec/ray/ray_spec.rb +0 -88
- data/spec/ray/rect_spec.rb +0 -154
- data/spec/ray/resource_set_spec.rb +0 -105
- data/spec/ray/sprite_spec.rb +0 -163
- data/spec/spec.opts +0 -4
- data/spec/spec_helper.rb +0 -8
data/ext/sprite.cpp
ADDED
@@ -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
|
+
}
|
data/ext/text.cpp
ADDED
@@ -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
|
+
}
|