Представляю вашему вниманию более менее костыльный метод для imgui. Может как-то и для обычных диалогов скостылить можно, пока надобности нет. Мне для imgui пока актуальная такая тема.
Поэкспериментировал с windows событиями. разгрёб среди говна, которое флудит при всяких движениях на компе, событие под номерами 6, 28, 134. Хз в чём разница между ними, не углублялся , главное работает. Выбрал 6 - WM_ACTIVATE.
При сворачивании игры в параметрах возвращает 0, при разворачивании сначала даёт хер знает какой-то число, а потом 1.
Объявил булевую переменную gta, которая зависит от статуса окна игры.
Ну и собственно, когда окно сворачивается, gta на false ставится и imgui окно больше не рендерится, разворачиваешь - рендерится.
Я думал также сделать через функции c++ через либу ffi, типа на проверку развёрнутости окна, но думаю будет лишняя нагрузка. Поэтому с события поэкспериментировал сначала.
Пока хз как будет вести себя, если игра немного подвисает при разворачивании, мб ещё какие-то доп условия поставить для wparam == 1. А так пока заебись.
local win = imgui.ImBool(false) -- переменная окна
local gta = false -- переменная для imgui.Process
addEventHandler("onWindowMessage", function (msg, wparam, lparam)
if msg == 6 then
if wparam == 0 then
gta = false
elseif wparam == 1 then
gta = true
end
end
end)
-- В цикле main
imgui.Process = gta and win.v
--
P.S. 10.08.20
Можно заюзать хук именно на функцию показа диалога через
jmp hook и пока игра свёрнута, мы не снимаем хук (как написано в теме). Как только развернём игру, снимем хук и диалог появится.
Гениально )
Мне кажется, если это сработает, то можно в качестве отдельного скрипта сделать в виде фикса, чтобы в каждый скрипт свой не вставлять. С imgui скорей придётся саму либу imgui.lua на свою заменить, где будет вставлено то, что выше писал вчера.
Вот такой костыль получается....