minigl 2.2.2 → 2.2.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/LICENSE +19 -19
- data/README.md +35 -36
- data/Rakefile +11 -11
- data/lib/minigl.rb +4 -4
- data/lib/minigl/forms.rb +1485 -1485
- data/lib/minigl/game_object.rb +379 -379
- data/lib/minigl/global.rb +729 -729
- data/lib/minigl/map.rb +256 -256
- data/lib/minigl/movement.rb +585 -585
- data/lib/minigl/text.rb +190 -188
- data/test/data/img/barbg.svg +73 -73
- data/test/data/img/barfg.svg +106 -106
- data/test/data/img/square.svg +66 -66
- data/test/data/img/square2.svg +66 -66
- data/test/data/img/square3.svg +76 -76
- data/test/data/img/tile1.svg +66 -66
- data/test/data/img/tile2.svg +66 -66
- data/test/game.rb +150 -150
- data/test/game_object_tests.rb +108 -108
- data/test/iso_game.rb +39 -39
- data/test/map_tests.rb +57 -57
- data/test/mov_game.rb +76 -76
- data/test/movement_tests.rb +86 -86
- data/test/res_tests.rb +45 -45
- data/test/vector_tests.rb +55 -55
- metadata +24 -24
data/lib/minigl/text.rb
CHANGED
@@ -1,188 +1,190 @@
|
|
1
|
-
module MiniGL
|
2
|
-
# This class provides methods for easily drawing one or multiple lines of
|
3
|
-
# text, with control over the text alignment and coloring.
|
4
|
-
class TextHelper
|
5
|
-
# Creates a TextHelper.
|
6
|
-
#
|
7
|
-
# Parameters:
|
8
|
-
# [font] A <code>Gosu::Font</code> that will be used to draw the text.
|
9
|
-
# [line_spacing] When drawing multiple lines, the distance, in pixels,
|
10
|
-
# between each line.
|
11
|
-
def initialize(font, line_spacing = 0)
|
12
|
-
@font = font
|
13
|
-
@line_spacing = line_spacing
|
14
|
-
end
|
15
|
-
|
16
|
-
# Draws a single line of text.
|
17
|
-
#
|
18
|
-
# Parameters:
|
19
|
-
# [text] The text to be drawn. No line breaks are allowed.
|
20
|
-
|
21
|
-
#
|
22
|
-
#
|
23
|
-
#
|
24
|
-
#
|
25
|
-
#
|
26
|
-
#
|
27
|
-
#
|
28
|
-
#
|
29
|
-
#
|
30
|
-
# [
|
31
|
-
#
|
32
|
-
#
|
33
|
-
#
|
34
|
-
#
|
35
|
-
#
|
36
|
-
# [
|
37
|
-
#
|
38
|
-
#
|
39
|
-
#
|
40
|
-
#
|
41
|
-
#
|
42
|
-
#
|
43
|
-
#
|
44
|
-
#
|
45
|
-
#
|
46
|
-
#
|
47
|
-
#
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
when :
|
70
|
-
when :
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
@font.
|
78
|
-
@font.
|
79
|
-
@font.
|
80
|
-
@font.
|
81
|
-
@font.
|
82
|
-
@font.
|
83
|
-
@font.
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
#
|
93
|
-
#
|
94
|
-
#
|
95
|
-
#
|
96
|
-
# [
|
97
|
-
|
98
|
-
#
|
99
|
-
#
|
100
|
-
#
|
101
|
-
# [
|
102
|
-
#
|
103
|
-
# [
|
104
|
-
#
|
105
|
-
# [
|
106
|
-
#
|
107
|
-
#
|
108
|
-
# [
|
109
|
-
#
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
when :
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
index += 1
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
index
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
end
|
1
|
+
module MiniGL
|
2
|
+
# This class provides methods for easily drawing one or multiple lines of
|
3
|
+
# text, with control over the text alignment and coloring.
|
4
|
+
class TextHelper
|
5
|
+
# Creates a TextHelper.
|
6
|
+
#
|
7
|
+
# Parameters:
|
8
|
+
# [font] A <code>Gosu::Font</code> that will be used to draw the text.
|
9
|
+
# [line_spacing] When drawing multiple lines, the distance, in pixels,
|
10
|
+
# between each line.
|
11
|
+
def initialize(font, line_spacing = 0)
|
12
|
+
@font = font
|
13
|
+
@line_spacing = line_spacing
|
14
|
+
end
|
15
|
+
|
16
|
+
# Draws a single line of text.
|
17
|
+
#
|
18
|
+
# Parameters:
|
19
|
+
# [text] The text to be drawn. No line breaks are allowed. You can use the
|
20
|
+
# `<b>` tag for bold, `<i>` for italic and `<c=rrggbb>` for colors.
|
21
|
+
# [x] The horizontal reference for drawing the text. If +mode+ is +:left+,
|
22
|
+
# all text will be drawn from this point to the right; if +mode+ is
|
23
|
+
# +:right+, all text will be drawn from this point to the left; and if
|
24
|
+
# +mode+ is +:center+, the text will be equally distributed to the
|
25
|
+
# left and to the right of this point.
|
26
|
+
# [y] The vertical reference for drawing the text. All text will be drawn
|
27
|
+
# from this point down.
|
28
|
+
# [mode] The alignment of the text. Valid values are +:left+, +:right+ and
|
29
|
+
# +:center+.
|
30
|
+
# [color] The color of the text, in hexadecimal RRGGBB format.
|
31
|
+
# [alpha] The opacity of the text. Valid values vary from 0 (fully
|
32
|
+
# transparent) to 255 (fully opaque).
|
33
|
+
# [effect] Effect to add to the text. It can be either +nil+, for no effect,
|
34
|
+
# +:border+ for bordered text, or +:shadow+ for shadowed text (the
|
35
|
+
# shadow is always placed below and to the right of the text).
|
36
|
+
# [effect_color] Color of the effect, if any.
|
37
|
+
# [effect_size] Size of the effect, if any. In the case of +:border+, this
|
38
|
+
# will be the width of the border (the border will only look
|
39
|
+
# good when +effect_size+ is relatively small, compared to the
|
40
|
+
# size of the font); in the case of +:shadow+, it will be the
|
41
|
+
# distance between the text and the shadow.
|
42
|
+
# [effect_alpha] Opacity of the effect, if any. For shadows, it is usual to
|
43
|
+
# provide less than 255.
|
44
|
+
# [z_index] The z-order to draw the object. Objects with larger z-orders
|
45
|
+
# will be drawn on top of the ones with smaller z-orders.
|
46
|
+
#
|
47
|
+
# *Obs.:* This method accepts named parameters, but +text+, +x+ and +y+ are
|
48
|
+
# mandatory.
|
49
|
+
def write_line(text, x = nil, y = nil, mode = :left, color = 0, alpha = 0xff,
|
50
|
+
effect = nil, effect_color = 0, effect_size = 1, effect_alpha = 0xff,
|
51
|
+
z_index = 0)
|
52
|
+
if text.is_a? Hash
|
53
|
+
x = text[:x]
|
54
|
+
y = text[:y]
|
55
|
+
mode = text.fetch(:mode, :left)
|
56
|
+
color = text.fetch(:color, 0)
|
57
|
+
alpha = text.fetch(:alpha, 0xff)
|
58
|
+
effect = text.fetch(:effect, nil)
|
59
|
+
effect_color = text.fetch(:effect_color, 0)
|
60
|
+
effect_size = text.fetch(:effect_size, 1)
|
61
|
+
effect_alpha = text.fetch(:effect_alpha, 0xff)
|
62
|
+
z_index = text.fetch(:z_index, 0)
|
63
|
+
text = text[:text]
|
64
|
+
end
|
65
|
+
|
66
|
+
color = (alpha << 24) | color
|
67
|
+
rel =
|
68
|
+
case mode
|
69
|
+
when :left then 0
|
70
|
+
when :center then 0.5
|
71
|
+
when :right then 1
|
72
|
+
else 0
|
73
|
+
end
|
74
|
+
if effect
|
75
|
+
effect_color = (effect_alpha << 24) | effect_color
|
76
|
+
if effect == :border
|
77
|
+
@font.draw_markup_rel text, x - effect_size, y - effect_size, z_index, rel, 0, 1, 1, effect_color
|
78
|
+
@font.draw_markup_rel text, x, y - effect_size, z_index, rel, 0, 1, 1, effect_color
|
79
|
+
@font.draw_markup_rel text, x + effect_size, y - effect_size, z_index, rel, 0, 1, 1, effect_color
|
80
|
+
@font.draw_markup_rel text, x + effect_size, y, z_index, rel, 0, 1, 1, effect_color
|
81
|
+
@font.draw_markup_rel text, x + effect_size, y + effect_size, z_index, rel, 0, 1, 1, effect_color
|
82
|
+
@font.draw_markup_rel text, x, y + effect_size, z_index, rel, 0, 1, 1, effect_color
|
83
|
+
@font.draw_markup_rel text, x - effect_size, y + effect_size, z_index, rel, 0, 1, 1, effect_color
|
84
|
+
@font.draw_markup_rel text, x - effect_size, y, z_index, rel, 0, 1, 1, effect_color
|
85
|
+
elsif effect == :shadow
|
86
|
+
@font.draw_markup_rel text, x + effect_size, y + effect_size, z_index, rel, 0, 1, 1, effect_color
|
87
|
+
end
|
88
|
+
end
|
89
|
+
@font.draw_markup_rel text, x, y, z_index, rel, 0, 1, 1, color
|
90
|
+
end
|
91
|
+
|
92
|
+
# Draws text, breaking lines when needed and when explicitly caused by the
|
93
|
+
# "\n" character.
|
94
|
+
#
|
95
|
+
# Parameters:
|
96
|
+
# [text] The text to be drawn. Line breaks are allowed. You can use the
|
97
|
+
# `<b>` tag for bold, `<i>` for italic and `<c=rrggbb>` for colors.
|
98
|
+
# [x] The horizontal reference for drawing the text. Works like in
|
99
|
+
# +write_line+ for the +:left+, +:right+ and +:center+ modes. For the
|
100
|
+
# +:justified+ mode, works the same as for +:left+.
|
101
|
+
# [y] The vertical reference for drawing the text. All text will be drawn
|
102
|
+
# from this point down.
|
103
|
+
# [width] The maximum width for the lines of text. Line is broken when
|
104
|
+
# this width is exceeded.
|
105
|
+
# [mode] The alignment of the text. Valid values are +:left+, +:right+,
|
106
|
+
# +:center+ and +:justified+.
|
107
|
+
# [color] The color of the text, in hexadecimal RRGGBB format.
|
108
|
+
# [alpha] The opacity of the text. Valid values vary from 0 (fully
|
109
|
+
# transparent) to 255 (fully opaque).
|
110
|
+
# [z_index] The z-order to draw the object. Objects with larger z-orders
|
111
|
+
# will be drawn on top of the ones with smaller z-orders.
|
112
|
+
def write_breaking(text, x, y, width, mode = :left, color = 0, alpha = 0xff, z_index = 0)
|
113
|
+
color = (alpha << 24) | color
|
114
|
+
text.split("\n").each do |p|
|
115
|
+
if mode == :justified
|
116
|
+
y = write_paragraph_justified p, x, y, width, color, z_index
|
117
|
+
else
|
118
|
+
rel =
|
119
|
+
case mode
|
120
|
+
when :left then 0
|
121
|
+
when :center then 0.5
|
122
|
+
when :right then 1
|
123
|
+
else 0
|
124
|
+
end
|
125
|
+
y = write_paragraph p, x, y, width, rel, color, z_index
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
private
|
131
|
+
|
132
|
+
def write_paragraph(text, x, y, width, rel, color, z_index)
|
133
|
+
line = ''
|
134
|
+
line_width = 0
|
135
|
+
text.split(' ').each do |word|
|
136
|
+
w = @font.markup_width word
|
137
|
+
if line_width + w > width
|
138
|
+
@font.draw_markup_rel line.chop, x, y, z_index, rel, 0, 1, 1, color
|
139
|
+
line = ''
|
140
|
+
line_width = 0
|
141
|
+
y += @font.height + @line_spacing
|
142
|
+
end
|
143
|
+
line += "#{word} "
|
144
|
+
line_width += @font.markup_width "#{word} "
|
145
|
+
end
|
146
|
+
@font.draw_markup_rel line.chop, x, y, z_index, rel, 0, 1, 1, color unless line.empty?
|
147
|
+
y + @font.height + @line_spacing
|
148
|
+
end
|
149
|
+
|
150
|
+
def write_paragraph_justified(text, x, y, width, color, z_index)
|
151
|
+
space_width = @font.text_width ' '
|
152
|
+
spaces = [[]]
|
153
|
+
line_index = 0
|
154
|
+
new_x = x
|
155
|
+
words = text.split(' ')
|
156
|
+
words.each do |word|
|
157
|
+
w = @font.markup_width word
|
158
|
+
if new_x + w > x + width
|
159
|
+
space = x + width - new_x + space_width
|
160
|
+
index = 0
|
161
|
+
while space > 0
|
162
|
+
spaces[line_index][index] += 1
|
163
|
+
space -= 1
|
164
|
+
index += 1
|
165
|
+
index = 0 if index == spaces[line_index].size - 1
|
166
|
+
end
|
167
|
+
|
168
|
+
spaces << []
|
169
|
+
line_index += 1
|
170
|
+
|
171
|
+
new_x = x
|
172
|
+
end
|
173
|
+
new_x += @font.markup_width(word) + space_width
|
174
|
+
spaces[line_index] << space_width
|
175
|
+
end
|
176
|
+
|
177
|
+
index = 0
|
178
|
+
spaces.each do |line|
|
179
|
+
new_x = x
|
180
|
+
line.each do |s|
|
181
|
+
@font.draw_markup words[index], new_x, y, z_index, 1, 1, color
|
182
|
+
new_x += @font.markup_width(words[index]) + s
|
183
|
+
index += 1
|
184
|
+
end
|
185
|
+
y += @font.height + @line_spacing
|
186
|
+
end
|
187
|
+
y
|
188
|
+
end
|
189
|
+
end
|
190
|
+
end
|
data/test/data/img/barbg.svg
CHANGED
@@ -1,73 +1,73 @@
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
2
|
-
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
3
|
-
|
4
|
-
<svg
|
5
|
-
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
6
|
-
xmlns:cc="http://creativecommons.org/ns#"
|
7
|
-
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
8
|
-
xmlns:svg="http://www.w3.org/2000/svg"
|
9
|
-
xmlns="http://www.w3.org/2000/svg"
|
10
|
-
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
11
|
-
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
12
|
-
width="204"
|
13
|
-
height="24"
|
14
|
-
id="svg2"
|
15
|
-
version="1.1"
|
16
|
-
inkscape:version="0.48.4 r9939"
|
17
|
-
sodipodi:docname="barbg.svg"
|
18
|
-
inkscape:export-filename="/home/victor/Projects/TCC/minigl/test/data/img/barbg.png"
|
19
|
-
inkscape:export-xdpi="90"
|
20
|
-
inkscape:export-ydpi="90">
|
21
|
-
<defs
|
22
|
-
id="defs4" />
|
23
|
-
<sodipodi:namedview
|
24
|
-
id="base"
|
25
|
-
pagecolor="#ffffff"
|
26
|
-
bordercolor="#666666"
|
27
|
-
borderopacity="1.0"
|
28
|
-
inkscape:pageopacity="0.0"
|
29
|
-
inkscape:pageshadow="2"
|
30
|
-
inkscape:zoom="4"
|
31
|
-
inkscape:cx="127.40358"
|
32
|
-
inkscape:cy="-8.2431265"
|
33
|
-
inkscape:document-units="px"
|
34
|
-
inkscape:current-layer="layer1"
|
35
|
-
showgrid="false"
|
36
|
-
inkscape:window-width="1364"
|
37
|
-
inkscape:window-height="718"
|
38
|
-
inkscape:window-x="0"
|
39
|
-
inkscape:window-y="0"
|
40
|
-
inkscape:window-maximized="1" />
|
41
|
-
<metadata
|
42
|
-
id="metadata7">
|
43
|
-
<rdf:RDF>
|
44
|
-
<cc:Work
|
45
|
-
rdf:about="">
|
46
|
-
<dc:format>image/svg+xml</dc:format>
|
47
|
-
<dc:type
|
48
|
-
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
49
|
-
<dc:title></dc:title>
|
50
|
-
</cc:Work>
|
51
|
-
</rdf:RDF>
|
52
|
-
</metadata>
|
53
|
-
<g
|
54
|
-
inkscape:label="Layer 1"
|
55
|
-
inkscape:groupmode="layer"
|
56
|
-
id="layer1"
|
57
|
-
transform="translate(0,-1028.3622)">
|
58
|
-
<rect
|
59
|
-
style="fill:#ffffff;fill-opacity:1;stroke:none"
|
60
|
-
id="rect3753"
|
61
|
-
width="204"
|
62
|
-
height="24"
|
63
|
-
x="0"
|
64
|
-
y="1028.3622" />
|
65
|
-
<rect
|
66
|
-
style="fill:#ff0000;fill-opacity:1;stroke:none"
|
67
|
-
id="rect3755"
|
68
|
-
width="200"
|
69
|
-
height="20"
|
70
|
-
x="2"
|
71
|
-
y="1030.3622" />
|
72
|
-
</g>
|
73
|
-
</svg>
|
1
|
+
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
2
|
+
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
3
|
+
|
4
|
+
<svg
|
5
|
+
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
6
|
+
xmlns:cc="http://creativecommons.org/ns#"
|
7
|
+
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
8
|
+
xmlns:svg="http://www.w3.org/2000/svg"
|
9
|
+
xmlns="http://www.w3.org/2000/svg"
|
10
|
+
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
11
|
+
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
12
|
+
width="204"
|
13
|
+
height="24"
|
14
|
+
id="svg2"
|
15
|
+
version="1.1"
|
16
|
+
inkscape:version="0.48.4 r9939"
|
17
|
+
sodipodi:docname="barbg.svg"
|
18
|
+
inkscape:export-filename="/home/victor/Projects/TCC/minigl/test/data/img/barbg.png"
|
19
|
+
inkscape:export-xdpi="90"
|
20
|
+
inkscape:export-ydpi="90">
|
21
|
+
<defs
|
22
|
+
id="defs4" />
|
23
|
+
<sodipodi:namedview
|
24
|
+
id="base"
|
25
|
+
pagecolor="#ffffff"
|
26
|
+
bordercolor="#666666"
|
27
|
+
borderopacity="1.0"
|
28
|
+
inkscape:pageopacity="0.0"
|
29
|
+
inkscape:pageshadow="2"
|
30
|
+
inkscape:zoom="4"
|
31
|
+
inkscape:cx="127.40358"
|
32
|
+
inkscape:cy="-8.2431265"
|
33
|
+
inkscape:document-units="px"
|
34
|
+
inkscape:current-layer="layer1"
|
35
|
+
showgrid="false"
|
36
|
+
inkscape:window-width="1364"
|
37
|
+
inkscape:window-height="718"
|
38
|
+
inkscape:window-x="0"
|
39
|
+
inkscape:window-y="0"
|
40
|
+
inkscape:window-maximized="1" />
|
41
|
+
<metadata
|
42
|
+
id="metadata7">
|
43
|
+
<rdf:RDF>
|
44
|
+
<cc:Work
|
45
|
+
rdf:about="">
|
46
|
+
<dc:format>image/svg+xml</dc:format>
|
47
|
+
<dc:type
|
48
|
+
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
49
|
+
<dc:title></dc:title>
|
50
|
+
</cc:Work>
|
51
|
+
</rdf:RDF>
|
52
|
+
</metadata>
|
53
|
+
<g
|
54
|
+
inkscape:label="Layer 1"
|
55
|
+
inkscape:groupmode="layer"
|
56
|
+
id="layer1"
|
57
|
+
transform="translate(0,-1028.3622)">
|
58
|
+
<rect
|
59
|
+
style="fill:#ffffff;fill-opacity:1;stroke:none"
|
60
|
+
id="rect3753"
|
61
|
+
width="204"
|
62
|
+
height="24"
|
63
|
+
x="0"
|
64
|
+
y="1028.3622" />
|
65
|
+
<rect
|
66
|
+
style="fill:#ff0000;fill-opacity:1;stroke:none"
|
67
|
+
id="rect3755"
|
68
|
+
width="200"
|
69
|
+
height="20"
|
70
|
+
x="2"
|
71
|
+
y="1030.3622" />
|
72
|
+
</g>
|
73
|
+
</svg>
|