Проверка нажатия неск клавиш

qdIbp

Автор темы
Автор темы
Проверенный
1,386
1,141
Версия MoonLoader
.026-beta
Можно как то сократить подобный код, не то не сильно возбуждает такая хрень 😫
Lua:
            if #cfg.actkey.v == 1 then
                if isKeyJustPressed(cfg.actkey.v[1]) then window.v = not window.v  end
            elseif #cfg.actkey.v == 2 then
                if isKeyDown(cfg.actkey.v[1]) and isKeyJustPressed(cfg.actkey.v[2]) or isKeyJustPressed(cfg.actkey.v[1]) and isKeyDown(cfg.actkey.v[2]) then window.v = not window.v end
         
            elseif #cfg.actkey.v == 3 then
                 if isKeyDown(cfg.actkey.v[1]) and isKeyDown(cfg.actkey.v[2]) and isKeyJustPressed(cfg.actkey.v[3])  then
                    window.v = not window.v
                elseif isKeyDown(cfg.actkey.v[1]) and isKeyJustPressed(cfg.actkey.v[2]) and isKeyDown(cfg.actkey.v[3]) then
                    window.v = not window.v
                elseif isKeyJustPressed(cfg.actkey.v[1]) and isKeyDown(cfg.actkey.v[2]) and isKeyDown(cfg.actkey.v[3]) then
                    window.v = not window.v
                end
         
            elseif #cfg.actkey.v == 4 then
                if isKeyDown(cfg.actkey.v[1]) and isKeyDown(cfg.actkey.v[2]) and isKeyDown(cfg.actkey.v[3]) and isKeyJustPressed(cfg.actkey.v[4]) then
                    window.v = not window.v
                elseif isKeyDown(cfg.actkey.v[1]) and isKeyDown(cfg.actkey.v[2]) and isKeyJustPressed(cfg.actkey.v[3]) and isKeyDown(cfg.actkey.v[4]) then
                    window.v = not window.v
                elseif isKeyDown(cfg.actkey.v[1]) and isKeyJustPressed(cfg.actkey.v[2]) and isKeyDown(cfg.actkey.v[3]) and isKeyDown(cfg.actkey.v[4]) then
                    window.v = not window.v
                elseif isKeyJustPressed(cfg.actkey.v[1]) and isKeyDown(cfg.actkey.v[2]) and isKeyDown(cfg.actkey.v[3]) and isKeyDown(cfg.actkey.v[4]) then
                    window.v = not window.v
                end
            end
Пробовал с onWindowMessage(msg, wparam, lparam)
но wparam принимает один параметр :(
Lua:
             if #cfg.actkey.v == 2 then
                if wparam == cfg.actkey.v[1] then
                    if wparam == cfg.actkey.v[2] then
                    window.v = not window.v
                    end
                end
            end

@chapo
 
Последнее редактирование:
Решение
Lua:
local isHotKeyPressed = function(hotKeyTable)
    for i = 1, #hotKeyTable do
        local func = (i == #hotKeyTable) and isKeyJustPressed or isKeyDown
        if not func(hotKeyTable[i]) then return false end
    end
    return true
end

if isKeyHotKeyPressed(cfg.actkey.v) then
    window.v = not window.v
end

Можно ещё проверку на таблицу сделать, если она может быть пустой
Lua:
local isHotKeyPressed = function(hotKeyTable)
    local tableLength = #hotKeyTable
    if tableLength == 0 then return false end

    for i = 1, tableLength do
        local func = (i == tableLength) and isKeyJustPressed or isKeyDown
        if not func(hotKeyTable[i]) then return false end
    end
    return true
end

TieXoP

Известный
132
26
Хоткей?
 

qdIbp

Автор темы
Автор темы
Проверенный
1,386
1,141
Хоткей?
🗿🗿🗿
Он та тут причем?

Можно как то сократить подобный код
 

TieXoP

Известный
132
26
🗿🗿🗿
Он та тут причем?
Как я понял, ты там с имгуи окном балуешься. Хоткей отлично подойдет для сочетания клавиш. Или я суть твоего кода не могу понять...
UPD: Прости меня за мою слепоту. Только увидел "WindowMessage"
 
Последнее редактирование:

qdIbp

Автор темы
Автор темы
Проверенный
1,386
1,141
Я с хоткеем уже взаимодействую
Смысл это куска ... в том что через хоткей я выбрал клавиши и по нажатию выбранных клавиш открывается окно
Но как по мне взаимодействие с неск клавишами пахнет как дерьмо

Lua:
            if #cfg.actkey.v == 2 then
                if isKeyJustPressed(cfg.actkey.v[1]) and isKeyDown(cfg.actkey.v[2]) or isKeyDown(cfg.actkey.v[1]) and isKeyJustPressed(cfg.actkey.v[2]) then
                    window.v = not window.v
                end
            elseif #cfg.actkey.v == 3 then
                if isKeyDown(cfg.actkey.v[1]) and isKeyDown(cfg.actkey.v[2]) and isKeyJustPressed(cfg.actkey.v[3]) or isKeyDown(cfg.actkey.v[1]) and isKeyJustPressed(cfg.actkey.v[2]) and isKeyDown(cfg.actkey.v[3])or isKeyJustPressed(cfg.actkey.v[1]) and isKeyDown(cfg.actkey.v[2]) and isKeyDown(cfg.actkey.v[3]) then
                    window.v = not window.v
                end
            elseif #cfg.actkey.v == 4 then
                if isKeyDown(cfg.actkey.v[1]) and isKeyDown(cfg.actkey.v[2]) and isKeyDown(cfg.actkey.v[3]) and isKeyJustPressed(cfg.actkey.v[4]) or isKeyDown(cfg.actkey.v[1]) and isKeyDown(cfg.actkey.v[2]) and isKeyJustPressed(cfg.actkey.v[3]) and isKeyDown(cfg.actkey.v[4]) or isKeyDown(cfg.actkey.v[1]) and isKeyJustPressed(cfg.actkey.v[2]) and isKeyDown(cfg.actkey.v[3]) and isKeyDown(cfg.actkey.v[4]) or isKeyJustPressed(cfg.actkey.v[1]) and isKeyDown(cfg.actkey.v[2]) and isKeyDown(cfg.actkey.v[3]) and isKeyDown(cfg.actkey.v[4]) then
                    window.v = not window.v
                end
            end

Особенно elseif #cfg.actkey.v == 4 then
 

The Spark

Известный
653
671
Lua:
local isHotKeyPressed = function(hotKeyTable)
    for i = 1, #hotKeyTable do
        local func = (i == #hotKeyTable) and isKeyJustPressed or isKeyDown
        if not func(hotKeyTable[i]) then return false end
    end
    return true
end

if isKeyHotKeyPressed(cfg.actkey.v) then
    window.v = not window.v
end

Можно ещё проверку на таблицу сделать, если она может быть пустой
Lua:
local isHotKeyPressed = function(hotKeyTable)
    local tableLength = #hotKeyTable
    if tableLength == 0 then return false end

    for i = 1, tableLength do
        local func = (i == tableLength) and isKeyJustPressed or isKeyDown
        if not func(hotKeyTable[i]) then return false end
    end
    return true
end
 
Последнее редактирование:
  • Нравится
Реакции: qdIbp