-
Notifications
You must be signed in to change notification settings - Fork 0
/
door.lua
73 lines (65 loc) · 1.6 KB
/
door.lua
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
local Colors = require 'colors'
local Geom = require 'geom'
local Particles = require 'particles'
local Door = {
position = { x = 0, y = 0 },
radius = 24,
isOpen = false,
destination = 1,
color = nil,
Event = {
NONE = 0,
ENTER = 1,
},
Colors = {
NONE = 0,
BLUE = 1,
},
_startTime = 0,
}
function Door:new(p)
p = p or {}
setmetatable(p, { __index = self })
return p
end
function Door:draw(palette)
if self._startTime == 0 then
self._startTime = love.timer.getTime()
end
love.graphics.push('all')
love.graphics.translate(self.position.x, self.position.y)
Colors.useColor(palette, Colors.Value.DOOR)
local time = love.timer.getTime() - self._startTime
love.graphics.rotate(time * 6)
love.graphics.setLineWidth(2)
love.graphics.circle('line', 0, 0, self.radius, 3)
if self.isOpen then
if self.color == self.Colors.BLUE then
love.graphics.setColor(122 / 255, 243 / 255, 236 / 255, 1)
else
love.graphics.setColor(1, 1, 1, 1)
end
love.graphics.rotate(time * 0.5)
love.graphics.circle('line', 0, 0, self.radius * 0.8, 3)
else
end
love.graphics.pop()
end
function Door:open()
self.isOpen = true
Particles:doorOpened(self)
end
function Door:interactWith(craft)
if self.isOpen and self:_intersects(craft.position.x, craft.position.y) then
return self.Event.ENTER
end
return self.Event.NONE
end
function Door:_intersects(x, y)
local distance = Geom.distance(
self.position.x, self.position.y,
x, y
)
return distance <= self.radius
end
return Door