59 lines
1.2 KiB
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
|