move repeatedly in direction

This commit is contained in:
Your Name 2026-08-07 02:01:39 -04:00
parent e065ab83de
commit f8e3d78332
5 changed files with 126 additions and 62 deletions

View file

@ -3,8 +3,48 @@ 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
@ -24,4 +64,4 @@ end
function Input.playerColor(key)
return Input.colorfromkey[tonumber(key)]
end
end