Compare commits
2 Commits
8fc4ca5483
...
db8db450d0
| Author | SHA1 | Date | |
|---|---|---|---|
| db8db450d0 | |||
| 46c7b46bd1 |
@ -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
|
||||||
|
|||||||
@ -1,7 +1,10 @@
|
|||||||
|
--- @alias Class "dev_warrior"|"dev_mage"
|
||||||
|
|
||||||
--- @class StatsBehavior : Behavior
|
--- @class StatsBehavior : Behavior
|
||||||
--- @field hp integer
|
--- @field hp integer
|
||||||
--- @field mana integer
|
--- @field mana integer
|
||||||
--- @field initiative integer
|
--- @field initiative integer
|
||||||
|
--- @field class Class
|
||||||
--- @field isInTurnOrder boolean
|
--- @field isInTurnOrder boolean
|
||||||
local behavior = {}
|
local behavior = {}
|
||||||
behavior.__index = behavior
|
behavior.__index = behavior
|
||||||
@ -10,13 +13,15 @@ behavior.id = "stats"
|
|||||||
--- @param hp? integer
|
--- @param hp? integer
|
||||||
--- @param mana? integer
|
--- @param mana? integer
|
||||||
--- @param initiative? integer
|
--- @param initiative? integer
|
||||||
|
--- @param class? Class
|
||||||
--- @param isInTurnOrder? boolean
|
--- @param isInTurnOrder? boolean
|
||||||
function behavior.new(hp, mana, initiative, isInTurnOrder)
|
function behavior.new(hp, mana, initiative, class, isInTurnOrder)
|
||||||
return setmetatable({
|
return setmetatable({
|
||||||
hp = hp or 20,
|
hp = hp or 20,
|
||||||
mana = mana or 10,
|
mana = mana or 10,
|
||||||
initiative = initiative or 10,
|
initiative = initiative or 10,
|
||||||
isInTurnOrder = isInTurnOrder or true
|
class = class or "dev_warrior",
|
||||||
|
isInTurnOrder = isInTurnOrder or true,
|
||||||
}, behavior)
|
}, behavior)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
2
main.lua
2
main.lua
@ -54,7 +54,7 @@ function love.load()
|
|||||||
Tree.behaviors.sprite.new(Tree.assets.files.sprites.character),
|
Tree.behaviors.sprite.new(Tree.assets.files.sprites.character),
|
||||||
Tree.behaviors.shadowcaster.new(),
|
Tree.behaviors.shadowcaster.new(),
|
||||||
Tree.behaviors.spellcaster.new(),
|
Tree.behaviors.spellcaster.new(),
|
||||||
Tree.behaviors.ai.new()
|
Tree.behaviors.ai.new("dev_warrior") -- так мы вообще делать не должны, и он должен как-то подцеплять class из stats, но как я хз честно
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user