rubygame 2.5.3 → 2.6.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.
- data/CREDITS +6 -4
- data/NEWS +79 -0
- data/README +55 -72
- data/ROADMAP +20 -13
- data/doc/custom_sdl_load_paths.rdoc +79 -0
- data/doc/getting_started.rdoc +65 -36
- data/doc/keyboard_symbols.rdoc +243 -0
- data/doc/macosx_install.rdoc +49 -35
- data/doc/windows_install.rdoc +36 -108
- data/lib/rubygame.rb +62 -24
- data/lib/rubygame/audio.rb +147 -0
- data/lib/rubygame/clock.rb +164 -1
- data/lib/rubygame/color.rb +40 -7
- data/lib/rubygame/color/models/hsl.rb +1 -1
- data/lib/rubygame/color/models/hsv.rb +1 -1
- data/lib/rubygame/color/models/rgb.rb +1 -1
- data/lib/rubygame/color/palettes/css.rb +1 -3
- data/lib/rubygame/color/palettes/x11.rb +1 -2
- data/lib/rubygame/constants.rb +297 -0
- data/lib/rubygame/deprecated_mixer.rb +555 -0
- data/lib/rubygame/event.rb +122 -6
- data/lib/rubygame/event_handler.rb +3 -1
- data/lib/rubygame/event_hook.rb +6 -2
- data/lib/rubygame/event_triggers.rb +1 -1
- data/lib/rubygame/events.rb +416 -1
- data/lib/rubygame/ftor.rb +1 -7
- data/lib/rubygame/gfx.rb +583 -0
- data/lib/rubygame/gl.rb +107 -0
- data/lib/rubygame/image.rb +140 -0
- data/lib/rubygame/joystick.rb +184 -0
- data/lib/rubygame/main.rb +82 -0
- data/lib/rubygame/mediabag.rb +1 -1
- data/lib/rubygame/mixer.rb +30 -0
- data/lib/rubygame/music.rb +493 -0
- data/lib/rubygame/queue.rb +3 -1
- data/lib/rubygame/rect.rb +9 -9
- data/lib/rubygame/screen.rb +357 -0
- data/lib/rubygame/shared.rb +40 -4
- data/lib/rubygame/sound.rb +428 -0
- data/lib/rubygame/surface.rb +626 -0
- data/lib/rubygame/ttf.rb +311 -0
- data/samples/FreeSans.ttf +0 -0
- data/samples/README +6 -5
- data/samples/demo_draw.rb +1 -1
- data/samples/demo_gl.rb +3 -1
- data/samples/demo_gl_tex.rb +4 -2
- data/samples/demo_rubygame.rb +114 -105
- data/samples/demo_sfont.rb +1 -1
- data/samples/demo_ttf.rb +3 -1
- data/samples/demo_utf8.rb +1 -1
- data/samples/image_viewer.rb +118 -0
- data/samples/load_and_blit.rb +1 -1
- data/samples/rubygame.png +0 -0
- metadata +34 -40
- data/Rakefile +0 -537
- data/doc/extended_readme.rdoc +0 -49
- data/ext/body/rubygame_body.so +0 -0
- data/ext/rubygame/rubygame_clock.c +0 -301
- data/ext/rubygame/rubygame_clock.h +0 -32
- data/ext/rubygame/rubygame_event.c +0 -760
- data/ext/rubygame/rubygame_event.h +0 -48
- data/ext/rubygame/rubygame_event2.c +0 -661
- data/ext/rubygame/rubygame_event2.h +0 -29
- data/ext/rubygame/rubygame_gfx.c +0 -942
- data/ext/rubygame/rubygame_gfx.h +0 -101
- data/ext/rubygame/rubygame_gl.c +0 -154
- data/ext/rubygame/rubygame_gl.h +0 -32
- data/ext/rubygame/rubygame_image.c +0 -252
- data/ext/rubygame/rubygame_image.h +0 -41
- data/ext/rubygame/rubygame_joystick.c +0 -336
- data/ext/rubygame/rubygame_joystick.h +0 -41
- data/ext/rubygame/rubygame_main.c +0 -158
- data/ext/rubygame/rubygame_main.h +0 -36
- data/ext/rubygame/rubygame_mixer.c +0 -1024
- data/ext/rubygame/rubygame_mixer.h +0 -36
- data/ext/rubygame/rubygame_music.c +0 -1017
- data/ext/rubygame/rubygame_music.h +0 -29
- data/ext/rubygame/rubygame_screen.c +0 -572
- data/ext/rubygame/rubygame_screen.h +0 -45
- data/ext/rubygame/rubygame_shared.c +0 -269
- data/ext/rubygame/rubygame_shared.h +0 -69
- data/ext/rubygame/rubygame_sound.c +0 -863
- data/ext/rubygame/rubygame_sound.h +0 -29
- data/ext/rubygame/rubygame_surface.c +0 -1153
- data/ext/rubygame/rubygame_surface.h +0 -62
- data/ext/rubygame/rubygame_ttf.c +0 -599
- data/ext/rubygame/rubygame_ttf.h +0 -69
- data/samples/keys.rb +0 -52
data/lib/rubygame/gl.rb
ADDED
@@ -0,0 +1,107 @@
|
|
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
|
+
|
22
|
+
# The GL module provides an interface to SDL's OpenGL-related functions,
|
23
|
+
# allowing a Rubygame application to create hardware-accelerated 3D graphics
|
24
|
+
# with OpenGL.
|
25
|
+
#
|
26
|
+
# Please note that Rubygame itself does not provide an interface to OpenGL
|
27
|
+
# functions -- only functions which allow Rubygame to work together with
|
28
|
+
# OpenGL. You will need to use another library, for example
|
29
|
+
# ruby-opengl[http://ruby-opengl.rubyforge.org/],
|
30
|
+
# to actually create graphics with OpenGL.
|
31
|
+
#
|
32
|
+
# Users who wish to use Rubygame Surfaces as textures in OpenGL should
|
33
|
+
# see also the Surface#pixels method.
|
34
|
+
#
|
35
|
+
module Rubygame::GL
|
36
|
+
|
37
|
+
|
38
|
+
# Return the value of the the SDL/OpenGL attribute identified by +attrib+,
|
39
|
+
# which should be one of the constants defined in the Rubygame::GL module.
|
40
|
+
# See #set_attrib for a list of attribute constants.
|
41
|
+
#
|
42
|
+
# This method is useful after using #set_attrib and calling Screen#set_mode,
|
43
|
+
# to make sure the attribute is the expected value.
|
44
|
+
#
|
45
|
+
def self.get_attrib( attrib )
|
46
|
+
result = SDL.GL_GetAttribute(attrib)
|
47
|
+
if( result.nil? )
|
48
|
+
raise Rubygame::SDLError, "GL get attribute failed: #{SDL.GetError()}"
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
|
53
|
+
|
54
|
+
# Set the SDL/OpenGL attribute +attrib+ to +value+. This should be called
|
55
|
+
# *before* you call Screen#set_mode with the OPENGL flag. You may wish to
|
56
|
+
# use #get_attrib after calling Screen#set_mode to confirm that the attribute
|
57
|
+
# is set to the desired value.
|
58
|
+
#
|
59
|
+
# The full list of SDL/OpenGL attribute identifier constants (located under
|
60
|
+
# the Rubygame::GL module) is as follows:
|
61
|
+
#
|
62
|
+
# RED_SIZE:: Size of framebuffer red component, in bits.
|
63
|
+
# GREEN_SIZE:: Size of framebuffer green component, in bits.
|
64
|
+
# BLUE_SIZE:: Size of framebuffer blue component, in bits.
|
65
|
+
# ALPHA_SIZE:: Size of framebuffer alpha (opacity) component, in bits.
|
66
|
+
# BUFFER_SIZE:: Size of framebuffer, in bits.
|
67
|
+
# DOUBLEBUFFER:: Enable or disable double-buffering.
|
68
|
+
# DEPTH_SIZE:: Size of depth buffer, in bits.
|
69
|
+
# STENCIL_SIZE:: Size of stencil buffer, in bits.
|
70
|
+
# ACCUM_RED_SIZE:: Size of accumulation buffer red component, in bits.
|
71
|
+
# ACCUM_GREEN_SIZE:: Size of accumulation buffer green component, in bits.
|
72
|
+
# ACCUM_BLUE_SIZE:: Size of accumulation buffer blue component, in bits.
|
73
|
+
# ACCUM_ALPHA_SIZE:: Size of accumulation buffer alpha component, in bits.
|
74
|
+
#
|
75
|
+
def self.set_attrib( attrib, value )
|
76
|
+
result = SDL.GL_SetAttribute( attrib, value )
|
77
|
+
if( result == -1 )
|
78
|
+
raise Rubygame::SDLError, "GL set attribute failed: #{SDL.GetError()}"
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
|
83
|
+
|
84
|
+
# Swap the back and front buffers, for double-buffered OpenGL displays.
|
85
|
+
# Should be safe to use (albeit with no effect) on single-buffered OpenGL
|
86
|
+
# displays.
|
87
|
+
#
|
88
|
+
def self.swap_buffers
|
89
|
+
SDL.GL_SwapBuffers()
|
90
|
+
end
|
91
|
+
|
92
|
+
|
93
|
+
RED_SIZE = SDL::GL_RED_SIZE
|
94
|
+
GREEN_SIZE = SDL::GL_GREEN_SIZE
|
95
|
+
BLUE_SIZE = SDL::GL_BLUE_SIZE
|
96
|
+
ALPHA_SIZE = SDL::GL_ALPHA_SIZE
|
97
|
+
BUFFER_SIZE = SDL::GL_BUFFER_SIZE
|
98
|
+
DOUBLEBUFFER = SDL::GL_DOUBLEBUFFER
|
99
|
+
DEPTH_SIZE = SDL::GL_DEPTH_SIZE
|
100
|
+
STENCIL_SIZE = SDL::GL_STENCIL_SIZE
|
101
|
+
ACCUM_RED_SIZE = SDL::GL_ACCUM_RED_SIZE
|
102
|
+
ACCUM_GREEN_SIZE = SDL::GL_ACCUM_GREEN_SIZE
|
103
|
+
ACCUM_BLUE_SIZE = SDL::GL_ACCUM_BLUE_SIZE
|
104
|
+
ACCUM_ALPHA_SIZE = SDL::GL_ACCUM_ALPHA_SIZE
|
105
|
+
|
106
|
+
|
107
|
+
end
|
@@ -0,0 +1,140 @@
|
|
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
|
+
|
22
|
+
require "ruby-sdl-ffi/image"
|
23
|
+
|
24
|
+
Rubygame::VERSIONS[:sdl_image] = SDL::Image.Linked_Version().to_ary
|
25
|
+
|
26
|
+
|
27
|
+
class Rubygame::Surface
|
28
|
+
|
29
|
+
class << self
|
30
|
+
|
31
|
+
# Searches each directory in Surface.autoload_dirs for a file with
|
32
|
+
# the given filename. If it finds that file, loads it and returns
|
33
|
+
# a Surface instance. If it doesn't find the file, returns nil.
|
34
|
+
#
|
35
|
+
# See Rubygame::NamedResource for more information about this
|
36
|
+
# functionality.
|
37
|
+
#
|
38
|
+
def autoload( name )
|
39
|
+
path = find_file( name )
|
40
|
+
|
41
|
+
if( path )
|
42
|
+
return load( path )
|
43
|
+
else
|
44
|
+
return nil
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
|
49
|
+
# *IMPORTANT*: this method only exists if SDL_image is available!
|
50
|
+
# Your code should check "defined?(Rubygame::Surface.load) != nil"
|
51
|
+
# to see if you can use this method, or be prepared to rescue from
|
52
|
+
# NameError.
|
53
|
+
#
|
54
|
+
# Load an image file from the disk to a Surface. If the image has an alpha
|
55
|
+
# channel (e.g. PNG with transparency), the Surface will as well. If the
|
56
|
+
# image cannot be loaded (for example if the image format is unsupported),
|
57
|
+
# will raise SDLError.
|
58
|
+
#
|
59
|
+
# This method takes this argument:
|
60
|
+
# filename:: a string containing the relative or absolute path to the
|
61
|
+
# image file. The file must have the proper file extension,
|
62
|
+
# as it is used to determine image format.
|
63
|
+
#
|
64
|
+
# These formats may be supported, but some may not be available on a
|
65
|
+
# particular system.
|
66
|
+
# BMP:: "Windows Bitmap" format.
|
67
|
+
# GIF:: "Graphics Interchange Format."
|
68
|
+
# JPG:: "Independent JPEG Group" format.
|
69
|
+
# LBM:: "Linear Bitmap" format (?)
|
70
|
+
# PCX:: "PC Paintbrush" format
|
71
|
+
# PNG:: "Portable Network Graphics" format.
|
72
|
+
# PNM:: "Portable Any Map" format. (i.e., PPM, PGM, or PBM)
|
73
|
+
# TGA:: "Truevision TARGA" format.
|
74
|
+
# TIF:: "Tagged Image File Format"
|
75
|
+
# XCF:: "eXperimental Computing Facility" (GIMP native format).
|
76
|
+
# XPM:: "XPixMap" format.
|
77
|
+
#
|
78
|
+
def load( filename )
|
79
|
+
surf = SDL::Image.Load( filename )
|
80
|
+
|
81
|
+
if( surf.pointer.null? )
|
82
|
+
raise( Rubygame::SDLError, "Couldn't load image \"%s\": %s"%\
|
83
|
+
[filename, SDL.GetError()] )
|
84
|
+
end
|
85
|
+
|
86
|
+
return self.new(surf)
|
87
|
+
end
|
88
|
+
|
89
|
+
|
90
|
+
# Deprecated. Use Surface.load instead!
|
91
|
+
def load_image( filename )
|
92
|
+
Rubygame.deprecated( "Rubygame::Surface.load_image", "3.0" )
|
93
|
+
load( filename )
|
94
|
+
end
|
95
|
+
|
96
|
+
|
97
|
+
# *IMPORTANT*: this method only exists if SDL_image is available!
|
98
|
+
# Your code should check
|
99
|
+
# "defined?(Rubygame::Surface.load_from_string) != nil" to see if
|
100
|
+
# you can use this method, or be prepared to rescue from
|
101
|
+
# NameError.
|
102
|
+
#
|
103
|
+
# Load an image file from memory (in the form of the given data)
|
104
|
+
# to a Surface. If the image has an alpha channel (e.g. PNG with
|
105
|
+
# transparency), the Surface will as well. If the image cannot be
|
106
|
+
# loaded (for example if the image format is unsupported), will
|
107
|
+
# raise SDLError.
|
108
|
+
#
|
109
|
+
# This method takes these arguments:
|
110
|
+
# data:: a string containing the data for the image, such as
|
111
|
+
# IO::read would return.
|
112
|
+
# type:: The type of file that the image is (i.e. 'TGA'). Case is
|
113
|
+
# not important. If absent, the library will try to
|
114
|
+
# automatically detect the type.
|
115
|
+
#
|
116
|
+
# See Surface.load for a list of possible supported file types.
|
117
|
+
#
|
118
|
+
def load_from_string( data, type=nil )
|
119
|
+
raw = FFI::Buffer.new(:char, data.length)
|
120
|
+
raw.put_bytes(0, data)
|
121
|
+
|
122
|
+
rw = SDL.RWFromMem( raw, data.length )
|
123
|
+
|
124
|
+
surf = if type
|
125
|
+
SDL::Image.LoadTyped_RW(rw, 1, type)
|
126
|
+
else
|
127
|
+
SDL::Image.Load_RW(rw, 1)
|
128
|
+
end
|
129
|
+
|
130
|
+
if surf.pointer.null?
|
131
|
+
raise( Rubygame::SDLError,
|
132
|
+
"Couldn't load image from string: #{SDL.GetError()}" )
|
133
|
+
end
|
134
|
+
|
135
|
+
return new(surf)
|
136
|
+
end
|
137
|
+
|
138
|
+
end
|
139
|
+
|
140
|
+
end
|
@@ -0,0 +1,184 @@
|
|
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
|
+
|
22
|
+
# The Joystick class interfaces with joysticks, gamepads, and other
|
23
|
+
# similar hardware devices used to play games. Each joystick may
|
24
|
+
# have zero or more #axes, #balls, #hats, and/or #buttons.
|
25
|
+
#
|
26
|
+
# After a Joystick object is successfully created, events for that
|
27
|
+
# Joystick will begin appearing on the EventQueue when a button is
|
28
|
+
# pressed or released, a control stick is moved, etc.
|
29
|
+
#
|
30
|
+
# You can use Joystick.activate_all to start receiving events for
|
31
|
+
# all joysticks (equivalent to creating them all individually with
|
32
|
+
# Joystick.new). You can use Joystick.deactivate_all to stop
|
33
|
+
# receiving events for all joysticks.
|
34
|
+
#
|
35
|
+
# As of Rubygame 2.4, these are the current, "new-style" Joystick
|
36
|
+
# event classes:
|
37
|
+
#
|
38
|
+
# * Events::JoystickAxisMoved
|
39
|
+
# * Events::JoystickButtonPressed
|
40
|
+
# * Events::JoystickButtonReleased
|
41
|
+
# * Events::JoystickBallMoved
|
42
|
+
# * Events::JoystickHatMoved
|
43
|
+
#
|
44
|
+
# These old Joystick-related events are deprecated and will be
|
45
|
+
# removed in Rubygame 3.0:
|
46
|
+
#
|
47
|
+
# * JoyAxisEvent
|
48
|
+
# * JoyBallEvent
|
49
|
+
# * JoyHatEvent
|
50
|
+
# * JoyDownEvent
|
51
|
+
# * JoyUpEvent
|
52
|
+
#
|
53
|
+
# For more information about "new-style" events, see
|
54
|
+
# EventQueue.enable_new_style_events.
|
55
|
+
#
|
56
|
+
class Rubygame::Joystick
|
57
|
+
|
58
|
+
|
59
|
+
# Returns the total number of joysticks detected on the system.
|
60
|
+
def self.num_joysticks
|
61
|
+
SDL.NumJoysticks()
|
62
|
+
end
|
63
|
+
|
64
|
+
|
65
|
+
# Returns the name of Nth joystick on the system. The name is
|
66
|
+
# implementation-dependent. See also #name.
|
67
|
+
#
|
68
|
+
def self.get_name( index )
|
69
|
+
SDL.JoystickName( index )
|
70
|
+
end
|
71
|
+
|
72
|
+
|
73
|
+
# Activate all joysticks on the system, equivalent to calling
|
74
|
+
# Joystick.new for every joystick available. This will allow
|
75
|
+
# joystick-related events to be sent to the EventQueue for all
|
76
|
+
# joysticks.
|
77
|
+
#
|
78
|
+
# Returns:: Array of zero or more Joysticks.
|
79
|
+
# May raise:: SDLError, if the joystick system could not be
|
80
|
+
# initialized.
|
81
|
+
#
|
82
|
+
def self.activate_all
|
83
|
+
# Initialize if it isn't already.
|
84
|
+
if( SDL.WasInit(SDL::INIT_JOYSTICK) == 0 )
|
85
|
+
if( SDL.Init(SDL::INIT_JOYSTICK) != 0 )
|
86
|
+
raise Rubygame::SDLError, "Could not initialize SDL joysticks."
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
# Collect Joystick instances in an Array
|
91
|
+
joysticks = []
|
92
|
+
|
93
|
+
num_joysticks.times do |i|
|
94
|
+
joysticks << new( i )
|
95
|
+
end
|
96
|
+
|
97
|
+
return joysticks
|
98
|
+
end
|
99
|
+
|
100
|
+
|
101
|
+
# Deactivate all joysticks on the system. This will stop all
|
102
|
+
# joystick-related events from being sent to the EventQueue.
|
103
|
+
#
|
104
|
+
def self.deactivate_all
|
105
|
+
# Return right away if it isn't active
|
106
|
+
return if( SDL.WasInit(SDL::INIT_JOYSTICK) == 0 )
|
107
|
+
|
108
|
+
num_joysticks.times do |i|
|
109
|
+
joy = SDL.JoystickOpen(i)
|
110
|
+
unless( joy.pointer.nil? )
|
111
|
+
SDL.JoystickClose( joy )
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
return nil
|
116
|
+
end
|
117
|
+
|
118
|
+
|
119
|
+
# Create and initialize an interface to the Nth joystick on the
|
120
|
+
# system. Raises SDLError if the joystick could not be opened.
|
121
|
+
#
|
122
|
+
def initialize( index )
|
123
|
+
@struct = SDL.JoystickOpen( index )
|
124
|
+
if( @struct.pointer.null? )
|
125
|
+
raise( Rubygame::SDLError, "Could not open joystick %d: %s"%
|
126
|
+
[index, SDL.GetError()] )
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
|
131
|
+
# Returns the index number of the Joystick, i.e. the identifier
|
132
|
+
# number of the joystick that this interface controls. This is the
|
133
|
+
# same number that was given to Joystick.new.
|
134
|
+
#
|
135
|
+
def index
|
136
|
+
SDL.JoystickIndex( @struct )
|
137
|
+
end
|
138
|
+
|
139
|
+
|
140
|
+
# Returns a String containing the name of the Joystick. The name is
|
141
|
+
# implementation-dependent. See also Joystick.get_name.
|
142
|
+
#
|
143
|
+
def name
|
144
|
+
SDL.JoystickName( self.index )
|
145
|
+
end
|
146
|
+
|
147
|
+
|
148
|
+
# Returns the number of axes (singular: axis) featured on the
|
149
|
+
# Joystick. Each control stick generally has two axes (X and Y),
|
150
|
+
# although there are other types of controls which are represented
|
151
|
+
# as one or more axes.
|
152
|
+
#
|
153
|
+
def axes
|
154
|
+
SDL.JoystickNumAxes( @struct )
|
155
|
+
end
|
156
|
+
|
157
|
+
|
158
|
+
# Returns the number of trackballs featured on the Joystick. A
|
159
|
+
# trackball is usually a small sphere which can be rotated in-place
|
160
|
+
# in any direction, registering relative movement along two axes.
|
161
|
+
#
|
162
|
+
def balls
|
163
|
+
SDL.JoystickNumBalls( @struct )
|
164
|
+
end
|
165
|
+
|
166
|
+
|
167
|
+
# Returns the number of hats featured on the Joystick. A hat is a
|
168
|
+
# switch which can be pushed in one of several directions, or
|
169
|
+
# centered.
|
170
|
+
#
|
171
|
+
def hats
|
172
|
+
SDL.JoystickNumHats( @struct )
|
173
|
+
end
|
174
|
+
|
175
|
+
|
176
|
+
# Returns the number of buttons featured on the Joystick. A button
|
177
|
+
# can be in one of two states: neutral, or pushed.
|
178
|
+
#
|
179
|
+
def buttons
|
180
|
+
SDL.JoystickNumButtons( @struct )
|
181
|
+
end
|
182
|
+
|
183
|
+
|
184
|
+
end
|
@@ -0,0 +1,82 @@
|
|
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
|
+
|
22
|
+
require "ruby-sdl-ffi/sdl"
|
23
|
+
|
24
|
+
|
25
|
+
module Rubygame
|
26
|
+
|
27
|
+
VERSIONS = {
|
28
|
+
:rubygame => [2, 5, 3],
|
29
|
+
:sdl => SDL.Linked_Version().to_ary
|
30
|
+
}
|
31
|
+
|
32
|
+
|
33
|
+
# Initialize Rubygame. This should be called soon after you
|
34
|
+
# +require+ Rubygame, so that everything will work properly.
|
35
|
+
#
|
36
|
+
def self.init
|
37
|
+
if( SDL.Init(SDL::INIT_EVERYTHING) == 0 )
|
38
|
+
SDL.EnableUNICODE(1)
|
39
|
+
else
|
40
|
+
raise Rubygame::SDLError, "Could not initialize SDL: #{SDL.GetError()}"
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
|
45
|
+
# Quit Rubygame. This should be used before your program terminates,
|
46
|
+
# especially if you have been using a fullscreen Screen! (Otherwise,
|
47
|
+
# the desktop resolution might not revert to its previous setting on
|
48
|
+
# some platforms, and your users will be frustrated and confused!)
|
49
|
+
#
|
50
|
+
def self.quit
|
51
|
+
SDL.Quit
|
52
|
+
end
|
53
|
+
|
54
|
+
|
55
|
+
|
56
|
+
# Indicates that an SDL function failed.
|
57
|
+
class SDLError < RuntimeError
|
58
|
+
end
|
59
|
+
|
60
|
+
|
61
|
+
|
62
|
+
SWSURFACE = SDL::SWSURFACE
|
63
|
+
HWSURFACE = SDL::HWSURFACE
|
64
|
+
ASYNCBLIT = SDL::ASYNCBLIT
|
65
|
+
ANYFORMAT = SDL::ANYFORMAT
|
66
|
+
HWPALETTE = SDL::HWPALETTE
|
67
|
+
HWACCEL = SDL::HWACCEL
|
68
|
+
SRCCOLORKEY = SDL::SRCCOLORKEY
|
69
|
+
RLEACCELOK = SDL::RLEACCELOK
|
70
|
+
RLEACCEL = SDL::RLEACCEL
|
71
|
+
SRCALPHA = SDL::SRCALPHA
|
72
|
+
PREALLOC = SDL::PREALLOC
|
73
|
+
|
74
|
+
DOUBLEBUF = SDL::DOUBLEBUF
|
75
|
+
FULLSCREEN = SDL::FULLSCREEN
|
76
|
+
OPENGL = SDL::OPENGL
|
77
|
+
OPENGLBLIT = SDL::OPENGLBLIT
|
78
|
+
RESIZABLE = SDL::RESIZABLE
|
79
|
+
NOFRAME = SDL::NOFRAME
|
80
|
+
|
81
|
+
|
82
|
+
end
|