#pragma once #include #include struct GLFWwindow; // One row for the extensible right-hand stats list (oil temp, coolant // temp, etc.) — push more entries onto EngineStats::extra_stats as the // sim grows, no Gui changes needed. struct StatEntry { std::string label; double value; std::string unit; }; // Plain data the GUI reads each frame. The GUI knows nothing about // Engine/Transmission/Vehicle — main.cpp fills this in from Simulation. struct EngineStats { double rpm = 0.0; double redline_rpm = 6500.0; // tach gauge: start of red zone double max_rpm = 8000.0; // tach gauge: full scale double fuel_consumption_lph = 0.0; double crank_power_kw = 0.0; double output_heat_j = 0.0; std::vector extra_stats; }; class Gui { public: bool init(); // create window + ImGui context bool begin_frame(); // returns false when the window should close void render(const EngineStats& stats); void end_frame(); // swap buffers void shutdown(); private: GLFWwindow* m_window = nullptr; };