rubygame 2.5.3 → 2.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (88) hide show
  1. data/CREDITS +6 -4
  2. data/NEWS +79 -0
  3. data/README +55 -72
  4. data/ROADMAP +20 -13
  5. data/doc/custom_sdl_load_paths.rdoc +79 -0
  6. data/doc/getting_started.rdoc +65 -36
  7. data/doc/keyboard_symbols.rdoc +243 -0
  8. data/doc/macosx_install.rdoc +49 -35
  9. data/doc/windows_install.rdoc +36 -108
  10. data/lib/rubygame.rb +62 -24
  11. data/lib/rubygame/audio.rb +147 -0
  12. data/lib/rubygame/clock.rb +164 -1
  13. data/lib/rubygame/color.rb +40 -7
  14. data/lib/rubygame/color/models/hsl.rb +1 -1
  15. data/lib/rubygame/color/models/hsv.rb +1 -1
  16. data/lib/rubygame/color/models/rgb.rb +1 -1
  17. data/lib/rubygame/color/palettes/css.rb +1 -3
  18. data/lib/rubygame/color/palettes/x11.rb +1 -2
  19. data/lib/rubygame/constants.rb +297 -0
  20. data/lib/rubygame/deprecated_mixer.rb +555 -0
  21. data/lib/rubygame/event.rb +122 -6
  22. data/lib/rubygame/event_handler.rb +3 -1
  23. data/lib/rubygame/event_hook.rb +6 -2
  24. data/lib/rubygame/event_triggers.rb +1 -1
  25. data/lib/rubygame/events.rb +416 -1
  26. data/lib/rubygame/ftor.rb +1 -7
  27. data/lib/rubygame/gfx.rb +583 -0
  28. data/lib/rubygame/gl.rb +107 -0
  29. data/lib/rubygame/image.rb +140 -0
  30. data/lib/rubygame/joystick.rb +184 -0
  31. data/lib/rubygame/main.rb +82 -0
  32. data/lib/rubygame/mediabag.rb +1 -1
  33. data/lib/rubygame/mixer.rb +30 -0
  34. data/lib/rubygame/music.rb +493 -0
  35. data/lib/rubygame/queue.rb +3 -1
  36. data/lib/rubygame/rect.rb +9 -9
  37. data/lib/rubygame/screen.rb +357 -0
  38. data/lib/rubygame/shared.rb +40 -4
  39. data/lib/rubygame/sound.rb +428 -0
  40. data/lib/rubygame/surface.rb +626 -0
  41. data/lib/rubygame/ttf.rb +311 -0
  42. data/samples/FreeSans.ttf +0 -0
  43. data/samples/README +6 -5
  44. data/samples/demo_draw.rb +1 -1
  45. data/samples/demo_gl.rb +3 -1
  46. data/samples/demo_gl_tex.rb +4 -2
  47. data/samples/demo_rubygame.rb +114 -105
  48. data/samples/demo_sfont.rb +1 -1
  49. data/samples/demo_ttf.rb +3 -1
  50. data/samples/demo_utf8.rb +1 -1
  51. data/samples/image_viewer.rb +118 -0
  52. data/samples/load_and_blit.rb +1 -1
  53. data/samples/rubygame.png +0 -0
  54. metadata +34 -40
  55. data/Rakefile +0 -537
  56. data/doc/extended_readme.rdoc +0 -49
  57. data/ext/body/rubygame_body.so +0 -0
  58. data/ext/rubygame/rubygame_clock.c +0 -301
  59. data/ext/rubygame/rubygame_clock.h +0 -32
  60. data/ext/rubygame/rubygame_event.c +0 -760
  61. data/ext/rubygame/rubygame_event.h +0 -48
  62. data/ext/rubygame/rubygame_event2.c +0 -661
  63. data/ext/rubygame/rubygame_event2.h +0 -29
  64. data/ext/rubygame/rubygame_gfx.c +0 -942
  65. data/ext/rubygame/rubygame_gfx.h +0 -101
  66. data/ext/rubygame/rubygame_gl.c +0 -154
  67. data/ext/rubygame/rubygame_gl.h +0 -32
  68. data/ext/rubygame/rubygame_image.c +0 -252
  69. data/ext/rubygame/rubygame_image.h +0 -41
  70. data/ext/rubygame/rubygame_joystick.c +0 -336
  71. data/ext/rubygame/rubygame_joystick.h +0 -41
  72. data/ext/rubygame/rubygame_main.c +0 -158
  73. data/ext/rubygame/rubygame_main.h +0 -36
  74. data/ext/rubygame/rubygame_mixer.c +0 -1024
  75. data/ext/rubygame/rubygame_mixer.h +0 -36
  76. data/ext/rubygame/rubygame_music.c +0 -1017
  77. data/ext/rubygame/rubygame_music.h +0 -29
  78. data/ext/rubygame/rubygame_screen.c +0 -572
  79. data/ext/rubygame/rubygame_screen.h +0 -45
  80. data/ext/rubygame/rubygame_shared.c +0 -269
  81. data/ext/rubygame/rubygame_shared.h +0 -69
  82. data/ext/rubygame/rubygame_sound.c +0 -863
  83. data/ext/rubygame/rubygame_sound.h +0 -29
  84. data/ext/rubygame/rubygame_surface.c +0 -1153
  85. data/ext/rubygame/rubygame_surface.h +0 -62
  86. data/ext/rubygame/rubygame_ttf.c +0 -599
  87. data/ext/rubygame/rubygame_ttf.h +0 -69
  88. data/samples/keys.rb +0 -52
@@ -17,14 +17,17 @@
17
17
  # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18
18
  #++
19
19
 
20
- require 'rubygame/color/models/base'
21
- require 'rubygame/color/models/rgb'
22
- require 'rubygame/color/models/hsv'
23
- require 'rubygame/color/models/hsl'
24
20
 
