bytepath/obj/GameObject.lua

59 lines
1.2 KiB
Lua

---@module 'obj/GameObject'
---@class GameObject:Object
---@field area Area
---@field x number
---@field y number
---@field opts table|nil
---@field super GameObject
local GameObject = Object:extend()
---Instantiates game object
function GameObject:new(area, x, y, opts)
if opts then for k,v in pairs(opts) do self[k] = v end end
self.area = area
self.x = x
self.y = y
self.id = UUID()
self.dead = false
self.timer = Timer()
self.collider = nil
end
---Updates game object
---@param dt number
function GameObject:update(dt)
if self.timer then self.timer:update(dt) end
end
---Draw game object
function GameObject:draw() end
---Mark object for destruction
---@protected
function GameObject:destroy()
if self.timer then
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
---Returns whether object is marked for destruction
---@return boolean
function GameObject:isDead()
return self.dead == true
end
---Kill object (meant to be overridden)
---**default behavior:** self:destroy()
function GameObject:kill()
self:destroy()
end
return GameObject