refactor behavior tree def & removed dependencies from behavior logic
This commit is contained in:
parent
ab95eadc27
commit
0db8fc5239
@ -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
|
||||
|
||||
|
||||
@ -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
|
||||
--- Скорость между кадрами в анимации
|
||||
@ -62,10 +61,10 @@ function sprite:play(state, loop)
|
||||
return print("[SpriteBehavior]: no animation for '" .. state .. "'")
|
||||
end
|
||||
self.animationTable[state] = anim8.newAnimation(self.animationGrid[state], self.ANIMATION_SPEED,
|
||||
type(loop) == "function" and loop or
|
||||
function()
|
||||
if not loop then self:play("idle", true) end
|
||||
end)
|
||||
type(loop) == "function" and loop or
|
||||
function()
|
||||
if not loop then self:play("idle", true) end
|
||||
end)
|
||||
self.state = state
|
||||
end
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
18
lib/tree.lua
18
lib/tree.lua
@ -3,15 +3,15 @@
|
||||
--- В love.update обновлять, в love.draw читать
|
||||
|
||||
|
||||
Tree = {
|
||||
Tree = {
|
||||
assets = (require "lib.utils.asset_bundle"):load()
|
||||
}
|
||||
Tree.panning = require "lib/panning"
|
||||
Tree.controls = require "lib.controls"
|
||||
Tree.level = (require "lib.level.level").new("procedural", "flower_plains") -- для теста у нас только один уровень, который сразу же загружен
|
||||
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"
|
||||
|
||||
13
lib/utils/behavior_loader.lua
Normal file
13
lib/utils/behavior_loader.lua
Normal 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
|
||||
4
main.lua
4
main.lua
@ -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
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user