minigl 2.2.2 → 2.2.3
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.
- 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/test/game_object_tests.rb
CHANGED
@@ -1,108 +1,108 @@
|
|
1
|
-
require 'test/unit'
|
2
|
-
require_relative '../lib/minigl'
|
3
|
-
include MiniGL
|
4
|
-
|
5
|
-
class SpriteTest < Test::Unit::TestCase
|
6
|
-
def setup
|
7
|
-
@window = GameWindow.new 800, 600, false
|
8
|
-
Res.prefix = File.expand_path(File.dirname(__FILE__)) + '/data'
|
9
|
-
end
|
10
|
-
|
11
|
-
def test_sprite_position
|
12
|
-
s = Sprite.new 10, 20, :image
|
13
|
-
assert_equal 10, s.x
|
14
|
-
assert_equal 20, s.y
|
15
|
-
s = Sprite.new -100, 200, :image
|
16
|
-
assert_equal -100, s.x
|
17
|
-
assert_equal 200, s.y
|
18
|
-
end
|
19
|
-
|
20
|
-
def test_sprite_animation
|
21
|
-
s = Sprite.new 10, 20, :image, 3, 1
|
22
|
-
indices = [0, 1, 2]
|
23
|
-
interval = 1
|
24
|
-
3.times { s.animate indices, interval }
|
25
|
-
assert_equal 0, s.img_index
|
26
|
-
5.times { s.animate indices, interval }
|
27
|
-
assert_equal 2, s.img_index
|
28
|
-
|
29
|
-
10.times { s.animate_once indices, interval }
|
30
|
-
assert_equal 2, s.img_index
|
31
|
-
s.animate_once indices, interval
|
32
|
-
assert_equal 2, s.img_index
|
33
|
-
|
34
|
-
indices2 = [0, 1, 2, 3]
|
35
|
-
s.animate_once indices2, 1
|
36
|
-
assert_equal 0, s.img_index
|
37
|
-
10.times { s.animate_once indices2, interval }
|
38
|
-
assert_equal 3, s.img_index
|
39
|
-
|
40
|
-
s.set_animation 0
|
41
|
-
2.times { s.animate_once indices2, 1 }
|
42
|
-
assert_equal 1, s.img_index
|
43
|
-
end
|
44
|
-
|
45
|
-
def test_sprite_visibility
|
46
|
-
# m = Map.new(1, 1, 800, 600)
|
47
|
-
s = Sprite.new 10, 20, :image, 3, 1 # the sprite will be 1 x 1 pixel
|
48
|
-
assert s.visible?
|
49
|
-
s.x = 800
|
50
|
-
assert(!(s.visible?))
|
51
|
-
s.x = -1
|
52
|
-
assert(!(s.visible?))
|
53
|
-
s.x = 0
|
54
|
-
assert s.visible?
|
55
|
-
s.y = 600
|
56
|
-
assert(!(s.visible?))
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
class GameObjectTest < Test::Unit::TestCase
|
61
|
-
def setup
|
62
|
-
@window = GameWindow.new 800, 600, false
|
63
|
-
Res.prefix = File.expand_path(File.dirname(__FILE__)) + '/data'
|
64
|
-
end
|
65
|
-
|
66
|
-
def test_game_object_attributes
|
67
|
-
o = GameObject.new 10, 20, 3, 1, :image
|
68
|
-
assert_equal 10, o.x
|
69
|
-
assert_equal 20, o.y
|
70
|
-
assert_equal 3, o.w
|
71
|
-
assert_equal 1, o.h
|
72
|
-
assert_equal 0, o.speed.x
|
73
|
-
assert_equal 0, o.speed.y
|
74
|
-
assert_equal 0, o.stored_forces.x
|
75
|
-
assert_equal 0, o.stored_forces.y
|
76
|
-
end
|
77
|
-
|
78
|
-
def test_game_object_animation
|
79
|
-
o = GameObject.new 10, 20, 3, 1, :image, nil, 3, 1
|
80
|
-
indices = [0, 1, 2]
|
81
|
-
interval = 10
|
82
|
-
5.times { o.animate indices, interval }
|
83
|
-
assert_equal 0, o.img_index
|
84
|
-
o.set_animation 0
|
85
|
-
5.times { o.animate indices, interval }
|
86
|
-
assert_equal 0, o.img_index
|
87
|
-
5.times { o.animate indices, interval }
|
88
|
-
assert_equal 1, o.img_index
|
89
|
-
end
|
90
|
-
|
91
|
-
def test_game_object_visibility
|
92
|
-
# m = Map.new(1, 1, 800, 600)
|
93
|
-
o = GameObject.new 10, 20, 30, 30, :square, Vector.new(-10, -10)
|
94
|
-
assert o.visible?
|
95
|
-
o.x = 800
|
96
|
-
assert o.visible?
|
97
|
-
o.x = 810
|
98
|
-
assert(!(o.visible?))
|
99
|
-
o.x = -30
|
100
|
-
assert o.visible?
|
101
|
-
o.y = -50
|
102
|
-
assert(!(o.visible?))
|
103
|
-
o.x = 0; o.y = -30
|
104
|
-
assert o.visible?
|
105
|
-
o.y = 610
|
106
|
-
assert(!(o.visible?))
|
107
|
-
end
|
108
|
-
end
|
1
|
+
require 'test/unit'
|
2
|
+
require_relative '../lib/minigl'
|
3
|
+
include MiniGL
|
4
|
+
|
5
|
+
class SpriteTest < Test::Unit::TestCase
|
6
|
+
def setup
|
7
|
+
@window = GameWindow.new 800, 600, false
|
8
|
+
Res.prefix = File.expand_path(File.dirname(__FILE__)) + '/data'
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_sprite_position
|
12
|
+
s = Sprite.new 10, 20, :image
|
13
|
+
assert_equal 10, s.x
|
14
|
+
assert_equal 20, s.y
|
15
|
+
s = Sprite.new -100, 200, :image
|
16
|
+
assert_equal -100, s.x
|
17
|
+
assert_equal 200, s.y
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_sprite_animation
|
21
|
+
s = Sprite.new 10, 20, :image, 3, 1
|
22
|
+
indices = [0, 1, 2]
|
23
|
+
interval = 1
|
24
|
+
3.times { s.animate indices, interval }
|
25
|
+
assert_equal 0, s.img_index
|
26
|
+
5.times { s.animate indices, interval }
|
27
|
+
assert_equal 2, s.img_index
|
28
|
+
|
29
|
+
10.times { s.animate_once indices, interval }
|
30
|
+
assert_equal 2, s.img_index
|
31
|
+
s.animate_once indices, interval
|
32
|
+
assert_equal 2, s.img_index
|
33
|
+
|
34
|
+
indices2 = [0, 1, 2, 3]
|
35
|
+
s.animate_once indices2, 1
|
36
|
+
assert_equal 0, s.img_index
|
37
|
+
10.times { s.animate_once indices2, interval }
|
38
|
+
assert_equal 3, s.img_index
|
39
|
+
|
40
|
+
s.set_animation 0
|
41
|
+
2.times { s.animate_once indices2, 1 }
|
42
|
+
assert_equal 1, s.img_index
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_sprite_visibility
|
46
|
+
# m = Map.new(1, 1, 800, 600)
|
47
|
+
s = Sprite.new 10, 20, :image, 3, 1 # the sprite will be 1 x 1 pixel
|
48
|
+
assert s.visible?
|
49
|
+
s.x = 800
|
50
|
+
assert(!(s.visible?))
|
51
|
+
s.x = -1
|
52
|
+
assert(!(s.visible?))
|
53
|
+
s.x = 0
|
54
|
+
assert s.visible?
|
55
|
+
s.y = 600
|
56
|
+
assert(!(s.visible?))
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
class GameObjectTest < Test::Unit::TestCase
|
61
|
+
def setup
|
62
|
+
@window = GameWindow.new 800, 600, false
|
63
|
+
Res.prefix = File.expand_path(File.dirname(__FILE__)) + '/data'
|
64
|
+
end
|
65
|
+
|
66
|
+
def test_game_object_attributes
|
67
|
+
o = GameObject.new 10, 20, 3, 1, :image
|
68
|
+
assert_equal 10, o.x
|
69
|
+
assert_equal 20, o.y
|
70
|
+
assert_equal 3, o.w
|
71
|
+
assert_equal 1, o.h
|
72
|
+
assert_equal 0, o.speed.x
|
73
|
+
assert_equal 0, o.speed.y
|
74
|
+
assert_equal 0, o.stored_forces.x
|
75
|
+
assert_equal 0, o.stored_forces.y
|
76
|
+
end
|
77
|
+
|
78
|
+
def test_game_object_animation
|
79
|
+
o = GameObject.new 10, 20, 3, 1, :image, nil, 3, 1
|
80
|
+
indices = [0, 1, 2]
|
81
|
+
interval = 10
|
82
|
+
5.times { o.animate indices, interval }
|
83
|
+
assert_equal 0, o.img_index
|
84
|
+
o.set_animation 0
|
85
|
+
5.times { o.animate indices, interval }
|
86
|
+
assert_equal 0, o.img_index
|
87
|
+
5.times { o.animate indices, interval }
|
88
|
+
assert_equal 1, o.img_index
|
89
|
+
end
|
90
|
+
|
91
|
+
def test_game_object_visibility
|
92
|
+
# m = Map.new(1, 1, 800, 600)
|
93
|
+
o = GameObject.new 10, 20, 30, 30, :square, Vector.new(-10, -10)
|
94
|
+
assert o.visible?
|
95
|
+
o.x = 800
|
96
|
+
assert o.visible?
|
97
|
+
o.x = 810
|
98
|
+
assert(!(o.visible?))
|
99
|
+
o.x = -30
|
100
|
+
assert o.visible?
|
101
|
+
o.y = -50
|
102
|
+
assert(!(o.visible?))
|
103
|
+
o.x = 0; o.y = -30
|
104
|
+
assert o.visible?
|
105
|
+
o.y = 610
|
106
|
+
assert(!(o.visible?))
|
107
|
+
end
|
108
|
+
end
|
data/test/iso_game.rb
CHANGED
@@ -1,39 +1,39 @@
|
|
1
|
-
require_relative '../lib/minigl'
|
2
|
-
include MiniGL
|
3
|
-
|
4
|
-
class MyGame < GameWindow
|
5
|
-
def initialize
|
6
|
-
super 800, 600, false
|
7
|
-
|
8
|
-
@tile1 = Res.img :tile2
|
9
|
-
@tile2 = Res.img :tile2b
|
10
|
-
@map = Map.new 25, 17, 200, 200, 800, 600, true
|
11
|
-
@p = Vector.new -1, -1
|
12
|
-
end
|
13
|
-
|
14
|
-
def needs_cursor?
|
15
|
-
true
|
16
|
-
end
|
17
|
-
|
18
|
-
def update
|
19
|
-
KB.update
|
20
|
-
Mouse.update
|
21
|
-
p = @map.get_map_pos Mouse.x, Mouse.y
|
22
|
-
@p = p if @map.is_in_map p
|
23
|
-
|
24
|
-
@map.move_camera 0, -4.5 if KB.key_down? Gosu::KbUp
|
25
|
-
@map.move_camera 4.5, 0 if KB.key_down? Gosu::KbRight
|
26
|
-
@map.move_camera 0, 4.5 if KB.key_down? Gosu::KbDown
|
27
|
-
@map.move_camera -4.5, 0 if KB.key_down? Gosu::KbLeft
|
28
|
-
@map.set_camera 0, 0 if KB.key_down? Gosu::KbReturn
|
29
|
-
end
|
30
|
-
|
31
|
-
def draw
|
32
|
-
@map.foreach do |i, j, x, y|
|
33
|
-
if (i - @p.x).abs <= 1 and (j - @p.y).abs <= 1; @tile2.draw x, y, 0
|
34
|
-
else; @tile1.draw x, y, 0; end
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
MyGame.new.show
|
1
|
+
require_relative '../lib/minigl'
|
2
|
+
include MiniGL
|
3
|
+
|
4
|
+
class MyGame < GameWindow
|
5
|
+
def initialize
|
6
|
+
super 800, 600, false
|
7
|
+
|
8
|
+
@tile1 = Res.img :tile2
|
9
|
+
@tile2 = Res.img :tile2b
|
10
|
+
@map = Map.new 25, 17, 200, 200, 800, 600, true
|
11
|
+
@p = Vector.new -1, -1
|
12
|
+
end
|
13
|
+
|
14
|
+
def needs_cursor?
|
15
|
+
true
|
16
|
+
end
|
17
|
+
|
18
|
+
def update
|
19
|
+
KB.update
|
20
|
+
Mouse.update
|
21
|
+
p = @map.get_map_pos Mouse.x, Mouse.y
|
22
|
+
@p = p if @map.is_in_map p
|
23
|
+
|
24
|
+
@map.move_camera 0, -4.5 if KB.key_down? Gosu::KbUp
|
25
|
+
@map.move_camera 4.5, 0 if KB.key_down? Gosu::KbRight
|
26
|
+
@map.move_camera 0, 4.5 if KB.key_down? Gosu::KbDown
|
27
|
+
@map.move_camera -4.5, 0 if KB.key_down? Gosu::KbLeft
|
28
|
+
@map.set_camera 0, 0 if KB.key_down? Gosu::KbReturn
|
29
|
+
end
|
30
|
+
|
31
|
+
def draw
|
32
|
+
@map.foreach do |i, j, x, y|
|
33
|
+
if (i - @p.x).abs <= 1 and (j - @p.y).abs <= 1; @tile2.draw x, y, 0
|
34
|
+
else; @tile1.draw x, y, 0; end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
MyGame.new.show
|
data/test/map_tests.rb
CHANGED
@@ -1,57 +1,57 @@
|
|
1
|
-
require 'test/unit'
|
2
|
-
require_relative '../lib/minigl'
|
3
|
-
include MiniGL
|
4
|
-
|
5
|
-
class MapTest < Test::Unit::TestCase
|
6
|
-
def test_map_attributes
|
7
|
-
m = Map.new 16, 16, 300, 200
|
8
|
-
assert_equal 16, m.tile_size.x
|
9
|
-
assert_equal 16, m.tile_size.y
|
10
|
-
assert_equal 300, m.size.x
|
11
|
-
assert_equal 200, m.size.y
|
12
|
-
assert_equal 0, m.cam.x
|
13
|
-
assert_equal 0, m.cam.y
|
14
|
-
m = Map.new 25, 17, 49, 133
|
15
|
-
assert_equal 25, m.tile_size.x
|
16
|
-
assert_equal 17, m.tile_size.y
|
17
|
-
assert_equal 49, m.size.x
|
18
|
-
assert_equal 133, m.size.y
|
19
|
-
assert_equal 0, m.cam.x
|
20
|
-
assert_equal 0, m.cam.y
|
21
|
-
end
|
22
|
-
|
23
|
-
def test_absolute_size
|
24
|
-
m = Map.new 16, 16, 300, 200
|
25
|
-
v = m.get_absolute_size
|
26
|
-
assert_equal 300 * 16, v.x
|
27
|
-
assert_equal 200 * 16, v.y
|
28
|
-
end
|
29
|
-
|
30
|
-
def test_center
|
31
|
-
m = Map.new 16, 16, 300, 200
|
32
|
-
v = m.get_center
|
33
|
-
assert_equal 300 * 16 / 2, v.x
|
34
|
-
assert_equal 200 * 16 / 2, v.y
|
35
|
-
end
|
36
|
-
|
37
|
-
def test_screen_pos
|
38
|
-
m = Map.new 16, 16, 300, 200
|
39
|
-
v = m.get_screen_pos 8, 5
|
40
|
-
assert_equal 8 * 16, v.x
|
41
|
-
assert_equal 5 * 16, v.y
|
42
|
-
end
|
43
|
-
|
44
|
-
def test_map_pos
|
45
|
-
m = Map.new 16, 16, 300, 200
|
46
|
-
v = m.get_map_pos 410, 300
|
47
|
-
assert_equal 25, v.x
|
48
|
-
assert_equal 18, v.y
|
49
|
-
end
|
50
|
-
|
51
|
-
def test_in_map
|
52
|
-
m = Map.new 16, 16, 300, 200
|
53
|
-
assert m.is_in_map(Vector.new 30, 20)
|
54
|
-
assert m.is_in_map(Vector.new 299, 199)
|
55
|
-
assert !m.is_in_map(Vector.new 300, 200)
|
56
|
-
end
|
57
|
-
end
|
1
|
+
require 'test/unit'
|
2
|
+
require_relative '../lib/minigl'
|
3
|
+
include MiniGL
|
4
|
+
|
5
|
+
class MapTest < Test::Unit::TestCase
|
6
|
+
def test_map_attributes
|
7
|
+
m = Map.new 16, 16, 300, 200
|
8
|
+
assert_equal 16, m.tile_size.x
|
9
|
+
assert_equal 16, m.tile_size.y
|
10
|
+
assert_equal 300, m.size.x
|
11
|
+
assert_equal 200, m.size.y
|
12
|
+
assert_equal 0, m.cam.x
|
13
|
+
assert_equal 0, m.cam.y
|
14
|
+
m = Map.new 25, 17, 49, 133
|
15
|
+
assert_equal 25, m.tile_size.x
|
16
|
+
assert_equal 17, m.tile_size.y
|
17
|
+
assert_equal 49, m.size.x
|
18
|
+
assert_equal 133, m.size.y
|
19
|
+
assert_equal 0, m.cam.x
|
20
|
+
assert_equal 0, m.cam.y
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_absolute_size
|
24
|
+
m = Map.new 16, 16, 300, 200
|
25
|
+
v = m.get_absolute_size
|
26
|
+
assert_equal 300 * 16, v.x
|
27
|
+
assert_equal 200 * 16, v.y
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_center
|
31
|
+
m = Map.new 16, 16, 300, 200
|
32
|
+
v = m.get_center
|
33
|
+
assert_equal 300 * 16 / 2, v.x
|
34
|
+
assert_equal 200 * 16 / 2, v.y
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_screen_pos
|
38
|
+
m = Map.new 16, 16, 300, 200
|
39
|
+
v = m.get_screen_pos 8, 5
|
40
|
+
assert_equal 8 * 16, v.x
|
41
|
+
assert_equal 5 * 16, v.y
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_map_pos
|
45
|
+
m = Map.new 16, 16, 300, 200
|
46
|
+
v = m.get_map_pos 410, 300
|
47
|
+
assert_equal 25, v.x
|
48
|
+
assert_equal 18, v.y
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_in_map
|
52
|
+
m = Map.new 16, 16, 300, 200
|
53
|
+
assert m.is_in_map(Vector.new 30, 20)
|
54
|
+
assert m.is_in_map(Vector.new 299, 199)
|
55
|
+
assert !m.is_in_map(Vector.new 300, 200)
|
56
|
+
end
|
57
|
+
end
|
data/test/mov_game.rb
CHANGED
@@ -1,77 +1,77 @@
|
|
1
|
-
require 'gosu'
|
2
|
-
require_relative '../lib/minigl'
|
3
|
-
include MiniGL
|
4
|
-
|
5
|
-
class MyGame < GameWindow
|
6
|
-
def initialize
|
7
|
-
super 800, 600, false
|
8
|
-
|
9
|
-
@obj = GameObject.new(0, 0, 50, 50, :square)
|
10
|
-
@obj2 = GameObject.new(100, 0, 50, 50, :square2)
|
11
|
-
|
12
|
-
@obsts = [
|
13
|
-
Block.new(0, 600, 800, 1, false),
|
14
|
-
Block.new(-1, 0, 1, 600, false),
|
15
|
-
Block.new(800, 0, 1, 600, false),
|
16
|
-
Block.new(300, 430, 50, 50),
|
17
|
-
# Block.new(375, 550, 50, 50, true),
|
18
|
-
# Block.new(150, 200, 20, 300, false),
|
19
|
-
# Block.new(220, 300, 100, 20, true),
|
20
|
-
# Block.new(485, 490, 127, 10, false),
|
21
|
-
]
|
22
|
-
@ramps = [
|
23
|
-
Ramp.new(200, 550, 200, 50, true),
|
24
|
-
Ramp.new(0, 200, 150, 300, false),
|
25
|
-
Ramp.new(150, 500, 150, 100, false),
|
26
|
-
Ramp.new(500, 500, 150, 100, true),
|
27
|
-
Ramp.new(650, 300, 150, 200, true),
|
28
|
-
Ramp.new(650, 500, 150, 100, true),
|
29
|
-
]
|
30
|
-
|
31
|
-
# @cycle = [Vector.new(100, 530), Vector.new(650, 500)]
|
32
|
-
# @cyc_obj = GameObject.new(@cycle[0].x, @cycle[0].y, 50, 50, :square)
|
33
|
-
# @cyc_obj.instance_eval('@passable = true')
|
34
|
-
# @obsts.push @cyc_obj
|
35
|
-
end
|
36
|
-
|
37
|
-
def update
|
38
|
-
KB.update
|
39
|
-
|
40
|
-
forces = Vector.new(0, 0)
|
41
|
-
if @obj.bottom
|
42
|
-
forces.y -= 15 if KB.key_pressed?(Gosu::KbSpace)
|
43
|
-
forces.x -= 0.5 if KB.key_down?(Gosu::KbLeft)
|
44
|
-
forces.x += 0.5 if KB.key_down?(Gosu::KbRight)
|
45
|
-
forces.x -= @obj.speed.x * 0.1
|
46
|
-
else
|
47
|
-
forces.x -= 0.2 if KB.key_down?(Gosu::KbLeft)
|
48
|
-
forces.x += 0.2 if KB.key_down?(Gosu::KbRight)
|
49
|
-
end
|
50
|
-
@obj.move(forces, @obsts, @ramps)
|
51
|
-
|
52
|
-
speed = Vector.new(0, 0)
|
53
|
-
speed.y -= 3 if KB.key_down? Gosu::KbW
|
54
|
-
speed.y += 3 if KB.key_down? Gosu::KbS
|
55
|
-
speed.x -= 3 if KB.key_down? Gosu::KbA
|
56
|
-
speed.x += 3 if KB.key_down? Gosu::KbD
|
57
|
-
@obj2.move(speed, @obsts, @ramps, true)
|
58
|
-
end
|
59
|
-
|
60
|
-
def draw
|
61
|
-
@obj.draw
|
62
|
-
@obj2.draw
|
63
|
-
@obsts.each do |o|
|
64
|
-
draw_quad o.x, o.y, 0xffffffff,
|
65
|
-
o.x + o.w, o.y, 0xffffffff,
|
66
|
-
o.x + o.w, o.y + o.h, 0xffffffff,
|
67
|
-
o.x, o.y + o.h, 0xffffffff, 0
|
68
|
-
end
|
69
|
-
@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
|
73
|
-
end
|
74
|
-
end
|
75
|
-
end
|
76
|
-
|
1
|
+
require 'gosu'
|
2
|
+
require_relative '../lib/minigl'
|
3
|
+
include MiniGL
|
4
|
+
|
5
|
+
class MyGame < GameWindow
|
6
|
+
def initialize
|
7
|
+
super 800, 600, false
|
8
|
+
|
9
|
+
@obj = GameObject.new(0, 0, 50, 50, :square)
|
10
|
+
@obj2 = GameObject.new(100, 0, 50, 50, :square2)
|
11
|
+
|
12
|
+
@obsts = [
|
13
|
+
Block.new(0, 600, 800, 1, false),
|
14
|
+
Block.new(-1, 0, 1, 600, false),
|
15
|
+
Block.new(800, 0, 1, 600, false),
|
16
|
+
Block.new(300, 430, 50, 50),
|
17
|
+
# Block.new(375, 550, 50, 50, true),
|
18
|
+
# Block.new(150, 200, 20, 300, false),
|
19
|
+
# Block.new(220, 300, 100, 20, true),
|
20
|
+
# Block.new(485, 490, 127, 10, false),
|
21
|
+
]
|
22
|
+
@ramps = [
|
23
|
+
Ramp.new(200, 550, 200, 50, true),
|
24
|
+
Ramp.new(0, 200, 150, 300, false),
|
25
|
+
Ramp.new(150, 500, 150, 100, false),
|
26
|
+
Ramp.new(500, 500, 150, 100, true),
|
27
|
+
Ramp.new(650, 300, 150, 200, true),
|
28
|
+
Ramp.new(650, 500, 150, 100, true),
|
29
|
+
]
|
30
|
+
|
31
|
+
# @cycle = [Vector.new(100, 530), Vector.new(650, 500)]
|
32
|
+
# @cyc_obj = GameObject.new(@cycle[0].x, @cycle[0].y, 50, 50, :square)
|
33
|
+
# @cyc_obj.instance_eval('@passable = true')
|
34
|
+
# @obsts.push @cyc_obj
|
35
|
+
end
|
36
|
+
|
37
|
+
def update
|
38
|
+
KB.update
|
39
|
+
|
40
|
+
forces = Vector.new(0, 0)
|
41
|
+
if @obj.bottom
|
42
|
+
forces.y -= 15 if KB.key_pressed?(Gosu::KbSpace)
|
43
|
+
forces.x -= 0.5 if KB.key_down?(Gosu::KbLeft)
|
44
|
+
forces.x += 0.5 if KB.key_down?(Gosu::KbRight)
|
45
|
+
forces.x -= @obj.speed.x * 0.1
|
46
|
+
else
|
47
|
+
forces.x -= 0.2 if KB.key_down?(Gosu::KbLeft)
|
48
|
+
forces.x += 0.2 if KB.key_down?(Gosu::KbRight)
|
49
|
+
end
|
50
|
+
@obj.move(forces, @obsts, @ramps)
|
51
|
+
|
52
|
+
speed = Vector.new(0, 0)
|
53
|
+
speed.y -= 3 if KB.key_down? Gosu::KbW
|
54
|
+
speed.y += 3 if KB.key_down? Gosu::KbS
|
55
|
+
speed.x -= 3 if KB.key_down? Gosu::KbA
|
56
|
+
speed.x += 3 if KB.key_down? Gosu::KbD
|
57
|
+
@obj2.move(speed, @obsts, @ramps, true)
|
58
|
+
end
|
59
|
+
|
60
|
+
def draw
|
61
|
+
@obj.draw
|
62
|
+
@obj2.draw
|
63
|
+
@obsts.each do |o|
|
64
|
+
draw_quad o.x, o.y, 0xffffffff,
|
65
|
+
o.x + o.w, o.y, 0xffffffff,
|
66
|
+
o.x + o.w, o.y + o.h, 0xffffffff,
|
67
|
+
o.x, o.y + o.h, 0xffffffff, 0
|
68
|
+
end
|
69
|
+
@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
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
77
|
MyGame.new.show
|