rubygame 2.3.0-x86-mswin32-60

Sign up to get free protection for your applications and to get access to all the features.
Files changed (99) hide show
  1. data/CREDITS +60 -0
  2. data/LICENSE +504 -0
  3. data/NEWS +252 -0
  4. data/README +123 -0
  5. data/ROADMAP +109 -0
  6. data/Rakefile +440 -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/rubygame_core.so +0 -0
  12. data/ext/rubygame/rubygame_event.c +644 -0
  13. data/ext/rubygame/rubygame_event.h +48 -0
  14. data/ext/rubygame/rubygame_event.obj +0 -0
  15. data/ext/rubygame/rubygame_gfx.c +942 -0
  16. data/ext/rubygame/rubygame_gfx.h +101 -0
  17. data/ext/rubygame/rubygame_gfx.obj +0 -0
  18. data/ext/rubygame/rubygame_gfx.so +0 -0
  19. data/ext/rubygame/rubygame_gl.c +154 -0
  20. data/ext/rubygame/rubygame_gl.h +32 -0
  21. data/ext/rubygame/rubygame_gl.obj +0 -0
  22. data/ext/rubygame/rubygame_image.c +252 -0
  23. data/ext/rubygame/rubygame_image.h +41 -0
  24. data/ext/rubygame/rubygame_image.obj +0 -0
  25. data/ext/rubygame/rubygame_image.so +0 -0
  26. data/ext/rubygame/rubygame_joystick.c +247 -0
  27. data/ext/rubygame/rubygame_joystick.h +41 -0
  28. data/ext/rubygame/rubygame_joystick.obj +0 -0
  29. data/ext/rubygame/rubygame_main.c +155 -0
  30. data/ext/rubygame/rubygame_main.h +36 -0
  31. data/ext/rubygame/rubygame_main.obj +0 -0
  32. data/ext/rubygame/rubygame_mixer.c +1024 -0
  33. data/ext/rubygame/rubygame_mixer.h +36 -0
  34. data/ext/rubygame/rubygame_mixer.obj +0 -0
  35. data/ext/rubygame/rubygame_mixer.so +0 -0
  36. data/ext/rubygame/rubygame_music.c +1017 -0
  37. data/ext/rubygame/rubygame_music.h +29 -0
  38. data/ext/rubygame/rubygame_music.obj +0 -0
  39. data/ext/rubygame/rubygame_screen.c +448 -0
  40. data/ext/rubygame/rubygame_screen.h +43 -0
  41. data/ext/rubygame/rubygame_screen.obj +0 -0
  42. data/ext/rubygame/rubygame_shared.c +272 -0
  43. data/ext/rubygame/rubygame_shared.h +68 -0
  44. data/ext/rubygame/rubygame_shared.obj +0 -0
  45. data/ext/rubygame/rubygame_sound.c +863 -0
  46. data/ext/rubygame/rubygame_sound.h +29 -0
  47. data/ext/rubygame/rubygame_sound.obj +0 -0
  48. data/ext/rubygame/rubygame_surface.c +1151 -0
  49. data/ext/rubygame/rubygame_surface.h +62 -0
  50. data/ext/rubygame/rubygame_surface.obj +0 -0
  51. data/ext/rubygame/rubygame_time.c +183 -0
  52. data/ext/rubygame/rubygame_time.h +32 -0
  53. data/ext/rubygame/rubygame_time.obj +0 -0
  54. data/ext/rubygame/rubygame_ttf.c +599 -0
  55. data/ext/rubygame/rubygame_ttf.h +69 -0
  56. data/ext/rubygame/rubygame_ttf.obj +0 -0
  57. data/ext/rubygame/rubygame_ttf.so +0 -0
  58. data/lib/rubygame.rb +41 -0
  59. data/lib/rubygame/clock.rb +128 -0
  60. data/lib/rubygame/color.rb +79 -0
  61. data/lib/rubygame/color/models/base.rb +111 -0
  62. data/lib/rubygame/color/models/hsl.rb +153 -0
  63. data/lib/rubygame/color/models/hsv.rb +149 -0
  64. data/lib/rubygame/color/models/rgb.rb +78 -0
  65. data/lib/rubygame/color/palettes/css.rb +49 -0
  66. data/lib/rubygame/color/palettes/palette.rb +100 -0
  67. data/lib/rubygame/color/palettes/x11.rb +177 -0
  68. data/lib/rubygame/constants.rb +238 -0
  69. data/lib/rubygame/event.rb +313 -0
  70. data/lib/rubygame/ftor.rb +370 -0
  71. data/lib/rubygame/hotspot.rb +265 -0
  72. data/lib/rubygame/keyconstants.rb +237 -0
  73. data/lib/rubygame/mediabag.rb +94 -0
  74. data/lib/rubygame/named_resource.rb +254 -0
  75. data/lib/rubygame/queue.rb +288 -0
  76. data/lib/rubygame/rect.rb +612 -0
  77. data/lib/rubygame/sfont.rb +223 -0
  78. data/lib/rubygame/sprite.rb +511 -0
  79. data/samples/FreeSans.ttf +0 -0
  80. data/samples/GPL.txt +340 -0
  81. data/samples/README +40 -0
  82. data/samples/chimp.bmp +0 -0
  83. data/samples/chimp.rb +302 -0
  84. data/samples/demo_gl.rb +151 -0
  85. data/samples/demo_gl_tex.rb +197 -0
  86. data/samples/demo_music.rb +77 -0
  87. data/samples/demo_rubygame.rb +296 -0
  88. data/samples/demo_sfont.rb +52 -0
  89. data/samples/demo_ttf.rb +193 -0
  90. data/samples/demo_utf8.rb +53 -0
  91. data/samples/fist.bmp +0 -0
  92. data/samples/load_and_blit.rb +22 -0
  93. data/samples/panda.png +0 -0
  94. data/samples/punch.wav +0 -0
  95. data/samples/ruby.png +0 -0
  96. data/samples/song.ogg +0 -0
  97. data/samples/term16.png +0 -0
  98. data/samples/whiff.wav +0 -0
  99. metadata +164 -0
