Starbound/assets/devel/objects/movingplatforms/movingplatform.lua
2025-03-21 22:23:30 +11:00

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