mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-07-18 01:59:19 +02:00
Fix to 1cafe15917
This commit is contained in:
1869
drivermode.cpp
1869
drivermode.cpp
File diff suppressed because it is too large
Load Diff
@@ -18,58 +18,62 @@ http://mozilla.org/MPL/2.0/.
|
|||||||
#include "AnimModel.h"
|
#include "AnimModel.h"
|
||||||
#include "renderer.h"
|
#include "renderer.h"
|
||||||
|
|
||||||
driver_ui::driver_ui() {
|
driver_ui::driver_ui()
|
||||||
|
{
|
||||||
|
|
||||||
clear_panels();
|
clear_panels();
|
||||||
// bind the panels with ui object. maybe not the best place for this but, eh
|
// bind the panels with ui object. maybe not the best place for this but, eh
|
||||||
add_external_panel( &m_aidpanel );
|
add_external_panel(&m_aidpanel);
|
||||||
add_external_panel( &m_scenariopanel );
|
add_external_panel(&m_scenariopanel);
|
||||||
add_external_panel( &m_timetablepanel );
|
add_external_panel(&m_timetablepanel);
|
||||||
add_external_panel( &m_debugpanel );
|
add_external_panel(&m_debugpanel);
|
||||||
if (Global.gui_showtranscripts)
|
if (Global.gui_showtranscripts)
|
||||||
add_external_panel( &m_transcriptspanel );
|
add_external_panel(&m_transcriptspanel);
|
||||||
|
|
||||||
add_external_panel( &m_trainingcardpanel );
|
add_external_panel(&m_trainingcardpanel);
|
||||||
add_external_panel( &m_vehiclelist );
|
add_external_panel(&m_vehiclelist);
|
||||||
add_external_panel( &m_timepanel );
|
add_external_panel(&m_timepanel);
|
||||||
add_external_panel( &m_mappanel );
|
add_external_panel(&m_mappanel);
|
||||||
add_external_panel( &m_logpanel );
|
add_external_panel(&m_logpanel);
|
||||||
add_external_panel( &m_perfgraphpanel );
|
add_external_panel(&m_perfgraphpanel);
|
||||||
add_external_panel( &m_cameraviewpanel );
|
add_external_panel(&m_cameraviewpanel);
|
||||||
m_logpanel.is_open = false;
|
m_logpanel.is_open = false;
|
||||||
|
|
||||||
m_aidpanel.title = STR("Driving Aid");
|
m_aidpanel.title = STR("Driving Aid");
|
||||||
|
|
||||||
m_scenariopanel.title = STR("Scenario");
|
m_scenariopanel.title = STR("Scenario");
|
||||||
m_scenariopanel.size_min = { 435, 85 };
|
m_scenariopanel.size_min = {435, 85};
|
||||||
m_scenariopanel.size_max = { Global.fb_size.x * 0.95f, Global.fb_size.y * 0.95 };
|
m_scenariopanel.size_max = {Global.fb_size.x * 0.95f, Global.fb_size.y * 0.95};
|
||||||
|
|
||||||
m_timetablepanel.title = STR("%-*.*s Time: %d:%02d:%02d");
|
m_timetablepanel.title = STR("%-*.*s Time: %d:%02d:%02d");
|
||||||
m_timetablepanel.size_min = { 435, 70};
|
m_timetablepanel.size_min = {435, 70};
|
||||||
m_timetablepanel.size_max = { 435, Global.fb_size.y * 0.95 };
|
m_timetablepanel.size_max = {435, Global.fb_size.y * 0.95};
|
||||||
|
|
||||||
m_transcriptspanel.title = STR("Transcripts");
|
m_transcriptspanel.title = STR("Transcripts");
|
||||||
m_transcriptspanel.size_min = { 435, 85 };
|
m_transcriptspanel.size_min = {435, 85};
|
||||||
m_transcriptspanel.size_max = { Global.fb_size.x * 0.95, Global.fb_size.y * 0.95 };
|
m_transcriptspanel.size_max = {Global.fb_size.x * 0.95, Global.fb_size.y * 0.95};
|
||||||
|
|
||||||
if (Global.gui_defaultwindows) {
|
if (Global.gui_defaultwindows)
|
||||||
|
{
|
||||||
m_aidpanel.is_open = true;
|
m_aidpanel.is_open = true;
|
||||||
m_scenariopanel.is_open = true;
|
m_scenariopanel.is_open = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Global.gui_trainingdefault) {
|
if (Global.gui_trainingdefault)
|
||||||
m_mappanel.is_open = true;
|
{
|
||||||
m_trainingcardpanel.is_open = true;
|
m_mappanel.is_open = true;
|
||||||
m_vehiclelist.is_open = true;
|
m_trainingcardpanel.is_open = true;
|
||||||
}
|
m_vehiclelist.is_open = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void driver_ui::render_menu_contents() {
|
void driver_ui::render_menu_contents()
|
||||||
|
{
|
||||||
ui_layer::render_menu_contents();
|
ui_layer::render_menu_contents();
|
||||||
|
|
||||||
if (ImGui::BeginMenu(STR_C("Mode windows")))
|
if (ImGui::BeginMenu(STR_C("Mode windows")))
|
||||||
{
|
{
|
||||||
ImGui::MenuItem(m_aidpanel.title.c_str(), "F1", &m_aidpanel.is_open);
|
ImGui::MenuItem(m_aidpanel.title.c_str(), "F1", &m_aidpanel.is_open);
|
||||||
ImGui::MenuItem(m_scenariopanel.title.c_str(), "F1", &m_aidpanel.is_open);
|
ImGui::MenuItem(m_scenariopanel.title.c_str(), "F1", &m_aidpanel.is_open);
|
||||||
ImGui::MenuItem(STR_C("Timetable"), "F2", &m_timetablepanel.is_open);
|
ImGui::MenuItem(STR_C("Timetable"), "F2", &m_timetablepanel.is_open);
|
||||||
ImGui::MenuItem(m_debugpanel.name().c_str(), "F12", &m_debugpanel.is_open);
|
ImGui::MenuItem(m_debugpanel.name().c_str(), "F12", &m_debugpanel.is_open);
|
||||||
@@ -83,8 +87,8 @@ void driver_ui::render_menu_contents() {
|
|||||||
if (ImGui::MenuItem(m_timepanel.name().c_str()))
|
if (ImGui::MenuItem(m_timepanel.name().c_str()))
|
||||||
m_timepanel.open();
|
m_timepanel.open();
|
||||||
|
|
||||||
ImGui::EndMenu();
|
ImGui::EndMenu();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void driver_ui::showDebugUI()
|
void driver_ui::showDebugUI()
|
||||||
@@ -93,164 +97,180 @@ void driver_ui::showDebugUI()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// potentially processes provided input key. returns: true if key was processed, false otherwise
|
// potentially processes provided input key. returns: true if key was processed, false otherwise
|
||||||
bool
|
bool driver_ui::on_key(int const Key, int const Action)
|
||||||
driver_ui::on_key( int const Key, int const Action ) {
|
{
|
||||||
if (ui_layer::on_key(Key, Action))
|
if (ui_layer::on_key(Key, Action))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
switch( Key ) {
|
switch (Key)
|
||||||
case GLFW_KEY_TAB:
|
{
|
||||||
case GLFW_KEY_F1:
|
case GLFW_KEY_TAB:
|
||||||
case GLFW_KEY_F2:
|
case GLFW_KEY_F1:
|
||||||
case GLFW_KEY_F3:
|
case GLFW_KEY_F2:
|
||||||
case GLFW_KEY_F10:
|
case GLFW_KEY_F3:
|
||||||
case GLFW_KEY_F12: { // ui mode selectors
|
case GLFW_KEY_F10:
|
||||||
|
case GLFW_KEY_F12:
|
||||||
|
{ // ui mode selectors
|
||||||
|
|
||||||
if( ( true == Global.ctrlState )) {
|
if ((true == Global.ctrlState) || (true == Global.shiftState))
|
||||||
// only react to keys without modifiers
|
{
|
||||||
return false;
|
// only react to keys without modifiers
|
||||||
}
|
return false;
|
||||||
|
}
|
||||||
if( Action != GLFW_PRESS ) { return true; } // recognized, but ignored
|
|
||||||
}
|
|
||||||
|
|
||||||
default: { // everything else
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (Key) {
|
|
||||||
|
|
||||||
case GLFW_KEY_TAB: {
|
|
||||||
m_mappanel.is_open = !m_mappanel.is_open;
|
|
||||||
|
|
||||||
|
if (Action != GLFW_PRESS)
|
||||||
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
} // recognized, but ignored
|
||||||
|
}
|
||||||
|
|
||||||
case GLFW_KEY_F1: {
|
default:
|
||||||
// basic consist info
|
{ // everything else
|
||||||
auto state = (
|
break;
|
||||||
( m_aidpanel.is_open == false ) ? 0 :
|
}
|
||||||
( m_aidpanel.is_expanded == false ) ? 1 :
|
}
|
||||||
2 );
|
|
||||||
state = clamp_circular( ++state, 3 );
|
|
||||||
|
|
||||||
m_aidpanel.is_open = ( state > 0 );
|
switch (Key)
|
||||||
m_aidpanel.is_expanded = ( state > 1 );
|
{
|
||||||
|
|
||||||
return true;
|
case GLFW_KEY_TAB:
|
||||||
}
|
{
|
||||||
|
m_mappanel.is_open = !m_mappanel.is_open;
|
||||||
|
|
||||||
case GLFW_KEY_F2: {
|
return true;
|
||||||
// timetable
|
}
|
||||||
auto state = (
|
|
||||||
( m_timetablepanel.is_open == false ) ? 0 :
|
|
||||||
( m_timetablepanel.is_expanded == false ) ? 1 :
|
|
||||||
2 );
|
|
||||||
state = clamp_circular( ++state, 3 );
|
|
||||||
|
|
||||||
m_timetablepanel.is_open = ( state > 0 );
|
case GLFW_KEY_F1:
|
||||||
m_timetablepanel.is_expanded = ( state > 1 );
|
{
|
||||||
|
// basic consist info
|
||||||
|
auto state = ((m_aidpanel.is_open == false) ? 0 : (m_aidpanel.is_expanded == false) ? 1 : 2);
|
||||||
|
state = clamp_circular(++state, 3);
|
||||||
|
|
||||||
return true;
|
m_aidpanel.is_open = (state > 0);
|
||||||
}
|
m_aidpanel.is_expanded = (state > 1);
|
||||||
|
|
||||||
case GLFW_KEY_F3: {
|
return true;
|
||||||
// debug panel
|
}
|
||||||
m_scenariopanel.is_open = !m_scenariopanel.is_open;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
case GLFW_KEY_F12 : {
|
case GLFW_KEY_F2:
|
||||||
// debug panel
|
{
|
||||||
if (Global.shiftState)
|
// timetable
|
||||||
{
|
auto state = ((m_timetablepanel.is_open == false) ? 0 : (m_timetablepanel.is_expanded == false) ? 1 : 2);
|
||||||
m_debugpanel.is_open = !m_debugpanel.is_open;
|
state = clamp_circular(++state, 3);
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
default: {
|
m_timetablepanel.is_open = (state > 0);
|
||||||
break;
|
m_timetablepanel.is_expanded = (state > 1);
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
case GLFW_KEY_F3:
|
||||||
|
{
|
||||||
|
// debug panel
|
||||||
|
m_scenariopanel.is_open = !m_scenariopanel.is_open;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
case GLFW_KEY_F12:
|
||||||
|
{
|
||||||
|
// debug panel
|
||||||
|
if (Global.shiftState)
|
||||||
|
{
|
||||||
|
m_debugpanel.is_open = !m_debugpanel.is_open;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// potentially processes provided mouse movement. returns: true if the input was processed, false otherwise
|
// potentially processes provided mouse movement. returns: true if the input was processed, false otherwise
|
||||||
bool
|
bool driver_ui::on_cursor_pos(double const Horizontal, double const Vertical)
|
||||||
driver_ui::on_cursor_pos( double const Horizontal, double const Vertical ) {
|
{
|
||||||
// intercept mouse movement when the pause window is on
|
// intercept mouse movement when the pause window is on
|
||||||
return m_paused;
|
return m_paused;
|
||||||
}
|
}
|
||||||
|
|
||||||
// potentially processes provided mouse button. returns: true if the input was processed, false otherwise
|
// potentially processes provided mouse button. returns: true if the input was processed, false otherwise
|
||||||
bool
|
bool driver_ui::on_mouse_button(int const Button, int const Action)
|
||||||
driver_ui::on_mouse_button( int const Button, int const Action ) {
|
{
|
||||||
// intercept mouse movement when the pause window is on
|
// intercept mouse movement when the pause window is on
|
||||||
return m_paused;
|
return m_paused;
|
||||||
}
|
}
|
||||||
|
|
||||||
// updates state of UI elements
|
// updates state of UI elements
|
||||||
void
|
void driver_ui::update()
|
||||||
driver_ui::update() {
|
{
|
||||||
|
|
||||||
auto const pausemask { 1 | 2 };
|
auto const pausemask{1 | 2};
|
||||||
auto ispaused { ( false == DebugModeFlag ) && ( ( Global.iPause & pausemask ) != 0 ) };
|
auto ispaused{(false == DebugModeFlag) && ((Global.iPause & pausemask) != 0)};
|
||||||
if( ( ispaused != m_paused )
|
if ((ispaused != m_paused) && (false == Global.ControlPicking))
|
||||||
&& ( false == Global.ControlPicking ) ) {
|
{
|
||||||
set_cursor( ispaused );
|
set_cursor(ispaused);
|
||||||
}
|
}
|
||||||
m_paused = ispaused;
|
m_paused = ispaused;
|
||||||
|
|
||||||
ui_layer::update();
|
ui_layer::update();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void driver_ui::set_cursor(bool const Visible)
|
||||||
driver_ui::set_cursor( bool const Visible ) {
|
{
|
||||||
|
|
||||||
if( Visible ) {
|
if (Visible)
|
||||||
Application.set_cursor( GLFW_CURSOR_NORMAL );
|
{
|
||||||
Application.set_cursor_pos( Global.window_size.x / 2, Global.window_size.y / 2 );
|
Application.set_cursor(GLFW_CURSOR_NORMAL);
|
||||||
}
|
Application.set_cursor_pos(Global.window_size.x / 2, Global.window_size.y / 2);
|
||||||
else {
|
}
|
||||||
Application.set_cursor( GLFW_CURSOR_DISABLED );
|
else
|
||||||
Application.set_cursor_pos( 0, 0 );
|
{
|
||||||
}
|
Application.set_cursor(GLFW_CURSOR_DISABLED);
|
||||||
|
Application.set_cursor_pos(0, 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// render() subclass details
|
// render() subclass details
|
||||||
void
|
void driver_ui::render_()
|
||||||
driver_ui::render_() {
|
{
|
||||||
const std::string *rec_name = m_trainingcardpanel.is_recording();
|
const std::string *rec_name = m_trainingcardpanel.is_recording();
|
||||||
if (rec_name && m_cameraviewpanel.set_state(true)) {
|
if (rec_name && m_cameraviewpanel.set_state(true))
|
||||||
|
{
|
||||||
m_cameraviewpanel.rec_name = *rec_name;
|
m_cameraviewpanel.rec_name = *rec_name;
|
||||||
m_cameraviewpanel.is_open = true;
|
m_cameraviewpanel.is_open = true;
|
||||||
} else if (!rec_name)
|
}
|
||||||
|
else if (!rec_name)
|
||||||
m_cameraviewpanel.set_state(false);
|
m_cameraviewpanel.set_state(false);
|
||||||
|
|
||||||
// pause/quit modal
|
// pause/quit modal
|
||||||
auto const popupheader { STR_C("Simulation Paused") };
|
auto const popupheader{STR_C("Simulation Paused")};
|
||||||
|
|
||||||
ImGui::SetNextWindowSize(ImVec2(-1, -1));
|
ImGui::SetNextWindowSize(ImVec2(-1, -1));
|
||||||
if( ImGui::BeginPopupModal( popupheader, nullptr, 0 ) ) {
|
if (ImGui::BeginPopupModal(popupheader, nullptr, 0))
|
||||||
if( ( ImGui::Button( STR_C("Resume"), ImVec2( 150, 0 ) ) )
|
{
|
||||||
|| ( ImGui::IsKeyReleased( ImGui::GetKeyIndex( ImGuiKey_Escape ) ) ) )
|
if ((ImGui::Button(STR_C("Resume"), ImVec2(150, 0))) || (ImGui::IsKeyReleased(ImGui::GetKeyIndex(ImGuiKey_Escape))))
|
||||||
{
|
{
|
||||||
m_relay.post(user_command::pausetoggle, 0.0, 0.0, GLFW_RELEASE, 0);
|
m_relay.post(user_command::pausetoggle, 0.0, 0.0, GLFW_RELEASE, 0);
|
||||||
}
|
}
|
||||||
if( ImGui::Button( STR_C("Quit"), ImVec2( 150, 0 ) ) ) {
|
if (ImGui::Button(STR_C("Quit"), ImVec2(150, 0)))
|
||||||
Application.queue_quit(false);
|
{
|
||||||
}
|
Application.queue_quit(false);
|
||||||
|
}
|
||||||
if (!m_paused)
|
if (!m_paused)
|
||||||
ImGui::CloseCurrentPopup();
|
ImGui::CloseCurrentPopup();
|
||||||
ImGui::EndPopup();
|
ImGui::EndPopup();
|
||||||
} else if (m_paused) {
|
}
|
||||||
|
else if (m_paused)
|
||||||
|
{
|
||||||
ImGui::OpenPopup(popupheader);
|
ImGui::OpenPopup(popupheader);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Global.desync != 0.0f) {
|
if (Global.desync != 0.0f)
|
||||||
|
{
|
||||||
ImGui::SetNextWindowSize(ImVec2(-1, -1));
|
ImGui::SetNextWindowSize(ImVec2(-1, -1));
|
||||||
if (ImGui::Begin("network", nullptr, ImGuiWindowFlags_NoCollapse))
|
if (ImGui::Begin("network", nullptr, ImGuiWindowFlags_NoCollapse))
|
||||||
ImGui::Text("desync: %0.2f", Global.desync);
|
ImGui::Text("desync: %0.2f", Global.desync);
|
||||||
|
|||||||
Reference in New Issue
Block a user