ai maketurn, but in table

This commit is contained in:
neckrat 2026-04-25 00:52:18 +03:00
parent 947ac12c35
commit 2b4dc56c88

View File

@ -20,45 +20,56 @@ local function closestCharacter(char)
return charTarget return charTarget
end end
---@type {[Class]: fun(self): Task<nil>} возможно где-то здесь на объявлении типа сломается типизация
local aiNature = {
["dev_warrior"] = function(self)
return function(callback) -- почему так, описано в Task
self.owner:try(Tree.behaviors.spellcaster, function(spellB)
local charTarget = closestCharacter(self.owner)
charTarget:try(Tree.behaviors.positioned, function(b)
self.target = Vec3 { b.position.x, b.position.y + 1 } --- @todo тут захардкожено + 1, но мы должны как-то хитро определять с какой стороны обойти
end)
local task1 = spellB.spellbook[1]:cast(self.owner, self.target)
if task1 then
task1(
function()
-- здесь мы оказываемся после того, как сходили в первый раз
local newTarget = Vec3 { 1, 1 }
local task2 = spellB.spellbook[1]:cast(self.owner, newTarget)
if task2 then
-- дергаем функцию после завершения хода
task2(callback)
else
callback()
end
end
)
else
callback()
end
end)
end
end,
["dev_mage"] = function(self)
return function(callback)
print("etoh... bleh")
callback()
end
end
}
--- @class AIBehavior : Behavior --- @class AIBehavior : Behavior
--- @field target Vec3? --- @field target Vec3?
local behavior = {} local behavior = {}
behavior.__index = behavior behavior.__index = behavior
behavior.id = "ai" behavior.id = "ai"
function behavior.new() --- @param class Class
return setmetatable({}, behavior) function behavior.new(class)
end return setmetatable({
makeTurn = aiNature[class]
--- @return Task<nil> }, behavior)
function behavior:makeTurn()
return function(callback) -- почему так, описано в Task
self.owner:try(Tree.behaviors.spellcaster, function(spellB)
local charTarget = closestCharacter(self.owner)
charTarget:try(Tree.behaviors.positioned, function(b)
self.target = Vec3 { b.position.x, b.position.y + 1 } --- @todo тут захардкожено + 1, но мы должны как-то хитро определять с какой стороны обойти
end)
local task1 = spellB.spellbook[1]:cast(self.owner, self.target)
if task1 then
task1(
function()
-- здесь мы оказываемся после того, как сходили в первый раз
local newTarget = Vec3 { 1, 1 }
local task2 = spellB.spellbook[1]:cast(self.owner, newTarget)
if task2 then
-- дергаем функцию после завершения хода
task2(callback)
else
callback()
end
end
)
else
callback()
end
end)
end
end end
return behavior return behavior