25
- require 'rubygame/color/palettes/palette'
26
- require 'rubygame/color/palettes/x11'
27
- require 'rubygame/color/palettes/css'
21
+
22
+ %w{ base rgb hsv hsl }.each do |f|
23
+ require( File.join( File.dirname(__FILE__), "color", "models", f ) )
24
+ end
25
+
26
+ %w{ palette x11 css }.each do |f|
27
+ require( File.join( File.dirname(__FILE__), "color", "palettes", f ) )
28
+ end
29
+
30
+
28
31
 
29
32
  module Rubygame
30
33
 
@@ -74,6 +77,36 @@ module Rubygame
74
77
  GLOBAL[name] = color
75
78
  end
76
79
 
80
+
81
+ # For use by Rubygame methods only:
82
+
83
+ # Convert a color name (string or symbol), Color instance, or Array
84
+ # to a color array.
85
+ def self.convert_color( color ) # :nodoc:
86
+ color =
87
+ if color.kind_of?(Symbol) or color.kind_of?(String)
88
+ Rubygame::Color[color].to_sdl_rgba_ary
89
+ elsif color.respond_to? :to_sdl_rgba_ary
90
+ color.to_sdl_rgba_ary
91
+ elsif color.respond_to? :to_ary
92
+ color.to_ary
93
+ else
94
+ raise TypeError, "unsupported type #{color.class} for color"
95
+ end
96
+
97
+ unless color.size.between?(3,4) and color.all?{|n| n.kind_of? Numeric}
98
+ raise TypeError, "invalid color: #{color.inspect}"
99
+ end
100
+
101
+ return color
102
+ end
103
+
104
+ def self.make_sdl_rgba( color ) # :nodoc:
105
+ r,g,b,a = convert_color(color).collect!{ |c| c.to_i }[0,4]
106
+ a = 255 if a.nil?
107
+ [r,g,b,a]
108
+ end
109
+
77
110
  end
78
111
  end
79
112
 
@@ -17,7 +17,7 @@
17
17
  # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18
18
  #++
19
19
 
20
- require 'rubygame/color/models/base'
20
+
21
21
 
22
22
  module Rubygame
23
23
  module Color
@@ -17,7 +17,7 @@
17
17
  # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18
18
  #++
19
19
 
20
- require 'rubygame/color/models/base'
20
+
21
21
 
22
22
  module Rubygame
23
23
  module Color
@@ -17,7 +17,7 @@
17
17
  # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18
18
  #++
19
19
 
20
- require 'rubygame/color/models/base'
20
+
21
21
 
22
22
  module Rubygame
23
23
  module Color
@@ -17,9 +17,7 @@
17
17
  # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18
18
  #++
19
19
 
20
- require 'rubygame/color'
21
- require 'rubygame/color/palettes/palette'
22
- require 'rubygame/color/palettes/x11'
20
+
23
21
 
24
22
  module Rubygame
25
23
  module Color
@@ -17,8 +17,7 @@
17
17
  # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18
18
  #++
19
19
 
20
- require 'rubygame/color'
21
- require 'rubygame/color/palettes/palette'
20
+
22
21
 
23
22
  module Rubygame
24
23
  module Color
@@ -19,6 +19,303 @@
19
19
 
20
20
  module Rubygame
21
21
 
