rubygame 2.2.0-i586-linux

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.
Files changed (94) hide show
  1. data/CREDITS +60 -0
  2. data/LICENSE +504 -0
  3. data/NEWS +201 -0
  4. data/README +139 -0
  5. data/ROADMAP +43 -0
  6. data/Rakefile +409 -0
  7. data/doc/extended_readme.rdoc +49 -0
  8. data/doc/getting_started.rdoc +47 -0
  9. data/doc/macosx_install.rdoc +70 -0
  10. data/doc/windows_install.rdoc +123 -0
  11. data/ext/rubygame/MANIFEST +25 -0
  12. data/ext/rubygame/rubygame_core.so +0 -0
  13. data/ext/rubygame/rubygame_event.c +644 -0
  14. data/ext/rubygame/rubygame_event.h +48 -0
  15. data/ext/rubygame/rubygame_event.o +0 -0
  16. data/ext/rubygame/rubygame_gfx.c +942 -0
  17. data/ext/rubygame/rubygame_gfx.h +101 -0
  18. data/ext/rubygame/rubygame_gfx.o +0 -0
  19. data/ext/rubygame/rubygame_gfx.so +0 -0
  20. data/ext/rubygame/rubygame_gl.c +154 -0
  21. data/ext/rubygame/rubygame_gl.h +32 -0
  22. data/ext/rubygame/rubygame_gl.o +0 -0
  23. data/ext/rubygame/rubygame_image.c +108 -0
  24. data/ext/rubygame/rubygame_image.h +41 -0
  25. data/ext/rubygame/rubygame_image.o +0 -0
  26. data/ext/rubygame/rubygame_image.so +0 -0
  27. data/ext/rubygame/rubygame_joystick.c +247 -0
  28. data/ext/rubygame/rubygame_joystick.h +41 -0
  29. data/ext/rubygame/rubygame_joystick.o +0 -0
  30. data/ext/rubygame/rubygame_main.c +155 -0
  31. data/ext/rubygame/rubygame_main.h +33 -0
  32. data/ext/rubygame/rubygame_main.o +0 -0
  33. data/ext/rubygame/rubygame_mixer.c +764 -0
  34. data/ext/rubygame/rubygame_mixer.h +62 -0
  35. data/ext/rubygame/rubygame_mixer.o +0 -0
  36. data/ext/rubygame/rubygame_mixer.so +0 -0
  37. data/ext/rubygame/rubygame_screen.c +448 -0
  38. data/ext/rubygame/rubygame_screen.h +43 -0
  39. data/ext/rubygame/rubygame_screen.o +0 -0
  40. data/ext/rubygame/rubygame_shared.c +209 -0
  41. data/ext/rubygame/rubygame_shared.h +60 -0
  42. data/ext/rubygame/rubygame_shared.o +0 -0
  43. data/ext/rubygame/rubygame_surface.c +1147 -0
  44. data/ext/rubygame/rubygame_surface.h +62 -0
  45. data/ext/rubygame/rubygame_surface.o +0 -0
  46. data/ext/rubygame/rubygame_time.c +183 -0
  47. data/ext/rubygame/rubygame_time.h +32 -0
  48. data/ext/rubygame/rubygame_time.o +0 -0
  49. data/ext/rubygame/rubygame_ttf.c +599 -0
  50. data/ext/rubygame/rubygame_ttf.h +69 -0
  51. data/ext/rubygame/rubygame_ttf.o +0 -0
  52. data/ext/rubygame/rubygame_ttf.so +0 -0
  53. data/lib/rubygame/MANIFEST +12 -0
  54. data/lib/rubygame/clock.rb +128 -0
  55. data/lib/rubygame/color/models/base.rb +106 -0
  56. data/lib/rubygame/color/models/hsl.rb +153 -0
  57. data/lib/rubygame/color/models/hsv.rb +149 -0
  58. data/lib/rubygame/color/models/rgb.rb +78 -0
  59. data/lib/rubygame/color/palettes/css.rb +49 -0
  60. data/lib/rubygame/color/palettes/palette.rb +100 -0
  61. data/lib/rubygame/color/palettes/x11.rb +177 -0
  62. data/lib/rubygame/color.rb +79 -0
  63. data/lib/rubygame/constants.rb +238 -0
  64. data/lib/rubygame/event.rb +313 -0
  65. data/lib/rubygame/ftor.rb +370 -0
  66. data/lib/rubygame/hotspot.rb +265 -0
  67. data/lib/rubygame/keyconstants.rb +237 -0
  68. data/lib/rubygame/mediabag.rb +94 -0
  69. data/lib/rubygame/queue.rb +288 -0
  70. data/lib/rubygame/rect.rb +612 -0
  71. data/lib/rubygame/sfont.rb +223 -0
  72. data/lib/rubygame/sprite.rb +511 -0
  73. data/lib/rubygame.rb +41 -0
  74. data/samples/FreeSans.ttf +0 -0
  75. data/samples/GPL.txt +340 -0
  76. data/samples/README +40 -0
  77. data/samples/chimp.bmp +0 -0
  78. data/samples/chimp.rb +313 -0
  79. data/samples/demo_gl.rb +151 -0
  80. data/samples/demo_gl_tex.rb +197 -0
  81. data/samples/demo_music.rb +75 -0
  82. data/samples/demo_rubygame.rb +284 -0
  83. data/samples/demo_sfont.rb +52 -0
  84. data/samples/demo_ttf.rb +193 -0
  85. data/samples/demo_utf8.rb +53 -0
  86. data/samples/fist.bmp +0 -0
  87. data/samples/load_and_blit.rb +22 -0
  88. data/samples/panda.png +0 -0
  89. data/samples/punch.wav +0 -0
  90. data/samples/ruby.png +0 -0
  91. data/samples/song.ogg +0 -0
  92. data/samples/term16.png +0 -0
  93. data/samples/whiff.wav +0 -0
  94. metadata +152 -0
