diff --git a/flux.lua b/flux.lua index bcc92bd..179e9d1 100644 --- a/flux.lua +++ b/flux.lua @@ -147,27 +147,33 @@ end function flux:update(deltatime) for i = #self, 1, -1 do local t = self[i] - if t._delay > 0 then - t._delay = t._delay - deltatime - else - if not t.inited then - flux.clear(self, t.obj, t.vars) - t:init() - end - if t._onstart then - t._onstart() - t._onstart = nil - end - t.progress = t.progress + t.rate * deltatime - local p = t.progress - local x = p >= 1 and 1 or flux.easing[t._ease](p) - for k, v in pairs(t.vars) do - t.obj[k] = v.start + x * v.diff - end - if t._onupdate then t._onupdate() end - if p >= 1 then - flux.remove(self, i) - if t._oncomplete then t._oncomplete() end + if t then + if t._delay > 0 then + t._delay = t._delay - deltatime + else + if not t.inited then + flux.clear(self, t.obj, t.vars) + t:init() + end + if t._onstart then + t._onstart() + t._onstart = nil + end + t.progress = t.progress + t.rate * deltatime + local p = t.progress + local x = p >= 1 and 1 or flux.easing[t._ease](p) + for k, v in pairs(t.vars) do + t.obj[k] = v.start + x * v.diff + end + if t._onupdate then t._onupdate() end + if p >= 1 then + if self[i] == t then + flux.remove(self, i) + else + flux.remove(self, t) + end + if t._oncomplete then t._oncomplete() end + end end end end