minigl 2.3.5 → 2.3.6

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
  SHA256:
3
- metadata.gz: dc2641ae0e63c722a4ed3a8652c47d85b45b518ea3dc9c708c67012b37f99f5d
4
- data.tar.gz: 124d39b866a2bc1d00bb38acfec0e0acbaba9033482cafc1bfdc29f19f47ea60
3
+ metadata.gz: db8b9de89a3372e81cfdef102808b9bbaec3fbd88a930c95cd5af2f946cb744d
4
+ data.tar.gz: d4fd66ee8e177e80fcbbe14808e4a8518a526fc6cec47d41adfc032da881750c
5
5
  SHA512:
6
- metadata.gz: 7bddbbef6185945b823c49681c4c663198c176294059c6749c4ffd416841a3ed2c3765a7750d5b57aced798c87c54c065aba8e9549ae33c0c4b49d021a58d824
7
- data.tar.gz: 66289bb1502ba721672ef45e597fc4100415167fb2285c22ae647862eb775680b162560e3d0ab815597924d2990ce45e85d1de85fd38d36a16f8891532bc5bf2
6
+ metadata.gz: c966227f4b6a7d020c5e07c601fc18d8ea6603f07f6d661bc92127ae1335b02118e71ed997c2f25fd1c9089ae0e4730d61d0395a82ef0c2e495025b25fd019c3
7
+ data.tar.gz: e603e887d2c595c61e16bdeee8fd1b928414cf895caa7f98dd69b2aed0cf7bf2eb2dd0d115a460b07797d19ce3dccfeafc825151935012c62bc94671fdd90f2d
data/README.md CHANGED
@@ -29,9 +29,9 @@ After installing the Gosu dependencies, you can just `gem install minigl`.
29
29
  * The [wiki](https://github.com/victords/minigl/wiki) is a work in progress with tutorials and examples.
30
30
  * Test package and examples aren't complete!
31
31
 
32
- ## Version 2.3.5
32
+ ## Version 2.3.6
33
33
 
34
- * Updated Ruby and Gosu dependencies to support Ruby 3.0 and Gosu 1.1.
34
+ * Added inverted ramps (for sloped ceilings, still has some issues).
35
35
 
36
36
  ## Contributing
37
37
 
@@ -66,6 +66,10 @@ module MiniGL
66
66
  # from left to right when +false+).
67
67
  attr_reader :left
68
68
 
69
+ # Whether the ramp is vertically inverted, i.e., the face that is parallel
70
+ # to the x-axis faces up and the sloped face faces down.
71
+ attr_reader :inverted
72
+
69
73
  attr_reader :ratio # :nodoc:
70
74
  attr_reader :factor # :nodoc:
71
75
 
@@ -85,12 +89,16 @@ module MiniGL
85
89
  # highest).
86
90
  # [left] Whether the height of the ramp increases from left to right. Use
87
91
  # +false+ for a ramp that goes down from left to right.
88
- def initialize(x, y, w, h, left)
92
+ # [inverted] Whether the ramp is vertically inverted, i.e., the face that
93
+ # is parallel to the x-axis faces up and the sloped face faces
94
+ # down.
95
+ def initialize(x, y, w, h, left, inverted = false)
89
96
  @x = x
90
97
  @y = y
91
98
  @w = w
92
99
  @h = h
93
100
  @left = left
101
+ @inverted = inverted
94
102
  @ratio = @h.to_f / @w
95
103
  @factor = @w / Math.sqrt(@w**2 + @h**2)
96
104
  end
@@ -101,6 +109,7 @@ module MiniGL
101
109
  # [obj] The object to check contact with. It must have the +x+, +y+, +w+
102
110
  # and +h+ accessible attributes determining its bounding box.
103
111
  def contact?(obj)
112
+ return false if @inverted
104
113
  obj.x + obj.w > @x && obj.x < @x + @w && obj.x.round(6) == get_x(obj).round(6) && obj.y.round(6) == get_y(obj).round(6)
105
114
  end
106
115
 
@@ -111,44 +120,44 @@ module MiniGL
111
120
  # [obj] The object to check intersection with. It must have the +x+, +y+,
112
121
  # +w+ and +h+ accessible attributes determining its bounding box.
113
122
  def intersect?(obj)
114
- obj.x + obj.w > @x && obj.x < @x + @w && obj.y > get_y(obj) && obj.y < @y + @h
123
+ obj.x + obj.w > @x && obj.x < @x + @w &&
124
+ (@inverted ? obj.y < get_y(obj) && obj.y + obj.h > @y : obj.y > get_y(obj) && obj.y < @y + @h)
115
125
  end
116
126
 
117
127
  # :nodoc:
118
128
  def check_can_collide(m)
119
- y = get_y(m) + m.h
129
+ y = get_y(m) + (@inverted ? 0 : m.h)
120
130
  @can_collide = m.x + m.w > @x && @x + @w > m.x && m.y < y && m.y + m.h > y
121
131
  end
122
132
 
123
133
  def check_intersection(obj)
124
- if @can_collide and intersect? obj
125
- counter = @left && obj.prev_speed.x > 0 || !@left && obj.prev_speed.x < 0
126
- if obj.prev_speed.y > 0 && counter
127
- dx = get_x(obj) - obj.x
128
- s = (obj.prev_speed.y.to_f / obj.prev_speed.x).abs
129
- dx /= s + @ratio
130
- obj.x += dx
131
- end
132
- obj.y = get_y obj
133
- if counter && obj.bottom != self
134
- obj.speed.x *= @factor
135
- end
136
- obj.speed.y = 0
134
+ return unless @can_collide && intersect?(obj)
135
+
136
+ counter = @left && obj.prev_speed.x > 0 || !@left && obj.prev_speed.x < 0
137
+ if counter && (@inverted ? obj.prev_speed.y < 0 : obj.prev_speed.y > 0)
138
+ dx = get_x(obj) - obj.x
139
+ s = (obj.prev_speed.y.to_f / obj.prev_speed.x).abs
140
+ dx /= s + @ratio
141
+ obj.x += dx
137
142
  end
143
+ if counter && obj.bottom != self
144
+ obj.speed.x *= @factor
145
+ end
146
+
147
+ obj.speed.y = 0
148
+ obj.y = get_y(obj)
138
149
  end
139
150
 
140
151
  def get_x(obj)
141
- return obj.x if @left && obj.x + obj.w > @x + @w
142
- return @x + (1.0 * (@y + @h - obj.y - obj.h) * @w / @h) - obj.w if @left
143
- return obj.x if obj.x < @x
144
- @x + (1.0 * (obj.y + obj.h - @y) * @w / @h)
152
+ return obj.x if @left && obj.x + obj.w > @x + @w || !@left && obj.x < @x
153
+ offset = (@inverted ? obj.y - @y : @y + @h - obj.y - obj.h).to_f * @w / @h
154
+ @left ? @x + offset - obj.w : @x + @w - offset
145
155
  end
146
156
 
147
157
  def get_y(obj)
148
- return @y - obj.h if @left && obj.x + obj.w > @x + @w
149
- return @y + (1.0 * (@x + @w - obj.x - obj.w) * @h / @w) - obj.h if @left
150
- return @y - obj.h if obj.x < @x
151
- @y + (1.0 * (obj.x - @x) * @h / @w) - obj.h
158
+ return @y + (@inverted ? @h : -obj.h) if @left && obj.x + obj.w > @x + @w || !@left && obj.x < @x
159
+ offset = (@left ? @x + @w - obj.x - obj.w : obj.x - @x).to_f * @h / @w
160
+ @inverted ? @y + @h - offset : @y + offset - obj.h
152
161
  end
153
162
  end
154
163
 
@@ -340,11 +349,6 @@ module MiniGL
340
349
  @x += @speed.x
341
350
  @y += @speed.y
342
351
 
343
- # Keeping contact with ramp
344
- # if @speed.y == 0 and @speed.x.abs <= G.ramp_contact_threshold and @bottom.is_a? Ramp
345
- # @y = @bottom.get_y(self)
346
- # puts 'aqui'
347
- # end
348
352
  ramps.each do |r|
349
353
  r.check_intersection self
350
354
  end
data/test/mov_game.rb CHANGED
@@ -13,7 +13,7 @@ class MyGame < GameWindow
13
13
  Block.new(0, 600, 800, 1, false),
14
14
  Block.new(-1, 0, 1, 600, false),
15
15
  Block.new(800, 0, 1, 600, false),
16
- Block.new(300, 430, 50, 50),
16
+ Block.new(300, 430, 250, 50),
17
17
  # Block.new(375, 550, 50, 50, true),
18
18
  # Block.new(150, 200, 20, 300, false),
19
19
  # Block.new(220, 300, 100, 20, true),
@@ -26,6 +26,12 @@ class MyGame < GameWindow
26
26
  Ramp.new(500, 500, 150, 100, true),
27
27
  Ramp.new(650, 300, 150, 200, true),
28
28
  Ramp.new(650, 500, 150, 100, true),
29
+ Ramp.new(0, 100, 100, 100, false, true),
30
+ Ramp.new(100, 0, 150, 100, false, true),
31
+ Ramp.new(700, 100, 100, 100, true, true),
32
+ Ramp.new(550, 0, 150, 100, true, true),
33
+ # Ramp.new(250, 250, 75, 75, false, true),
34
+ Ramp.new(525, 250, 75, 200, true, true),
29
35
  ]
