71 lines
2.6 KiB
Lua
71 lines
2.6 KiB
Lua
--- @alias Device "mouse" | "key" | "pad"
|
|
|
|
--- @param device Device
|
|
--- @param key string
|
|
local function control(device, key)
|
|
--- @type {type: Device, key: string}
|
|
local t = { type = device, key = key }
|
|
return t
|
|
end
|
|
|
|
local keymap = {
|
|
cameraMoveUp = control("key", "w"),
|
|
cameraMoveLeft = control("key", "a"),
|
|
cameraMoveRight = control("key", "d"),
|
|
cameraMoveDown = control("key", "s"),
|
|
cameraMoveScroll = control("mouse", "3"),
|
|
select = control("mouse", "1")
|
|
}
|
|
|
|
local keymapCache = {}
|
|
|
|
function keymap:isDown(key)
|
|
if not keymap[key] then
|
|
keymapCache[key] = false
|
|
return false
|
|
end
|
|
|
|
local type = keymap[key].type
|
|
local idx = keymap[key].key
|
|
if type == "key" then
|
|
keymapCache[key] = love.keyboard.isDown(idx)
|
|
end
|
|
|
|
if type == "mouse" then
|
|
if not tonumber(idx) then return false end
|
|
keymapCache[key] = love.mouse.isDown(tonumber(idx) --[[@as number]])
|
|
end
|
|
|
|
|
|
return keymapCache[key]
|
|
end
|
|
|
|
--- Вернуть true, если клавиша нажата в этот тик (ток) и не была нажата в прошлый тик (youtube shorts)
|
|
function keymap:isJustPressed(key)
|
|
if not keymap[key] then
|
|
return false
|
|
end
|
|
|
|
if keymapCache[key] then
|
|
return false
|
|
end
|
|
|
|
local type = keymap[key].type
|
|
local idx = keymap[key].key
|
|
if type == "key" then
|
|
keymapCache[key] = love.keyboard.isDown(idx)
|
|
end
|
|
|
|
if type == "mouse" then
|
|
if not tonumber(idx) then return false end
|
|
keymapCache[key] = love.mouse.isDown(tonumber(idx) --[[@as number]])
|
|
end
|
|
local keymapCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCache =
|
|
keymapCache[key]
|
|
keymapCache[key] = false
|
|
return
|
|
keymapCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCacheCache
|
|
end
|
|
|
|
return keymap
|