22
+
23
+ # Event constants
24
+ NOEVENT = SDL::NOEVENT
25
+ ACTIVEEVENT = SDL::ACTIVEEVENT
26
+ KEYDOWN = SDL::KEYDOWN
27
+ KEYUP = SDL::KEYUP
28
+ MOUSEMOTION = SDL::MOUSEMOTION
29
+ MOUSEBUTTONDOWN = SDL::MOUSEBUTTONDOWN
30
+ MOUSEBUTTONUP = SDL::MOUSEBUTTONUP
31
+ JOYAXISMOTION = SDL::JOYAXISMOTION
32
+ JOYBALLMOTION = SDL::JOYBALLMOTION
33
+ JOYHATMOTION = SDL::JOYHATMOTION
34
+ JOYBUTTONDOWN = SDL::JOYBUTTONDOWN
35
+ JOYBUTTONUP = SDL::JOYBUTTONUP
36
+ QUIT = SDL::QUIT
37
+ SYSWMEVENT = SDL::SYSWMEVENT
38
+ VIDEORESIZE = SDL::VIDEORESIZE
39
+ VIDEOEXPOSE = SDL::VIDEOEXPOSE
40
+ USEREVENT = SDL::USEREVENT
41
+
42
+
43
+ # Joystick constants
44
+ HAT_CENTERED = SDL::HAT_CENTERED
45
+ HAT_UP = SDL::HAT_UP
46
+ HAT_RIGHT = SDL::HAT_RIGHT
47
+ HAT_DOWN = SDL::HAT_DOWN
48
+ HAT_LEFT = SDL::HAT_LEFT
49
+ HAT_RIGHTUP = SDL::HAT_RIGHTUP
50
+ HAT_RIGHTDOWN = SDL::HAT_RIGHTDOWN
51
+ HAT_LEFTUP = SDL::HAT_LEFTUP
52
+ HAT_LEFTDOWN = SDL::HAT_LEFTDOWN
53
+
54
+
55
+ # Mouse constants
56
+ MOUSE_LEFT = SDL::BUTTON_LEFT
57
+ MOUSE_MIDDLE = SDL::BUTTON_MIDDLE
58
+ MOUSE_RIGHT = SDL::BUTTON_RIGHT
59
+ MOUSE_LMASK = SDL::BUTTON_LMASK
60
+ MOUSE_MMASK = SDL::BUTTON_MMASK
61
+ MOUSE_RMASK = SDL::BUTTON_RMASK
62
+
63
+
64
+ # ASCII key symbols
65
+ K_UNKNOWN = SDL::K_UNKNOWN
66
+ K_FIRST = SDL::K_FIRST
67
+ K_BACKSPACE = SDL::K_BACKSPACE
68
+ K_TAB = SDL::K_TAB
69
+ K_CLEAR = SDL::K_CLEAR
70
+ K_RETURN = SDL::K_RETURN
71
+ K_PAUSE = SDL::K_PAUSE
72
+ K_ESCAPE = SDL::K_ESCAPE
73
+ K_SPACE = SDL::K_SPACE
74
+ K_EXCLAIM = SDL::K_EXCLAIM
75
+ K_QUOTEDBL = SDL::K_QUOTEDBL
76
+ K_HASH = SDL::K_HASH
77
+ K_DOLLAR = SDL::K_DOLLAR
78
+ K_AMPERSAND = SDL::K_AMPERSAND
79
+ K_QUOTE = SDL::K_QUOTE
80
+ K_LEFTPAREN = SDL::K_LEFTPAREN
81
+ K_RIGHTPAREN = SDL::K_RIGHTPAREN
82
+ K_ASTERISK = SDL::K_ASTERISK
83
+ K_PLUS = SDL::K_PLUS
84
+ K_COMMA = SDL::K_COMMA
85
+ K_MINUS = SDL::K_MINUS
86
+ K_PERIOD = SDL::K_PERIOD
87
+ K_SLASH = SDL::K_SLASH
88
+ K_0 = SDL::K_0
89
+ K_1 = SDL::K_1
90
+ K_2 = SDL::K_2
91
+ K_3 = SDL::K_3
92
+ K_4 = SDL::K_4
93
+ K_5 = SDL::K_5
94
+ K_6 = SDL::K_6
95
+ K_7 = SDL::K_7
96
+ K_8 = SDL::K_8
97
+ K_9 = SDL::K_9
98
+ K_COLON = SDL::K_COLON
99
+ K_SEMICOLON = SDL::K_SEMICOLON
100
+ K_LESS = SDL::K_LESS
101
+ K_EQUALS = SDL::K_EQUALS
102
+ K_GREATER = SDL::K_GREATER
103
+ K_QUESTION = SDL::K_QUESTION
104
+ K_AT = SDL::K_AT
105
+ K_LEFTBRACKET = SDL::K_LEFTBRACKET
106
+ K_BACKSLASH = SDL::K_BACKSLASH
107
+ K_RIGHTBRACKET = SDL::K_RIGHTBRACKET
108
+ K_CARET = SDL::K_CARET
109
+ K_UNDERSCORE = SDL::K_UNDERSCORE
110
+ K_BACKQUOTE = SDL::K_BACKQUOTE
111
+ K_A = SDL::K_a
112
+ K_B = SDL::K_b
113
+ K_C = SDL::K_c
114
+ K_D = SDL::K_d
115
+ K_E = SDL::K_e
116
+ K_F = SDL::K_f
117
+ K_G = SDL::K_g
118
+ K_H = SDL::K_h
119
+ K_I = SDL::K_i
120
+ K_J = SDL::K_j
121
+ K_K = SDL::K_k
122
+ K_L = SDL::K_l
123
+ K_M = SDL::K_m
124
+ K_N = SDL::K_n
125
+ K_O = SDL::K_o
126
+ K_P = SDL::K_p
127
+ K_Q = SDL::K_q
128
+ K_R = SDL::K_r
129
+ K_S = SDL::K_s
130
+ K_T = SDL::K_t
131
+ K_U = SDL::K_u
132
+ K_V = SDL::K_v
133
+ K_W = SDL::K_w
134
+ K_X = SDL::K_x
135
+ K_Y = SDL::K_y
136
+ K_Z = SDL::K_z
137
+ K_DELETE = SDL::K_DELETE
138
+
139
+
140
+ # International keyboard symbols
141
+ K_WORLD_0 = SDL::K_WORLD_0
142
+ K_WORLD_1 = SDL::K_WORLD_1
143
+ K_WORLD_2 = SDL::K_WORLD_2
144
+ K_WORLD_3 = SDL::K_WORLD_3
145
+ K_WORLD_4 = SDL::K_WORLD_4
146
+ K_WORLD_5 = SDL::K_WORLD_5
147
+ K_WORLD_6 = SDL::K_WORLD_6
148
+ K_WORLD_7 = SDL::K_WORLD_7
149
+ K_WORLD_8 = SDL::K_WORLD_8
150
+ K_WORLD_9 = SDL::K_WORLD_9
151
+ K_WORLD_10 = SDL::K_WORLD_10
152
+ K_WORLD_11 = SDL::K_WORLD_11
153
+ K_WORLD_12 = SDL::K_WORLD_12
154
+ K_WORLD_13 = SDL::K_WORLD_13
155
+ K_WORLD_14 = SDL::K_WORLD_14
156
+ K_WORLD_15 = SDL::K_WORLD_15
157
+ K_WORLD_16 = SDL::K_WORLD_16
158
+ K_WORLD_17 = SDL::K_WORLD_17
159
+ K_WORLD_18 = SDL::K_WORLD_18
160
+ K_WORLD_19 = SDL::K_WORLD_19
161
+ K_WORLD_20 = SDL::K_WORLD_20
162
+ K_WORLD_21 = SDL::K_WORLD_21
163
+ K_WORLD_22 = SDL::K_WORLD_22
164
+ K_WORLD_23 = SDL::K_WORLD_23
165
+ K_WORLD_24 = SDL::K_WORLD_24
166
+ K_WORLD_25 = SDL::K_WORLD_25
167
+ K_WORLD_26 = SDL::K_WORLD_26
168
+ K_WORLD_27 = SDL::K_WORLD_27
169
+ K_WORLD_28 = SDL::K_WORLD_28
170
+ K_WORLD_29 = SDL::K_WORLD_29
171
+ K_WORLD_30 = SDL::K_WORLD_30
172
+ K_WORLD_31 = SDL::K_WORLD_31
173
+ K_WORLD_32 = SDL::K_WORLD_32
174
+ K_WORLD_33 = SDL::K_WORLD_33
175
+ K_WORLD_34 = SDL::K_WORLD_34
176
+ K_WORLD_35 = SDL::K_WORLD_35
177
+ K_WORLD_36 = SDL::K_WORLD_36
178
+ K_WORLD_37 = SDL::K_WORLD_37
179
+ K_WORLD_38 = SDL::K_WORLD_38
180
+ K_WORLD_39 = SDL::K_WORLD_39
181
+ K_WORLD_40 = SDL::K_WORLD_40
182
+ K_WORLD_41 = SDL::K_WORLD_41
183
+ K_WORLD_42 = SDL::K_WORLD_42
184
+ K_WORLD_43 = SDL::K_WORLD_43
185
+ K_WORLD_44 = SDL::K_WORLD_44
186
+ K_WORLD_45 = SDL::K_WORLD_45
187
+ K_WORLD_46 = SDL::K_WORLD_46
188
+ K_WORLD_47 = SDL::K_WORLD_47
189
+ K_WORLD_48 = SDL::K_WORLD_48
190
+ K_WORLD_49 = SDL::K_WORLD_49
191
+ K_WORLD_50 = SDL::K_WORLD_50
192
+ K_WORLD_51 = SDL::K_WORLD_51
193
+ K_WORLD_52 = SDL::K_WORLD_52
194
+ K_WORLD_53 = SDL::K_WORLD_53
195
+ K_WORLD_54 = SDL::K_WORLD_54
196
+ K_WORLD_55 = SDL::K_WORLD_55
197
+ K_WORLD_56 = SDL::K_WORLD_56
198
+ K_WORLD_57 = SDL::K_WORLD_57
199
+ K_WORLD_58 = SDL::K_WORLD_58
200
+ K_WORLD_59 = SDL::K_WORLD_59
201
+ K_WORLD_60 = SDL::K_WORLD_60
202
+ K_WORLD_61 = SDL::K_WORLD_61
203
+ K_WORLD_62 = SDL::K_WORLD_62
204
+ K_WORLD_63 = SDL::K_WORLD_63
205
+ K_WORLD_64 = SDL::K_WORLD_64
206
+ K_WORLD_65 = SDL::K_WORLD_65
207
+ K_WORLD_66 = SDL::K_WORLD_66
208
+ K_WORLD_67 = SDL::K_WORLD_67
209
+ K_WORLD_68 = SDL::K_WORLD_68
210
+ K_WORLD_69 = SDL::K_WORLD_69
211
+ K_WORLD_70 = SDL::K_WORLD_70
212
+ K_WORLD_71 = SDL::K_WORLD_71
213
+ K_WORLD_72 = SDL::K_WORLD_72
214
+ K_WORLD_73 = SDL::K_WORLD_73
215
+ K_WORLD_74 = SDL::K_WORLD_74
216
+ K_WORLD_75 = SDL::K_WORLD_75
217
+ K_WORLD_76 = SDL::K_WORLD_76
218
+ K_WORLD_77 = SDL::K_WORLD_77
219
+ K_WORLD_78 = SDL::K_WORLD_78
220
+ K_WORLD_79 = SDL::K_WORLD_79
221
+ K_WORLD_80 = SDL::K_WORLD_80
222
+ K_WORLD_81 = SDL::K_WORLD_81
223
+ K_WORLD_82 = SDL::K_WORLD_82
224
+ K_WORLD_83 = SDL::K_WORLD_83
225
+ K_WORLD_84 = SDL::K_WORLD_84
226
+ K_WORLD_85 = SDL::K_WORLD_85
227
+ K_WORLD_86 = SDL::K_WORLD_86
228
+ K_WORLD_87 = SDL::K_WORLD_87
229
+ K_WORLD_88 = SDL::K_WORLD_88
230
+ K_WORLD_89 = SDL::K_WORLD_89
231
+ K_WORLD_90 = SDL::K_WORLD_90
232
+ K_WORLD_91 = SDL::K_WORLD_91
233
+ K_WORLD_92 = SDL::K_WORLD_92
234
+ K_WORLD_93 = SDL::K_WORLD_93
235
+ K_WORLD_94 = SDL::K_WORLD_94
236
+ K_WORLD_95 = SDL::K_WORLD_95
237
+
238
+
239
+ # Numeric keypad symbols
240
+ K_KP0 = SDL::K_KP0
241
+ K_KP1 = SDL::K_KP1
242
+ K_KP2 = SDL::K_KP2
243
+ K_KP3 = SDL::K_KP3
244
+ K_KP4 = SDL::K_KP4
245
+ K_KP5 = SDL::K_KP5
246
+ K_KP6 = SDL::K_KP6
247
+ K_KP7 = SDL::K_KP7
248
+ K_KP8 = SDL::K_KP8
249
+ K_KP9 = SDL::K_KP9
250
+ K_KP_PERIOD = SDL::K_KP_PERIOD
251
+ K_KP_DIVIDE = SDL::K_KP_DIVIDE
252
+ K_KP_MULTIPLY = SDL::K_KP_MULTIPLY
253
+ K_KP_MINUS = SDL::K_KP_MINUS
254
+ K_KP_PLUS = SDL::K_KP_PLUS
255
+ K_KP_ENTER = SDL::K_KP_ENTER
256
+ K_KP_EQUALS = SDL::K_KP_EQUALS
257
+
258
+
259
+ # Arrows + Home/End pad
260
+ K_UP = SDL::K_UP
261
+ K_DOWN = SDL::K_DOWN
262
+ K_RIGHT = SDL::K_RIGHT
263
+ K_LEFT = SDL::K_LEFT
264
+ K_INSERT = SDL::K_INSERT
265
+ K_HOME = SDL::K_HOME
266
+ K_END = SDL::K_END
267
+ K_PAGEUP = SDL::K_PAGEUP
268
+ K_PAGEDOWN = SDL::K_PAGEDOWN
269
+
270
+
271
+ # Function keys
272
+ K_F1 = SDL::K_F1
273
+ K_F2 = SDL::K_F2
274
+ K_F3 = SDL::K_F3
275
+ K_F4 = SDL::K_F4
276
+ K_F5 = SDL::K_F5
277
+ K_F6 = SDL::K_F6
278
+ K_F7 = SDL::K_F7
279
+ K_F8 = SDL::K_F8
280
+ K_F9 = SDL::K_F9
281
+ K_F10 = SDL::K_F10
282
+ K_F11 = SDL::K_F11
283
+ K_F12 = SDL::K_F12
284
+ K_F13 = SDL::K_F13
285
+ K_F14 = SDL::K_F14
286
+ K_F15 = SDL::K_F15
287
+
288
+
289
+ # Key state modifier keys
290
+ K_NUMLOCK = SDL::K_NUMLOCK
291
+ K_CAPSLOCK = SDL::K_CAPSLOCK
292
+ K_SCROLLOCK = SDL::K_SCROLLOCK
293
+ K_RSHIFT = SDL::K_RSHIFT
294
+ K_LSHIFT = SDL::K_LSHIFT
295
+ K_RCTRL = SDL::K_RCTRL
296
+ K_LCTRL = SDL::K_LCTRL
297
+ K_RALT = SDL::K_RALT
298
+ K_LALT = SDL::K_LALT
299
+ K_RMETA = SDL::K_RMETA
300
+ K_LMETA = SDL::K_LMETA
301
+ K_LSUPER = SDL::K_LSUPER
302
+ K_RSUPER = SDL::K_RSUPER
303
+ K_MODE = SDL::K_MODE
304
+
305
+
306
+ # Miscellaneous keys
307
+ K_HELP = SDL::K_HELP
308
+ K_PRINT = SDL::K_PRINT
309
+ K_SYSREQ = SDL::K_SYSREQ
310
+ K_BREAK = SDL::K_BREAK
311
+ K_MENU = SDL::K_MENU
312
+ K_POWER = SDL::K_POWER
313
+ K_EURO = SDL::K_EURO
314
+ K_LAST = SDL::K_LAST
315
+
316
+
317
+
318
+
22
319
  module Mouse
