Didgik Posted November 5 Posted November 5 (edited) Приветствую! Сколько не бился, не могу сделать действие полностью аналогичное кнопке ESC по умолчанию. Т.е. Должно отключаться управление камерой, должен появляться курсор, Курсор должен видеть GUI. По клику мимо GUI (Внимание, по одному клику!) должен переключаться обратно в управление камерой. Конечно, думаю это все долго и нудно можно сделать в собственном конроллере камеры, но может есть простой способ? В крайнем случае может можно программно нажать ESC? ) И, кстати, сопутствующий вопрос. Как отключить это действие у ESC? Edited November 5 by Didgik
mifril Posted November 6 Posted November 6 Здравствуйте, переназначить это действие можно через ControlsApp::setRemoveGrabKey(Input::KEY_...) 1
Didgik Posted November 6 Author Posted November 6 (edited) 1 час назад мифрил сказал: Здравствуйте, переназначить это действие можно через Отлично, работает! А повторить вручую это действие можно или эмулировать? Т.е. общий замысел такой. 1. Мы освобождаем кнопку ESC под свои нужды или просто пользователь переназначает это действие на удобную себе кнопку. Это сделали. 2. У меня есть кнопка ENTER по которой я перехожу в чат, хочется выходить из чата в режим управления тоже по однократному клику. При: Цитата if (Input::isMouseButtonPressed(Input::MOUSE_BUTTON::MOUSE_BUTTON_LEFT)) { Input::setMouseHandle(Input::MOUSE_HANDLE_GRAB); } if (Input::isKeyDown(Input::KEY_ENTER)) { Input::setMouseHandle(Input::MOUSE_HANDLE_USER); } переключается в режим управления только по второму клику. Edited November 6 by Didgik
mifril Posted November 6 Posted November 6 Вы можете еще принудительно выставлять grab мыши if (Input::isMouseButtonDown(Input::MOUSE_BUTTON_LEFT)) { Input::setMouseHandle(Input::MOUSE_HANDLE_GRAB); Input::setMouseGrab(true); ControlsApp::setMouseEnabled(true); } if (Input::isKeyDown(Input::KEY_ENTER)) { Input::setMouseHandle(Input::MOUSE_HANDLE_USER); } 1
Didgik Posted November 8 Author Posted November 8 6.11.2024 в 14:51 мифрил сказал: Вы можете еще принудительно выставлять grab мыши Нет. Я рано радовался. Любое действие в кроме собственно Input::setMouseHandle(Input::MOUSE_HANDLE_GRAB) приводит к тому, что мышь захватывается над Гуем и даже над заголовком окна. Так что вопрос еще актуален.
mifril Posted November 8 Posted November 8 В таком случае вам нужно дополнительно проверять что мышь в текущий момент не находиться над окном чата. https://developer.unigine.com/en/docs/2.19/api/library/gui/class.widget?rlang=cpp&words=widget%2Cwidgetlll%2Cwidgetll&autotranslate=en#getMouseY_int
Didgik Posted November 8 Author Posted November 8 Это понятно. Правда гуй может быть разбросан по экрану и непредсказуемых местах и вычислять всё это тоже целое дело. Вопрос в том, что же происходит по ESC, что ничего этого не требуется.
mifril Posted November 8 Posted November 8 У вас же проблема не с кнопкой ESC, а с тем что мышь не грабается сразу? Если нет, то я не понимаю в чем ваша проблема.
Didgik Posted November 8 Author Posted November 8 7 минут назад мифрил сказал: У вас же проблема не с кнопкой ESC, а с тем что мышь не грабается сразу? Если нет, то я не понимаю в чем ваша проблема. У меня изначальная проблема в том, что я не могу воспроизвести функционал кнопки ESC. После её нажатия, мне не нужно как то дополнительно обрабатывать клики мыши чтобы вернутся в управление. Остальное это уже попытки сделать все вручную.
mifril Posted November 8 Posted November 8 Можно тогда просто попробовать убирать граб мыши анологично тому как мы принудительно его ставили, только без выставления handle. Например: Input::setMouseGrab(false); ControlsApp::setMouseEnabled(false); 1
Didgik Posted November 8 Author Posted November 8 6 минут назад мифрил сказал: Можно тогда просто попробовать убирать граб мыши анологично тому как мы принудительно его ставили, только без выставления handle. Во, это кажись то, что надо!
Didgik Posted November 11 Author Posted November 11 On 11/6/2024 at 1:24 PM, mifril said: Здравствуйте, переназначить это действие можно через ControlsApp::setRemoveGrabKey(Input::KEY_...) Дополню, если кому будет интересна тема, что данная команда не просто переключает действие в реалтайме, а прописывает настройку в data\configs\default.controls, т.е. отменить удалением строки не получиться, надо в коде ставить нужною кнопку, хотя бы раз или править текстовый конфиг. А то я долго думал, что за бред происходит.
Recommended Posts