-
Notifications
You must be signed in to change notification settings - Fork 2
/
conveyors.rb
77 lines (60 loc) · 2.01 KB
/
conveyors.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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
70
71
72
73
74
75
76
require_relative 'game_object'
class Conveyor < GameObject
SPEED = 30.0 # Pixels/second
IMAGE = image_path("conveyor.png")
def to_rect; Rect.new(*(@position - [4, 3]), 8, 6) end
def initialize(map, tile, position)
sprite = sprite IMAGE, at: position.to_vector2 + [tile.grid_position.y * 3, 0]
super(map.scene, sprite, position)
@scroll_rect = Rect.new(0, 0, *@sprite.image.size)
init_sprite
tile.push_velocity = direction * SPEED
end
def collide?; false; end # Never actually touched, but asks the tile underneath it to do the pushing.
def z_order
Player::Z_ORDER_SQUASHED - 1
end
def update
@scroll_rect.y = scene.timer.elapsed * SPEED
@sprite.sub_rect = @scroll_rect
end
end
# Pushes player to the left (up on the screen)
class LeftConveyor < Conveyor
def direction; Vector2[0, -1]; end
def init_sprite
@sprite.origin = Vector2[@sprite.image.width / 2, @sprite.image.height / 2] + [1.5, 0]
@sprite.scale_y = 0.75
@sprite.skew_x(FloorTile::SKEW * 0.75)
end
end
# Pushes player to the right (down on the screen)
class RightConveyor < Conveyor
def direction; Vector2[0, 1]; end
def init_sprite
@sprite.origin = Vector2[@sprite.image.width / 2, @sprite.image.height / 2] + [1.5, 0]
@sprite.angle = 180
@sprite.scale_y = 0.75
@sprite.skew_x(FloorTile::SKEW * 0.75)
end
end
# Pushes player forward (faster) (right on the screen)
class ForwardConveyor < Conveyor
def direction; Vector2[1, 0]; end
def init_sprite
@sprite.origin = Vector2[@sprite.image.width / 2, @sprite.image.height / 2] + [0, -1.5]
@sprite.angle = 90
@sprite.scale_x = 0.75
@sprite.skew_y(FloorTile::SKEW * -0.75)
end
end
# Pushes player backwards (slower) (left on the screen)
class BackwardConveyor < Conveyor
def direction; Vector2[-1, 0]; end
def init_sprite
@sprite.origin = Vector2[@sprite.image.width / 2, @sprite.image.height / 2] + [0, -1.5]
@sprite.angle = 270
@sprite.scale_x = 0.75
@sprite.skew_y(FloorTile::SKEW * -0.75)
end
end