23
320
  # Hash to translate mouse button sym to string
24
321
  MOUSE2STR = {
@@ -0,0 +1,555 @@
1
+ #--
2
+ # Rubygame -- Ruby code and bindings to SDL to facilitate game creation
3
+ # Copyright (C) 2004-2009 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
+ # **NOTE:** This module is DEPRECATED and will be removed in Rubygame 3.0.
22
+ # Please use Rubygame.open_audio, Rubygame.close_audio, Rubygame::Sound,
23
+ # and Rubygame::Music instead.
24
+ #
25
+ # The Mixer module provides access to the SDL_mixer library for audio
26
+ # playback and mixing. This module is still very basic, but it is
27
+ # good enough to load and play WAV files on multiple mix channels.
28
+ #
29
+ # See the Sample class for loading audio files.
30
+ # See the Music class for streaming music from a file.
31
+ #
32
+ module Rubygame::Mixer
33
+
34
+ AUDIO_U8 = SDL::AUDIO_U8
35
+ AUDIO_S8 = SDL::AUDIO_S8
36
+ AUDIO_U16SYS = SDL::AUDIO_U16SYS
37
+ AUDIO_S16SYS = SDL::AUDIO_S16SYS
38
+
39
+
40
+ # **NOTE:** This method is DEPRECATED and will be removed in
41
+ # Rubygame 3.0. Please use the Rubygame.open_audio instead.
42
+ #
43
+ # Initializes the audio device. You must call this before using the other
44
+ # mixer functions. See also #close_audio().
45
+ #
46
+ # Returns nil. May raise an SDLError if initialization fails.
47
+ #
48
+ # This method takes these arguments:
49
+ #
50
+ # frequency:: output sample rate in audio samples per second (Hz).
51
+ # Affects the quality of the sound output, at the
52
+ # expense of CPU usage. If nil, the default (22050) is
53
+ # used. 22050 is recommended for most games. For
54
+ # reference, 44100 is CD quality.
55
+ #
56
+ # The larger the value, the more processing required.
57
+ #
58
+ # format:: output sample format. If nil, the default recommended
59
+ # system format is used. It's _highly_ recommended you
60
+ # leave this nil!
61
+ #
62
+ # But if you're feeling reckless, you can use one of these
63
+ # constants located in the Rubygame::Mixer module:
64
+ #
65
+ # AUDIO_U16SYS:: unsigned 16-bit samples.
66
+ # AUDIO_S16SYS:: signed 16-bit samples.
67
+ # AUDIO_U8:: unsigned 8-bit samples.
68
+ # AUDIO_S8:: signed 8-bit samples.
69
+ #
70
+ # channels:: output sound channels. Use 2 for stereo, 1 for mono.
71
+ # If nil, the default (2) is used.
72
+ # This option is not related to mixing channels.
73
+ #
74
+ # buffer:: size of the sound buffer, in bytes. If nil, the default
75
+ # (1024) is used. Larger values have more delay before
76
+ # playing a sound, but require less CPU usage (and
77
+ # have less skipping on slow systems).
78
+ #
79
+ #
80
+ def self.open_audio( frequency=nil, format=nil, channels=nil, buffer=nil )
81
+
82
+ Rubygame.deprecated( "Rubygame::Mixer", "3.0" )
83
+
84
+ frequency = (frequency or 22050)
85
+ format = (format or AUDIO_U16SYS)
86
+ channels = (channels or 2)
87
+ buffer = (buffer or 1024)
88
+
89
+ result = SDL::Mixer.OpenAudio(frequency, format, channels, buffer)
90
+
91
+ if( result < 0 )
92
+ raise( Rubygame::SDLError,
93
+ "Error initializing SDL_mixer: #{SDL.GetError()}" )
94
+ end
95
+
96
+ return nil
97
+ end
98
+
99
+
100
+ # **NOTE:** This method is DEPRECATED and will be removed in
101
+ # Rubygame 3.0. Please use the Rubygame.close_audio instead.
102
+ #
103
+ # Close the audio device being used by the mixer. You should not use any
104
+ # mixer functions after this function, unless you use #open_audio() to
105
+ # re-open the audio device. See also #open_audio().
106
+ #
107
+ # Returns nil.
108
+ #
109
+ def self.close_audio()
110
+ Rubygame.deprecated( "Rubygame::Mixer", "3.0" )
111
+ SDL::Mixer.CloseAudio()
112
+ return nil
113
+ end
114
+
115
+
116
+ # **NOTE:** This method is DEPRECATED and will be removed in
117
+ # Rubygame 3.0. Please use the Rubygame::Sound class instead.
118
+ #
119
+ # Returns the number of mixing channels currently allocated.
120
+ # See also #mix_channels=
121
+ #
122
+ def self.mix_channels
123
+ Rubygame.deprecated( "Rubygame::Mixer", "3.0" )
124
+ return SDL::Mixer.AllocateChannels(-1)
125
+ end
126
+
127
+
128
+ # **NOTE:** This method is DEPRECATED and will be removed in
129
+ # Rubygame 3.0. Please use the Rubygame::Sound class instead.
130
+ #
131
+ # Set the number of mixer channels, allocating or deallocating channels as
132
+ # needed. This can be called many times, even during audio playback. If this
133
+ # call reduces the number of channels allocated, the excess channels will
134
+ # be stopped automatically. See also #mix_channels
135
+ #
136
+ # Returns the number of mixing channels allocated.
137
+ #
138
+ # Note that 8 mixing channels are allocated when #open_audio is called.
139
+ # This method only needs to be called if you want a different number (either
140
+ # greater or fewer) of mixing channels.
141
+ #
142
+ # This method takes this argument:
143
+ # num_channels:: desired number of mixing channels, an integer.
144
+ # Negative values will cause this method to behave as
145
+ # #mix_channels, returning the number of channels
146
+ # currently allocated, without changing it.
147
+ #
148
+ def self.mix_channels=( num_channels )
149
+ Rubygame.deprecated( "Rubygame::Mixer", "3.0" )
150
+ return SDL::Mixer.AllocateChannels( num_channels )
151
+ end
152
+
153
+
154
+ # **NOTE:** This method is DEPRECATED and will be removed in
155
+ # Rubygame 3.0. Please use the Rubygame.audio_driver instead.
156
+ #
157
+ # Returns the name of the audio driver that SDL is using.
158
+ #
159
+ # May raise SDLError if initialization fails.
160
+ #
161
+ def self.driver_name
162
+ Rubygame.deprecated( "Rubygame::Mixer", "3.0" )
163
+
164
+ driver = SDL.AudioDriverName()
165
+
166
+ if driver.nil?
167
+ raise( Rubygame::SDLError,
168
+ "Error fetching audio driver name: #{SDL.GetError()}" )
169
+ end
170
+
171
+ return driver
172
+ end
173
+
174
+
175
+ # **NOTE:** This method is DEPRECATED and will be removed in
176
+ # Rubygame 3.0. Please use the Rubygame::Sound class instead.
177
+ #
178
+ # Play an audio Sample on a mixing channel, repeating a certain number
179
+ # of extra times. Returns the number of the channel that the sample
180
+ # is being played on.
181
+ #
182
+ # Raises SDLError if something goes wrong.
183
+ #
184
+ # This method takes these arguments:
185
+ # sample:: what Sample to play
186
+ # channel_num:: which mixing channel to play the sample on.
187
+ # Use -1 to play on the first unreserved channel.
188
+ # repeats:: how many extra times to repeat the sample.
189
+ # Can be -1 to repeat forever until it is stopped.
190
+ #
191
+ def self.play( sample, channel_num, repeats )
192
+ Rubygame.deprecated( "Rubygame::Mixer", "3.0" )
193
+
194
+ result = SDL::Mixer.PlayChannel( channel_num, sample.struct, repeats )
195
+
196
+ if( result < 0 )
197
+ raise( Rubygame::SDLError,
198
+ "Error playing sample on channel %d: %s"%
199
+ [channel, SDL.GetError()] )
200
+ end
201
+
202
+ return result
203
+ end
204
+
205
+
206
+ # Stop playback of a playing or paused mixing channel.
207
+ # Unlike #pause, playback cannot be resumed from the current point.
208
+ # See also #play.
209
+ #
210
+ def self.stop( channel_num )
211
+ Rubygame.deprecated( "Rubygame::Mixer", "3.0" )
212
+ SDL::Mixer.HaltChannel( channel_num )
213
+ return nil
214
+ end
215
+
216
+
217
+ # Pause playback of a currently-playing mixing channel.
218
+ # Playback can be resumed from the current point with #resume.
219
+ # See also #stop.
220
+ #
221
+ def self.pause( channel_num )
222
+ Rubygame.deprecated( "Rubygame::Mixer", "3.0" )
223
+ SDL::Mixer.Pause( channel_num )
224
+ return nil
225
+ end
226
+
227
+
228
+ # Resume playback of a paused mixing channel. The channel must have
229
+ # been paused (via the #pause method) for this to have any effect.
230
+ # Playback will resume from the point where the channel was paused.
231
+ #
232
+ def self.resume( channel_num )
233
+ Rubygame.deprecated( "Rubygame::Mixer", "3.0" )
234
+ SDL::Mixer.Resume( channel_num )
235
+ return nil
236
+ end
237
+
238
+ end
239
+
240
+
241
+
242
+ # **NOTE:** This class is DEPRECATED and will be removed in Rubygame 3.0.
243
+ # Please use the Rubygame::Sound class instead.
244
+ #
245
+ # Stores audio data to play with Rubygame::Mixer.play
246
+ #
247
+ class Rubygame::Mixer::Sample
248
+
249
+ # **NOTE:** Rubygame::Mixer::Sample is DEPRECATED and will be removed in
250
+ # Rubygame 3.0. Please use the Rubygame::Sound class instead.
251
+ #
252
+ # Load an audio sample (a "chunk", to use SDL_mixer's term) from a file.
253
+ # Only WAV files are supported at this time.
254
+ #
255
+ # Raises SDLError if the sample could not be loaded.
256
+ #
257
+ def self.load_audio( filename )
258
+ Rubygame.deprecated( "Rubygame::Mixer::Sample", "3.0" )
259
+
260
+ chunk = SDL::Mixer.LoadWAV( filename )
261
+
262
+ if( chunk.pointer.null? )
263
+ raise( Rubygame::SDLError,
264
+ "Error loading audio Sample from file `%s': %s"%
265
+ [filename, SDL.GetError()] )
266
+ end
267
+
268
+ return new( chunk )
269
+ end
270
+
271
+
272
+ attr_reader :struct # :nodoc:
273
+ protected :struct
274
+
275
+
276
+ # call-seq: new
277
+ def initialize( struct=nil )
278
+ @struct = struct
279
+ end
280
+
281
+ end
282
+
283
+
284
+
285
+ # **NOTE:** This class is DEPRECATED and will be removed in Rubygame 3.0.
286
+ # Please use the Rubygame::Music class instead.
287
+ #
288
+ # The Music class is used for playing music from a file. It supports
289
+ # WAVE, MOD, MIDI, OGG, and MP3 files. There are two important differences
290
+ # between Music and Sample:
291
+ #
292
+ # 1. Music streams the music from disk, which means it can start faster and
293
+ # uses less memory than Sample, which loads the entire file into memory.
294
+ # This is especially important for music files, which are often several
295
+ # minutes long.
296
+ # 2. There can only be one Music instance playing at once, while there can
297
+ # be many Samples playing at once. If you play a second Music while one
298
+ # is already playing, the first one will be stopped. See #play.
299
+ #
300
+ class Rubygame::Mixer::Music
301
+
302
+ # # Sets the external command used to play music.
303
+ # #
304
+ # # Raises SDLError if something goes wrong.
305
+ # #
306
+ # # This method takes these arguments:
307
+ # # command:: what command to use to play the music.
308
+ # #
309
+ # def set_command( command )
310
+ # Rubygame.deprecated( "Rubygame::Mixer::Music", "3.0" )
311
+ #
312
+ # result = SDL::Mixer.SetMusicCMD( command )
313
+ #
314
+ # if( result < 0 )
315
+ # raise( Rubygame::SDLError,
316
+ # "Error setting music player command to `%s': %s"%
317
+ # [command, SDL.GetError()] )
318
+ # end
319
+ #
320
+ # return result
321
+ # end
322
+
323
+
324
+ # **NOTE:** Rubygame::Mixer::Music is DEPRECATED and will be removed
325
+ # in Rubygame 3.0. Please use the Rubygame::Music class instead.
326
+ #
327
+ # Load music from a file. Supports WAV, MOD, MIDI, OGG, and MP3 formats.
328
+ #
329
+ # Raises SDLError if the music could not be loaded.
330
+ #
331
+ def self.load_audio
332
+ Rubygame.deprecated( "Rubygame::Mixer::Music", "3.0" )
333
+
334
+ music = SDL::Mixer.LoadMUS( filename )
335
+
336
+ if( music.pointer.null? )
337
+ raise( Rubygame::SDLError,
338
+ "Error loading audio music from file `%s': %s"%
339
+ [filename, SDL.GetError()] )
340
+ end
341
+
342
+ return new( music )
343
+ end
344
+
345
+
346
+ attr_reader :struct # :nodoc:
347
+ protected :struct
348
+
349
+
350
+ # call-seq: new
351
+ def initialize( struct=nil )
352
+ @struct = struct
353
+ end
354
+
355
+
356
+ # Play music, repeating a certain number of extra times. If
357
+ # any music was already playing, that music will be stopped
358
+ # first, and this music will start.
359
+ #
360
+ # Raises SDLError if something goes wrong.
361
+ #
362
+ # This method takes these arguments:
363
+ # repeats:: how many extra times to play the music.
364
+ # Can be -1 to repeat forever until it is stopped.
365
+ #
366
+ def play( repeats=0 )
367
+ # Adjust so repeats means the same as it does for Samples
368
+ repeats += 1 if repeats > -1
369
+
370
+ result = SDL::Mixer.PlayMusic( @struct, repeats )
371
+
372
+ if( result < 0 )
373
+ raise Rubygame::SDLError, "Error playing music: #{SDL.GetError()}"
374
+ end
375
+
376
+ return self
377
+ end
378
+
379
+
380
+ # Stop playback of music.
381
+ # See also #play
382
+ #
383
+ def stop
384
+ SDL::Mixer::HaltMusic()
385
+ return self
386
+ end
387
+
388
+
389
+ # Pause playback of the playing music. You can later #resume
390
+ # playback from the point where you paused.
391
+ # Safe to use on already-paused music.
392
+ # See also #play_music.
393
+ #
394
+ def pause
395
+ SDL::Mixer::PauseMusic()
396
+ return self
397
+ end
398
+
399
+
400
+ # Resume playback of paused music from the point it was paused.
401
+ # Safe to use on already-playing music.
402
+ # See also #play.
403
+ #
404
+ def resume
405
+ SDL::Mixer::ResumeMusic()
406
+ return self
407
+ end
408
+
409
+
410
+ # Rewind the music to the start. This is safe to use on stopped,
411
+ # paused, and playing music. Only works for MOD, OGG, MP3, and
412
+ # MIDI (but not WAV).
413
+ #
414
+ def rewind
415
+ SDL::Mixer::RewindMusic()
416
+ return self
417
+ end
418
+
419
+
420
+ # Jump to a certain time in the music.
421
+ # Only works when music is playing or paused (but not stopped).
422
+ # Only works for OGG and MP3 files.
423
+ #
424
+ # Raises SDLError if something goes wrong, or if the music type does not
425
+ # support setting the position.
426
+ #
427
+ # time:: Time to jump to, in seconds from the beginning.
428
+ #
429
+ def jump( time )
430
+ case SDL::Mixer.GetMusicType(nil)
431
+ when SDL::Mixer::MUS_OGG, SDL::Mixer::MUS_MP3
432
+
433
+ SDL::Mixer::RewindMusic() # Needed for MP3, and OK with OGG
434
+
435
+ result = SDL::Mixer.SetmusicPosition( time )
436
+
437
+ if( result < 0 )
438
+ raise( Rubygame::SDLError,
439
+ "Error jumping to time in music: #{SDL.GetError()}" )
440
+ end
441
+
442
+ when SDL::Mixer::MUS_NONE
443
+ raise Rubygame::SDLError, "Cannot jump when no music is playing."
444
+ else
445
+ raise Rubygame::SDLError, "Music type does not support jumping."
446
+ end
447
+ end
448
+
449
+
450
+ # Returns true if the music is currently playing.
451
+ #
452
+ def playing?
453
+ return SDL::Mixer::PlayingMusic()
454
+ end
455
+
456
+
457
+ # Returns true if the music is currently paused.
458
+ #
459
+ def paused?
460
+ return SDL::Mixer::PausedMusic()
461
+ end
462
+
463
+
464
+ # Returns the current volume level of the music.
465
+ # 0.0 is total silence, 1.0 is maximum volume.
466
+ #
467
+ def volume
468
+ return (SDL::Mixer::VolumeMusic(-1).to_f / SDL::Mixer::MAX_VOLUME)
469
+ end
470
+
471
+
472
+ # Sets the volume level of the music.
473
+ # 0.0 is total silence, 1.0 is maximum volume.
474
+ #
475
+ def volume=( new_volume )
476
+ SDL::Mixer.VolumeMusic( (volume * SDL::Mixer::MAX_VOLUME).to_i )
477
+ return new_volume
478
+ end
479
+
480
+
481
+ # Play the music, fading in and repeating a certain number of times.
482
+ # See also #play.
483
+ #
484
+ # Raises SDLError if something goes wrong.
485
+ #
486
+ # fade_time:: Time in seconds for the fade-in effect to complete.
487
+ # repeats:: Number of extra times to play through the music.
488
+ # -1 plays the music forever until it is stopped.
489
+ # Defaults to 0, play only once (no repeats).
490
+ # start:: Time to start from, in seconds since the beginning.
491
+ # Defaults to 0, the beginning of the song.
492
+ # Non-zero values only work for OGG and MP3; other
493
+ # music types will raise SDLError.
494
+ #
495
+ def fade_in( fade_time, repeats=0, start=0 )
496
+ fade_time *= 1000 # convert to milliseconds
497
+ repeats = (repeats or 0)
498
+ start = (start or 0)
499
+
500
+ # Adjust so repeats means the same as it does for Samples
501
+ repeats += 1 if repeats > -1
502
+
503
+ result =
504
+ if( start == 0 )
505
+ SDL::Mixer.FadeInMusic( @struct, repeats, fade_time )
506
+ else
507
+ SDL::Mixer.FadeInMusicPos( @struct, repeats, fade_time, start )
508
+ end
509
+
510
+ if( result < 0 )
511
+ raise Rubygame::SDLError, "Error fading in music: #{SDL.GetError()}"
512
+ end
513
+
514
+ return self
515
+ end
516
+
517
+
518
+ # Gradually fade the music to silence over +fade_length+ seconds.
519
+ # After the fade is complete, the music will be automatically stopped.
520
+ #
521
+ # Raises SDLError if something goes wrong.
522
+ #
523
+ # fade_time:: Time until the music is totally silent, in seconds.
524
+ #
525
+ def fade_out( fade_time )
526
+ fade_time *= 1000 # convert to milliseconds
527
+
528
+ result = SDL::Mixer.FadeOutMusic( fade_time )
529
+
530
+ if( result < 0 )
531
+ raise Rubygame::SDLError, "Error fading out music: #{SDL.GetError()}"
532
+ end
533
+ end
534
+
535
+
536
+ # True if the music is fading in or out (or either). You can
537
+ # specify +direction+ as :in/:out to check only fading in/out;
538
+ # otherwise, it will return true if it's fading either way.
539
+ #
540
+ # direction:: :in, :out, or nil if you don't care which.
541
+ # Returns:: true if the music is fading in the given direction.
542
+ #
543
+ def fading?( direction=nil )
544
+ case direction
545
+ when :in
546
+ return (SDL::Mixer.FadingMusic() == SDL::Mixer::FADING_IN)
547
+ when :out
548
+ return (SDL::Mixer.FadingMusic() == SDL::Mixer::FADING_OUT)
549
+ else
550
+ return (SDL::Mixer.FadingMusic() != SDL::Mixer::NO_FADING)
551
+ end
552
+ end
553
+ end
554
+
555
+