Compare commits

..

2 Commits

Author SHA1 Message Date
db8db450d0 ai maketurn, but in table 2026-04-12 23:21:50 +03:00
46c7b46bd1 added class stat 2026-04-12 23:10:20 +03:00
3 changed files with 52 additions and 36 deletions

View File

@ -20,18 +20,9 @@ local function closestCharacter(char)
return charTarget return charTarget
end end
--- @class AIBehavior : Behavior ---@type {[Class]: fun(self): Task<nil>} возможно где-то здесь на объявлении типа сломается типизация
--- @field target Vec3? local aiNature = {
local behavior = {} ["dev_warrior"] = function(self)
behavior.__index = behavior
behavior.id = "ai"
function behavior.new()
return setmetatable({}, behavior)
end
--- @return Task<nil>
function behavior:makeTurn()
return function(callback) -- почему так, описано в Task return function(callback) -- почему так, описано в Task
self.owner:try(Tree.behaviors.spellcaster, function(spellB) self.owner:try(Tree.behaviors.spellcaster, function(spellB)
local charTarget = closestCharacter(self.owner) local charTarget = closestCharacter(self.owner)
@ -59,6 +50,26 @@ function behavior:makeTurn()
end end
end) end)
end end
end,
["dev_mage"] = function(self)
return function(callback)
print("etoh... bleh")
callback()
end
end
}
--- @class AIBehavior : Behavior
--- @field target Vec3?
local behavior = {}
behavior.__index = behavior
behavior.id = "ai"
--- @param class Class
function behavior.new(class)
return setmetatable({
makeTurn = aiNature[class]
}, behavior)
end end
return behavior return behavior

View File

@ -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

View File

@ -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, но как я хз честно
}, },
} }