44 lines
1.2 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
print("[Selector]:", characterId and "selected " .. characterId or "deselected")
end
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 selectedId = Tree.level.characterGrid:get(Vec3 { mousePosition.x, mousePosition.y })
if not self.id then
return self:select(selectedId)
else
local char = Tree.level.characters[self.id]
char:try(Tree.behaviors.spellcaster, function(b)
if not b.cast then
self:select(selectedId)
return
end
b.cast:cast(char, mousePosition)
b.cast = nil
end)
end
end
return {
new = new
}