ruby2d 0.9.2 → 0.10.0
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.
- checksums.yaml +4 -4
- data/assets/README.md +7 -8
- data/assets/Rakefile +85 -0
- data/assets/include/SDL2/SDL.h +4 -1
- data/assets/include/SDL2/SDL_assert.h +3 -1
- data/assets/include/SDL2/SDL_atomic.h +20 -2
- data/assets/include/SDL2/SDL_audio.h +47 -14
- data/assets/include/SDL2/SDL_bits.h +10 -1
- data/assets/include/SDL2/SDL_blendmode.h +10 -7
- data/assets/include/SDL2/SDL_clipboard.h +1 -1
- data/assets/include/SDL2/SDL_config.h +24 -390
- data/assets/include/SDL2/SDL_config_android.h +182 -0
- data/assets/include/SDL2/SDL_config_iphoneos.h +207 -0
- data/assets/include/SDL2/SDL_config_macosx.h +266 -0
- data/assets/include/SDL2/SDL_config_minimal.h +85 -0
- data/assets/include/SDL2/SDL_config_os2.h +188 -0
- data/assets/include/SDL2/SDL_config_pandora.h +135 -0
- data/assets/include/SDL2/SDL_config_psp.h +165 -0
- data/assets/include/SDL2/SDL_config_windows.h +288 -0
- data/assets/include/SDL2/SDL_config_winrt.h +243 -0
- data/assets/include/SDL2/SDL_config_wiz.h +149 -0
- data/assets/include/SDL2/SDL_copying.h +20 -0
- data/assets/include/SDL2/SDL_cpuinfo.h +119 -8
- data/assets/include/SDL2/SDL_egl.h +4 -1
- data/assets/include/SDL2/SDL_endian.h +6 -3
- data/assets/include/SDL2/SDL_error.h +38 -2
- data/assets/include/SDL2/SDL_events.h +67 -28
- data/assets/include/SDL2/SDL_filesystem.h +1 -1
- data/assets/include/SDL2/SDL_gamecontroller.h +160 -9
- data/assets/include/SDL2/SDL_gesture.h +1 -1
- data/assets/include/SDL2/SDL_haptic.h +10 -1
- data/assets/include/SDL2/SDL_hints.h +460 -17
- data/assets/include/SDL2/SDL_image.h +2 -2
- data/assets/include/SDL2/SDL_joystick.h +115 -24
- data/assets/include/SDL2/SDL_keyboard.h +1 -1
- data/assets/include/SDL2/SDL_keycode.h +11 -9
- data/assets/include/SDL2/SDL_loadso.h +1 -1
- data/assets/include/SDL2/SDL_locale.h +101 -0
- data/assets/include/SDL2/SDL_log.h +3 -3
- data/assets/include/SDL2/SDL_main.h +28 -16
- data/assets/include/SDL2/SDL_messagebox.h +6 -4
- data/assets/include/SDL2/SDL_metal.h +117 -0
- data/assets/include/SDL2/SDL_misc.h +75 -0
- data/assets/include/SDL2/SDL_mouse.h +1 -1
- data/assets/include/SDL2/SDL_mutex.h +1 -1
- data/assets/include/SDL2/SDL_name.h +1 -1
- data/assets/include/SDL2/SDL_opengl.h +1 -1
- data/assets/include/SDL2/SDL_opengl_glext.h +3 -0
- data/assets/include/SDL2/SDL_opengles.h +1 -1
- data/assets/include/SDL2/SDL_opengles2.h +1 -1
- data/assets/include/SDL2/SDL_pixels.h +27 -18
- data/assets/include/SDL2/SDL_platform.h +1 -1
- data/assets/include/SDL2/SDL_power.h +1 -1
- data/assets/include/SDL2/SDL_quit.h +1 -1
- data/assets/include/SDL2/SDL_rect.h +29 -3
- data/assets/include/SDL2/SDL_render.h +230 -3
- data/assets/include/SDL2/SDL_revision.h +2 -2
- data/assets/include/SDL2/SDL_rwops.h +51 -22
- data/assets/include/SDL2/SDL_scancode.h +2 -2
- data/assets/include/SDL2/SDL_sensor.h +28 -12
- data/assets/include/SDL2/SDL_shape.h +1 -1
- data/assets/include/SDL2/SDL_stdinc.h +44 -4
- data/assets/include/SDL2/SDL_surface.h +12 -2
- data/assets/include/SDL2/SDL_system.h +50 -4
- data/assets/include/SDL2/SDL_syswm.h +39 -9
- data/assets/include/SDL2/SDL_test.h +1 -1
- data/assets/include/SDL2/SDL_test_assert.h +1 -1
- data/assets/include/SDL2/SDL_test_common.h +32 -2
- data/assets/include/SDL2/SDL_test_compare.h +1 -1
- data/assets/include/SDL2/SDL_test_crc32.h +1 -1
- data/assets/include/SDL2/SDL_test_font.h +1 -1
- data/assets/include/SDL2/SDL_test_fuzzer.h +1 -1
- data/assets/include/SDL2/SDL_test_harness.h +1 -1
- data/assets/include/SDL2/SDL_test_images.h +1 -1
- data/assets/include/SDL2/SDL_test_log.h +1 -1
- data/assets/include/SDL2/SDL_test_md5.h +1 -1
- data/assets/include/SDL2/SDL_test_memory.h +3 -3
- data/assets/include/SDL2/SDL_test_random.h +1 -1
- data/assets/include/SDL2/SDL_thread.h +34 -11
- data/assets/include/SDL2/SDL_timer.h +1 -1
- data/assets/include/SDL2/SDL_touch.h +17 -1
- data/assets/include/SDL2/SDL_types.h +1 -1
- data/assets/include/SDL2/SDL_version.h +2 -2
- data/assets/include/SDL2/SDL_video.h +11 -5
- data/assets/include/SDL2/SDL_vulkan.h +9 -11
- data/assets/include/SDL2/begin_code.h +8 -9
- data/assets/include/SDL2/close_code.h +4 -1
- data/assets/macos/lib/libFLAC.a +0 -0
- data/assets/macos/lib/libSDL2.a +0 -0
- data/assets/macos/lib/libSDL2_image.a +0 -0
- data/assets/macos/lib/libSDL2_mixer.a +0 -0
- data/assets/macos/lib/libSDL2_ttf.a +0 -0
- data/assets/macos/lib/libfreetype.a +0 -0
- data/assets/macos/lib/libjpeg.a +0 -0
- data/assets/macos/lib/libmpg123.a +0 -0
- data/assets/macos/lib/libogg.a +0 -0
- data/assets/macos/lib/libpng16.a +0 -0
- data/assets/macos/lib/libtiff.a +0 -0
- data/assets/macos/lib/libvorbis.a +0 -0
- data/assets/macos/lib/libvorbisfile.a +0 -0
- data/assets/macos/lib/libwebp.a +0 -0
- data/assets/mingw/bin/SDL2.dll +0 -0
- data/assets/mingw/bin/SDL2_image.dll +0 -0
- data/assets/mingw/bin/libpng16-16.dll +0 -0
- data/assets/mingw/bin/libtiff-5.dll +0 -0
- data/assets/mingw/bin/libwebp-7.dll +0 -0
- data/assets/mingw/lib/libSDL2.a +0 -0
- data/assets/mingw/lib/libSDL2.dll.a +0 -0
- data/assets/mingw/lib/libSDL2_image.a +0 -0
- data/assets/mingw/lib/libSDL2_image.dll.a +0 -0
- data/assets/mingw/lib/libSDL2_test.a +0 -0
- data/assets/mingw/lib/libSDL2main.a +0 -0
- data/bin/ruby2d +2 -1
- data/{assets/linux/simple2d/src/simple2d.c → ext/ruby2d/common.c} +32 -32
- data/{assets/linux/simple2d/src → ext/ruby2d}/controllers.c +17 -17
- data/ext/ruby2d/extconf.rb +6 -36
- data/{assets/linux/simple2d/src → ext/ruby2d}/gl.c +106 -85
- data/{assets/linux/simple2d/src → ext/ruby2d}/gl2.c +35 -20
- data/{assets/linux/simple2d/src → ext/ruby2d}/gl3.c +146 -58
- data/{assets/linux/simple2d/src → ext/ruby2d}/gles.c +41 -26
- data/{assets/linux/simple2d/src → ext/ruby2d}/image.c +16 -16
- data/{assets/linux/simple2d/src → ext/ruby2d}/input.c +8 -8
- data/{assets/linux/simple2d/src → ext/ruby2d}/music.c +30 -17
- data/ext/ruby2d/ruby2d.c +427 -290
- data/ext/ruby2d/ruby2d.h +789 -0
- data/{assets/linux/simple2d/src → ext/ruby2d}/shapes.c +18 -18
- data/ext/ruby2d/sound.c +118 -0
- data/{assets/linux/simple2d/src → ext/ruby2d}/sprite.c +16 -16
- data/{assets/linux/simple2d/src → ext/ruby2d}/text.c +22 -22
- data/ext/ruby2d/tileset.c +30 -0
- data/{assets/linux/simple2d/src → ext/ruby2d}/window.c +71 -60
- data/lib/ruby2d.rb +5 -2
- data/lib/ruby2d/circle.rb +18 -2
- data/lib/ruby2d/cli/build.rb +3 -8
- data/lib/ruby2d/cli/colorize.rb +10 -0
- data/lib/ruby2d/dsl.rb +16 -9
- data/lib/ruby2d/entity.rb +17 -0
- data/lib/ruby2d/font.rb +4 -3
- data/lib/ruby2d/image.rb +24 -1
- data/lib/ruby2d/line.rb +20 -0
- data/lib/ruby2d/music.rb +5 -0
- data/lib/ruby2d/pixel.rb +17 -0
- data/lib/ruby2d/quad.rb +18 -0
- data/lib/ruby2d/rectangle.rb +11 -2
- data/lib/ruby2d/renderable.rb +4 -8
- data/lib/ruby2d/sound.rb +5 -0
- data/lib/ruby2d/sprite.rb +35 -3
- data/lib/ruby2d/square.rb +9 -0
- data/lib/ruby2d/text.rb +22 -1
- data/lib/ruby2d/tileset.rb +69 -0
- data/lib/ruby2d/triangle.rb +16 -0
- data/lib/ruby2d/version.rb +1 -1
- data/lib/ruby2d/window.rb +249 -22
- metadata +41 -27
- data/assets/include/simple2d.h +0 -735
- data/assets/linux/simple2d/Makefile +0 -250
- data/assets/linux/simple2d/bin/simple2d.sh +0 -1249
- data/assets/linux/simple2d/include/simple2d.h +0 -735
- data/assets/linux/simple2d/src/sound.c +0 -56
- data/assets/macos/lib/libsimple2d.a +0 -0
- data/assets/mingw/lib/libsimple2d.a +0 -0
- data/lib/ruby2d/colorize.rb +0 -10
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// shapes.c
|
|
2
2
|
|
|
3
|
-
#include "
|
|
3
|
+
#include "ruby2d.h"
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
/*
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* rx The x coordinate to rotate around
|
|
12
12
|
* ry The y coordinate to rotate around
|
|
13
13
|
*/
|
|
14
|
-
|
|
14
|
+
R2D_GL_Point R2D_RotatePoint(R2D_GL_Point p, GLfloat angle, GLfloat rx, GLfloat ry) {
|
|
15
15
|
|
|
16
16
|
// Convert from degrees to radians
|
|
17
17
|
angle = angle * M_PI / 180.0;
|
|
@@ -39,28 +39,28 @@ S2D_GL_Point S2D_RotatePoint(S2D_GL_Point p, GLfloat angle, GLfloat rx, GLfloat
|
|
|
39
39
|
/*
|
|
40
40
|
* Get the point to be rotated around given a position in a rectangle
|
|
41
41
|
*/
|
|
42
|
-
|
|
42
|
+
R2D_GL_Point R2D_GetRectRotationPoint(int x, int y, int w, int h, int position) {
|
|
43
43
|
|
|
44
|
-
|
|
44
|
+
R2D_GL_Point p;
|
|
45
45
|
|
|
46
46
|
switch (position) {
|
|
47
|
-
case
|
|
47
|
+
case R2D_CENTER:
|
|
48
48
|
p.x = x + (w / 2.0);
|
|
49
49
|
p.y = y + (h / 2.0);
|
|
50
50
|
break;
|
|
51
|
-
case
|
|
51
|
+
case R2D_TOP_LEFT:
|
|
52
52
|
p.x = x;
|
|
53
53
|
p.y = y;
|
|
54
54
|
break;
|
|
55
|
-
case
|
|
55
|
+
case R2D_TOP_RIGHT:
|
|
56
56
|
p.x = x + w;
|
|
57
57
|
p.y = y;
|
|
58
58
|
break;
|
|
59
|
-
case
|
|
59
|
+
case R2D_BOTTOM_LEFT:
|
|
60
60
|
p.x = x;
|
|
61
61
|
p.y = y + h;
|
|
62
62
|
break;
|
|
63
|
-
case
|
|
63
|
+
case R2D_BOTTOM_RIGHT:
|
|
64
64
|
p.x = x + w;
|
|
65
65
|
p.y = y + h;
|
|
66
66
|
break;
|
|
@@ -73,14 +73,14 @@ S2D_GL_Point S2D_GetRectRotationPoint(int x, int y, int w, int h, int position)
|
|
|
73
73
|
/*
|
|
74
74
|
* Draw a triangle
|
|
75
75
|
*/
|
|
76
|
-
void
|
|
76
|
+
void R2D_DrawTriangle(GLfloat x1, GLfloat y1,
|
|
77
77
|
GLfloat r1, GLfloat g1, GLfloat b1, GLfloat a1,
|
|
78
78
|
GLfloat x2, GLfloat y2,
|
|
79
79
|
GLfloat r2, GLfloat g2, GLfloat b2, GLfloat a2,
|
|
80
80
|
GLfloat x3, GLfloat y3,
|
|
81
81
|
GLfloat r3, GLfloat g3, GLfloat b3, GLfloat a3) {
|
|
82
82
|
|
|
83
|
-
|
|
83
|
+
R2D_GL_DrawTriangle(x1, y1, r1, g1, b1, a1,
|
|
84
84
|
x2, y2, r2, g2, b2, a2,
|
|
85
85
|
x3, y3, r3, g3, b3, a3);
|
|
86
86
|
}
|
|
@@ -89,7 +89,7 @@ void S2D_DrawTriangle(GLfloat x1, GLfloat y1,
|
|
|
89
89
|
/*
|
|
90
90
|
* Draw a quad, using two triangles
|
|
91
91
|
*/
|
|
92
|
-
void
|
|
92
|
+
void R2D_DrawQuad(GLfloat x1, GLfloat y1,
|
|
93
93
|
GLfloat r1, GLfloat g1, GLfloat b1, GLfloat a1,
|
|
94
94
|
GLfloat x2, GLfloat y2,
|
|
95
95
|
GLfloat r2, GLfloat g2, GLfloat b2, GLfloat a2,
|
|
@@ -98,11 +98,11 @@ void S2D_DrawQuad(GLfloat x1, GLfloat y1,
|
|
|
98
98
|
GLfloat x4, GLfloat y4,
|
|
99
99
|
GLfloat r4, GLfloat g4, GLfloat b4, GLfloat a4) {
|
|
100
100
|
|
|
101
|
-
|
|
101
|
+
R2D_GL_DrawTriangle(x1, y1, r1, g1, b1, a1,
|
|
102
102
|
x2, y2, r2, g2, b2, a2,
|
|
103
103
|
x3, y3, r3, g3, b3, a3);
|
|
104
104
|
|
|
105
|
-
|
|
105
|
+
R2D_GL_DrawTriangle(x3, y3, r3, g3, b3, a3,
|
|
106
106
|
x4, y4, r4, g4, b4, a4,
|
|
107
107
|
x1, y1, r1, g1, b1, a1);
|
|
108
108
|
};
|
|
@@ -111,7 +111,7 @@ void S2D_DrawQuad(GLfloat x1, GLfloat y1,
|
|
|
111
111
|
/*
|
|
112
112
|
* Draw a line from a quad
|
|
113
113
|
*/
|
|
114
|
-
void
|
|
114
|
+
void R2D_DrawLine(GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2,
|
|
115
115
|
GLfloat width,
|
|
116
116
|
GLfloat r1, GLfloat g1, GLfloat b1, GLfloat a1,
|
|
117
117
|
GLfloat r2, GLfloat g2, GLfloat b2, GLfloat a2,
|
|
@@ -122,7 +122,7 @@ void S2D_DrawLine(GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2,
|
|
|
122
122
|
double x = ((x2 - x1) / length) * width / 2;
|
|
123
123
|
double y = ((y2 - y1) / length) * width / 2;
|
|
124
124
|
|
|
125
|
-
|
|
125
|
+
R2D_DrawQuad(
|
|
126
126
|
x1 - y, y1 + x, r1, g1, b1, a1,
|
|
127
127
|
x1 + y, y1 - x, r2, g2, b2, a2,
|
|
128
128
|
x2 + y, y2 - x, r3, g3, b3, a3,
|
|
@@ -134,7 +134,7 @@ void S2D_DrawLine(GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2,
|
|
|
134
134
|
/*
|
|
135
135
|
* Draw a circle from triangles
|
|
136
136
|
*/
|
|
137
|
-
void
|
|
137
|
+
void R2D_DrawCircle(GLfloat x, GLfloat y, GLfloat radius, int sectors,
|
|
138
138
|
GLfloat r, GLfloat g, GLfloat b, GLfloat a) {
|
|
139
139
|
|
|
140
140
|
double angle = 2 * M_PI / sectors;
|
|
@@ -147,7 +147,7 @@ void S2D_DrawCircle(GLfloat x, GLfloat y, GLfloat radius, int sectors,
|
|
|
147
147
|
GLfloat x2 = x + radius * cos((i - 1) * angle);
|
|
148
148
|
GLfloat y2 = y + radius * sin((i - 1) * angle);
|
|
149
149
|
|
|
150
|
-
|
|
150
|
+
R2D_GL_DrawTriangle( x, y, r, g, b, a,
|
|
151
151
|
x1, y1, r, g, b, a,
|
|
152
152
|
x2, y2, r, g, b, a);
|
|
153
153
|
}
|
data/ext/ruby2d/sound.c
ADDED
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
// sound.c
|
|
2
|
+
|
|
3
|
+
#include "ruby2d.h"
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
/*
|
|
7
|
+
* Create a sound, given an audio file path
|
|
8
|
+
*/
|
|
9
|
+
R2D_Sound *R2D_CreateSound(const char *path) {
|
|
10
|
+
R2D_Init();
|
|
11
|
+
|
|
12
|
+
// Check if sound file exists
|
|
13
|
+
if (!R2D_FileExists(path)) {
|
|
14
|
+
R2D_Error("R2D_CreateSound", "Sound file `%s` not found", path);
|
|
15
|
+
return NULL;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
// Allocate the sound structure
|
|
19
|
+
R2D_Sound *snd = (R2D_Sound *) malloc(sizeof(R2D_Sound));
|
|
20
|
+
if (!snd) {
|
|
21
|
+
R2D_Error("R2D_CreateSound", "Out of memory!");
|
|
22
|
+
return NULL;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
// Load the sound data from file
|
|
26
|
+
snd->data = Mix_LoadWAV(path);
|
|
27
|
+
if (!snd->data) {
|
|
28
|
+
R2D_Error("Mix_LoadWAV", Mix_GetError());
|
|
29
|
+
free(snd);
|
|
30
|
+
return NULL;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// Initialize values
|
|
34
|
+
snd->path = path;
|
|
35
|
+
|
|
36
|
+
return snd;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
/*
|
|
41
|
+
* Play the sound
|
|
42
|
+
*/
|
|
43
|
+
void R2D_PlaySound(R2D_Sound *snd) {
|
|
44
|
+
if (!snd) return;
|
|
45
|
+
Mix_PlayChannel(-1, snd->data, 0);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
/*
|
|
50
|
+
* Get the sound's length in seconds
|
|
51
|
+
*/
|
|
52
|
+
int R2D_GetSoundLength(R2D_Sound *snd) {
|
|
53
|
+
float points = 0;
|
|
54
|
+
float frames = 0;
|
|
55
|
+
int frequency = 0;
|
|
56
|
+
Uint16 format = 0;
|
|
57
|
+
int channels = 0;
|
|
58
|
+
|
|
59
|
+
// Populate the frequency, format and channel variables
|
|
60
|
+
if (!Mix_QuerySpec(&frequency, &format, &channels)) return -1; // Querying audio deails failed
|
|
61
|
+
if (!snd) return -1;
|
|
62
|
+
|
|
63
|
+
// points = bytes / samplesize
|
|
64
|
+
points = (snd->data->alen / ((format & 0xFF) / 8));
|
|
65
|
+
|
|
66
|
+
// frames = sample points / channels
|
|
67
|
+
frames = (points / channels);
|
|
68
|
+
|
|
69
|
+
// frames / frequency is seconds of audio
|
|
70
|
+
return ceil(frames / frequency);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
/*
|
|
75
|
+
* Get the sound's volume
|
|
76
|
+
*/
|
|
77
|
+
int R2D_GetSoundVolume(R2D_Sound *snd) {
|
|
78
|
+
if (!snd) return -1;
|
|
79
|
+
return ceil(Mix_VolumeChunk(snd->data, -1) * (100.0 / MIX_MAX_VOLUME));
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
/*
|
|
84
|
+
* Set the sound's volume a given percentage
|
|
85
|
+
*/
|
|
86
|
+
void R2D_SetSoundVolume(R2D_Sound *snd, int volume) {
|
|
87
|
+
if (!snd) return;
|
|
88
|
+
// Set volume to be a percentage of the maximum mix volume
|
|
89
|
+
Mix_VolumeChunk(snd->data, (volume / 100.0) * MIX_MAX_VOLUME);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
/*
|
|
94
|
+
* Get the sound mixer volume
|
|
95
|
+
*/
|
|
96
|
+
int R2D_GetSoundMixVolume() {
|
|
97
|
+
return ceil(Mix_Volume(-1, -1) * (100.0 / MIX_MAX_VOLUME));
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
/*
|
|
102
|
+
* Set the sound mixer volume a given percentage
|
|
103
|
+
*/
|
|
104
|
+
void R2D_SetSoundMixVolume(int volume) {
|
|
105
|
+
// This sets the volume value across all channels
|
|
106
|
+
// Set volume to be a percentage of the maximum mix volume
|
|
107
|
+
Mix_Volume(-1, (volume / 100.0) * MIX_MAX_VOLUME);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
/*
|
|
112
|
+
* Free the sound
|
|
113
|
+
*/
|
|
114
|
+
void R2D_FreeSound(R2D_Sound *snd) {
|
|
115
|
+
if (!snd) return;
|
|
116
|
+
Mix_FreeChunk(snd->data);
|
|
117
|
+
free(snd);
|
|
118
|
+
}
|
|
@@ -1,30 +1,30 @@
|
|
|
1
1
|
// sprite.c
|
|
2
2
|
|
|
3
|
-
#include "
|
|
3
|
+
#include "ruby2d.h"
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
/*
|
|
7
7
|
* Create a sprite, given an image file path
|
|
8
8
|
*/
|
|
9
|
-
|
|
9
|
+
R2D_Sprite *R2D_CreateSprite(const char *path) {
|
|
10
10
|
|
|
11
11
|
// Check if image file exists
|
|
12
|
-
if (!
|
|
13
|
-
|
|
12
|
+
if (!R2D_FileExists(path)) {
|
|
13
|
+
R2D_Error("R2D_CreateSprite", "Sprite image file `%s` not found", path);
|
|
14
14
|
return NULL;
|
|
15
15
|
}
|
|
16
16
|
|
|
17
17
|
// Allocate the sprite structure
|
|
18
|
-
|
|
18
|
+
R2D_Sprite *spr = (R2D_Sprite *) malloc(sizeof(R2D_Sprite));
|
|
19
19
|
if (!spr) {
|
|
20
|
-
|
|
20
|
+
R2D_Error("R2D_CreateSprite", "Out of memory!");
|
|
21
21
|
return NULL;
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
// Load the sprite image file
|
|
25
|
-
spr->img =
|
|
25
|
+
spr->img = R2D_CreateImage(path);
|
|
26
26
|
if (!spr->img) {
|
|
27
|
-
|
|
27
|
+
R2D_Error("R2D_CreateSprite", "Cannot create sprite image `%s`", path);
|
|
28
28
|
free(spr);
|
|
29
29
|
return NULL;
|
|
30
30
|
}
|
|
@@ -60,7 +60,7 @@ S2D_Sprite *S2D_CreateSprite(const char *path) {
|
|
|
60
60
|
/*
|
|
61
61
|
* Clip a sprite
|
|
62
62
|
*/
|
|
63
|
-
void
|
|
63
|
+
void R2D_ClipSprite(R2D_Sprite *spr, int x, int y, int w, int h) {
|
|
64
64
|
if (!spr) return;
|
|
65
65
|
|
|
66
66
|
// Calculate ratios
|
|
@@ -108,9 +108,9 @@ void S2D_ClipSprite(S2D_Sprite *spr, int x, int y, int w, int h) {
|
|
|
108
108
|
/*
|
|
109
109
|
* Rotate a sprite
|
|
110
110
|
*/
|
|
111
|
-
void
|
|
111
|
+
void R2D_RotateSprite(R2D_Sprite *spr, GLfloat angle, int position) {
|
|
112
112
|
|
|
113
|
-
|
|
113
|
+
R2D_GL_Point p = R2D_GetRectRotationPoint(
|
|
114
114
|
spr->x, spr->y, spr->width, spr->height, position
|
|
115
115
|
);
|
|
116
116
|
|
|
@@ -123,25 +123,25 @@ void S2D_RotateSprite(S2D_Sprite *spr, GLfloat angle, int position) {
|
|
|
123
123
|
/*
|
|
124
124
|
* Draw a sprite
|
|
125
125
|
*/
|
|
126
|
-
void
|
|
126
|
+
void R2D_DrawSprite(R2D_Sprite *spr) {
|
|
127
127
|
if (!spr) return;
|
|
128
128
|
|
|
129
129
|
if (spr->img->texture_id == 0) {
|
|
130
|
-
|
|
130
|
+
R2D_GL_CreateTexture(&spr->img->texture_id, spr->img->format,
|
|
131
131
|
spr->img->width, spr->img->height,
|
|
132
132
|
spr->img->surface->pixels, GL_NEAREST);
|
|
133
133
|
SDL_FreeSurface(spr->img->surface);
|
|
134
134
|
}
|
|
135
135
|
|
|
136
|
-
|
|
136
|
+
R2D_GL_DrawSprite(spr);
|
|
137
137
|
}
|
|
138
138
|
|
|
139
139
|
|
|
140
140
|
/*
|
|
141
141
|
* Free a sprite
|
|
142
142
|
*/
|
|
143
|
-
void
|
|
143
|
+
void R2D_FreeSprite(R2D_Sprite *spr) {
|
|
144
144
|
if (!spr) return;
|
|
145
|
-
|
|
145
|
+
R2D_FreeImage(spr->img);
|
|
146
146
|
free(spr);
|
|
147
147
|
}
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
// text.c
|
|
2
2
|
|
|
3
|
-
#include "
|
|
3
|
+
#include "ruby2d.h"
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
/*
|
|
7
7
|
* Create text, given a font file path, the message, and size
|
|
8
8
|
*/
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
R2D_Text *R2D_CreateText(const char *font, const char *msg, int size) {
|
|
10
|
+
R2D_Init();
|
|
11
11
|
|
|
12
12
|
// Check if font file exists
|
|
13
|
-
if (!
|
|
14
|
-
|
|
13
|
+
if (!R2D_FileExists(font)) {
|
|
14
|
+
R2D_Error("R2D_CreateText", "Font file `%s` not found", font);
|
|
15
15
|
return NULL;
|
|
16
16
|
}
|
|
17
17
|
|
|
@@ -19,16 +19,16 @@ S2D_Text *S2D_CreateText(const char *font, const char *msg, int size) {
|
|
|
19
19
|
if (msg == NULL || strlen(msg) == 0) msg = " ";
|
|
20
20
|
|
|
21
21
|
// Allocate the text structure
|
|
22
|
-
|
|
22
|
+
R2D_Text *txt = (R2D_Text *) malloc(sizeof(R2D_Text));
|
|
23
23
|
if (!txt) {
|
|
24
|
-
|
|
24
|
+
R2D_Error("R2D_CreateText", "Out of memory!");
|
|
25
25
|
return NULL;
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
// Open the font
|
|
29
29
|
txt->font_data = TTF_OpenFont(font, size);
|
|
30
30
|
if (!txt->font_data) {
|
|
31
|
-
|
|
31
|
+
R2D_Error("TTF_OpenFont", TTF_GetError());
|
|
32
32
|
free(txt);
|
|
33
33
|
return NULL;
|
|
34
34
|
}
|
|
@@ -49,7 +49,7 @@ S2D_Text *S2D_CreateText(const char *font, const char *msg, int size) {
|
|
|
49
49
|
txt->texture_id = 0;
|
|
50
50
|
|
|
51
51
|
// Save the width and height of the text
|
|
52
|
-
|
|
52
|
+
TTF_SizeUTF8(txt->font_data, txt->msg, &txt->width, &txt->height);
|
|
53
53
|
|
|
54
54
|
return txt;
|
|
55
55
|
}
|
|
@@ -58,10 +58,10 @@ S2D_Text *S2D_CreateText(const char *font, const char *msg, int size) {
|
|
|
58
58
|
/*
|
|
59
59
|
* Set the text message
|
|
60
60
|
*/
|
|
61
|
-
void
|
|
61
|
+
void R2D_SetText(R2D_Text *txt, const char *msg, ...) {
|
|
62
62
|
if (!txt) return;
|
|
63
63
|
|
|
64
|
-
// `msg` cannot be an empty string or NULL for
|
|
64
|
+
// `msg` cannot be an empty string or NULL for TTF_SizeUTF8
|
|
65
65
|
if (msg == NULL || strlen(msg) == 0) msg = " ";
|
|
66
66
|
|
|
67
67
|
// Format and store new text string
|
|
@@ -72,19 +72,19 @@ void S2D_SetText(S2D_Text *txt, const char *msg, ...) {
|
|
|
72
72
|
va_end(args);
|
|
73
73
|
|
|
74
74
|
// Save the width and height of the text
|
|
75
|
-
|
|
75
|
+
TTF_SizeUTF8(txt->font_data, txt->msg, &txt->width, &txt->height);
|
|
76
76
|
|
|
77
77
|
// Delete the current texture so a new one can be generated
|
|
78
|
-
|
|
78
|
+
R2D_GL_FreeTexture(&txt->texture_id);
|
|
79
79
|
}
|
|
80
80
|
|
|
81
81
|
|
|
82
82
|
/*
|
|
83
83
|
* Rotate text
|
|
84
84
|
*/
|
|
85
|
-
void
|
|
85
|
+
void R2D_RotateText(R2D_Text *txt, GLfloat angle, int position) {
|
|
86
86
|
|
|
87
|
-
|
|
87
|
+
R2D_GL_Point p = R2D_GetRectRotationPoint(
|
|
88
88
|
txt->x, txt->y, txt->width, txt->height, position
|
|
89
89
|
);
|
|
90
90
|
|
|
@@ -97,33 +97,33 @@ void S2D_RotateText(S2D_Text *txt, GLfloat angle, int position) {
|
|
|
97
97
|
/*
|
|
98
98
|
* Draw text
|
|
99
99
|
*/
|
|
100
|
-
void
|
|
100
|
+
void R2D_DrawText(R2D_Text *txt) {
|
|
101
101
|
if (!txt) return;
|
|
102
102
|
|
|
103
103
|
if (txt->texture_id == 0) {
|
|
104
104
|
SDL_Color color = { 255, 255, 255 };
|
|
105
|
-
txt->surface =
|
|
105
|
+
txt->surface = TTF_RenderUTF8_Blended(txt->font_data, txt->msg, color);
|
|
106
106
|
if (!txt->surface) {
|
|
107
|
-
|
|
107
|
+
R2D_Error("TTF_RenderUTF8_Blended", TTF_GetError());
|
|
108
108
|
return;
|
|
109
109
|
}
|
|
110
|
-
|
|
110
|
+
R2D_GL_CreateTexture(&txt->texture_id, GL_RGBA,
|
|
111
111
|
txt->width, txt->height,
|
|
112
112
|
txt->surface->pixels, GL_NEAREST);
|
|
113
113
|
SDL_FreeSurface(txt->surface);
|
|
114
114
|
}
|
|
115
115
|
|
|
116
|
-
|
|
116
|
+
R2D_GL_DrawText(txt);
|
|
117
117
|
}
|
|
118
118
|
|
|
119
119
|
|
|
120
120
|
/*
|
|
121
121
|
* Free the text
|
|
122
122
|
*/
|
|
123
|
-
void
|
|
123
|
+
void R2D_FreeText(R2D_Text *txt) {
|
|
124
124
|
if (!txt) return;
|
|
125
125
|
free(txt->msg);
|
|
126
|
-
|
|
126
|
+
R2D_GL_FreeTexture(&txt->texture_id);
|
|
127
127
|
TTF_CloseFont(txt->font_data);
|
|
128
128
|
free(txt);
|
|
129
129
|
}
|