2025-08-13 01:47:19 +03:00

47 lines
1.3 KiB
Lua

--- @alias State "idle"|"run"|"attack"|"hurt"
--- @class Logic
--- @field id Id
--- @field mapLogic MapLogic
--- @field state State
local logic = {}
logic.__index = logic
--- @param id Id
--- @param position? Vec3
--- @param size? Vec3
local function new(id, position, size)
return setmetatable({
id = id,
mapLogic = (require 'lib.character.map_logic').new(id, position, size)
}, logic)
end
--- @param path Vec3
function logic:followPath(path)
end
--- @param target Vec3
function logic:runTo(target)
self.state = "run"
self.mapLogic.runTarget = target
end
function logic:update(dt)
if self.state == "run" and self.mapLogic.runTarget then
if self.mapLogic.position:floor() == self.mapLogic.runTarget:floor() then -- мы добежали до цели и сейчас в целевой клетке
self.state = "idle"
self.mapLogic.runTarget = nil
else -- мы не добежали до цели
local vel = (self.mapLogic.runTarget:subtract(self.mapLogic.position):normalize() --[[@as Vec3]]
):scale(1 * dt) -- бежим 2 условных метра в секунду
self.mapLogic.position = self.mapLogic.position:add(vel)
end
end
Tree.level.characterGrid:add(self.id)
end
return { new = new }