30
36
 
31
37
  # @cycle = [Vector.new(100, 530), Vector.new(650, 500)]
@@ -67,9 +73,9 @@ class MyGame < GameWindow
67
73
  o.x, o.y + o.h, 0xffffffff, 0
68
74
  end
69
75
  @ramps.each do |r|
70
- draw_triangle r.left ? r.x + r.w : r.x, r.y, 0xffffffff,
71
- r.x + r.w, r.y + r.h, 0xffffffff,
72
- r.x, r.y + r.h, 0xffffffff, 0
76
+ draw_triangle r.left ? r.x + r.w : r.x, r.inverted ? r.y + r.h : r.y, 0xffffffff,
77
+ r.x + r.w, r.inverted ? r.y : r.y + r.h, 0xffffffff,
78
+ r.x, r.inverted ? r.y : r.y + r.h, 0xffffffff, 0
73
79
  end
74
80
  end
75
81
  end
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: 2.3.5
4
+ version: 2.3.6
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: 2021-02-12 00:00:00.000000000 Z
11
+ date: 2021-10-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: gosu
@@ -99,42 +99,42 @@ required_rubygems_version: !ruby/object:Gem::Requirement
99
99
  - !ruby/object:Gem::Version
100
100
  version: '0'
101
101
  requirements: []
