47 lines
1.4 KiB
Lua
47 lines
1.4 KiB
Lua
--- @class Selector
|
|
--- @field id Id | nil
|
|
local selector = {}
|
|
selector.__index = selector
|
|
|
|
local function new()
|
|
return setmetatable({}, selector)
|
|
end
|
|
|
|
--- @param characterId integer | nil
|
|
function selector:select(characterId)
|
|
self.id = characterId
|
|
end
|
|
|
|
-- function selector:deselect()
|
|
-- self.id = nil
|
|
-- end
|
|
|
|
--- TODO: сделать обработчик селектора
|
|
function selector:update(dt)
|
|
if not Tree.controls:isJustPressed("select") then return end
|
|
|
|
local mousePosition = Tree.level.camera:toWorldPosition(Vec3 { love.mouse.getX(), love.mouse.getY() }):floor()
|
|
|
|
if mousePosition.x >= Tree.level.size.x or mousePosition.y >= Tree.level.size.y or mousePosition.y < 0 or mousePosition.x < 0 then
|
|
return
|
|
end
|
|
local characterId = Tree.level.characterGrid:get(mousePosition.x, mousePosition.y)
|
|
|
|
if not characterId and self.id then -- временная обработка события "побежать к точке"
|
|
local char = Tree.level.characters[self.id]
|
|
local charPos = char.logic.mapLogic.position
|
|
local path = (require "lib.pathfinder")(charPos, mousePosition)
|
|
path:pop_front()
|
|
print("Following path: ")
|
|
for p in path:values() do print(p) end
|
|
char:followPath(path)
|
|
end
|
|
self:select(characterId)
|
|
|
|
print("[Selector]:", mousePosition, characterId and "selected " .. characterId or "deselected")
|
|
end
|
|
|
|
return {
|
|
new = new
|
|
}
|