@@ -0,0 +1,101 @@
1
+ /*
2
+ *--
3
+ * Rubygame -- Ruby code and bindings to SDL to facilitate game creation
4
+ * Copyright (C) 2004-2007 John Croisant
5
+ *
6
+ * This library is free software; you can redistribute it and/or
7
+ * modify it under the terms of the GNU Lesser General Public
8
+ * License as published by the Free Software Foundation; either
9
+ * version 2.1 of the License, or (at your option) any later version.
10
+ *
11
+ * This library is distributed in the hope that it will be useful,
12
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
+ * Lesser General Public License for more details.
15
+ *
16
+ * You should have received a copy of the GNU Lesser General Public
17
+ * License along with this library; if not, write to the Free Software
18
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19
+ *++
20
+ */
21
+
22
+ #ifndef _RUBYGAME_GFX_H
23
+ #define _RUBYGAME_GFX_H
24
+
25
+ #include <SDL_gfxPrimitives.h>
26
+ #include <SDL_rotozoom.h>
27
+
28
+ #ifndef SDL_GFXPRIMITIVES_MAJOR
29
+ #define SDL_GFXPRIMITIVES_MAJOR 0
30
+ #endif
31
+
32
+ #ifndef SDL_GFXPRIMITIVES_MINOR
33
+ #define SDL_GFXPRIMITIVES_MINOR 0
34
+ #endif
35
+
36
+ #ifndef SDL_GFXPRIMITIVES_MICRO
37
+ #define SDL_GFXPRIMITIVES_MICRO 0
38
+ #endif
39
+
40
+
41
+ /* If we have at least version 2.0.12 of SDL_gfxPrimitives, draw_pie calls
42
+ filledPieRGBA, otherwise it calls filledpieRGBA (lowercase pie)*/
43
+ #ifndef HAVE_UPPERCASEPIE
44
+ #if ((SDL_GFXPRIMITIVES_MAJOR > 2) || (SDL_GFXPRIMITIVES_MAJOR == 2 && SDL_GFXPRIMITIVES_MINOR > 0) || (SDL_GFXPRIMITIVES_MAJOR == 2 && SDL_GFXPRIMITIVES_MINOR == 0 && SDL_GFXPRIMITIVES_MICRO >= 12))
45
+ #define HAVE_UPPERCASEPIE
46
+ #endif
47
+ #endif
48
+
49
+ /* Separate X/Y rotozoom scaling was not supported prior to 2.0.13. */
50
+ /* Check if we have at least version 2.0.13 of SDL_gfxPrimitives */
51
+ #ifndef HAVE_ROTOZOOMXY
52
+ #if ((SDL_GFXPRIMITIVES_MAJOR > 2) || (SDL_GFXPRIMITIVES_MAJOR == 2 && SDL_GFXPRIMITIVES_MINOR > 0) || (SDL_GFXPRIMITIVES_MAJOR == 2 && SDL_GFXPRIMITIVES_MINOR == 0 && SDL_GFXPRIMITIVES_MICRO >= 13))
53
+ #define HAVE_ROTOZOOMXY
54
+ #endif
55
+ #endif
56
+
57
+ /* Non-filled pie shapes (arcs) were not supported prior to 2.0.11. */
58
+ /* Check if we have at least version 2.0.11 of SDL_gfxPrimitives */
59
+ #ifndef HAVE_NONFILLEDPIE
60
+ #if ((SDL_GFXPRIMITIVES_MAJOR > 2) || (SDL_GFXPRIMITIVES_MAJOR == 2 && SDL_GFXPRIMITIVES_MINOR > 0) || (SDL_GFXPRIMITIVES_MAJOR == 2 && SDL_GFXPRIMITIVES_MINOR == 0 && SDL_GFXPRIMITIVES_MICRO >= 11))
61
+ #define HAVE_NONFILLEDPIE
62
+ #endif
63
+ #endif
64
+
65
+ extern void Init_rubygame_gfx();
66
+ extern void extract_xy(VALUE, Sint16*, Sint16*);
67
+
68
+ extern void draw_line(VALUE, VALUE, VALUE, VALUE, int);
69
+ extern VALUE rbgm_draw_line(VALUE, VALUE, VALUE, VALUE);
70
+ extern VALUE rbgm_draw_aaline(VALUE, VALUE, VALUE, VALUE);
71
+
72
+ extern void draw_rect(VALUE, VALUE, VALUE, VALUE, int);
73
+ extern VALUE rbgm_draw_rect(VALUE, VALUE, VALUE, VALUE);
74
+ extern VALUE rbgm_draw_fillrect(VALUE, VALUE, VALUE, VALUE);
75
+
76
+ extern void draw_circle(VALUE, VALUE, VALUE, VALUE, int, int);
77
+ extern VALUE rbgm_draw_circle(VALUE, VALUE, VALUE, VALUE);
78
+ extern VALUE rbgm_draw_aacircle(VALUE, VALUE, VALUE, VALUE);
79
+ extern VALUE rbgm_draw_fillcircle(VALUE, VALUE, VALUE, VALUE);
80
+
81
+ extern void draw_ellipse(VALUE, VALUE, VALUE, VALUE, int, int);
82
+ extern VALUE rbgm_draw_ellipse(VALUE, VALUE, VALUE, VALUE);
83
+ extern VALUE rbgm_draw_aaellipse(VALUE, VALUE, VALUE, VALUE);
84
+ extern VALUE rbgm_draw_fillellipse(VALUE, VALUE, VALUE, VALUE);
85
+
86
+ extern void draw_pie(VALUE, VALUE, VALUE, VALUE, VALUE, int);
87
+ extern VALUE rbgm_draw_pie(VALUE, VALUE, VALUE, VALUE, VALUE);
88
+ extern VALUE rbgm_draw_fillpie(VALUE, VALUE, VALUE, VALUE, VALUE);
89
+
90
+ extern void draw_polygon(VALUE, VALUE, VALUE, int, int);
91
+ extern VALUE rbgm_draw_polygon(VALUE, VALUE, VALUE);
92
+ extern VALUE rbgm_draw_aapolygon(VALUE, VALUE, VALUE);
93
+ extern VALUE rbgm_draw_fillpolygon(VALUE, VALUE, VALUE);
94
+
95
+ extern VALUE rbgm_transform_rotozoom(int, VALUE*, VALUE);
96
+ extern VALUE rbgm_transform_rotozoomsize(int, VALUE*, VALUE);
97
+
98
+ extern VALUE rbgm_transform_zoom(int, VALUE*, VALUE);
99
+ extern VALUE rbgm_transform_zoomsize(int, VALUE*, VALUE);
100
+
101
+ #endif
Binary file
Binary file
@@ -0,0 +1,154 @@
1
+ /*
2
+ * OpenGL attribute methods.
3
+ * --
4
+ * Rubygame -- Ruby classes and bindings to SDL to facilitate game creation
5
+ * Copyright (C) 2004-2007 John Croisant
6
+ *
7
+ * This library is free software; you can redistribute it and/or
8
+ * modify it under the terms of the GNU Lesser General Public
9
+ * License as published by the Free Software Foundation; either
10
+ * version 2.1 of the License, or (at your option) any later version.
11
+ *
12
+ * This library is distributed in the hope that it will be useful,
13
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15
+ * Lesser General Public License for more details.
16
+ *
17
+ * You should have received a copy of the GNU Lesser General Public
18
+ * License along with this library; if not, write to the Free Software
19
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20
+ * ++
21
+ */
22
+
23
+ #include "rubygame_shared.h"
24
+ #include "rubygame_gl.h"
25
+
26
+ /* --
27
+ * Most code is directly from Ruby/SDL's rubysdl_opengl.c file.
28
+ *
29
+ * Many thanks for saving me some time. :)
30
+ * ++
31
+ */
32
+
33
+ VALUE mGL;
34
+ void Rubygame_Init_GL();
35
+ void Define_GL_Constants();
36
+
37
+ #ifdef HAVE_OPENGL
38
+
39
+ VALUE rbgm_gl_getattrib(VALUE, VALUE);
40
+ VALUE rbgm_gl_setattrib(VALUE,VALUE,VALUE);
41
+ VALUE rbgm_gl_swapbuffers(VALUE);
42
+
43
+ /* call-seq:
44
+ * get_attrib( attrib ) -> Integer
45
+ *
46
+ * Return the value of the the SDL/OpenGL attribute identified by +attrib+,
47
+ * which should be one of the constants defined in the Rubygame::GL module.
48
+ * See #set_attrib for a list of attribute constants.
49
+ *
50
+ * This method is useful after using #set_attrib and calling Screen#set_mode,
51
+ * to make sure the attribute is the expected value.
52
+ */
53
+ VALUE rbgm_gl_getattrib(VALUE module, VALUE attr)
54
+ {
55
+ int val;
56
+ if(SDL_GL_GetAttribute(NUM2INT(attr),&val)==-1)
57
+ rb_raise(eSDLError,"GL get attribute failed: %s",SDL_GetError());
58
+ return INT2NUM(val);
59
+ }
60
+
61
+ /* call-seq:
62
+ * set_attrib( attrib, value ) -> nil
63
+ *
64
+ * Set the SDL/OpenGL attribute +attrib+ to +value+. This should be called
65
+ * *before* you call Screen#set_mode with the OPENGL flag. You may wish to
66
+ * use #get_attrib after calling Screen#set_mode to confirm that the attribute
67
+ * is set to the desired value.
68
+ *
69
+ * The full list of SDL/OpenGL attribute identifier constants (located under
70
+ * the Rubygame::GL module) is as follows:
71
+ *
72
+ * RED_SIZE:: Size of framebuffer red component, in bits.
73
+ * GREEN_SIZE:: Size of framebuffer green component, in bits.
74
+ * BLUE_SIZE:: Size of framebuffer blue component, in bits.
75
+ * ALPHA_SIZE:: Size of framebuffer alpha (opacity) component, in bits.
76
+ * BUFFER_SIZE:: Size of framebuffer, in bits.
77
+ * DOUBLEBUFFER:: Enable or disable double-buffering.
78
+ * DEPTH_SIZE:: Size of depth buffer, in bits.
79
+ * STENCIL_SIZE:: Size of stencil buffer, in bits.
80
+ * ACCUM_RED_SIZE:: Size of accumulation buffer red component, in bits.
81
+ * ACCUM_GREEN_SIZE:: Size of accumulation buffer green component, in bits.
82
+ * ACCUM_BLUE_SIZE:: Size of accumulation buffer blue component, in bits.
83
+ * ACCUM_ALPHA_SIZE:: Size of accumulation buffer alpha component, in bits.
84
+ *
85
+ */
86
+ VALUE rbgm_gl_setattrib(VALUE module,VALUE attr,VALUE val)
87
+ {
88
+ if(SDL_GL_SetAttribute(NUM2INT(attr),NUM2INT(val))==-1)
89
+ rb_raise(eSDLError,"GL set attribute failed: %s",SDL_GetError());
90
+ return Qnil;
91
+ }
92
+
93
+ /* call-seq:
94
+ * swap_buffers( ) -> nil
95
+ *
96
+ * Swap the back and front buffers, for double-buffered OpenGL displays.
97
+ * Should be safe to use (albeit with no effect) on single-buffered OpenGL
98
+ * displays.
99
+ */
100
+ VALUE rbgm_gl_swapbuffers(VALUE module)
101
+ {
102
+ SDL_GL_SwapBuffers();
103
+ return Qnil;
104
+ }
105
+
106
+ #endif
107
+
108
+ /* Document-module: Rubygame::GL
109
+ *
110
+ * The GL module provides an interface to SDL's OpenGL-related functions,
111
+ * allowing a Rubygame application to create hardware-accelerated 3D graphics
112
+ * with OpenGL.
113
+ *
114
+ * Please note that Rubygame itself does not provide an interface to OpenGL
115
+ * functions -- only functions which allow Rubygame to work together with
116
+ * OpenGL. You will need to use another library, for example
117
+ * ruby-opengl[http://ruby-opengl.rubyforge.org/],
118
+ * to actually create graphics with OpenGL.
119
+ *
120
+ * Users who wish to use Rubygame Surfaces as textures in OpenGL should
121
+ * see also the Surface#pixels method.
122
+ */
123
+ void Rubygame_Init_GL()
124
+ {
125
+ #if 0
126
+ mRubygame = rb_define_module("Rubygame");
127
+ #endif
128
+
129
+ mGL = rb_define_module_under(mRubygame,"GL");
130
+ Define_GL_Constants();
131
+
132
+ #ifdef HAVE_OPENGL
133
+ rb_define_module_function(mGL,"get_attrib", rbgm_gl_getattrib, 1);
134
+ rb_define_module_function(mGL,"set_attrib", rbgm_gl_setattrib, 2);
135
+ rb_define_module_function(mGL,"swap_buffers", rbgm_gl_swapbuffers, 0);
136
+ #endif
137
+
138
+ }
139
+
140
+ void Define_GL_Constants()
141
+ {
142
+ rb_define_const(mGL,"RED_SIZE",INT2NUM(SDL_GL_RED_SIZE));
143
+ rb_define_const(mGL,"GREEN_SIZE",INT2NUM(SDL_GL_GREEN_SIZE));
144
+ rb_define_const(mGL,"BLUE_SIZE",INT2NUM(SDL_GL_BLUE_SIZE));
145
+ rb_define_const(mGL,"ALPHA_SIZE",INT2NUM(SDL_GL_ALPHA_SIZE));
146
+ rb_define_const(mGL,"BUFFER_SIZE",INT2NUM(SDL_GL_BUFFER_SIZE));
147
+ rb_define_const(mGL,"DOUBLEBUFFER",INT2NUM(SDL_GL_DOUBLEBUFFER));
148
+ rb_define_const(mGL,"DEPTH_SIZE",INT2NUM(SDL_GL_DEPTH_SIZE));
149
+ rb_define_const(mGL,"STENCIL_SIZE",INT2NUM(SDL_GL_STENCIL_SIZE));
150
+ rb_define_const(mGL,"ACCUM_RED_SIZE",INT2NUM(SDL_GL_ACCUM_RED_SIZE));
151
+ rb_define_const(mGL,"ACCUM_GREEN_SIZE",INT2NUM(SDL_GL_ACCUM_GREEN_SIZE));
152
+ rb_define_const(mGL,"ACCUM_BLUE_SIZE",INT2NUM(SDL_GL_ACCUM_BLUE_SIZE));
153
+ rb_define_const(mGL,"ACCUM_ALPHA_SIZE",INT2NUM(SDL_GL_ACCUM_ALPHA_SIZE));
154
+ }
@@ -0,0 +1,32 @@
1
+ /*
2
+ * Rubygame -- Ruby code and bindings to SDL to facilitate game creation
3
+ * Copyright (C) 2004-2007 John Croisant
4
+ *
5
+ * This library is free software; you can redistribute it and/or
6
+ * modify it under the terms of the GNU Lesser General Public
7
+ * License as published by the Free Software Foundation; either
8
+ * version 2.1 of the License, or (at your option) any later version.
9
+ *
10
+ * This library is distributed in the hope that it will be useful,
11
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13
+ * Lesser General Public License for more details.
14
+ *
15
+ * You should have received a copy of the GNU Lesser General Public
16
+ * License along with this library; if not, write to the Free Software
17
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18
+ *
19
+ */
20
+
21
+ #ifndef _RUBYGAME_GL_H
22
+ #define _RUBYGAME_GL_H
23
+
24
+ extern VALUE mGL;
25
+ extern void Rubygame_Init_GL();
26
+ extern void Define_GL_Constants();
27
+
28
+ extern VALUE rbgm_gl_getattrib(VALUE, VALUE);
29
+ extern VALUE rbgm_gl_setattrib(VALUE,VALUE,VALUE);
30
+ extern VALUE rbgm_gl_swapbuffers(VALUE);
31
+
32
+ #endif
Binary file
@@ -0,0 +1,108 @@
1
+ /*
2
+ * Interface to SDL_image library, for loading image files to Surfaces.
3
+ *--
4
+ * Rubygame -- Ruby code and bindings to SDL to facilitate game creation
5
+ * Copyright (C) 2004-2007 John Croisant
6
+ *
7
+ * This library is free software; you can redistribute it and/or
8
+ * modify it under the terms of the GNU Lesser General Public
9
+ * License as published by the Free Software Foundation; either
10
+ * version 2.1 of the License, or (at your option) any later version.
11
+ *
12
+ * This library is distributed in the hope that it will be useful,
13
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15
+ * Lesser General Public License for more details.
16
+ *
17
+ * You should have received a copy of the GNU Lesser General Public
18
+ * License along with this library; if not, write to the Free Software
19
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20
+ *++
21
+ */
22
+
23
+ #include "rubygame_shared.h"
24
+ #include "rubygame_surface.h"
25
+ #include "rubygame_image.h"
26
+
27
+ void Rubygame_Init_Image();
28
+ VALUE rbgm_image_load(VALUE, VALUE);
29
+
30
+ /*
31
+ * call-seq:
32
+ * Surface.load_image( filename ) -> Surface
33
+ *
34
+ * Load an image file from the disk to a Surface. If the image has an alpha
35
+ * channel (e.g. PNG with transparency), the Surface will as well. If the
36
+ * image cannot be loaded (for example if the image format is unsupported),
37
+ * will raise SDLError.
38
+ *
39
+ * This method is only usable if Rubygame was compiled with the SDL_image
40
+ * library; you can check Rubygame::VERSIONS[:sdl_image] to see if it was.
41
+ *
42
+ * This method takes this argument:
43
+ * filename:: a string containing the relative or absolute path to the
44
+ * image file. The file must have the proper file extension,
45
+ * as it is used to determine image format.
46
+ *
47
+ * These formats may be supported, but some may not be available on a
48
+ * particular system.
49
+ * BMP:: "Windows Bitmap" format.
50
+ * GIF:: "Graphics Interchange Format."
51
+ * JPG:: "Independent JPEG Group" format.
52
+ * LBM:: "Linear Bitmap" format (?)
53
+ * PCX:: "PC Paintbrush" format
54
+ * PNG:: "Portable Network Graphics" format.
55
+ * PNM:: "Portable Any Map" format. (i.e., PPM, PGM, or PBM)
56
+ * TGA:: "Truevision TARGA" format.
57
+ * TIF:: "Tagged Image File Format"
58
+ * XCF:: "eXperimental Computing Facility" (GIMP native format).
59
+ * XPM:: "XPixMap" format.
60
+ */
61
+ VALUE rbgm_image_load( VALUE class, VALUE filename )
62
+ {
63
+ char *name;
64
+ SDL_Surface *surf;
65
+
66
+ name = StringValuePtr(filename);
67
+ surf = IMG_Load( name );
68
+ if(surf == NULL)
69
+ {
70
+ rb_raise(eSDLError,"Couldn't load image `%s': %s", name, IMG_GetError());
71
+ }
72
+ return Data_Wrap_Struct( cSurface,0,SDL_FreeSurface,surf );
73
+ }
74
+
75
+ /*
76
+ * Document-class: Rubygame::Surface
77
+ *
78
+ * Surface represents an image, a block of colored pixels arranged in a 2D grid.
79
+ * You can load image files to a new Surface with #load_image, or create
80
+ * an empty one with Surface.new and draw shapes on it with #draw_line,
81
+ * #draw_circle, and all the rest.
82
+ *
83
+ * One of the most important Surface concepts is #blit, copying image
84
+ * data from one Surface onto another. By blitting Surfaces onto the
85
+ * Screen (which is a special type of Surface) and then using Screen#update,
86
+ * you can make images appear for the player to see.
87
+ *
88
+ */
89
+ void Init_rubygame_image()
90
+ {
91
+
92
+ #if 0
93
+ mRubygame = rb_define_module("Rubygame");
94
+ cSurface = rb_define_class_under(mRubygame,"Surface",rb_cObject);
95
+ #endif
96
+
97
+ Init_rubygame_shared();
98
+
99
+ rb_hash_aset(rb_ivar_get(mRubygame,rb_intern("VERSIONS")),
100
+ ID2SYM(rb_intern("sdl_image")),
101
+ rb_ary_new3(3,
102
+ INT2NUM(SDL_IMAGE_MAJOR_VERSION),
103
+ INT2NUM(SDL_IMAGE_MINOR_VERSION),
104
+ INT2NUM(SDL_IMAGE_PATCHLEVEL)));
105
+
106
+ /* Image methods */
107
+ rb_define_singleton_method(cSurface,"load_image",rbgm_image_load,1);
108
+ }
@@ -0,0 +1,41 @@
1
+ /*
2
+ * Rubygame -- Ruby code and bindings to SDL to facilitate game creation
3
+ * Copyright (C) 2004-2007 John Croisant
4
+ *
5
+ * This library is free software; you can redistribute it and/or
6
+ * modify it under the terms of the GNU Lesser General Public
7
+ * License as published by the Free Software Foundation; either
8
+ * version 2.1 of the License, or (at your option) any later version.
9
+ *
10
+ * This library is distributed in the hope that it will be useful,
11
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13
+ * Lesser General Public License for more details.
14
+ *
15
+ * You should have received a copy of the GNU Lesser General Public
16
+ * License along with this library; if not, write to the Free Software
17
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18
+ *
19
+ */
20
+
21
+ #ifndef _RUBYGAME_IMAGE_H
22
+ #define _RUBYGAME_IMAGE_H
23
+
24
+ #include "SDL_image.h"
25
+
26
+ #ifndef SDL_IMAGE_MAJOR_VERSION
27
+ #define SDL_IMAGE_MAJOR_VERSION 0
28
+ #endif
29
+
30
+ #ifndef SDL_IMAGE_MINOR_VERSION
31
+ #define SDL_IMAGE_MINOR_VERSION 0
32
+ #endif
33
+
34
+ #ifndef SDL_IMAGE_PATCHLEVEL
35
+ #define SDL_IMAGE_PATCHLEVEL 0
36
+ #endif
37
+
38
+ extern void Init_rubygame_image();
39
+ extern VALUE rbgm_image_load(VALUE, VALUE);
40
+
41
+ #endif
Binary file
Binary file
@@ -0,0 +1,247 @@
1
+ /*--
2
+ *
3
+ * Rubygame -- Ruby code and bindings to SDL to facilitate game creation
4
+ * Copyright (C) 2004-2007 John Croisant
5
+ *
6
+ * This library is free software; you can redistribute it and/or
7
+ * modify it under the terms of the GNU Lesser General Public
8
+ * License as published by the Free Software Foundation; either
9
+ * version 2.1 of the License, or (at your option) any later version.
10
+ *
11
+ * This library is distributed in the hope that it will be useful,
12
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
+ * Lesser General Public License for more details.
15
+ *
16
+ * You should have received a copy of the GNU Lesser General Public
17
+ * License along with this library; if not, write to the Free Software
18
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19
+ *
20
+ *++
21
+ */
22
+
23
+ #include "rubygame_shared.h"
24
+ #include "rubygame_joystick.h"
25
+
26
+ void Rubygame_Init_Joystick();
27
+ VALUE cJoy;
28
+
29
+ VALUE rbgm_joy_numjoysticks(VALUE);
30
+ VALUE rbgm_joy_getname(VALUE, VALUE);
31
+
32
+ VALUE rbgm_joystick_new(VALUE, VALUE);
33
+
34
+ VALUE rbgm_joystick_index(VALUE);
35
+ VALUE rbgm_joystick_name(VALUE);
36
+ VALUE rbgm_joystick_numaxes(VALUE);
37
+ VALUE rbgm_joystick_numballs(VALUE);
38
+ VALUE rbgm_joystick_numhats(VALUE);
39
+ VALUE rbgm_joystick_numbuttons(VALUE);
40
+
41
+
42
+ /*
43
+ * call-seq:
44
+ * num_joysticks -> Integer
45
+ *
46
+ * Returns the total number of joysticks detected on the system.
47
+ */
48
+ VALUE rbgm_joy_numjoysticks( VALUE module )
49
+ {
50
+ return INT2FIX(SDL_NumJoysticks());
51
+ }
52
+
53
+ /*
54
+ * call-seq:
55
+ * get_name( n ) -> String
56
+ *
57
+ * Returns the name of nth joystick on the system, up to 1024
58
+ * characters long. The name is implementation-dependent.
59
+ * See also #name().
60
+ */
61
+ VALUE rbgm_joy_getname( VALUE module, VALUE joynum )
62
+ {
63
+ return rb_str_new2(SDL_JoystickName(NUM2INT(joynum)));
64
+ }
65
+
66
+
67
+ /*
68
+ * Internal function to safely deallocate the joystick, that is,
69
+ * only if SDL Joystick module is still initialised.
70
+ */
71
+ static void RBGM_JoystickClose(SDL_Joystick *joy)
72
+ {
73
+ if(SDL_WasInit(SDL_INIT_JOYSTICK))
74
+ {
75
+ SDL_JoystickClose(joy);
76
+ }
77
+ }
78
+
79
+
80
+ /*
81
+ * call-seq:
82
+ * new( n ) -> Joystick
83
+ *
84
+ * Create and initialize an interface to the nth joystick on the
85
+ * system. Raises SDLError if the joystick could not be opened.
86
+ */
87
+ VALUE rbgm_joystick_new( VALUE module, VALUE vindex )
88
+ {
89
+ VALUE self;
90
+ SDL_Joystick *joy;
91
+ int index;
92
+
93
+ index = NUM2INT(vindex);
94
+
95
+ joy = SDL_JoystickOpen(index);
96
+ if(joy == NULL)
97
+ {
98
+ rb_raise(eSDLError,"Could not open joystick %d: %s",\
99
+ index,SDL_GetError());
100
+ }
101
+ self = Data_Wrap_Struct(cJoy, 0, RBGM_JoystickClose, joy);
102
+ return self;
103
+ }
104
+
105
+ /*
106
+ * call-seq:
107
+ * index -> Integer
108
+ *
109
+ * Returns the index number of the Joystick, i.e. the identifier number of the
110
+ * joystick that this interface controls. This is the same number that was
111
+ * given to #new().
112
+ */
113
+ VALUE rbgm_joystick_index( VALUE self )
114
+ {
115
+ SDL_Joystick *joy;
116
+
117
+ Data_Get_Struct(self,SDL_Joystick,joy);
118
+ return INT2FIX(SDL_JoystickIndex(joy));
119
+ }
120
+
121
+ /*
122
+ * call-seq:
123
+ * name -> String
124
+ *
125
+ * Returns a String containing the name of the Joystick, up to 1024
126
+ * characters long. The name is implementation-dependent. See also
127
+ * #get_name().
128
+ */
129
+ VALUE rbgm_joystick_name( VALUE self )
130
+ {
131
+ char *name;
132
+ SDL_Joystick *joy;
133
+ Uint8 index;
134
+ int n;
135
+ int size = 1024;
136
+
137
+ Data_Get_Struct(self,SDL_Joystick,joy);
138
+ index = SDL_JoystickIndex(joy);
139
+ name = (char *)malloc(size);
140
+ n = snprintf(name,size,"%s",SDL_JoystickName(index));
141
+ return rb_str_new(name,n);
142
+ }
143
+
144
+ /*
145
+ * call-seq:
146
+ * axes -> Integer
147
+ *
148
+ * Returns the number of axes (singular: axis) featured on the Joystick. Each
149
+ * control stick generally has two axes (X and Y), although there are other
150
+ * types of controls which are represented as one or more axes. See also
151
+ * #axis_state().
152
+ */
153
+ VALUE rbgm_joystick_numaxes( VALUE self )
154
+ {
155
+ SDL_Joystick *joy;
156
+ Data_Get_Struct(self,SDL_Joystick,joy);
157
+ return INT2FIX(SDL_JoystickNumAxes(joy));
158
+ }
159
+
160
+ /*
161
+ * call-seq:
162
+ * balls -> Integer
163
+ *
164
+ * Returns the number of trackballs featured on the Joystick. A trackball is
165
+ * usually a small sphere which can be rotated in-place in any direction,
166
+ * registering relative movement along two axes. See alse #ball_state().
167
+ */
168
+ VALUE rbgm_joystick_numballs( VALUE self )
169
+ {
170
+ SDL_Joystick *joy;
171
+ Data_Get_Struct(self,SDL_Joystick,joy);
172
+ return INT2FIX(SDL_JoystickNumBalls(joy));
173
+ }
174
+
175
+ /*
176
+ * call-seq:
177
+ * hats -> Integer
178
+ *
179
+ * Returns the number of hats featured on the Joystick. A hat is a switch
180
+ * which can be pushed in one of several directions, or centered. See also
181
+ * #hat_state().
182
+ */
183
+ VALUE rbgm_joystick_numhats( VALUE self )
184
+ {
185
+ SDL_Joystick *joy;
186
+ Data_Get_Struct(self,SDL_Joystick,joy);
187
+ return INT2FIX(SDL_JoystickNumHats(joy));
188
+ }
189
+
190
+ /*
191
+ * call-seq:
192
+ * buttons -> Integer
193
+ *
194
+ * Returns the number of buttons featured on the Joystick. A button can
195
+ * be in one of two states: neutral, or pushed. See also #button_state()
196
+ */
197
+ VALUE rbgm_joystick_numbuttons( VALUE self )
198
+ {
199
+ SDL_Joystick *joy;
200
+ Data_Get_Struct(self,SDL_Joystick,joy);
201
+ SDL_JoystickUpdate();
202
+ return INT2FIX(SDL_JoystickNumButtons(joy));
203
+ }
204
+
205
+
206
+ /* Document-class: Rubygame::Joystick
207
+ *
208
+ * The Joystick class interfaces with joysticks, gamepads, and other
209
+ * similar hardware devices, commonly used to play games. Each joystick can
210
+ * offer 0 or more #axes, #balls, #hats, and/or #buttons.
211
+ *
212
+ * After a Joystick object is successfully created, events for that
213
+ * Joystick will begin appearing on the Queue, reporting any state change
214
+ * that occurs. Some examples of state changes are a button being pressed
215
+ * or released, or a control stick being moved (resulting in one or more axes
216
+ * being changed).
217
+ *
218
+ * The full list of Joystick-related events is as follows:
219
+ * - JoyAxisEvent
220
+ * - JoyBallEvent
221
+ * - JoyHatEvent
222
+ * - JoyDownEvent
223
+ * - JoyUpEvent
224
+ *
225
+ * In future versions of Rubygame, it will be possible to directly query
226
+ * the state each joystick. However, it is recommended that you use the
227
+ * event system for most cases, so you might as well get used to it!
228
+ *
229
+ */
230
+ void Rubygame_Init_Joystick()
231
+ {
232
+ #if 0
233
+ mRubygame = rb_define_module("Rubygame");
234
+ #endif
235
+
236
+ cJoy = rb_define_class_under(mRubygame,"Joystick",rb_cObject);
237
+ rb_define_singleton_method(cJoy,"num_joysticks",rbgm_joy_numjoysticks,0);
238
+ rb_define_singleton_method(cJoy,"get_name",rbgm_joy_getname,1);
239
+
240
+ rb_define_singleton_method(cJoy,"new",rbgm_joystick_new,1);
241
+ rb_define_method(cJoy,"index",rbgm_joystick_index,0);
242
+ rb_define_method(cJoy,"name",rbgm_joystick_name,0);
243
+ rb_define_method(cJoy,"axes",rbgm_joystick_numaxes,0);
244
+ rb_define_method(cJoy,"balls",rbgm_joystick_numballs,0);
245
+ rb_define_method(cJoy,"hats",rbgm_joystick_numhats,0);
246
+ rb_define_method(cJoy,"buttons",rbgm_joystick_numbuttons,0);
247
+ }