72 lines
1.5 KiB
Lua
72 lines
1.5 KiB
Lua
require "/scripts/vec2.lua"
|
|
require "/scripts/poly.lua"
|
|
|
|
function init()
|
|
self.cycle = 0
|
|
self.dir = 0
|
|
self.platformStart = config.getParameter("platformStart")
|
|
self.platformEnd = config.getParameter("platformEnd")
|
|
self.platformMoveTime = config.getParameter("platformMoveTime")
|
|
end
|
|
|
|
function getMode()
|
|
if not object.isInputNodeConnected(0) then
|
|
return "bounce"
|
|
elseif object.getInputNodeLevel(0) then
|
|
return "toend"
|
|
else
|
|
return "tostart"
|
|
end
|
|
end
|
|
|
|
function update()
|
|
local mode = getMode()
|
|
|
|
local cycle = self.cycle
|
|
local dir = self.dir
|
|
|
|
if mode == "tostart" then
|
|
if cycle > 0.0 then
|
|
dir = -1
|
|
else
|
|
dir = 0
|
|
end
|
|
elseif mode == "toend" then
|
|
if cycle < 1.0 then
|
|
dir = 1
|
|
else
|
|
dir = 0
|
|
end
|
|
else
|
|
if dir == 0 then
|
|
dir = 1
|
|
end
|
|
|
|
if cycle == 1.0 then
|
|
dir = -1
|
|
elseif cycle == 0.0 then
|
|
dir = 1
|
|
end
|
|
end
|
|
|
|
cycle = cycle + script.updateDt() / self.platformMoveTime * self.dir
|
|
cycle = math.min(math.max(cycle, 0.0), 1.0)
|
|
|
|
if dir == 0 then
|
|
animator.setAnimationState("moving", "off")
|
|
else
|
|
animator.setAnimationState("moving", "on")
|
|
end
|
|
|
|
local pos = vec2.add(vec2.mul(self.platformStart, 1.0 - cycle), vec2.mul(self.platformEnd, cycle))
|
|
physics.setCollisionPosition("platform", pos)
|
|
animator.resetTransformationGroup("platform")
|
|
animator.translateTransformationGroup("platform", pos)
|
|
|
|
if dir ~= self.dir then
|
|
animator.playSound("changeDir")
|
|
end
|
|
|
|
self.cycle = cycle
|
|
self.dir = dir
|
|
end
|