feat(tweens): add a timer system to the tween manager

This commit is contained in:
Kazhnuz 2019-08-18 16:46:07 +02:00
parent 9633973792
commit 6c81408126
2 changed files with 28 additions and 7 deletions

View file

@ -27,6 +27,7 @@ function Timer:new(actor, name, t)
self.time = t self.time = t
self.actor = actor self.actor = actor
self.name = name self.name = name
core.debug:print("timer", "timer " .. self.name .. "created")
end end
function Timer:update(dt) function Timer:update(dt)
@ -37,6 +38,7 @@ function Timer:update(dt)
end end
function Timer:finish() function Timer:finish()
core.debug:print("timer", "timer " .. self.name .. "finished, sending response")
self.actor:timerResponse(self.name) self.actor:timerResponse(self.name)
self.actor.timers[self.name] = nil self.actor.timers[self.name] = nil
end end

View file

@ -1,46 +1,53 @@
local TweenManager = Object:extend() local TweenManager = Object:extend()
local tween = require "game.modules.tweenmanager.libs.tween" local tween = require "game.modules.tweenmanager.libs.tween"
local Timer = require "core.modules.world.actors.utils.timer"
function TweenManager:new(subject) function TweenManager:new(subject)
self.subject = subject self.subject = subject
self.timer = 0 self.time = 0
self.tweens = {} self.tweens = {}
self.switches = {} self.switches = {}
self.timers = {}
end end
function TweenManager:newTween(start, duration, target, easing) function TweenManager:newTween(start, duration, target, easing)
local newTween = {} local newTween = {}
-- we add the data into a tween wrapper -- we add the data into a tween wrapper
newTween.tween = tween.new(duration, self.subject, target, easing) newTween.tween = tween.new(duration, self.subject, target, easing)
newTween.start = self.timer + start -- /!\ START IS RELATIVE TO CURRENT TIME newTween.start = self.time + start -- /!\ START IS RELATIVE TO CURRENT TIME
newTween.clear = newTween.start + duration newTween.clear = newTween.start + duration
table.insert(self.tweens, newTween) table.insert(self.tweens, newTween)
end end
function TweenManager:newTimer(start, name)
self.timers[name] = Timer(self, name, start)
end
function TweenManager:newSwitch(start, bools) function TweenManager:newSwitch(start, bools)
local newSwitch = {} local newSwitch = {}
-- we add the data into a tween wrapper -- we add the data into a tween wrapper
newSwitch.bools = bools newSwitch.bools = bools
newSwitch.start = self.timer + start -- /!\ START IS RELATIVE TO CURRENT TIME newSwitch.start = self.time + start -- /!\ START IS RELATIVE TO CURRENT TIME
newSwitch.clear = newSwitch.start + 1 newSwitch.clear = newSwitch.start + 1
table.insert(self.switches, newSwitch) table.insert(self.switches, newSwitch)
end end
function TweenManager:update(dt) function TweenManager:update(dt)
self.timer = self.timer + dt self.time = self.time + dt
for i, tweenWrapper in ipairs(self.tweens) do for i, tweenWrapper in ipairs(self.tweens) do
if (self.timer > tweenWrapper.start) then if (self.time > tweenWrapper.start) then
tweenWrapper.tween:update(dt) tweenWrapper.tween:update(dt)
end end
end end
for i, switch in ipairs(self.switches) do for i, switch in ipairs(self.switches) do
if (self.timer > switch.start) then if (self.time > switch.start) then
-- We test each boolean in the switch -- We test each boolean in the switch
for i, bool in ipairs(switch.bools) do for i, bool in ipairs(switch.bools) do
-- if it's nil, we set it to true -- if it's nil, we set it to true
@ -55,12 +62,24 @@ function TweenManager:update(dt)
end end
end end
for k, timer in pairs(self.timers) do
timer:update(dt)
end
self:clearEndedTweens() self:clearEndedTweens()
end end
function TweenManager:timerResponse(timername)
if self.subject.timerResponse == nil then
core.debug:warning("tweenmanager", "the subject have no timerResponse function")
return 0
end
self.subject:timerResponse(timername)
end
function TweenManager:clearEndedTweens(dt) function TweenManager:clearEndedTweens(dt)
for i, tweenWrapper in ipairs(self.tweens) do for i, tweenWrapper in ipairs(self.tweens) do
if (self.timer > tweenWrapper.clear) then if (self.time > tweenWrapper.clear) then
table.remove(self.tweens, i) table.remove(self.tweens, i)
end end
end end