minigl 1.3.2 → 1.3.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6519693f68d4a4961b9b21e9379f46d76aaf042f
4
- data.tar.gz: 9e5058266fb5de59417e4dcf13b6691700da5829
3
+ metadata.gz: d6075180b99d1cf18a53a683353828675ed18ca8
4
+ data.tar.gz: c01f4bd208021a2bff3f2c1aa3f86eac0c7ff093
5
5
  SHA512:
6
- metadata.gz: 33c31a6af23f16ee8222642845d45f170508fe714a4e79d61aa3e1fc0f53eddc63438935ab5deaea6629ceac7a9c416626afb4e01c99a3682fc3108e9129d20a
7
- data.tar.gz: cfeea61e4d33ef190302c82314c346c3ea7d37309dc5db38c42984cc2b29ffdec3bedc27330d07cd361125bdb76ddada346659bb12e25c0c77512568e166b2c4
6
+ metadata.gz: 6981a60cbd32da81a0c96553536dd77b440ccd913cd1a612a23b64292051ec69924e6ed2058df2de72ef75a5db4f5869edec3ded25963d8012b999b17575285a
7
+ data.tar.gz: 15e2fc67ac2b072da7e3a80b026fe5787b2df7804451aedd28d4e5a0f9e70dfd6ec299be7463b38e354279b87c27a6a9660d4fa00aaae6ae7f32fcad35d534ad
data/README.md CHANGED
@@ -22,12 +22,11 @@ this [working game example](https://github.com/victords/aventura-do-saber).
22
22
  * An auxiliary, tutorial-like documentation is under construction
23
23
  [here](https://github.com/victords/minigl/wiki).
24
24
 
25
- **Version 1.3.2**
25
+ **Version 1.3.3**
26
26
 
27
- * Created documentation for the abstract class `Component`.
28
- * Granted read and write access to the `params` attribute for all components.
29
- * Fixed issue with `ToggleButton` instantiation with no width and height set.
30
- * Added `checked` parameter to the constructor of `ToggleButton`.
27
+ * Added `mass` attribute to the GameObject class and Movement module.
28
+ * Added readers for the attributes of `Ramp`.
29
+ * Added z-index support to all drawing functions.
31
30
 
32
- **WARNING**: this version can generate incompatibility, because of the parameter
33
- order in the constructor for `ToggleButton`.
31
+ **WARNING**: this version can generate incompatibility, because the `move`
32
+ method of `Movement` now requires the calling object to have a `mass` attribute.
@@ -173,17 +173,19 @@ module AGL
173
173
  # Parameters:
174
174
  # [alpha] The opacity with which the button will be drawn. Allowed values
175
175
  # vary between 0 (fully transparent) and 255 (fully opaque).
176
- def draw alpha = 0xff
176
+ # [z_index] The z-order to draw the object. Objects with larger z-orders
177
+ # will be drawn on top of the ones with smaller z-orders.
178
+ def draw alpha = 0xff, z_index = 0
177
179
  return unless @visible
178
180
 
179
181
  color = (alpha << 24) | 0xffffff
180
182
  text_color = (alpha << 24) | (@enabled ? @text_color : @disabled_text_color)
181
- @img[@img_index].draw @x, @y, 0, 1, 1, color if @img
183
+ @img[@img_index].draw @x, @y, z_index, 1, 1, color if @img
182
184
  if @text
183
185
  if @center
184
- @font.draw_rel @text, @text_x, @text_y, 0, 0.5, 0.5, 1, 1, text_color
186
+ @font.draw_rel @text, @text_x, @text_y, z_index, 0.5, 0.5, 1, 1, text_color
185
187
  else
186
- @font.draw @text, @text_x, @text_y, 0, 1, 1, text_color
188
+ @font.draw @text, @text_x, @text_y, z_index, 1, 1, text_color
187
189
  end
188
190
  end
189
191
  end
@@ -590,32 +592,34 @@ module AGL
590
592
  # Parameters:
591
593
  # [alpha] The opacity with which the text field will be drawn. Allowed
592
594
  # values vary between 0 (fully transparent) and 255 (fully opaque).
593
- def draw alpha = 0xff
595
+ # [z_index] The z-order to draw the object. Objects with larger z-orders
596
+ # will be drawn on top of the ones with smaller z-orders.
597
+ def draw alpha = 0xff, z_index = 0
594
598
  return unless @visible
595
599
 
596
600
  color = (alpha << 24) | ((@enabled or @disabled_img) ? 0xffffff : 0x808080)
597
601
  text_color = (alpha << 24) | (@enabled ? @text_color : @disabled_text_color)
598
602
  img = ((@enabled or @disabled_img.nil?) ? @img : @disabled_img)
599
- img.draw @x, @y, 0, 1, 1, color
600
- @font.draw @text, @text_x, @text_y, 0, 1, 1, text_color
603
+ img.draw @x, @y, z_index, 1, 1, color
604
+ @font.draw @text, @text_x, @text_y, z_index, 1, 1, text_color
601
605
 
602
606
  if @anchor1 and @anchor2
603
607
  selection_color = ((alpha / 2) << 24) | @selection_color
604
608
  Game.window.draw_quad @nodes[@anchor1], @text_y, selection_color,
605
609
  @nodes[@anchor2] + 1, @text_y, selection_color,
606
610
  @nodes[@anchor2] + 1, @text_y + @font.height, selection_color,
607
- @nodes[@anchor1], @text_y + @font.height, selection_color, 0
611
+ @nodes[@anchor1], @text_y + @font.height, selection_color, z_index
608
612
  end
609
613
 
610
614
  if @cursor_visible
611
615
  if @cursor_img
612
- @cursor_img.draw @nodes[@cur_node] - @cursor_img.width / 2, @text_y, 0
616
+ @cursor_img.draw @nodes[@cur_node] - @cursor_img.width / 2, @text_y, z_index
613
617
  else
614
618
  cursor_color = alpha << 24
615
619
  Game.window.draw_quad @nodes[@cur_node], @text_y, cursor_color,
616
620
  @nodes[@cur_node] + 1, @text_y, cursor_color,
617
621
  @nodes[@cur_node] + 1, @text_y + @font.height, cursor_color,
618
- @nodes[@cur_node], @text_y + @font.height, cursor_color, 0
622
+ @nodes[@cur_node], @text_y + @font.height, cursor_color, z_index
619
623
  end
620
624
  end
621
625
  end
@@ -83,18 +83,20 @@ module AGL
83
83
  # will be darkened, for example.
84
84
  # [angle] A rotation, in degrees, to be applied to the image, relative to
85
85
  # its center.
86
- def draw map = nil, scale_x = 1, scale_y = 1, alpha = 0xff, color = 0xffffff, angle = nil
86
+ # [z_index] The z-order to draw the object. Objects with larger z-orders
87
+ # will be drawn on top of the ones with smaller z-orders.
88
+ def draw map = nil, scale_x = 1, scale_y = 1, alpha = 0xff, color = 0xffffff, angle = nil, z_index = 0
87
89
  color = (alpha << 24) | color
88
90
  if map
89
91
  if angle
90
- @img[@img_index].draw_rot @x.round - map.cam.x, @y.round - map.cam.y, 0, angle, 0.5, 0.5, scale_x, scale_y, color
92
+ @img[@img_index].draw_rot @x.round - map.cam.x, @y.round - map.cam.y, z_index, angle, 0.5, 0.5, scale_x, scale_y, color
91
93
  else
92
- @img[@img_index].draw @x.round - map.cam.x, @y.round - map.cam.y, 0, scale_x, scale_y, color
94
+ @img[@img_index].draw @x.round - map.cam.x, @y.round - map.cam.y, z_index, scale_x, scale_y, color
93
95
  end
94
96
  elsif angle
95
- @img[@img_index].draw_rot @x.round, @y.round, 0, angle, 0.5, 0.5, scale_x, scale_y, color
97
+ @img[@img_index].draw_rot @x.round, @y.round, z_index, angle, 0.5, 0.5, scale_x, scale_y, color
96
98
  else
97
- @img[@img_index].draw @x.round, @y.round, 0, scale_x, scale_y, color
99
+ @img[@img_index].draw @x.round, @y.round, z_index, scale_x, scale_y, color
98
100
  end
99
101
  end
100
102
  end
@@ -124,7 +126,9 @@ module AGL
124
126
  # image is not a spritesheet.
125
127
  # [sprite_rows] The number of rows in the spritesheet. Use +nil+ if the
126
128
  # image is not a spritesheet.
127
- def initialize x, y, w, h, img, img_gap = nil, sprite_cols = nil, sprite_rows = nil
129
+ # [mass] The mass of the object. Details on how it is used can be found
130
+ # in the Movement module.
131
+ def initialize x, y, w, h, img, img_gap = nil, sprite_cols = nil, sprite_rows = nil, mass = 1.0
128
132
  super x, y, img, sprite_cols, sprite_rows
129
133
  @w = w; @h = h
130
134
  @img_gap =
@@ -133,6 +137,7 @@ module AGL
133
137
  else
134
138
  img_gap
135
139
  end
140
+ @mass = mass
136
141
  @speed = Vector.new 0, 0
137
142
  @min_speed = Vector.new 0.01, 0.01
138
143
  @max_speed = Vector.new 15, 15
@@ -172,20 +177,22 @@ module AGL
172
177
  # will be darkened, for example.
173
178
  # [angle] A rotation, in degrees, to be applied to the image, relative to
174
179
  # its center.
175
- def draw map = nil, scale_x = 1, scale_y = 1, alpha = 0xff, color = 0xffffff, angle = nil
180
+ # [z_index] The z-order to draw the object. Objects with larger z-orders
181
+ # will be drawn on top of the ones with smaller z-orders.
182
+ def draw map = nil, scale_x = 1, scale_y = 1, alpha = 0xff, color = 0xffffff, angle = nil, z_index = 0
176
183
  color = (alpha << 24) | color
177
184
  if map
178
185
  if angle
179
186
  @img[@img_index].draw_rot @x.round + @img_gap.x - map.cam.x,
180
187
  @y.round + @img_gap.y - map.cam.y,
181
- 0, angle, 0.5, 0.5, scale_x, scale_y, color
188
+ z_index, angle, 0.5, 0.5, scale_x, scale_y, color
182
189
  else
183
- @img[@img_index].draw @x.round + @img_gap.x - map.cam.x, @y.round + @img_gap.y - map.cam.y, 0, scale_x, scale_y, color
190
+ @img[@img_index].draw @x.round + @img_gap.x - map.cam.x, @y.round + @img_gap.y - map.cam.y, z_index, scale_x, scale_y, color
184
191
  end
185
192
  elsif angle
186
- @img[@img_index].draw_rot @x.round + @img_gap.x, @y.round + @img_gap.y, 0, angle, 0.5, 0.5, scale_x, scale_y, color
193
+ @img[@img_index].draw_rot @x.round + @img_gap.x, @y.round + @img_gap.y, z_index, angle, 0.5, 0.5, scale_x, scale_y, color
187
194
  else
188
- @img[@img_index].draw @x.round + @img_gap.x, @y.round + @img_gap.y, 0, scale_x, scale_y, color
195
+ @img[@img_index].draw @x.round + @img_gap.x, @y.round + @img_gap.y, z_index, scale_x, scale_y, color
189
196
  end
190
197
  end
191
198
  end
@@ -245,7 +252,7 @@ module AGL
245
252
  end
246
253
  end
247
254
 
248
- def draw map = nil, scale_x = 1, scale_y = 1, alpha = 0xff, color = 0xffffff, angle = nil
255
+ def draw map = nil, scale_x = 1, scale_y = 1, alpha = 0xff, color = 0xffffff, angle = nil, z_index = 0
249
256
  super unless @dead
250
257
  end
251
258
  end
@@ -48,6 +48,24 @@ module AGL
48
48
  # the y axis. You must provide instances of this class (or derived classes)
49
49
  # to the +ramps+ array parameter of the +move+ method.
50
50
  class Ramp
51
+ # The x-coordinate of the top left corner of a rectangle that completely
52
+ # (and precisely) encloses the ramp (thought of as a right triangle).
53
+ attr_reader :x
54
+
55
+ # The y-coordinate of the top left corner of the rectangle described in
56
+ # the +x+ attribute.
57
+ attr_reader :y
58
+
59
+ # The width of the ramp.
60
+ attr_reader :w
61
+
62
+ # The height of the ramp.
63
+ attr_reader :h
64
+
65
+ # Whether the height of the ramp increases from left to right (decreases
66
+ # from left to right when +false+).
67
+ attr_reader :left
68
+
51
69
  # Creates a new ramp.
52
70
  #
53
71
  # Parameters:
@@ -133,6 +151,12 @@ module AGL
133
151
  # rectangular bounding boxes), including a method to behave as an elevator,
134
152
  # affecting other objects' positions as it moves.
135
153
  module Movement
154
+ # The mass of the object, in arbitrary units. The default value for
155
+ # GameObject instances, for example, is 1. The larger the mass (i.e., the
156
+ # heavier the object), the more intense the forces applied to the object
157
+ # have to be in order to move it.
158
+ attr_reader :mass
159
+
136
160
  # A Vector with the current speed of the object (x: horizontal component,
137
161
  # y: vertical component).
138
162
  attr_reader :speed
@@ -193,12 +217,12 @@ module AGL
193
217
  forces.x += Game.gravity.x; forces.y += Game.gravity.y
194
218
  forces.x += @stored_forces.x; forces.y += @stored_forces.y
195
219
  @stored_forces.x = @stored_forces.y = 0
196
-
220
+
197
221
  # check_contact obst, ramps
198
222
  forces.x = 0 if (forces.x < 0 and @left) or (forces.x > 0 and @right)
199
223
  forces.y = 0 if (forces.y < 0 and @top) or (forces.y > 0 and @bottom)
200
-
201
- @speed.x += forces.x; @speed.y += forces.y
224
+
225
+ @speed.x += forces.x / @mass; @speed.y += forces.y / @mass
202
226
  @speed.x = 0 if @speed.x.abs < @min_speed.x
203
227
  @speed.y = 0 if @speed.y.abs < @min_speed.y
204
228
  @speed.x = (@speed.x <=> 0) * @max_speed.x if @speed.x.abs > @max_speed.x
@@ -29,7 +29,9 @@ module AGL
29
29
  # [color] The color of the text, in hexadecimal RRGGBB format.
30
30
  # [alpha] The opacity of the text. Valid values vary from 0 (fully
31
31
  # transparent) to 255 (fully opaque).
32
- def write_line text, x, y, mode = :left, color = 0, alpha = 0xff
32
+ # [z_index] The z-order to draw the object. Objects with larger z-orders
33
+ # will be drawn on top of the ones with smaller z-orders.
34
+ def write_line text, x, y, mode = :left, color = 0, alpha = 0xff, z_index = 0
33
35
  color = (alpha << 24) | color
34
36
  rel =
35
37
  case mode
@@ -38,7 +40,7 @@ module AGL
38
40
  when :right then 1
39
41
  else 0
40
42
  end
41
- @font.draw_rel text, x, y, 0, rel, 0, 1, 1, color
43
+ @font.draw_rel text, x, y, z_index, rel, 0, 1, 1, color
42
44
  end
43
45
 
44
46
  # Draws text, breaking lines when needed and when explicitly caused by the
@@ -58,11 +60,13 @@ module AGL
58
60
  # [color] The color of the text, in hexadecimal RRGGBB format.
59
61
  # [alpha] The opacity of the text. Valid values vary from 0 (fully
60
62
  # transparent) to 255 (fully opaque).
61
- def write_breaking text, x, y, width, mode = :left, color = 0, alpha = 0xff
63
+ # [z_index] The z-order to draw the object. Objects with larger z-orders
64
+ # will be drawn on top of the ones with smaller z-orders.
65
+ def write_breaking text, x, y, width, mode = :left, color = 0, alpha = 0xff, z_index = 0
62
66
  color = (alpha << 24) | color
63
67
  text.split("\n").each do |p|
64
68
  if mode == :justified
65
- y = write_paragraph_justified p, x, y, width, color
69
+ y = write_paragraph_justified p, x, y, width, color, z_index
66
70
  else
67
71
  rel =
68
72
  case mode
@@ -71,20 +75,20 @@ module AGL
71
75
  when :right then 1
72
76
  else 0
73
77
  end
74
- y = write_paragraph p, x, y, width, rel, color
78
+ y = write_paragraph p, x, y, width, rel, color, z_index
75
79
  end
76
80
  end
77
81
  end
78
82
 
79
83
  private
80
84
 
81
- def write_paragraph text, x, y, width, rel, color
85
+ def write_paragraph text, x, y, width, rel, color, z_index
82
86
  line = ""
83
87
  line_width = 0
84
88
  text.split(' ').each do |word|
85
89
  w = @font.text_width word
86
90
  if line_width + w > width
87
- @font.draw_rel line.chop, x, y, 0, rel, 0, 1, 1, color
91
+ @font.draw_rel line.chop, x, y, z_index, rel, 0, 1, 1, color
88
92
  line = ""
89
93
  line_width = 0
90
94
  y += @font.height + @line_spacing
@@ -92,11 +96,11 @@ module AGL
92
96
  line += "#{word} "
93
97
  line_width += @font.text_width "#{word} "
94
98
  end
95
- @font.draw_rel line.chop, x, y, 0, rel, 0, 1, 1, color if not line.empty?
99
+ @font.draw_rel line.chop, x, y, z_index, rel, 0, 1, 1, color if not line.empty?
96
100
  y + @font.height + @line_spacing
97
101
  end
98
102
 
99
- def write_paragraph_justified text, x, y, width, color
103
+ def write_paragraph_justified text, x, y, width, color, z_index
100
104
  space_width = @font.text_width " "
101
105
  spaces = [[]]
102
106
  line_index = 0
@@ -127,7 +131,7 @@ module AGL
127
131
  spaces.each do |line|
128
132
  new_x = x
129
133
  line.each do |s|
130
- @font.draw words[index], new_x, y, 0, 1, 1, color
134
+ @font.draw words[index], new_x, y, z_index, 1, 1, color
131
135
  new_x += @font.text_width(words[index]) + s
132
136
  index += 1
133
137
  end
@@ -13,7 +13,7 @@ class MyGame < Gosu::Window
13
13
  @writer = TextHelper.new @font, 5
14
14
  @btn = Button.new(10, 560, @font, "Test", :btn, 0x008000, 0x808080, 0, 0, 0, 0, 0, "friends") { |x| puts "hello #{x}" }
15
15
  @btn.enabled = false
16
- @chk = ToggleButton.new(210, 560, @font, "Click me", :check, false, 0xffffff, 0x808080, false, 36, 5, 0, 0, "friends") { |c, x|
16
+ @chk = ToggleButton.new(740, 300, @font, "Click me", :check, false, 0xffffff, 0x808080, false, 36, 5, 0, 0, "friends") { |c, x|
17
17
  puts "hello #{x}, checked: #{c}"
18
18
  }
19
19
  @txt = TextField.new(10, 520, @font, :text, nil, nil, 15, 5, 16, false, "", nil, 0, 0, 0x0000ff, "test") { |t, x| puts "field #{x}, text: #{t}" }
@@ -49,12 +49,12 @@ class MyGame < Gosu::Window
49
49
  end
50
50
 
51
51
  def draw
52
- @obj1.draw nil, 1, 1, 0x80, 0x33ff33, 30
52
+ @obj1.draw nil, 1, 1, 255, 0x33ff33, 30, 1
53
53
  @obj2.draw nil, 0.6, 1.4, 0x99
54
54
  @writer.write_breaking "Testing multiple line text.\nThis should draw text "\
55
55
  "across multiple lines, respecting a limit width. "\
56
56
  "Furthermore, the text must be right-aligned.",
57
- 780, 300, 300, :right, 0xffffffff
57
+ 780, 300, 300, :right, 0xff0000, 255, 1
58
58
 
59
59
  @btn.draw 0xcc
60
60
  @chk.draw
@@ -6,6 +6,7 @@ class MovingObject
6
6
  include Movement
7
7
  def initialize x, y, w, h
8
8
  @x = x; @y = y; @w = w; @h = h
9
+ @mass = 1.0
9
10
  @speed = Vector.new 0, 0
10
11
  @min_speed = Vector.new 0.01, 0.01
11
12
  @max_speed = Vector.new 1000, 1000
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: minigl
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.2
4
+ version: 1.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Victor David Santos
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-09-10 00:00:00.000000000 Z
11
+ date: 2014-10-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: gosu