heroes-of-nerevelon/lib/controls.lua
Neckrat 091e960ebd trying to write selector again
Co-authored-by: Ivan Yuriev <ivanyr44@gmail.com>
2025-08-10 00:28:59 +03:00

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