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/input.cpp
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
#include "ray.hpp"
|
|
2
|
+
|
|
3
|
+
VALUE ray_mInput = Qnil;
|
|
4
|
+
|
|
5
|
+
const sf::Input &ray_input() {
|
|
6
|
+
return ray_screen.GetInput();
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
/*
|
|
10
|
+
@overload holding?(key)
|
|
11
|
+
@param [Integer] key Key code
|
|
12
|
+
@return [true, false] True if key is pressed
|
|
13
|
+
*/
|
|
14
|
+
VALUE ray_input_holding(VALUE self, VALUE key) {
|
|
15
|
+
return ray_input().IsKeyDown((sf::Key::Code)NUM2INT(key)) ? Qtrue : Qfalse;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/*
|
|
19
|
+
@overload mouse_button_down?(button)
|
|
20
|
+
@param [Integer] button Mouse button code
|
|
21
|
+
@return [true, false] True if the button is pressed
|
|
22
|
+
*/
|
|
23
|
+
VALUE ray_input_mouse_button_down(VALUE self, VALUE button) {
|
|
24
|
+
return ray_input().IsMouseButtonDown((sf::Mouse::Button)NUM2INT(button)) ?
|
|
25
|
+
Qtrue : Qfalse;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/*
|
|
29
|
+
@overload jostick_button_down?(joy_id, button)
|
|
30
|
+
@param [Integer] joy_id Id of the joytick
|
|
31
|
+
@param [Integer] button button id
|
|
32
|
+
@return [true, false] True if the button is pressed
|
|
33
|
+
*/
|
|
34
|
+
VALUE ray_input_joystick_button_down(VALUE self, VALUE joy_id, VALUE button) {
|
|
35
|
+
return ray_input().IsJoystickButtonDown(NUM2INT(joy_id),
|
|
36
|
+
NUM2INT(button)) ?
|
|
37
|
+
Qtrue : Qfalse;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/* @return [Integer] mouse x position */
|
|
41
|
+
VALUE ray_input_mouse_x(VALUE self) {
|
|
42
|
+
return INT2FIX(ray_input().GetMouseX());
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/* @return [Integer] mouse y position */
|
|
46
|
+
VALUE ray_input_mouse_y(VALUE self) {
|
|
47
|
+
return INT2FIX(ray_input().GetMouseY());
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/*
|
|
51
|
+
@overload axis_position(joy_id, axis_id)
|
|
52
|
+
@param [Integer] joy_id Id of the joystick
|
|
53
|
+
@param [Integer] axis_id Id of the axis
|
|
54
|
+
@return [Float] current position of the axis, between -100 and 100.
|
|
55
|
+
*/
|
|
56
|
+
VALUE ray_input_axis_position(VALUE self, VALUE joy_id, VALUE axis_id) {
|
|
57
|
+
return rb_float_new(ray_input().GetJoystickAxis(NUM2INT(joy_id),
|
|
58
|
+
(sf::Joy::Axis)NUM2INT(axis_id)));
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
void Init_ray_input() {
|
|
62
|
+
ray_mInput = rb_define_module_under(ray_mRay, "Input");
|
|
63
|
+
|
|
64
|
+
rb_define_module_function(ray_mInput, "holding?", ray_input_holding, 1);
|
|
65
|
+
rb_define_module_function(ray_mInput, "mouse_button_down?",
|
|
66
|
+
ray_input_mouse_button_down, 1);
|
|
67
|
+
rb_define_module_function(ray_mInput, "jostick_button_down?",
|
|
68
|
+
ray_input_joystick_button_down, 2);
|
|
69
|
+
|
|
70
|
+
rb_define_module_function(ray_mInput, "mouse_x", ray_input_mouse_x, 0);
|
|
71
|
+
rb_define_module_function(ray_mInput, "mouse_y", ray_input_mouse_y, 0);
|
|
72
|
+
|
|
73
|
+
rb_define_module_function(ray_mInput, "axis_position", ray_input_axis_position, 2);
|
|
74
|
+
}
|
data/ext/ray.cpp
ADDED
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
#include "ray.hpp"
|
|
2
|
+
|
|
3
|
+
VALUE ray_mRay = Qnil;
|
|
4
|
+
sf::RenderWindow ray_screen;
|
|
5
|
+
|
|
6
|
+
ray_video_mode ray_parse_video_mode(VALUE hash) {
|
|
7
|
+
VALUE width = rb_hash_aref(hash, RAY_SYM("width"));
|
|
8
|
+
VALUE height = rb_hash_aref(hash, RAY_SYM("height"));
|
|
9
|
+
|
|
10
|
+
if (NIL_P(width)) width = rb_hash_aref(hash, RAY_SYM("w"));
|
|
11
|
+
if (NIL_P(height)) height = rb_hash_aref(hash, RAY_SYM("h"));
|
|
12
|
+
|
|
13
|
+
if (NIL_P(width) || NIL_P(height))
|
|
14
|
+
rb_raise(rb_eArgError, "Missing parameter: width or height");
|
|
15
|
+
|
|
16
|
+
VALUE bitsperpixel = rb_hash_aref(hash, RAY_SYM("bits_per_pixel"));
|
|
17
|
+
if (NIL_P(bitsperpixel)) bitsperpixel = rb_hash_aref(hash, RAY_SYM("bpp"));
|
|
18
|
+
|
|
19
|
+
if (NIL_P(bitsperpixel))
|
|
20
|
+
bitsperpixel = INT2FIX(32);
|
|
21
|
+
|
|
22
|
+
uint32_t flags = sf::Style::None;
|
|
23
|
+
|
|
24
|
+
if (RTEST(rb_hash_aref(hash, RAY_SYM("fullscreen"))))
|
|
25
|
+
flags |= sf::Style::Fullscreen;
|
|
26
|
+
|
|
27
|
+
if (!RTEST(rb_hash_aref(hash, RAY_SYM("no_frame")))) {
|
|
28
|
+
flags |= sf::Style::Titlebar;
|
|
29
|
+
flags |= sf::Style::Close;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
if (RTEST(rb_hash_aref(hash, RAY_SYM("resizable"))))
|
|
33
|
+
flags |= sf::Style::Resize;
|
|
34
|
+
|
|
35
|
+
ray_video_mode mode = {
|
|
36
|
+
NUM2INT(width),
|
|
37
|
+
NUM2INT(height),
|
|
38
|
+
|
|
39
|
+
NUM2INT(bitsperpixel),
|
|
40
|
+
|
|
41
|
+
flags
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
return mode;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/*
|
|
48
|
+
@overload create_window(hash)
|
|
49
|
+
Creates a new window.
|
|
50
|
+
|
|
51
|
+
If both hw_surface and sws_urface are false, hw_surface
|
|
52
|
+
will be considered as true. :sw_surface should be true
|
|
53
|
+
if you want to acess
|
|
54
|
+
|
|
55
|
+
@return [Ray::Image] An image representing the window
|
|
56
|
+
|
|
57
|
+
@option hash [Integer] :width Width of the window
|
|
58
|
+
@option hash [Integer] :height Height of the window
|
|
59
|
+
|
|
60
|
+
@option hash [Integer] :w Alias for width
|
|
61
|
+
@option hash [Integer] :h Alias for height
|
|
62
|
+
|
|
63
|
+
@option hash [Integer] :bits_per_pixel Bits per pixel. Valid values are
|
|
64
|
+
8, 15, 16, 24, and 32.
|
|
65
|
+
@option hash [Integer] :bpp Alias for bits_per_pixel
|
|
66
|
+
|
|
67
|
+
@option hash [true, false] :hw_surface Creates the surface in video memory
|
|
68
|
+
(default)
|
|
69
|
+
@option hash [true, false] :sw_surface Creates the surface in system memory
|
|
70
|
+
@option hash [true, false] :async_blit Enables asynchronous updates of the
|
|
71
|
+
the surface
|
|
72
|
+
@option hash [true, false] :double_buf Enables double buffering. Ignored
|
|
73
|
+
if sw_surface is set.
|
|
74
|
+
@option hash [true, false] :fullscreen Creates a full screen window.
|
|
75
|
+
@option hash [true, false] :resizable Creates a resizable window.
|
|
76
|
+
@option hash [true, false] :no_frame Disables window decoration if
|
|
77
|
+
possible.
|
|
78
|
+
*/
|
|
79
|
+
VALUE ray_create_window(VALUE self, VALUE hash) {
|
|
80
|
+
ray_video_mode mode = ray_parse_video_mode(hash);
|
|
81
|
+
|
|
82
|
+
sf::VideoMode sfml_mode(mode.width, mode.height, mode.bpp);
|
|
83
|
+
if (mode.flags & sf::Style::Fullscreen) {
|
|
84
|
+
if (!sfml_mode.IsValid())
|
|
85
|
+
rb_raise(rb_eRuntimeError, "Invalid fullscreen mode");
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
ray_screen.Create(sfml_mode, "", mode.flags);
|
|
89
|
+
|
|
90
|
+
return ray_create_screen();
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/*
|
|
94
|
+
@overload icon=(icon)
|
|
95
|
+
Sets the window icon
|
|
96
|
+
@param [Ray::Image] icon The icon to display
|
|
97
|
+
*/
|
|
98
|
+
VALUE ray_set_icon(VALUE self, VALUE icon) {
|
|
99
|
+
ray_image *image = ray_rb2image(icon);
|
|
100
|
+
ray_screen.SetIcon(image->width(), image->height(),
|
|
101
|
+
image->pixels());
|
|
102
|
+
return Qnil;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/*
|
|
106
|
+
@overload window_title=(title)
|
|
107
|
+
Sets the window title
|
|
108
|
+
*/
|
|
109
|
+
VALUE ray_set_window_title(VALUE self, VALUE title) {
|
|
110
|
+
if (!NIL_P(title)) {
|
|
111
|
+
title = rb_String(title);
|
|
112
|
+
ray_screen.SetTitle(StringValuePtr(title));
|
|
113
|
+
}
|
|
114
|
+
else
|
|
115
|
+
ray_screen.SetTitle("");
|
|
116
|
+
|
|
117
|
+
return title;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/* @return [Ray::Image, nil] The current screen, created by create_window */
|
|
121
|
+
VALUE ray_get_screen(VALUE self) {
|
|
122
|
+
if (!ray_screen.IsOpened())
|
|
123
|
+
return Qnil;
|
|
124
|
+
return ray_create_screen();
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/* Starts outputing error to stderr */
|
|
128
|
+
VALUE ray_verbose(VALUE self) {
|
|
129
|
+
sf::Err().rdbuf(std::cerr.rdbuf());
|
|
130
|
+
return Qnil;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/* Stops outputing errors to stderr (default) */
|
|
134
|
+
VALUE ray_quiet(VALUE self) {
|
|
135
|
+
sf::Err().rdbuf(NULL);
|
|
136
|
+
return Qnil;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
extern "C"
|
|
140
|
+
void Init_ray_ext() {
|
|
141
|
+
sf::Err().rdbuf(NULL); /* Don't put errors in stderr */
|
|
142
|
+
|
|
143
|
+
ray_mRay = rb_define_module("Ray");
|
|
144
|
+
|
|
145
|
+
rb_define_module_function(ray_mRay, "create_window", ray_create_window, 1);
|
|
146
|
+
rb_define_module_function(ray_mRay, "screen", ray_get_screen, 0);
|
|
147
|
+
|
|
148
|
+
rb_define_module_function(ray_mRay, "icon=", ray_set_icon, 1);
|
|
149
|
+
rb_define_module_function(ray_mRay, "window_title=", ray_set_window_title,
|
|
150
|
+
1);
|
|
151
|
+
|
|
152
|
+
rb_define_module_function(ray_mRay, "verbose!", ray_verbose, 0);
|
|
153
|
+
rb_define_module_function(ray_mRay, "quiet!", ray_quiet, 0);
|
|
154
|
+
|
|
155
|
+
Init_ray_image();
|
|
156
|
+
Init_ray_sprite();
|
|
157
|
+
Init_ray_color();
|
|
158
|
+
Init_ray_rect();
|
|
159
|
+
Init_ray_vector();
|
|
160
|
+
Init_ray_event();
|
|
161
|
+
Init_ray_input();
|
|
162
|
+
Init_ray_shape();
|
|
163
|
+
Init_ray_font();
|
|
164
|
+
Init_ray_text();
|
|
165
|
+
Init_ray_audio();
|
|
166
|
+
Init_ray_drawable();
|
|
167
|
+
Init_ray_shader();
|
|
168
|
+
}
|
data/ext/ray.hpp
ADDED
|
@@ -0,0 +1,356 @@
|
|
|
1
|
+
#ifndef RAY_H_
|
|
2
|
+
#define RAY_H_
|
|
3
|
+
|
|
4
|
+
#include "ruby.h"
|
|
5
|
+
|
|
6
|
+
#include <SFML/Graphics.hpp>
|
|
7
|
+
#include <SFML/OpenGL.hpp>
|
|
8
|
+
#include <SFML/Audio.hpp>
|
|
9
|
+
|
|
10
|
+
#include <iostream>
|
|
11
|
+
|
|
12
|
+
extern sf::RenderWindow ray_screen;
|
|
13
|
+
|
|
14
|
+
/* Classes and modules */
|
|
15
|
+
extern VALUE ray_mRay;
|
|
16
|
+
|
|
17
|
+
extern VALUE ray_cImage;
|
|
18
|
+
extern VALUE ray_cSprite;
|
|
19
|
+
extern VALUE ray_cShape;
|
|
20
|
+
extern VALUE ray_cColor;
|
|
21
|
+
extern VALUE ray_cRect;
|
|
22
|
+
extern VALUE ray_cVector2;
|
|
23
|
+
extern VALUE ray_cVector3;
|
|
24
|
+
extern VALUE ray_cEvent;
|
|
25
|
+
extern VALUE ray_mInput;
|
|
26
|
+
extern VALUE ray_cFont;
|
|
27
|
+
extern VALUE ray_cText;
|
|
28
|
+
extern VALUE ray_mAudio;
|
|
29
|
+
extern VALUE ray_cAudioSource;
|
|
30
|
+
extern VALUE ray_cSound;
|
|
31
|
+
extern VALUE ray_cMusic;
|
|
32
|
+
extern VALUE ray_cDrawable;
|
|
33
|
+
extern VALUE ray_cShader;
|
|
34
|
+
|
|
35
|
+
/* Macros for Ruby's C API */
|
|
36
|
+
|
|
37
|
+
#define RAY_IS_A(obj, klass) (RTEST(rb_obj_is_kind_of(obj, klass)))
|
|
38
|
+
|
|
39
|
+
#define RAY_OBJ_CLASSNAME(obj) (rb_class2name(rb_class_of(obj)))
|
|
40
|
+
|
|
41
|
+
#define RAY_SYM(string) (ID2SYM(rb_intern(string)))
|
|
42
|
+
#define RAY_METH(string) (rb_intern(string))
|
|
43
|
+
|
|
44
|
+
#define RAY_FLOAT_RECT(rect) \
|
|
45
|
+
(sf::FloatRect(rect.Left, rect.Top, rect.Width, rect.Height))
|
|
46
|
+
#define RAY_INT_RECT(rect) \
|
|
47
|
+
(sf::IntRect(rect.Left, rect.Top, rect.Width, rect.Height))
|
|
48
|
+
#define RAY_RECT(rect) \
|
|
49
|
+
(ray_rect(rect.Left, rect.Top, rect.Width, rect.Height))
|
|
50
|
+
|
|
51
|
+
/* Data types */
|
|
52
|
+
|
|
53
|
+
typedef struct {
|
|
54
|
+
int width;
|
|
55
|
+
int height;
|
|
56
|
+
|
|
57
|
+
int bpp;
|
|
58
|
+
|
|
59
|
+
uint32_t flags;
|
|
60
|
+
} ray_video_mode;
|
|
61
|
+
|
|
62
|
+
typedef sf::Color ray_color;
|
|
63
|
+
|
|
64
|
+
typedef sf::FloatRect ray_rect;
|
|
65
|
+
typedef sf::Vector2f ray_vector2;
|
|
66
|
+
typedef sf::Vector3f ray_vector3;
|
|
67
|
+
|
|
68
|
+
class ray_image {
|
|
69
|
+
public:
|
|
70
|
+
ray_image(bool should_be_screen = false);
|
|
71
|
+
~ray_image();
|
|
72
|
+
|
|
73
|
+
bool create_with_size(int w, int h);
|
|
74
|
+
bool create_with_filename(const std::string &filename);
|
|
75
|
+
bool create_with_io(VALUE io);
|
|
76
|
+
bool create_with_image(ray_image &src);
|
|
77
|
+
|
|
78
|
+
bool save_as(const std::string &filename) const;
|
|
79
|
+
|
|
80
|
+
int width() const;
|
|
81
|
+
int height() const;
|
|
82
|
+
|
|
83
|
+
void update();
|
|
84
|
+
|
|
85
|
+
sf::Sprite &get_sprite() { return sprite; }
|
|
86
|
+
|
|
87
|
+
void fill(sf::Color color);
|
|
88
|
+
void draw(const sf::Drawable &drawable,
|
|
89
|
+
sf::Shader *shader = NULL);
|
|
90
|
+
|
|
91
|
+
void draw_image(ray_image &image,
|
|
92
|
+
const ray_rect &src_rect, const ray_vector2 &dest_pos,
|
|
93
|
+
float angle, const ray_vector2 &zoom,
|
|
94
|
+
sf::Shader *shader = NULL,
|
|
95
|
+
const ray_color &color = sf::Color::White);
|
|
96
|
+
|
|
97
|
+
ray_color at(int x, int y) const;
|
|
98
|
+
bool set_at(int x, int y, const ray_color &color);
|
|
99
|
+
|
|
100
|
+
const uint8_t *pixels() const;
|
|
101
|
+
|
|
102
|
+
bool operator==(const ray_image &other) const;
|
|
103
|
+
|
|
104
|
+
ray_rect clip() const;
|
|
105
|
+
void set_clip(const ray_rect &other);
|
|
106
|
+
|
|
107
|
+
bool lock();
|
|
108
|
+
void unlock();
|
|
109
|
+
|
|
110
|
+
void activate();
|
|
111
|
+
void bind();
|
|
112
|
+
|
|
113
|
+
bool is_image() const;
|
|
114
|
+
const sf::Image &image() const;
|
|
115
|
+
|
|
116
|
+
sf::RenderTarget &target();
|
|
117
|
+
const sf::RenderTarget &target() const;
|
|
118
|
+
private:
|
|
119
|
+
bool is_screen;
|
|
120
|
+
|
|
121
|
+
sf::RenderImage render_image;
|
|
122
|
+
sf::Sprite sprite;
|
|
123
|
+
|
|
124
|
+
sf::Image *pixel_modifier;
|
|
125
|
+
};
|
|
126
|
+
|
|
127
|
+
class ray_sprite {
|
|
128
|
+
public:
|
|
129
|
+
ray_sprite();
|
|
130
|
+
~ray_sprite();
|
|
131
|
+
|
|
132
|
+
void copy(const ray_sprite &sprite);
|
|
133
|
+
|
|
134
|
+
void set_self(VALUE self);
|
|
135
|
+
|
|
136
|
+
ray_rect from_rect() const;
|
|
137
|
+
void set_from_rect(const ray_rect &rect);
|
|
138
|
+
|
|
139
|
+
ray_vector2 position() const;
|
|
140
|
+
void set_position(const ray_vector2 &pos);
|
|
141
|
+
|
|
142
|
+
float angle() const;
|
|
143
|
+
void set_angle(float angle);
|
|
144
|
+
|
|
145
|
+
ray_vector2 scale() const;
|
|
146
|
+
void set_scale(const ray_vector2 &scale);
|
|
147
|
+
|
|
148
|
+
ray_color color() const;
|
|
149
|
+
void set_color(const ray_color &color);
|
|
150
|
+
|
|
151
|
+
VALUE get_shader() const;
|
|
152
|
+
void set_shader(VALUE shader);
|
|
153
|
+
|
|
154
|
+
VALUE get_image() const;
|
|
155
|
+
void set_image(VALUE image);
|
|
156
|
+
|
|
157
|
+
void draw_on(ray_image &image);
|
|
158
|
+
private:
|
|
159
|
+
sf::Sprite sprite;
|
|
160
|
+
VALUE self;
|
|
161
|
+
};
|
|
162
|
+
|
|
163
|
+
typedef sf::Font ray_font;
|
|
164
|
+
|
|
165
|
+
class ray_audio_source {
|
|
166
|
+
public:
|
|
167
|
+
virtual ~ray_audio_source() {}
|
|
168
|
+
|
|
169
|
+
void set_pitch(float value);
|
|
170
|
+
float pitch() const;
|
|
171
|
+
|
|
172
|
+
void set_position(const ray_vector3 &vector);
|
|
173
|
+
ray_vector3 position() const;
|
|
174
|
+
|
|
175
|
+
void set_relative(bool value);
|
|
176
|
+
bool is_relative() const;
|
|
177
|
+
|
|
178
|
+
void set_min_distance(float value);
|
|
179
|
+
float min_distance() const;
|
|
180
|
+
|
|
181
|
+
void set_attenuation(float value);
|
|
182
|
+
float attenuation() const;
|
|
183
|
+
|
|
184
|
+
void set_volume(float value);
|
|
185
|
+
float volume() const;
|
|
186
|
+
protected:
|
|
187
|
+
virtual sf::SoundSource &source() = 0;
|
|
188
|
+
virtual const sf::SoundSource &source() const = 0;
|
|
189
|
+
};
|
|
190
|
+
|
|
191
|
+
class ray_sound : public ray_audio_source {
|
|
192
|
+
public:
|
|
193
|
+
bool load_from_io(VALUE io);
|
|
194
|
+
bool load_from_filename(const std::string &filename);
|
|
195
|
+
bool create_from_sound(const ray_sound &sound);
|
|
196
|
+
|
|
197
|
+
void play();
|
|
198
|
+
void pause();
|
|
199
|
+
void stop();
|
|
200
|
+
|
|
201
|
+
sf::SoundSource::Status status() const;
|
|
202
|
+
|
|
203
|
+
void set_loop(bool value);
|
|
204
|
+
bool is_looping() const;
|
|
205
|
+
|
|
206
|
+
void set_current_time(float value);
|
|
207
|
+
float current_time() const;
|
|
208
|
+
protected:
|
|
209
|
+
sf::SoundSource &source();
|
|
210
|
+
const sf::SoundSource &source() const;
|
|
211
|
+
private:
|
|
212
|
+
sf::SoundBuffer sound_buffer;
|
|
213
|
+
sf::Sound sound;
|
|
214
|
+
};
|
|
215
|
+
|
|
216
|
+
class ray_music : public ray_audio_source {
|
|
217
|
+
public:
|
|
218
|
+
bool load_from_io(VALUE self, VALUE io);
|
|
219
|
+
bool load_from_filename(const std::string &filename);
|
|
220
|
+
|
|
221
|
+
void play();
|
|
222
|
+
void pause();
|
|
223
|
+
void stop();
|
|
224
|
+
|
|
225
|
+
sf::SoundSource::Status status() const;
|
|
226
|
+
|
|
227
|
+
void set_loop(bool value);
|
|
228
|
+
bool is_looping() const;
|
|
229
|
+
|
|
230
|
+
void set_current_time(float value);
|
|
231
|
+
float current_time() const;
|
|
232
|
+
|
|
233
|
+
float duration() const;
|
|
234
|
+
|
|
235
|
+
int sample_rate() const;
|
|
236
|
+
int channel_count() const;
|
|
237
|
+
protected:
|
|
238
|
+
sf::SoundSource &source();
|
|
239
|
+
const sf::SoundSource &source() const;
|
|
240
|
+
private:
|
|
241
|
+
sf::Music music;
|
|
242
|
+
};
|
|
243
|
+
|
|
244
|
+
typedef sf::Event ray_event;
|
|
245
|
+
|
|
246
|
+
class ray_drawable {
|
|
247
|
+
public:
|
|
248
|
+
ray_drawable(): block(Qnil) {}
|
|
249
|
+
~ray_drawable();
|
|
250
|
+
|
|
251
|
+
void render(VALUE image);
|
|
252
|
+
|
|
253
|
+
void set_block(VALUE val);
|
|
254
|
+
private:
|
|
255
|
+
VALUE block;
|
|
256
|
+
};
|
|
257
|
+
|
|
258
|
+
/* Convertion functions */
|
|
259
|
+
|
|
260
|
+
/** Converts a color into a ruby object */
|
|
261
|
+
VALUE ray_col2rb(const ray_color &color);
|
|
262
|
+
|
|
263
|
+
/** Converts a rect into a ruby object */
|
|
264
|
+
VALUE ray_rect2rb(const ray_rect &rect);
|
|
265
|
+
|
|
266
|
+
VALUE ray_vector2_to_rb(const ray_vector2 &vector);
|
|
267
|
+
VALUE ray_vector3_to_rb(const ray_vector3 &vector);
|
|
268
|
+
|
|
269
|
+
/** Converts a font into a ruby object */
|
|
270
|
+
VALUE ray_font2rb(const ray_font &font);
|
|
271
|
+
|
|
272
|
+
/** Converts a ruby object into a color */
|
|
273
|
+
ray_color ray_rb2col(VALUE object);
|
|
274
|
+
|
|
275
|
+
/** Parses a hash to create a video mode */
|
|
276
|
+
ray_video_mode ray_parse_video_mode(VALUE hash);
|
|
277
|
+
|
|
278
|
+
/** Converts a ruby object into an image*/
|
|
279
|
+
ray_image *ray_rb2image(VALUE object);
|
|
280
|
+
|
|
281
|
+
/** Returns a Ruby object representing the screen */
|
|
282
|
+
VALUE ray_create_screen();
|
|
283
|
+
|
|
284
|
+
/** Converts a ruby object into a rect */
|
|
285
|
+
ray_rect ray_rb2rect(VALUE object);
|
|
286
|
+
|
|
287
|
+
/** Converts a ruby object into a shape */
|
|
288
|
+
sf::Shape *ray_rb2shape(VALUE object);
|
|
289
|
+
|
|
290
|
+
/** Converts a ruby object into a shader */
|
|
291
|
+
sf::Shader *ray_rb2shader(VALUE object);
|
|
292
|
+
|
|
293
|
+
/**
|
|
294
|
+
Converts a ruby object into a rect even if it's not an instance
|
|
295
|
+
of Ray::Rect.
|
|
296
|
+
*/
|
|
297
|
+
ray_rect ray_convert_to_rect(VALUE obj);
|
|
298
|
+
|
|
299
|
+
/** Converts a ruby object into a vector2 using #to_vector2 */
|
|
300
|
+
ray_vector2 ray_convert_to_vector2(VALUE obj);
|
|
301
|
+
|
|
302
|
+
/** Converts a ruby object into a vector3 using #to_vector3 */
|
|
303
|
+
ray_vector3 ray_convert_to_vector3(VALUE obj);
|
|
304
|
+
|
|
305
|
+
/** Converts a ruby object into an event */
|
|
306
|
+
ray_event *ray_rb2event(VALUE object);
|
|
307
|
+
|
|
308
|
+
/** Converts a ruby object into a font */
|
|
309
|
+
ray_font *ray_rb2font(VALUE object);
|
|
310
|
+
|
|
311
|
+
/** Converts a ruby object into an audio source */
|
|
312
|
+
ray_audio_source *ray_rb2source(VALUE object);
|
|
313
|
+
|
|
314
|
+
/** Converts a ruby object into a sound */
|
|
315
|
+
ray_sound *ray_rb2sound(VALUE object);
|
|
316
|
+
|
|
317
|
+
/** Converts a ruby object into a music */
|
|
318
|
+
ray_music *ray_rb2music(VALUE object);
|
|
319
|
+
|
|
320
|
+
/** Converts a ruby object into a drawable */
|
|
321
|
+
ray_drawable *ray_rb2drawable(VALUE obj);
|
|
322
|
+
|
|
323
|
+
/* Initializers */
|
|
324
|
+
|
|
325
|
+
extern "C" void Init_ray_ext();
|
|
326
|
+
void Init_ray_image();
|
|
327
|
+
void Init_ray_sprite();
|
|
328
|
+
void Init_ray_color();
|
|
329
|
+
void Init_ray_rect();
|
|
330
|
+
void Init_ray_vector();
|
|
331
|
+
void Init_ray_event();
|
|
332
|
+
void Init_ray_input();
|
|
333
|
+
void Init_ray_shape();
|
|
334
|
+
void Init_ray_font();
|
|
335
|
+
void Init_ray_text();
|
|
336
|
+
void Init_ray_audio();
|
|
337
|
+
void Init_ray_drawable();
|
|
338
|
+
void Init_ray_shader();
|
|
339
|
+
|
|
340
|
+
/* Hack to make it compile, and still let YARD parse the source code: */
|
|
341
|
+
|
|
342
|
+
#if !RUBINIUS /* Won't work on Rubinius, and unneeded */
|
|
343
|
+
# define rb_define_method(klass, name, func, argc) \
|
|
344
|
+
rb_define_method(klass, name, (VALUE (*)(...))(func), argc)
|
|
345
|
+
|
|
346
|
+
# define rb_define_singleton_method(klass, name, func, argc) \
|
|
347
|
+
rb_define_singleton_method(klass, name, (VALUE (*)(...))(func), argc)
|
|
348
|
+
#endif
|
|
349
|
+
|
|
350
|
+
#define rb_define_module_function(klass, name, func, argc) \
|
|
351
|
+
rb_define_module_function(klass, name, (VALUE (*)(...))(func), argc)
|
|
352
|
+
|
|
353
|
+
#define rb_ensure(func1, arg1, func2, arg2) \
|
|
354
|
+
rb_ensure((VALUE (*)(...))(func1), arg1, (VALUE (*)(...))func2, arg2)
|
|
355
|
+
|
|
356
|
+
#endif
|