diff --git a/obj/Area.lua b/obj/Area.lua index fb23b48..eac750a 100644 --- a/obj/Area.lua +++ b/obj/Area.lua @@ -16,9 +16,14 @@ end ---Updates area ---@param dt number function Area:update(dt) - for i, game_object in ipairs(self.game_objects) do - if game_object:isDead() then table.remove(self.game_objects, i) end + for i = #self.game_objects, 1, -1 do + local game_object = self.game_objects[i] + game_object:update(dt) + + if game_object:isDead() then + table.remove(self.game_objects, i) + end end end diff --git a/obj/GameObject.lua b/obj/GameObject.lua index 4cadefb..06c9540 100644 --- a/obj/GameObject.lua +++ b/obj/GameObject.lua @@ -18,6 +18,7 @@ function GameObject:new(area, x, y, opts) self.id = UUID() self.dead = false self.timer = Timer() + self.collider = nil end ---Updates game object @@ -36,6 +37,10 @@ function GameObject:destroy() self.timer:clear() -- cancel all tweens/after/every self.timer = nil end + if self.collider then + self.area.world:remove(self.collider) + self.collider = nil + end self.dead = true end diff --git a/obj/game/Player.lua b/obj/game/Player.lua index 7b1f52f..0b33434 100644 --- a/obj/game/Player.lua +++ b/obj/game/Player.lua @@ -25,6 +25,7 @@ end function Player:update(dt) Player.super.update(self, dt) + if self:isDead() then return end -- controls if input:down('left') then self.r = self.r - self.rv*dt end @@ -41,6 +42,8 @@ function Player:update(dt) -- move collision area self.collider:moveTo(self.x, self.y) + + if input:pressed('f2') then self:kill() end end function Player:draw()