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/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
|