gosu 0.7.19-i386-mingw32
Sign up to get free protection for your applications and to get access to all the features.
- data/COPYING.txt +30 -0
- data/README.txt +17 -0
- data/examples/ChipmunkIntegration.rb +275 -0
- data/examples/CptnRuby.rb +231 -0
- data/examples/MoreChipmunkAndRMagick.rb +155 -0
- data/examples/OpenGLIntegration.rb +232 -0
- data/examples/RMagickIntegration.rb +449 -0
- data/examples/TextInput.rb +145 -0
- data/examples/Tutorial.rb +137 -0
- data/examples/media/Beep.wav +0 -0
- data/examples/media/CptnRuby Gem.png +0 -0
- data/examples/media/CptnRuby Map.txt +25 -0
- data/examples/media/CptnRuby Tileset.png +0 -0
- data/examples/media/CptnRuby.png +0 -0
- data/examples/media/Cursor.png +0 -0
- data/examples/media/Earth.png +0 -0
- data/examples/media/Explosion.wav +0 -0
- data/examples/media/LargeStar.png +0 -0
- data/examples/media/Sky.jpg +0 -0
- data/examples/media/Smoke.png +0 -0
- data/examples/media/Soldier.png +0 -0
- data/examples/media/Space.png +0 -0
- data/examples/media/Star.png +0 -0
- data/examples/media/Starfighter.bmp +0 -0
- data/lib/fmod.dll +0 -0
- data/lib/gosu.for_1_8.so +0 -0
- data/lib/gosu.for_1_9.so +0 -0
- data/lib/gosu.rb +19 -0
- data/lib/gosu/patches.rb +64 -0
- data/lib/gosu/swig_patches.rb +21 -0
- data/reference/rdoc/classes/Gosu.html +1546 -0
- data/reference/rdoc/classes/Gosu/Color.html +660 -0
- data/reference/rdoc/classes/Gosu/Font.html +545 -0
- data/reference/rdoc/classes/Gosu/GLTexInfo.html +412 -0
- data/reference/rdoc/classes/Gosu/Image.html +706 -0
- data/reference/rdoc/classes/Gosu/Sample.html +476 -0
- data/reference/rdoc/classes/Gosu/SampleInstance.html +523 -0
- data/reference/rdoc/classes/Gosu/Song.html +568 -0
- data/reference/rdoc/classes/Gosu/TextInput.html +444 -0
- data/reference/rdoc/classes/Gosu/Window.html +911 -0
- data/reference/rdoc/classes/Numeric.html +479 -0
- data/reference/rdoc/created.rid +1 -0
- data/reference/rdoc/files/COPYING_txt.html +391 -0
- data/reference/rdoc/files/README_txt.html +387 -0
- data/reference/rdoc/files/reference/Deployment on OS X_rdoc.html +381 -0
- data/reference/rdoc/files/reference/Deployment on Windows_rdoc.html +385 -0
- data/reference/rdoc/files/reference/Drawing with Colors_rdoc.html +363 -0
- data/reference/rdoc/files/reference/Order of Corners_rdoc.html +358 -0
- data/reference/rdoc/files/reference/Tileability_rdoc.html +374 -0
- data/reference/rdoc/files/reference/Z Ordering_rdoc.html +361 -0
- data/reference/rdoc/files/reference/gosu_rb.html +348 -0
- data/reference/rdoc/fr_class_index.html +12 -0
- data/reference/rdoc/fr_file_index.html +10 -0
- data/reference/rdoc/fr_method_index.html +66 -0
- data/reference/rdoc/index.html +1 -0
- data/reference/rdoc/rdoc-style.css +320 -0
- metadata +111 -0
@@ -0,0 +1,145 @@
|
|
1
|
+
# This example demonstrates the use of the TextInput functionality.
|
2
|
+
# One can tab through, or click into the text fields and change it's contents.
|
3
|
+
|
4
|
+
# At its most basic form, you only need to create a new TextInput instance and
|
5
|
+
# set the text_input attribute of your window to it. Until you set this
|
6
|
+
# attribute to nil again, the TextInput object will build a text that can be
|
7
|
+
# accessed via TextInput#text.
|
8
|
+
|
9
|
+
# The TextInput object also maintains the position of the caret as the index
|
10
|
+
# of the character that it's left to via the caret_pos attribute. Furthermore,
|
11
|
+
# if there is a selection, the selection_start attribute yields its beginning,
|
12
|
+
# using the same indexing scheme. If there is no selection, selection_start
|
13
|
+
# is equal to caret_pos.
|
14
|
+
|
15
|
+
# A TextInput object is purely abstract, though; drawing the input field is left
|
16
|
+
# to the user. In this case, we are subclassing TextInput to add this code.
|
17
|
+
# As with most of Gosu, how this is handled is completely left open; the scheme
|
18
|
+
# presented here is not mandatory! Gosu only aims to provide enough code for
|
19
|
+
# games (or intermediate UI toolkits) to be built upon it.
|
20
|
+
|
21
|
+
begin
|
22
|
+
# In case you use Gosu via RubyGems.
|
23
|
+
require 'rubygems'
|
24
|
+
rescue LoadError
|
25
|
+
# In case you don't.
|
26
|
+
end
|
27
|
+
|
28
|
+
require 'gosu'
|
29
|
+
|
30
|
+
class TextField < Gosu::TextInput
|
31
|
+
# Some constants that define our appearance.
|
32
|
+
INACTIVE_COLOR = 0xcc666666
|
33
|
+
ACTIVE_COLOR = 0xccff6666
|
34
|
+
SELECTION_COLOR = 0xcc0000ff
|
35
|
+
CARET_COLOR = 0xffffffff
|
36
|
+
PADDING = 5
|
37
|
+
|
38
|
+
attr_reader :x, :y
|
39
|
+
|
40
|
+
def initialize(window, font, x, y)
|
41
|
+
# TextInput's constructor doesn't expect any arguments.
|
42
|
+
super()
|
43
|
+
|
44
|
+
@window, @font, @x, @y = window, font, x, y
|
45
|
+
|
46
|
+
# Start with a self-explanatory text in each field.
|
47
|
+
self.text = "Click to change text"
|
48
|
+
end
|
49
|
+
|
50
|
+
# Example filter method. You can truncate the text to employ a length limit (watch out
|
51
|
+
# with Ruby 1.8 and UTF-8!), limit the text to certain characters etc.
|
52
|
+
def filter text
|
53
|
+
text.upcase
|
54
|
+
end
|
55
|
+
|
56
|
+
def draw
|
57
|
+
# Depending on whether this is the currently selected input or not, change the
|
58
|
+
# background's color.
|
59
|
+
if @window.text_input == self then
|
60
|
+
background_color = ACTIVE_COLOR
|
61
|
+
else
|
62
|
+
background_color = INACTIVE_COLOR
|
63
|
+
end
|
64
|
+
@window.draw_quad(x - PADDING, y - PADDING, background_color,
|
65
|
+
x + width + PADDING, y - PADDING, background_color,
|
66
|
+
x - PADDING, y + height + PADDING, background_color,
|
67
|
+
x + width + PADDING, y + height + PADDING, background_color, 0)
|
68
|
+
|
69
|
+
# Calculate the position of the caret and the selection start.
|
70
|
+
pos_x = x + @font.text_width(self.text[0...self.caret_pos])
|
71
|
+
sel_x = x + @font.text_width(self.text[0...self.selection_start])
|
72
|
+
|
73
|
+
# Draw the selection background, if any; if not, sel_x and pos_x will be
|
74
|
+
# the same value, making this quad empty.
|
75
|
+
@window.draw_quad(sel_x, y, SELECTION_COLOR,
|
76
|
+
pos_x, y, SELECTION_COLOR,
|
77
|
+
sel_x, y + height, SELECTION_COLOR,
|
78
|
+
pos_x, y + height, SELECTION_COLOR, 0)
|
79
|
+
|
80
|
+
# Draw the caret; again, only if this is the currently selected field.
|
81
|
+
if @window.text_input == self then
|
82
|
+
@window.draw_line(pos_x, y, CARET_COLOR,
|
83
|
+
pos_x, y + height, CARET_COLOR, 0)
|
84
|
+
end
|
85
|
+
|
86
|
+
# Finally, draw the text itself!
|
87
|
+
@font.draw(self.text, x, y, 0)
|
88
|
+
end
|
89
|
+
|
90
|
+
# This text field grows with the text that's being entered.
|
91
|
+
# (Usually one would use clip_to and scroll around on the text field.)
|
92
|
+
def width
|
93
|
+
@font.text_width(self.text)
|
94
|
+
end
|
95
|
+
|
96
|
+
def height
|
97
|
+
@font.height
|
98
|
+
end
|
99
|
+
|
100
|
+
# Hit-test for selecting a text field with the mouse.
|
101
|
+
def under_point?(mouse_x, mouse_y)
|
102
|
+
mouse_x > x - PADDING and mouse_x < x + width + PADDING and
|
103
|
+
mouse_y > y - PADDING and mouse_y < y + height + PADDING
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
class TextInputWindow < Gosu::Window
|
108
|
+
def initialize
|
109
|
+
super(300, 200, false)
|
110
|
+
self.caption = "Text Input Example"
|
111
|
+
|
112
|
+
font = Gosu::Font.new(self, Gosu::default_font_name, 20)
|
113
|
+
|
114
|
+
# Set up an array of three text fields.
|
115
|
+
@text_fields = Array.new(3) { |index| TextField.new(self, font, 50, 30 + index * 50) }
|
116
|
+
|
117
|
+
@cursor = Gosu::Image.new(self, "media/Cursor.png", false)
|
118
|
+
end
|
119
|
+
|
120
|
+
def draw
|
121
|
+
@text_fields.each { |tf| tf.draw }
|
122
|
+
@cursor.draw(mouse_x, mouse_y, 0)
|
123
|
+
end
|
124
|
+
|
125
|
+
def button_down(id)
|
126
|
+
if id == Gosu::KbTab then
|
127
|
+
# Tab key will not be 'eaten' by text fields; use for switching through
|
128
|
+
# text fields.
|
129
|
+
index = @text_fields.index(self.text_input) || -1
|
130
|
+
self.text_input = @text_fields[(index + 1) % @text_fields.size]
|
131
|
+
elsif id == Gosu::KbEscape then
|
132
|
+
# Escape key will not be 'eaten' by text fields; use for deselecting.
|
133
|
+
if self.text_input then
|
134
|
+
self.text_input = nil
|
135
|
+
else
|
136
|
+
close
|
137
|
+
end
|
138
|
+
elsif id == Gosu::MsLeft then
|
139
|
+
# Mouse click: Select text field based on mouse position.
|
140
|
+
self.text_input = @text_fields.find { |tf| tf.under_point?(mouse_x, mouse_y) }
|
141
|
+
end
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
TextInputWindow.new.show
|
@@ -0,0 +1,137 @@
|
|
1
|
+
begin
|
2
|
+
# In case you use Gosu via RubyGems.
|
3
|
+
require 'rubygems'
|
4
|
+
rescue LoadError
|
5
|
+
# In case you don't.
|
6
|
+
end
|
7
|
+
|
8
|
+
require 'gosu'
|
9
|
+
|
10
|
+
module ZOrder
|
11
|
+
Background, Stars, Player, UI = *0..3
|
12
|
+
end
|
13
|
+
|
14
|
+
class Player
|
15
|
+
attr_reader :score
|
16
|
+
|
17
|
+
def initialize(window)
|
18
|
+
@image = Gosu::Image.new(window, "media/Starfighter.bmp", false)
|
19
|
+
@beep = Gosu::Sample.new(window, "media/Beep.wav")
|
20
|
+
@x = @y = @vel_x = @vel_y = @angle = 0.0
|
21
|
+
@score = 0
|
22
|
+
end
|
23
|
+
|
24
|
+
def warp(x, y)
|
25
|
+
@x, @y = x, y
|
26
|
+
end
|
27
|
+
|
28
|
+
def turn_left
|
29
|
+
@angle -= 4.5
|
30
|
+
end
|
31
|
+
|
32
|
+
def turn_right
|
33
|
+
@angle += 4.5
|
34
|
+
end
|
35
|
+
|
36
|
+
def accelerate
|
37
|
+
@vel_x += Gosu::offset_x(@angle, 0.5)
|
38
|
+
@vel_y += Gosu::offset_y(@angle, 0.5)
|
39
|
+
end
|
40
|
+
|
41
|
+
def move
|
42
|
+
@x += @vel_x
|
43
|
+
@y += @vel_y
|
44
|
+
@x %= 640
|
45
|
+
@y %= 480
|
46
|
+
|
47
|
+
@vel_x *= 0.95
|
48
|
+
@vel_y *= 0.95
|
49
|
+
end
|
50
|
+
|
51
|
+
def draw
|
52
|
+
@image.draw_rot(@x, @y, ZOrder::Player, @angle)
|
53
|
+
end
|
54
|
+
|
55
|
+
def collect_stars(stars)
|
56
|
+
stars.reject! do |star|
|
57
|
+
if Gosu::distance(@x, @y, star.x, star.y) < 35 then
|
58
|
+
@score += 10
|
59
|
+
@beep.play
|
60
|
+
true
|
61
|
+
else
|
62
|
+
false
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
class Star
|
69
|
+
attr_reader :x, :y
|
70
|
+
|
71
|
+
def initialize(animation)
|
72
|
+
@animation = animation
|
73
|
+
@color = Gosu::Color.new(0xff000000)
|
74
|
+
@color.red = rand(255 - 40) + 40
|
75
|
+
@color.green = rand(255 - 40) + 40
|
76
|
+
@color.blue = rand(255 - 40) + 40
|
77
|
+
@x = rand * 640
|
78
|
+
@y = rand * 480
|
79
|
+
end
|
80
|
+
|
81
|
+
def draw
|
82
|
+
img = @animation[Gosu::milliseconds / 100 % @animation.size]
|
83
|
+
img.draw(@x - img.width / 2.0, @y - img.height / 2.0,
|
84
|
+
ZOrder::Stars, 1, 1, @color, :additive)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
class GameWindow < Gosu::Window
|
89
|
+
def initialize
|
90
|
+
super(640, 480, false)
|
91
|
+
self.caption = "Gosu Tutorial Game"
|
92
|
+
|
93
|
+
@background_image = Gosu::Image.new(self, "media/Space.png", true)
|
94
|
+
|
95
|
+
@player = Player.new(self)
|
96
|
+
@player.warp(320, 240)
|
97
|
+
|
98
|
+
@star_anim = Gosu::Image::load_tiles(self, "media/Star.png", 25, 25, false)
|
99
|
+
@stars = Array.new
|
100
|
+
|
101
|
+
@font = Gosu::Font.new(self, Gosu::default_font_name, 20)
|
102
|
+
end
|
103
|
+
|
104
|
+
def update
|
105
|
+
if button_down? Gosu::KbLeft or button_down? Gosu::GpLeft then
|
106
|
+
@player.turn_left
|
107
|
+
end
|
108
|
+
if button_down? Gosu::KbRight or button_down? Gosu::GpRight then
|
109
|
+
@player.turn_right
|
110
|
+
end
|
111
|
+
if button_down? Gosu::KbUp or button_down? Gosu::GpButton0 then
|
112
|
+
@player.accelerate
|
113
|
+
end
|
114
|
+
@player.move
|
115
|
+
@player.collect_stars(@stars)
|
116
|
+
|
117
|
+
if rand(100) < 4 and @stars.size < 25 then
|
118
|
+
@stars.push(Star.new(@star_anim))
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
def draw
|
123
|
+
@background_image.draw(0, 0, ZOrder::Background)
|
124
|
+
@player.draw
|
125
|
+
@stars.each { |star| star.draw }
|
126
|
+
@font.draw("Score: #{@player.score}", 10, 10, ZOrder::UI, 1.0, 1.0, 0xffffff00)
|
127
|
+
end
|
128
|
+
|
129
|
+
def button_down(id)
|
130
|
+
if id == Gosu::KbEscape then
|
131
|
+
close
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
window = GameWindow.new
|
137
|
+
window.show
|
Binary file
|
Binary file
|
@@ -0,0 +1,25 @@
|
|
1
|
+
#....................................................#
|
2
|
+
#....................................................#
|
3
|
+
#.............xx......x.x............................#
|
4
|
+
#............x..x....................................#
|
5
|
+
#x....x...x..x.......#####..xxx....................x.#
|
6
|
+
#.x.........................xxx.........##.........x.#
|
7
|
+
#...............""..........###...##..........##.....#
|
8
|
+
#..##..###..##..##...................................#
|
9
|
+
#........................................xx........###
|
10
|
+
#.............................###....................#
|
11
|
+
##....##.............................................#
|
12
|
+
#....................##....##......##....##....##....#
|
13
|
+
#.................................................x..#
|
14
|
+
#...x....##....##.......x...x.....................x..#
|
15
|
+
#.....x...............x...x...x...................x..#
|
16
|
+
#......x...##.....##.................................#
|
17
|
+
#.......x.........................................#..#
|
18
|
+
#...........##........#...#...#..#.......x...........#
|
19
|
+
#...#................................................#
|
20
|
+
#....."""".................x.......#..#####...###....#
|
21
|
+
#x....#......................##......................#
|
22
|
+
#"""""#.....#.....x..................#...............#
|
23
|
+
##xxxx......#........................................#
|
24
|
+
##xxxx...#####............."...""""".................#
|
25
|
+
######"""#############################################
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
data/lib/fmod.dll
ADDED
Binary file
|
data/lib/gosu.for_1_8.so
ADDED
Binary file
|
data/lib/gosu.for_1_9.so
ADDED
Binary file
|
data/lib/gosu.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'rbconfig'
|
2
|
+
|
3
|
+
begin
|
4
|
+
if defined? NSObject then
|
5
|
+
require "#{File.dirname(__FILE__)}/gosu.for_macruby.bundle"
|
6
|
+
require "#{File.dirname(__FILE__)}/hotgosu.rb"
|
7
|
+
elsif defined? RUBY_VERSION and RUBY_VERSION[0..2] == '1.9' then
|
8
|
+
require "#{File.dirname(__FILE__)}/gosu.for_1_9.#{Config::CONFIG['DLEXT']}"
|
9
|
+
require "#{File.dirname(__FILE__)}/gosu/swig_patches.rb"
|
10
|
+
else
|
11
|
+
require "#{File.dirname(__FILE__)}/gosu.for_1_8.#{Config::CONFIG['DLEXT']}"
|
12
|
+
require "#{File.dirname(__FILE__)}/gosu/swig_patches.rb"
|
13
|
+
end
|
14
|
+
rescue LoadError => e
|
15
|
+
require "#{File.dirname(__FILE__)}/gosu.custom.#{Config::CONFIG['DLEXT']}"
|
16
|
+
require "#{File.dirname(__FILE__)}/gosu/swig_patches.rb"
|
17
|
+
end
|
18
|
+
|
19
|
+
require "#{File.dirname(__FILE__)}/gosu/patches.rb"
|
data/lib/gosu/patches.rb
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
# Extend Numeric with simple angle conversion methods.
|
2
|
+
class ::Numeric
|
3
|
+
def degrees_to_radians
|
4
|
+
self * Math::PI / 180.0
|
5
|
+
end
|
6
|
+
def radians_to_degrees
|
7
|
+
self * 180.0 / Math::PI
|
8
|
+
end
|
9
|
+
def gosu_to_radians
|
10
|
+
(self - 90) * Math::PI / 180.0
|
11
|
+
end
|
12
|
+
def radians_to_gosu
|
13
|
+
self * 180.0 / Math::PI + 90
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
# Backwards compatibility: import the constants into Gosu::Button.
|
18
|
+
module Gosu::Button
|
19
|
+
Gosu.constants.each { |c| const_set(c, Gosu.const_get(c)) }
|
20
|
+
end
|
21
|
+
|
22
|
+
# Backwards compatibility: Window arguments to Sample and Song
|
23
|
+
class Gosu::Sample
|
24
|
+
alias new_initialize initialize
|
25
|
+
|
26
|
+
def initialize(*args)
|
27
|
+
args.shift if args.first.is_a? Gosu::Window
|
28
|
+
new_initialize *args
|
29
|
+
end
|
30
|
+
end
|
31
|
+
class Gosu::Song
|
32
|
+
alias new_initialize initialize
|
33
|
+
|
34
|
+
def initialize(*args)
|
35
|
+
args.shift if args.first.is_a? Gosu::Window
|
36
|
+
new_initialize *args
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
# Color constants (SWIG messes up constants somehow)
|
41
|
+
class Gosu::Color
|
42
|
+
NONE = Gosu::Color.new(0x00000000)
|
43
|
+
BLACK = Gosu::Color.new(0xff000000)
|
44
|
+
GRAY = Gosu::Color.new(0xff808080)
|
45
|
+
WHITE = Gosu::Color.new(0xffffffff)
|
46
|
+
AQUA = Gosu::Color.new(0xff00ffff)
|
47
|
+
RED = Gosu::Color.new(0xffff0000)
|
48
|
+
GREEN = Gosu::Color.new(0xff00ff00)
|
49
|
+
BLUE = Gosu::Color.new(0xff0000ff)
|
50
|
+
YELLOW = Gosu::Color.new(0xffffff00)
|
51
|
+
FUCHSIA = Gosu::Color.new(0xffff00ff)
|
52
|
+
CYAN = Gosu::Color.new(0xff00ffff)
|
53
|
+
end
|
54
|
+
|
55
|
+
# Instance methods for button_id_to_char and char_to_button_id
|
56
|
+
class Gosu::Window
|
57
|
+
def button_id_to_char(id)
|
58
|
+
self.class.button_id_to_char(id)
|
59
|
+
end
|
60
|
+
|
61
|
+
def char_to_button_id(ch)
|
62
|
+
self.class.char_to_button_id(ch)
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# SWIG workarounds
|
2
|
+
# These are offloaded into a separate file because rb_eval_string() is weird on Ruby 1.8.
|
3
|
+
|
4
|
+
# SWIG doesn't understand the C++ overloading.
|
5
|
+
class Gosu::Image
|
6
|
+
def self.from_text(*args)
|
7
|
+
args.size == 4 ? from_text4(*args) : from_text7(*args)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
# Linux workaround: instead of declaring a constant, we declare a hidden function and
|
12
|
+
# call it when we need to define the constant. Otherwise, we get a weird libGL.so segfault.
|
13
|
+
module Gosu
|
14
|
+
def self.const_missing sym
|
15
|
+
if sym == :MAX_TEXTURE_SIZE then
|
16
|
+
const_set sym, __max_texture_size
|
17
|
+
else
|
18
|
+
super
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|