56 lines
1.6 KiB
Lua
56 lines
1.6 KiB
Lua
require "/scripts/vec2.lua"
|
|
|
|
function init()
|
|
self.inputPosition = config.getParameter("inputPosition")
|
|
self.outputPosition = config.getParameter("outputPosition")
|
|
|
|
if object.direction() < 0 then
|
|
self.inputPosition, self.outputPosition = self.outputPosition, self.inputPosition
|
|
end
|
|
|
|
local pos = entity.position()
|
|
self.inputPosition = vec2.add(vec2.add(self.inputPosition, pos), {0.5, 0.5})
|
|
self.outputPosition = vec2.add(vec2.add(self.outputPosition, pos), {0.5, 0.5})
|
|
|
|
self.pumpTimer = 0
|
|
self.pumpFrequency = config.getParameter("pumpFrequency", 0.25)
|
|
|
|
storage.pumping = storage.pumping or false
|
|
end
|
|
|
|
function update(dt)
|
|
-- world.debugPoint(self.inputPosition, "blue")
|
|
-- world.debugPoint(self.outputPosition, "green")
|
|
|
|
if object.isInputNodeConnected(0) then
|
|
object.setInteractive(false)
|
|
storage.pumping = object.getInputNodeLevel(0)
|
|
else
|
|
object.setInteractive(true)
|
|
end
|
|
|
|
local pumpAnimationState = storage.pumping and ((world.liquidAt(self.inputPosition) and not world.pointCollision(self.outputPosition)) and "pump" or "error") or "idle"
|
|
animator.setAnimationState("pumping", pumpAnimationState)
|
|
|
|
self.pumpTimer = math.max(0, self.pumpTimer - dt)
|
|
if storage.pumping and self.pumpTimer == 0 then
|
|
pump()
|
|
self.pumpTimer = self.pumpFrequency
|
|
end
|
|
end
|
|
|
|
function onInteraction(args)
|
|
storage.pumping = not storage.pumping
|
|
end
|
|
|
|
function uninit()
|
|
|
|
end
|
|
|
|
function pump()
|
|
local liquid = world.liquidAt(self.inputPosition)
|
|
if liquid and not world.pointCollision(self.outputPosition) then
|
|
world.destroyLiquid(self.inputPosition)
|
|
world.spawnLiquid(self.outputPosition, table.unpack(liquid))
|
|
end
|
|
end
|