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