chroma_solstice/input.lua
2026-08-07 02:01:39 -04:00

67 lines
1.6 KiB
Lua

Input = {}
Input.playermovekeys = { up = "up", down = "down", left = "left", right = "right" }
Input.playerswitchkeys = { ["1"] = "1", ["2"] = "2", ["3"] = "3"}
Input.colorfromkey = {"red", "green", "blue"}
Input.moveRepeatDelay = .28
Input.moveRepeatInterval = .09
Input.heldMoveKey = nil
Input.moveRepeatElapsed = 0
Input.moveRepeatStarted = false
function Input:handler(dt)
local key = self.heldMoveKey
if key and not love.keyboard.isDown(key) then
key = nil
for _, candidate in ipairs({"up", "down", "left", "right"}) do
if love.keyboard.isDown(candidate) then key = candidate; break end
end
self.heldMoveKey = key
self.moveRepeatElapsed = 0
self.moveRepeatStarted = false
end
if not key then return nil end
self.moveRepeatElapsed = self.moveRepeatElapsed + dt
if not self.moveRepeatStarted then
if self.moveRepeatElapsed >= self.moveRepeatDelay then
self.moveRepeatElapsed = 0
self.moveRepeatStarted = true
return key
end
elseif self.moveRepeatElapsed >= self.moveRepeatInterval then
self.moveRepeatElapsed = 0
return key
end
end
function Input:beginMove(key)
self.heldMoveKey = key
self.moveRepeatElapsed = 0
self.moveRepeatStarted = false
end
function Input:stopMoveRepeat()
self.heldMoveKey = nil
self.moveRepeatElapsed = 0
self.moveRepeatStarted = false
end
function Input.isPlayerMove(key)
if Input.playermovekeys[key] then
return true
end
return false
end
function Input.isPlayerSwitch(key)
if Input.playerswitchkeys[key] then
return true
end
return false
end
function Input.playerColor(key)
return Input.colorfromkey[tonumber(key)]
end