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