data/Rakefile ADDED
@@ -0,0 +1,440 @@
1
+ require 'rubygems'
2
+ Gem::manage_gems
3
+
4
+ require 'rake'
5
+ require 'rake/gempackagetask'
6
+ require 'rake/rdoctask'
7
+
8
+ require "rbconfig"
9
+ include Config
10
+
11
+ require 'English'
12
+
13
+ class ShellCommandError < RuntimeError
14
+ end
15
+
16
+ # Execute the block (which is supposed to perform a shell command),
17
+ # then raise ShellCommandError if the command failed.
18
+ def try_shell( &block )
19
+ result = yield
20
+
21
+ unless $CHILD_STATUS.exitstatus == 0
22
+ raise ShellCommandError, "Command failed. Aborting."
23
+ end
24
+
25
+ return result
26
+ end
27
+
28
+ def try_sdl_config( flag )
29
+ begin
30
+ if $options[:"sdl-config"]
31
+ return try_shell { `sdl-config #{flag}`.chomp }
32
+ else
33
+ return String.new
34
+ end
35
+ rescue ShellCommandError
36
+ warn "WARNING: 'sdl-config' failed."
37
+ warn "Continuing anyway, but compile may fail."
38
+ return String.new
39
+ end
40
+ end
41
+
42
+ # Get a variable from ENV or CONFIG, with ENV having precedence.
43
+ # Returns "" if the variable didn't exist at all.
44
+ def from_env_or_config(string)
45
+ ([ENV[string], CONFIG[string]] - ["", nil])[0] or ""
46
+ end
47
+
48
+ OBJEXT = from_env_or_config("OBJEXT")
49
+ DLEXT = from_env_or_config("DLEXT")
50
+
51
+ RUBYGAME_VERSION = [2,3,0]
52
+
53
+ gem_spec = Gem::Specification.new do |s|
54
+ s.name = "rubygame"
55
+ s.version = RUBYGAME_VERSION.join(".")
56
+ s.author = "John Croisant"
57
+ s.email = "jacius@users.sourceforge.net"
58
+ s.homepage = "http://rubygame.sourceforge.net/"
59
+ s.summary = "Clean and powerful library for game programming"
60
+ s.has_rdoc = true
61
+
62
+ s.files = FileList.new do |fl|
63
+ fl.include("{lib,ext,samples,doc}/**/*")
64
+ fl.exclude(/svn/)
65
+ #fl.exclude(/\.#{OBJEXT}/)
66
+ end
67
+
68
+ puts(s.files.join("\n"))
69
+
70
+ s.require_paths = ["lib", "lib/rubygame/", "ext/rubygame/"]
71
+ s.extensions = ["Rakefile"]
72
+
73
+ s.extra_rdoc_files = FileList.new do |fl|
74
+ fl.include "doc/*.rdoc"
75
+ fl.include "README", "LICENSE", "CREDITS", "ROADMAP", "NEWS"
76
+ end
77
+ end
78
+
79
+ task :binary do
80
+ gem_spec.platform = Gem::Platform::CURRENT
81
+ end
82
+
83
+ Rake::GemPackageTask.new(gem_spec) do |pkg|
84
+ pkg.need_tar_bz2 = true
85
+ end
86
+
87
+ Rake::RDocTask.new do |rd|
88
+ rd.main = "README"
89
+ rd.title = "Rubygame #{RUBYGAME_VERSION.join(".")} Docs"
90
+ rd.rdoc_files.include("ext/rubygame/*.c",
91
+ "lib/rubygame/**/*.rb",
92
+ "doc/*.rdoc",
93
+ "README",
94
+ "LICENSE",
95
+ "CREDITS",
96
+ "ROADMAP",
97
+ "NEWS")
98
+ end
99
+
100
+ task :default => [:build]
101
+ desc "Compile all of the extensions"
102
+ task :build
103
+
104
+ require 'rake/clean'
105
+ task(:clean) { puts "Cleaning out temporary generated files" }
106
+ task(:clobber) { puts "Cleaning out final generated files" }
107
+
108
+ ##############################
109
+ ## BUILD OPTIONS ##
110
+ ##############################
111
+
112
+ $options = {
113
+ :"sdl-gfx" => true,
114
+ :"sdl-image" => true,
115
+ :"sdl-ttf" => true,
116
+ :"sdl-mixer" => true,
117
+ :opengl => true,
118
+ :"sdl-config" => true,
119
+ :universal => false,
120
+ :debug => false,
121
+ :verbose => false,
122
+ :sitearchdir => CONFIG["sitearchdir"],
123
+ :sitelibdir => CONFIG["sitelibdir"]
124
+ }
125
+
126
+ # Default behavior for win32 is to skip sdl_config,
127
+ # since it's usually not available. It can still be
128
+ # enabled through the options, though.
129
+ if PLATFORM =~ /win32/
130
+ $options[:"sdl-config"] = false
131
+ end
132
+
133
+ # Define tasks to enable and disable bool options.
134
+ #
135
+ # rake option
136
+ # rake no-option
137
+ #
138
+ # task_name:: the task name to use
139
+ # option_name:: the option name (if different from
140
+ # the task name)
141
+ # desc:: a longer description, to fill
142
+ # "Enable ________.", if different
143
+ # from the task name.
144
+ #
145
+ def bool_option( task_name, option_name=nil, desc=nil )
146
+ option_name = task_name unless option_name
147
+ option_name = option_name.intern if option_name.kind_of? String
148
+
149
+ desc = task_name.to_s unless desc
150
+
151
+ notask_name = "no-#{task_name.to_s}".intern
152
+
153
+ is_true = $options[option_name]
154
+
155
+ desc "Enable #{desc} #{'(default)' if is_true}"
156
+ task(task_name) { $options[option_name] = true }
157
+
158
+ desc "Disable #{desc} #{'(default)' unless is_true}"
159
+ task(notask_name) { $options[option_name] = false }
160
+ end
161
+
162
+ # Gather a string option from an environment variable:
163
+ #
164
+ # rake option="the value of the option"
165
+ #
166
+ # task_name:: the task name to use
167
+ # option_name:: the option name (if different from
168
+ # the task name)
169
+ #
170
+ def string_option( task_name, option_name=nil )
171
+ option_name = task_name unless option_name
172
+ option_name = option_name.intern if option_name.kind_of? String
173
+
174
+ $options[option_name] = ENV["#{task_name}"] if ENV["#{task_name}"]
175
+ end
176
+
177
+ bool_option :"sdl-gfx", nil, "SDL_gfx support"
178
+ bool_option :"sdl-image", nil, "SDL_image support"
179
+ bool_option :"sdl-mixer", nil, "SDL_mixer support"
180
+ bool_option :"sdl-ttf", nil, "SDL_ttf support"
181
+ bool_option :"sdl-config", nil, "guess compiler flags for SDL"
182
+ bool_option :opengl, nil, "OpenGL support"
183
+ bool_option :debug, nil, "compile with debug symbols"
184
+ bool_option :verbose, nil, "show compiler commands"
185
+ bool_option :universal, nil, "universal binary (MacOS X Intel)"
186
+
187
+ string_option "RUBYARCHDIR", :sitearchdir
188
+ string_option :sitearchdir
189
+
190
+ string_option "RUBYLIBDIR", :sitelibdir
191
+ string_option :sitelibdir
192
+
193
+
194
+ CFLAGS = [from_env_or_config("CFLAGS"),
195
+ try_sdl_config("--cflags"),
196
+ "-I. -I#{CONFIG['topdir']}",
197
+ ("-g" if $options[:debug]),
198
+ "-DRUBYGAME_MAJOR_VERSION=#{RUBYGAME_VERSION[0]}",
199
+ "-DRUBYGAME_MINOR_VERSION=#{RUBYGAME_VERSION[1]}",
200
+ "-DRUBYGAME_PATCHLEVEL=#{RUBYGAME_VERSION[2]}"
201
+ ].join(" ")
202
+
203
+ LINK_FLAGS = [from_env_or_config("LIBRUBYARG_SHARED"),
204
+ from_env_or_config("LDFLAGS"),
205
+ try_sdl_config("--libs")].join(" ")
206
+
207
+ DEFAULT_EXTDIR = File.join('ext','rubygame','')
208
+
209
+ class ExtensionModule
210
+ @@libflag = " -l%s " # compiler flag for giving linked libraries
211
+ attr_accessor :dynlib, :objs, :libs, :cflags, :lflags, :directory
212
+ def initialize(&block)
213
+ @directory = DEFAULT_EXTDIR
214
+ @dynlib = ""
215
+ @objs = []
216
+ @libs = []
217
+ @lflags = ""
218
+ yield self if block_given?
219
+ end
220
+
221
+ def add_lib( lib )
222
+ @lflags << @@libflag%lib
223
+ end
224
+
225
+ def add_header( header )
226
+ #CFLAGS << " -DHAVE_#{header.upcase.gsub('.','_')} "
227
+ end
228
+
229
+ def create_all_tasks()
230
+ create_obj_task
231
+ create_dl_task
232
+ CLEAN.include("#{@directory}/*.#{OBJEXT}")
233
+ CLOBBER.include("#{@directory}/*.#{DLEXT}")
234
+ end
235
+
236
+ # Create a file task for each dynamic library (.so) we want to generate.
237
+ #
238
+ # The file task invokes another task which does the actual compiling, and
239
+ # has the true prerequisites.
240
+ #
241
+ # This is done so that the prerequisites don't have to be compiled when
242
+ # the final product already exists (such as in the precompiled win32 gem).
243
+ #
244
+ def create_dl_task
245
+ dynlib_full = File.join( @directory, "#{dynlib}.#{DLEXT}" )
246
+ objs_full = @objs.collect { |obj|
247
+ File.join( @directory, "#{obj}.#{OBJEXT}" )
248
+ }
249
+
250
+ desc "Compile the #{@dynlib} extension"
251
+ file dynlib_full => objs_full do |task|
252
+
253
+ link_command = "#{from_env_or_config('LDSHARED')} #{LINK_FLAGS} #{@lflags} -o #{dynlib_full} #{task.prerequisites.join(' ')}"
254
+
255
+
256
+ # If link command includes i386 arch, and we're not allowing universal
257
+ if( /-arch i386/ === link_command and not $options[:universal] )
258
+ # Strip "-arch ppc" to prevent building a universal binary.
259
+ link_command.gsub!("-arch ppc","")
260
+ end
261
+
262
+ if( $options[:verbose] )
263
+ try_shell { sh link_command }
264
+ else
265
+ puts "Linking compiled files to create #{File.basename(@directory)}/#{File.basename(dynlib_full)}"
266
+ try_shell { `#{link_command}` }
267
+ end
268
+ end
269
+
270
+ task :build => [dynlib_full] # Add this as a prereq of the build
271
+ task :install_ext => [dynlib_full] # ...and install_ext tasks
272
+ end
273
+
274
+ def create_obj_task
275
+ # A rule for object files (".o" on linux).
276
+ # This won't work for rake < 0.7.2, because the proc returns an Array.
277
+ # If it raises an exception, we'll try a more compatible way.
278
+ rule(/#{@directory}.+\.#{OBJEXT}$/ =>
279
+ [
280
+ # Generate dependencies for this .o file
281
+ proc do |objfile|
282
+ source = objfile.sub(".#{OBJEXT}", ".c") # the .c file
283
+ [source] + depends_headers( source ) # Array of .c + .h dependencies
284
+ end
285
+ ])\
286
+ do |t|
287
+
288
+ compile_command = "#{from_env_or_config('CC')} -c #{CFLAGS} #{t.source} -o #{t.name}"
289
+
290
+ # If compile command includes i386 arch, and we're not allowing universal
291
+ if( /-arch i386/ === compile_command and not $options[:universal] )
292
+ # Strip "-arch ppc" to prevent building a universal binary.
293
+ compile_command.gsub!("-arch ppc","")
294
+ end
295
+
296
+ if( $options[:verbose] )
297
+ try_shell { sh compile_command }
298
+ else
299
+ puts "Compiling #{File.basename(@directory)}/#{File.basename(t.source)}"
300
+ try_shell { `#{compile_command}` }
301
+ end
302
+ end
303
+ rescue
304
+ # Generate a .o rule for each .c file in the directory.
305
+ FileList.new("#{@directory}*.c").each do |source|
306
+ object = source.sub(".c", ".#{OBJEXT}")
307
+ file object => ([source] + depends_headers( source )) do |t|
308
+ compile_command = "#{CONFIG['CC']} -c #{CFLAGS} #{source} -o #{t.name}"
309
+ if( $options[:verbose] )
310
+ try_shell { sh compile_command }
311
+ else
312
+ puts "Compiling #{File.basename(@directory)}/#{File.basename(source)}"
313
+ try_shell { `#{compile_command}` }
314
+ end
315
+ end
316
+ end
317
+ end
318
+
319
+ # Extracts the names of all the headers that the C file depends on.
320
+ def depends_headers( filename )
321
+ return [] # workaround for a bug
322
+ depends = []
323
+ File.open(filename, "r") do |file|
324
+ file.each_line do |line|
325
+ if /#include\s+"(\w+\.h)"/ =~ line
326
+ depends << @directory+$1
327
+ end
328
+ end
329
+ end
330
+ return depends
331
+ end
332
+ end
333
+
334
+ rubygame_core = ExtensionModule.new do |core|
335
+ core.dynlib = 'rubygame_core'
336
+ core.objs = ['rubygame_main',
337
+ 'rubygame_shared',
338
+ 'rubygame_event',
339
+ 'rubygame_gl',
340
+ 'rubygame_joystick',
341
+ 'rubygame_screen',
342
+ 'rubygame_surface',
343
+ 'rubygame_time',
344
+ ]
345
+ core.create_all_tasks()
346
+ end
347
+
348
+ # TODO: We should check if the libraries exist?
349
+
350
+ rubygame_gfx = ExtensionModule.new do |gfx|
351
+ gfx.dynlib = 'rubygame_gfx'
352
+ gfx.objs = ['rubygame_shared', 'rubygame_gfx']
353
+ gfx.add_lib( 'SDL_gfx' )
354
+ gfx.add_header( 'SDL_gfxPrimitives.h')
355
+ gfx.add_header( 'SDL_rotozoom.h' )
356
+ gfx.create_all_tasks() if $options[:"sdl-gfx"]
357
+ end
358
+
359
+ rubygame_image = ExtensionModule.new do |image|
360
+ image.dynlib = 'rubygame_image'
361
+ image.objs = ['rubygame_shared', 'rubygame_image']
362
+ image.add_lib('SDL_image')
363
+ image.add_header('SDL_image.h')
364
+ image.create_all_tasks() if $options[:"sdl-image"]
365
+ end
366
+
367
+ rubygame_mixer = ExtensionModule.new do |mixer|
368
+ mixer.dynlib = 'rubygame_mixer'
369
+ mixer.objs = ['rubygame_shared', 'rubygame_mixer', 'rubygame_sound', 'rubygame_music']
370
+ mixer.add_lib('SDL_mixer')
371
+ mixer.add_header('SDL_mixer.h')
372
+ mixer.create_all_tasks() if $options[:"sdl-mixer"]
373
+ end
374
+
375
+ rubygame_ttf = ExtensionModule.new do |ttf|
376
+ ttf.dynlib = 'rubygame_ttf'
377
+ ttf.add_lib('SDL_ttf')
378
+ ttf.objs = ['rubygame_shared', 'rubygame_ttf']
379
+ ttf.add_header('SDL_ttf.h')
380
+ ttf.create_all_tasks() if $options[:"sdl-ttf"]
381
+ end
382
+
383
+ if $options[:opengl]
384
+ CFLAGS << " -DHAVE_OPENGL "
385
+ end
386
+
387
+ desc "(Called when installing via Rubygems)"
388
+ task :extension => [:fix_filenames, :build]
389
+
390
+ task :fix_filenames do
391
+ unless DLEXT == 'so'
392
+ Rake::Task[:install_ext].prerequisites.each do |prereq|
393
+ prereq = prereq.ext('so')
394
+ if File.exist? prereq
395
+ mv prereq, prereq.ext(DLEXT)
396
+ end
397
+ end
398
+ end
399
+ end
400
+
401
+ desc "Install just the extensions"
402
+ task :install_ext do |task|
403
+ puts "Installing extensions to #{$options[:sitearchdir]}"
404
+ mkdir_p $options[:sitearchdir]
405
+ cp task.prerequisites.to_a, $options[:sitearchdir]
406
+ end
407
+
408
+ desc "Install just the library"
409
+ task :install_lib do |task|
410
+ puts "Installing library to #{$options[:sitelibdir]}"
411
+
412
+ files = FileList.new do |fl|
413
+ fl.include("lib/**/*.rb")
414
+ fl.exclude(/svn/)
415
+ end
416
+
417
+ files.each do |f|
418
+ dir = File.join($options[:sitelibdir], File.dirname(f).sub('lib',''), "")
419
+ mkdir_p dir
420
+ cp f, dir
421
+ end
422
+ end
423
+
424
+ desc "Install both the extensions and the library"
425
+ task :install => [:install_ext, :install_lib]
426
+
427
+
428
+
429
+ begin
430
+ require 'spec/rake/spectask'
431
+
432
+ desc "Run all specs (tests)"
433
+ Spec::Rake::SpecTask.new do |t|
434
+ t.spec_files = FileList['test/*_spec.rb']
435
+ end
436
+ rescue LoadError
437
+ task :spec do
438
+ puts "ERROR: RSpec is not installed?"
439
+ end
440
+ end
@@ -0,0 +1,49 @@
1
+ = Extended README
2
+
3
+ (Stuff that didn't make it into the main README file.)
4
+
5
+ == Internal structure of Rubygame
6
+
7
+ Rubygame's core is a low-level extension written in C; it
8
+ provides a basic interface to SDL and its companion libraries.
9
+ Building upon that is a ruby library which implements high-level
10
+ concepts like game objects, event management, etc.
11
+
12
+ Rubygame is modular, meaning you can pick and choose which parts to use.
13
+ For example, if you don't need TrueType font support, SDL_ttf is not
14
+ required to compile Rubygame. It is possible for a game to detect at
15
+ run-time which features are present, and behave accordingly (for example,
16
+ the game might disable certain optional features).
17
+
18
+ Rubygame is multi-tiered, meaning you can access Rubygame's functionality
19
+ on a number of levels, each level being built on the level below it.
20
+ Each higher level is closer to a complete game, but is also less flexible.
21
+ The idea here is that developers will use the higher levels most of the
22
+ time, but be free to hack lower levels when they need to do something
23
+ special.
24
+
25
+ == About the version number
26
+
27
+ The version number of Rubygame has a strict meaning, to help you decide
28
+ whether the new version might break your application. The version number has
29
+ 3 parts: the major version number, the minor version number, and the patch
30
+ number. For the example of Rubygame 2.0.0:
31
+
32
+ 2 . 0 . 0
33
+ MAJOR . MINOR . PATCH
34
+
35
+ When a new release of Rubygame is made, one of the version numbers will
36
+ go up, and the numbers that come after it will be reset to 0. Which number
37
+ will go up depends on how much the Rubygame API changed:
38
+
39
+ - *MAJOR*: API has changed, and old apps must be updated.
40
+ An example of this is when a class has been significantly changed, or a
41
+ method has renamed/moved to another module and the old name is removed.
42
+
43
+ - *MINOR*: API has changed, but old apps will still work.
44
+ An example of this is when a new feature has been added, or a
45
+ method has been renamed but the old name is still supported.
46
+
47
+ - *PATCH*: API has not changed at all.
48
+ An example of this is when a bug has been fixed, or existing code has
49
+ been improved beneath the surface.