move repeatedly in direction
This commit is contained in:
parent
e065ab83de
commit
f8e3d78332
5 changed files with 126 additions and 62 deletions
42
input.lua
42
input.lua
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue