Didgik Posted November 5 Share Posted November 5 (edited) Приветствую! Сколько не бился, не могу сделать действие полностью аналогичное кнопке ESC по умолчанию. Т.е. Должно отключаться управление камерой, должен появляться курсор, Курсор должен видеть GUI. По клику мимо GUI (Внимание, по одному клику!) должен переключаться обратно в управление камерой. Конечно, думаю это все долго и нудно можно сделать в собственном конроллере камеры, но может есть простой способ? В крайнем случае может можно программно нажать ESC? ) И, кстати, сопутствующий вопрос. Как отключить это действие у ESC? Edited November 5 by Didgik Link to comment
mifril Posted November 6 Share Posted November 6 Здравствуйте, переназначить это действие можно через ControlsApp::setRemoveGrabKey(Input::KEY_...) 1 Link to comment
Didgik Posted November 6 Author Share 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 Link to comment
mifril Posted November 6 Share 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 Link to comment
Didgik Posted November 8 Author Share Posted November 8 6.11.2024 в 14:51 мифрил сказал: Вы можете еще принудительно выставлять grab мыши Нет. Я рано радовался. Любое действие в кроме собственно Input::setMouseHandle(Input::MOUSE_HANDLE_GRAB) приводит к тому, что мышь захватывается над Гуем и даже над заголовком окна. Так что вопрос еще актуален. Link to comment
mifril Posted November 8 Share 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 Link to comment
Didgik Posted November 8 Author Share Posted November 8 Это понятно. Правда гуй может быть разбросан по экрану и непредсказуемых местах и вычислять всё это тоже целое дело. Вопрос в том, что же происходит по ESC, что ничего этого не требуется. Link to comment
mifril Posted November 8 Share Posted November 8 У вас же проблема не с кнопкой ESC, а с тем что мышь не грабается сразу? Если нет, то я не понимаю в чем ваша проблема. Link to comment
Didgik Posted November 8 Author Share Posted November 8 7 минут назад мифрил сказал: У вас же проблема не с кнопкой ESC, а с тем что мышь не грабается сразу? Если нет, то я не понимаю в чем ваша проблема. У меня изначальная проблема в том, что я не могу воспроизвести функционал кнопки ESC. После её нажатия, мне не нужно как то дополнительно обрабатывать клики мыши чтобы вернутся в управление. Остальное это уже попытки сделать все вручную. Link to comment
mifril Posted November 8 Share Posted November 8 Можно тогда просто попробовать убирать граб мыши анологично тому как мы принудительно его ставили, только без выставления handle. Например: Input::setMouseGrab(false); ControlsApp::setMouseEnabled(false); 1 Link to comment
Didgik Posted November 8 Author Share Posted November 8 6 минут назад мифрил сказал: Можно тогда просто попробовать убирать граб мыши анологично тому как мы принудительно его ставили, только без выставления handle. Во, это кажись то, что надо! Link to comment
Didgik Posted Monday at 06:34 PM Author Share Posted Monday at 06:34 PM On 11/6/2024 at 1:24 PM, mifril said: Здравствуйте, переназначить это действие можно через ControlsApp::setRemoveGrabKey(Input::KEY_...) Дополню, если кому будет интересна тема, что данная команда не просто переключает действие в реалтайме, а прописывает настройку в data\configs\default.controls, т.е. отменить удалением строки не получиться, надо в коде ставить нужною кнопку, хотя бы раз или править текстовый конфиг. А то я долго думал, что за бред происходит. Link to comment
Recommended Posts