implement character:die()
This commit is contained in:
parent
7ff7e47a90
commit
e088fddf48
@ -11,6 +11,11 @@ behavior.id = "behavior"
|
|||||||
|
|
||||||
function behavior.new() return setmetatable({}, behavior) end
|
function behavior.new() return setmetatable({}, behavior) end
|
||||||
|
|
||||||
|
--- это деструктор с крутым названием
|
||||||
|
function behavior:die()
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
function behavior:update(dt) end
|
function behavior:update(dt) end
|
||||||
|
|
||||||
function behavior:draw() end
|
function behavior:draw() end
|
||||||
|
|||||||
@ -80,6 +80,18 @@ function character:addBehavior(behaviors)
|
|||||||
return self
|
return self
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--- Добавляет персонажа в очередь на удаление.
|
||||||
|
--- В конце фрейма он умирает. Ужасной смертью.
|
||||||
|
---
|
||||||
|
--- Ещё этот метод должен освобождать ресурсы в поведениях. Мы против утечек памяти!
|
||||||
|
function character:die()
|
||||||
|
for _, b in ipairs(self.behaviors) do
|
||||||
|
if b.die then b:die() end
|
||||||
|
end
|
||||||
|
|
||||||
|
table.insert(Tree.level.deadIds, self.id)
|
||||||
|
end
|
||||||
|
|
||||||
function character:update(dt)
|
function character:update(dt)
|
||||||
for _, b in ipairs(self.behaviors) do
|
for _, b in ipairs(self.behaviors) do
|
||||||
if b.update then b:update(dt) end
|
if b.update then b:update(dt) end
|
||||||
|
|||||||
@ -3,6 +3,7 @@ local utils = require "lib.utils.utils"
|
|||||||
--- @class Level
|
--- @class Level
|
||||||
--- @field size Vec3
|
--- @field size Vec3
|
||||||
--- @field characters Character[]
|
--- @field characters Character[]
|
||||||
|
--- @field deadIds Id[]
|
||||||
--- @field characterGrid CharacterGrid
|
--- @field characterGrid CharacterGrid
|
||||||
--- @field lightGrid LightGrid
|
--- @field lightGrid LightGrid
|
||||||
--- @field selector Selector
|
--- @field selector Selector
|
||||||
@ -21,6 +22,7 @@ local function new(type, template)
|
|||||||
return setmetatable({
|
return setmetatable({
|
||||||
size = size,
|
size = size,
|
||||||
characters = {},
|
characters = {},
|
||||||
|
deadIds = {},
|
||||||
characterGrid = (require "lib.level.grid.character_grid").new(),
|
characterGrid = (require "lib.level.grid.character_grid").new(),
|
||||||
lightGrid = (require "lib.level.grid.light_grid").new(),
|
lightGrid = (require "lib.level.grid.light_grid").new(),
|
||||||
tileGrid = (require "lib.level.grid.tile_grid").new(type, template, size),
|
tileGrid = (require "lib.level.grid.tile_grid").new(type, template, size),
|
||||||
@ -33,6 +35,11 @@ local function new(type, template)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function level:update(dt)
|
function level:update(dt)
|
||||||
|
utils.each(self.deadIds, function(id)
|
||||||
|
self.characters[id] = nil
|
||||||
|
end)
|
||||||
|
self.deadIds = {}
|
||||||
|
|
||||||
self.characterGrid:reload()
|
self.characterGrid:reload()
|
||||||
self.lightGrid:reload()
|
self.lightGrid:reload()
|
||||||
utils.each(self.characters, function(el)
|
utils.each(self.characters, function(el)
|
||||||
|
|||||||
7
main.lua
7
main.lua
@ -61,6 +61,13 @@ function love.update(dt)
|
|||||||
|
|
||||||
Tree.controls:cache()
|
Tree.controls:cache()
|
||||||
|
|
||||||
|
if t1 > 2 then
|
||||||
|
local foodor = Tree.level.characters[1]
|
||||||
|
if not foodor then return end
|
||||||
|
print("Killing Foodor")
|
||||||
|
foodor:die()
|
||||||
|
end
|
||||||
|
|
||||||
local t2 = love.timer.getTime()
|
local t2 = love.timer.getTime()
|
||||||
lt = string.format("%.3f", (t2 - t1) * 1000)
|
lt = string.format("%.3f", (t2 - t1) * 1000)
|
||||||
end
|
end
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user