16
0
mirror of https://github.com/MaSzyna-EU07/maszyna.git synced 2026-07-18 01:59:19 +02:00
This commit is contained in:
2026-01-03 23:23:52 +01:00
parent 8cee745af5
commit d3dbcb3fca
2 changed files with 1184 additions and 1003 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -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);