102
- rubygems_version: 3.1.2
102
+ rubygems_version: 3.2.15
103
103
  signing_key:
104
104
  specification_version: 4
105
105
  summary: MiniGL
106
106
  test_files:
107
- - test/vector_tests.rb
108
- - test/res_tests.rb
107
+ - test/game.rb
108
+ - test/game_object_tests.rb
109
+ - test/iso_game.rb
110
+ - test/map_tests.rb
109
111
  - test/mov_game.rb
110
112
  - test/movement_tests.rb
111
- - test/map_tests.rb
112
- - test/iso_game.rb
113
- - test/game_object_tests.rb
114
- - test/game.rb
113
+ - test/res_tests.rb
114
+ - test/vector_tests.rb
115
115
  - test/test.png
116
- - test/data/tileset/tileset1.png
117
116
  - test/data/font/font1.ttf
118
- - test/data/sound/1.wav
119
- - test/data/img/check.png
120
- - test/data/img/square.svg
121
- - test/data/img/tile2.svg
117
+ - test/data/img/barbg.png
118
+ - test/data/img/barbg.svg
122
119
  - test/data/img/barfg.png
123
- - test/data/img/tile2.png
124
- - test/data/img/tile1.svg
125
- - test/data/img/square3.svg
126
- - test/data/img/text.png
127
- - test/data/img/square2.svg
120
+ - test/data/img/barfg.svg
121
+ - test/data/img/btn.png
122
+ - test/data/img/check.png
128
123
  - test/data/img/image.png
129
124
  - test/data/img/img1.png
130
- - test/data/img/square2.png
131
- - test/data/img/barbg.svg
132
- - test/data/img/barfg.svg
133
- - test/data/img/tile1b.png
134
- - test/data/img/barbg.png
135
125
  - test/data/img/square.png
136
- - test/data/img/btn.png
126
+ - test/data/img/square.svg
127
+ - test/data/img/square2.png
128
+ - test/data/img/square2.svg
137
129
  - test/data/img/square3.png
138
- - test/data/img/tile2b.png
130
+ - test/data/img/square3.svg
131
+ - test/data/img/text.png
139
132
  - test/data/img/tile1.png
133
+ - test/data/img/tile1.svg
134
+ - test/data/img/tile1b.png
135
+ - test/data/img/tile2.png
136
+ - test/data/img/tile2.svg
137
+ - test/data/img/tile2b.png
138
+ - test/data/sound/1.wav
139
+ - test/data/tileset/tileset1.png
140
140
  - test/data/img/sub/image.png