refactor behavior tree def & removed dependencies from behavior logic

This commit is contained in:
neckrat 2025-10-13 22:48:38 +03:00
parent ab95eadc27
commit 0db8fc5239
6 changed files with 36 additions and 26 deletions

View File

@ -2,14 +2,12 @@
--- @class Behavior
--- @field id string
--- @field owner Character
--- @field dependencies Behavior[]
--- @field new fun(...) : self
--- @field update fun(self, dt): nil
--- @field draw fun(self): nil
local behavior = {}
behavior.__index = behavior
behavior.id = "behavior"
behavior.dependencies = {}
function behavior.new() return setmetatable({}, behavior) end

View File

@ -8,7 +8,6 @@ local anim8 = require "lib.utils.anim8"
local sprite = {}
sprite.__index = sprite
sprite.id = "sprite"
sprite.dependencies = { Tree.behaviors.map }
sprite.LEFT = -1
sprite.RIGHT = 1
--- Скорость между кадрами в анимации

View File

@ -76,14 +76,14 @@ end
--- @return Character | nil
function character:addBehavior(behaviors)
for _, b in ipairs(behaviors) do
if b.dependencies then
for _, dep in ipairs(b.dependencies) do
if not self:has(dep) then
return print("[Character]: cannot add \"" .. b.id ..
"\" for a character (Id = " .. self.id .. "): needs \"" .. dep.id .. "\"!")
end
end
end
-- if b.dependencies then
-- for _, dep in ipairs(b.dependencies) do
-- if not self:has(dep) then
-- return print("[Character]: cannot add \"" .. b.id ..
-- "\" for a character (Id = " .. self.id .. "): needs \"" .. dep.id .. "\"!")
-- end
-- end
-- end
b.owner = self
table.insert(self.behaviors, b)
self._behaviorsIdx[b.id] = #self.behaviors

View File

@ -10,8 +10,8 @@ Tree.panning = require "lib/panning"
Tree.controls = require "lib.controls"
Tree.level = (require "lib.level.level").new("procedural", "flower_plains") -- для теста у нас только один уровень, который сразу же загружен
Tree.behaviors = {} --- @todo написать нормальную загрузку поведений
Tree.behaviors.map = require "lib.character.behaviors.map"
Tree.behaviors.spellcaster = require "lib.character.behaviors.spellcaster"
Tree.behaviors.sprite = require "lib.character.behaviors.sprite"
Tree.behaviors.stats = require "lib.character.behaviors.stats"
Tree.behaviors = (require "lib.utils.behavior_loader")("lib/character/behaviors") --- @todo написать нормальную загрузку поведений
-- Tree.behaviors.map = require "lib.character.behaviors.map"
-- Tree.behaviors.spellcaster = require "lib.character.behaviors.spellcaster"
-- Tree.behaviors.sprite = require "lib.character.behaviors.sprite"
-- Tree.behaviors.stats = require "lib.character.behaviors.stats"

View File

@ -0,0 +1,13 @@
local function load(path)
local behaviors = {}
for _, b in ipairs(love.filesystem.getDirectoryItems(path)) do
b = string.gsub(b, ".lua", "")
local bpath = path .. "/" .. b
behaviors[b] = require(bpath)
print(behaviors[b], b)
end
behaviors.behavior = nil
return behaviors
end
return load

View File

@ -10,8 +10,8 @@ function love.conf(t)
end
function love.load()
character.spawn("Hero", Tree.assets.files.sprites.character)
character.spawn("Hero", Tree.assets.files.sprites.character, Vec3 { 3, 3 })
character.spawn("Foodor", Tree.assets.files.sprites.character)
character.spawn("Baris", Tree.assets.files.sprites.character, Vec3 { 3, 3 })
love.window.setMode(1080, 720, { resizable = true, msaa = 4, vsync = true })
end