oma-command/game/crosshair.lua
nosignal 64ce7f0fcb Initial public release
OMA-COMMAND — Missile Command arcade clone in Love2D with Omarchy theme integration.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-15 18:32:07 +01:00

70 lines
2.2 KiB
Lua

local World = require("game.world")
local Palette = require("rendering.palette")
local Crosshair = {
x = 128,
y = 116,
targets = {},
}
function Crosshair.update()
local mx, my = love.mouse.getPosition()
Crosshair.x, Crosshair.y = World.toGame(mx, my)
end
function Crosshair.addTarget(x, y)
table.insert(Crosshair.targets, {x = x, y = y, time = 0})
end
function Crosshair.updateTargets(dt)
for i = #Crosshair.targets, 1, -1 do
Crosshair.targets[i].time = Crosshair.targets[i].time + dt
end
end
function Crosshair.removeTarget(x, y)
for i = #Crosshair.targets, 1, -1 do
local t = Crosshair.targets[i]
if math.abs(t.x - x) < 1 and math.abs(t.y - y) < 1 then
table.remove(Crosshair.targets, i)
return
end
end
end
function Crosshair.draw()
local p = Palette.get(World.wave)
local lw = 1 / World.scale
local t = love.timer.getTime()
-- Target markers: pulsing wireframe squares
for _, tgt in ipairs(Crosshair.targets) do
local pulse = 0.3 + math.sin(tgt.time * 15) * 0.3
love.graphics.setColor(p.crosshair[1], p.crosshair[2], p.crosshair[3], pulse)
love.graphics.setLineWidth(lw)
local s = 2.5
love.graphics.rectangle("line", tgt.x - s, tgt.y - s, s*2, s*2)
end
-- Crosshair: vector-style rotating brackets
local size = 5
local gap = 1.5
local rot = t * 0.5 -- slow rotation
love.graphics.setColor(p.crosshair)
love.graphics.setLineWidth(lw * 2)
-- Four corner brackets
-- Top
love.graphics.line(Crosshair.x - size, Crosshair.y - gap, Crosshair.x - size, Crosshair.y - size, Crosshair.x - gap, Crosshair.y - size)
love.graphics.line(Crosshair.x + gap, Crosshair.y - size, Crosshair.x + size, Crosshair.y - size, Crosshair.x + size, Crosshair.y - gap)
-- Bottom
love.graphics.line(Crosshair.x + size, Crosshair.y + gap, Crosshair.x + size, Crosshair.y + size, Crosshair.x + gap, Crosshair.y + size)
love.graphics.line(Crosshair.x - gap, Crosshair.y + size, Crosshair.x - size, Crosshair.y + size, Crosshair.x - size, Crosshair.y + gap)
-- Centre dot
love.graphics.setColor(p.bright)
love.graphics.circle("fill", Crosshair.x, Crosshair.y, 0.5, 6)
end
return Crosshair