refactor behavior tree def & removed dependencies from behavior logic
This commit is contained in:
parent
ab95eadc27
commit
0db8fc5239
@ -2,14 +2,12 @@
|
|||||||
--- @class Behavior
|
--- @class Behavior
|
||||||
--- @field id string
|
--- @field id string
|
||||||
--- @field owner Character
|
--- @field owner Character
|
||||||
--- @field dependencies Behavior[]
|
|
||||||
--- @field new fun(...) : self
|
--- @field new fun(...) : self
|
||||||
--- @field update fun(self, dt): nil
|
--- @field update fun(self, dt): nil
|
||||||
--- @field draw fun(self): nil
|
--- @field draw fun(self): nil
|
||||||
local behavior = {}
|
local behavior = {}
|
||||||
behavior.__index = behavior
|
behavior.__index = behavior
|
||||||
behavior.id = "behavior"
|
behavior.id = "behavior"
|
||||||
behavior.dependencies = {}
|
|
||||||
|
|
||||||
function behavior.new() return setmetatable({}, behavior) end
|
function behavior.new() return setmetatable({}, behavior) end
|
||||||
|
|
||||||
|
|||||||
@ -8,7 +8,6 @@ local anim8 = require "lib.utils.anim8"
|
|||||||
local sprite = {}
|
local sprite = {}
|
||||||
sprite.__index = sprite
|
sprite.__index = sprite
|
||||||
sprite.id = "sprite"
|
sprite.id = "sprite"
|
||||||
sprite.dependencies = { Tree.behaviors.map }
|
|
||||||
sprite.LEFT = -1
|
sprite.LEFT = -1
|
||||||
sprite.RIGHT = 1
|
sprite.RIGHT = 1
|
||||||
--- Скорость между кадрами в анимации
|
--- Скорость между кадрами в анимации
|
||||||
@ -62,10 +61,10 @@ function sprite:play(state, loop)
|
|||||||
return print("[SpriteBehavior]: no animation for '" .. state .. "'")
|
return print("[SpriteBehavior]: no animation for '" .. state .. "'")
|
||||||
end
|
end
|
||||||
self.animationTable[state] = anim8.newAnimation(self.animationGrid[state], self.ANIMATION_SPEED,
|
self.animationTable[state] = anim8.newAnimation(self.animationGrid[state], self.ANIMATION_SPEED,
|
||||||
type(loop) == "function" and loop or
|
type(loop) == "function" and loop or
|
||||||
function()
|
function()
|
||||||
if not loop then self:play("idle", true) end
|
if not loop then self:play("idle", true) end
|
||||||
end)
|
end)
|
||||||
self.state = state
|
self.state = state
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@ -76,14 +76,14 @@ end
|
|||||||
--- @return Character | nil
|
--- @return Character | nil
|
||||||
function character:addBehavior(behaviors)
|
function character:addBehavior(behaviors)
|
||||||
for _, b in ipairs(behaviors) do
|
for _, b in ipairs(behaviors) do
|
||||||
if b.dependencies then
|
-- if b.dependencies then
|
||||||
for _, dep in ipairs(b.dependencies) do
|
-- for _, dep in ipairs(b.dependencies) do
|
||||||
if not self:has(dep) then
|
-- if not self:has(dep) then
|
||||||
return print("[Character]: cannot add \"" .. b.id ..
|
-- return print("[Character]: cannot add \"" .. b.id ..
|
||||||
"\" for a character (Id = " .. self.id .. "): needs \"" .. dep.id .. "\"!")
|
-- "\" for a character (Id = " .. self.id .. "): needs \"" .. dep.id .. "\"!")
|
||||||
end
|
-- end
|
||||||
end
|
-- end
|
||||||
end
|
-- end
|
||||||
b.owner = self
|
b.owner = self
|
||||||
table.insert(self.behaviors, b)
|
table.insert(self.behaviors, b)
|
||||||
self._behaviorsIdx[b.id] = #self.behaviors
|
self._behaviorsIdx[b.id] = #self.behaviors
|
||||||
|
|||||||
18
lib/tree.lua
18
lib/tree.lua
@ -3,15 +3,15 @@
|
|||||||
--- В love.update обновлять, в love.draw читать
|
--- В love.update обновлять, в love.draw читать
|
||||||
|
|
||||||
|
|
||||||
Tree = {
|
Tree = {
|
||||||
assets = (require "lib.utils.asset_bundle"):load()
|
assets = (require "lib.utils.asset_bundle"):load()
|
||||||
}
|
}
|
||||||
Tree.panning = require "lib/panning"
|
Tree.panning = require "lib/panning"
|
||||||
Tree.controls = require "lib.controls"
|
Tree.controls = require "lib.controls"
|
||||||
Tree.level = (require "lib.level.level").new("procedural", "flower_plains") -- для теста у нас только один уровень, который сразу же загружен
|
Tree.level = (require "lib.level.level").new("procedural", "flower_plains") -- для теста у нас только один уровень, который сразу же загружен
|
||||||
|
|
||||||
Tree.behaviors = {} --- @todo написать нормальную загрузку поведений
|
Tree.behaviors = (require "lib.utils.behavior_loader")("lib/character/behaviors") --- @todo написать нормальную загрузку поведений
|
||||||
Tree.behaviors.map = require "lib.character.behaviors.map"
|
-- Tree.behaviors.map = require "lib.character.behaviors.map"
|
||||||
Tree.behaviors.spellcaster = require "lib.character.behaviors.spellcaster"
|
-- Tree.behaviors.spellcaster = require "lib.character.behaviors.spellcaster"
|
||||||
Tree.behaviors.sprite = require "lib.character.behaviors.sprite"
|
-- Tree.behaviors.sprite = require "lib.character.behaviors.sprite"
|
||||||
Tree.behaviors.stats = require "lib.character.behaviors.stats"
|
-- 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
|
end
|
||||||
|
|
||||||
function love.load()
|
function love.load()
|
||||||
character.spawn("Hero", Tree.assets.files.sprites.character)
|
character.spawn("Foodor", Tree.assets.files.sprites.character)
|
||||||
character.spawn("Hero", Tree.assets.files.sprites.character, Vec3 { 3, 3 })
|
character.spawn("Baris", Tree.assets.files.sprites.character, Vec3 { 3, 3 })
|
||||||
love.window.setMode(1080, 720, { resizable = true, msaa = 4, vsync = true })
|
love.window.setMode(1080, 720, { resizable = true, msaa = 4, vsync = true })
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user