#ifndef QTROCKET_H #define QTROCKET_H /// \cond // C headers // C++ headers #include #include #include // 3rd party headers /// \endcond // qtrocket headers #include "model/MotorModel.h" #include "model/Rocket.h" #include "sim/AtmosphericModel.h" #include "sim/GravityModel.h" #include "sim/SimulationOptions.h" #include "utils/Logger.h" /** * @brief The QtRocket class is the master controller for the QtRocket application. * It is the singleton that controls the interaction of the various components of * the QtRocket program */ class QtRocket { public: static QtRocket* getInstance(); utils::Logger* getLogger() { return logger; } // This will return when the main window returns; // If called multiple times, subsequent calls, will simply // immediately return with value 0 int run(int argc, char* argv[]); void runSim(); std::shared_ptr getGravityModel() { return simOptions->getGravityModel(); } std::shared_ptr getAtmosphereModel() { return simOptions->getAtmosphericModel(); } double getTimeStep() { return simOptions->getTimeStep(); } std::shared_ptr getRocket() { return rocket; } void addMotorModels(std::vector& m); const std::vector& getMotorModels() const { return motorModels; } void addRocket(std::shared_ptr r) { rocket = r; } void setSimulationOptions(std::shared_ptr options) { simOptions = options; } private: QtRocket(); static void init(); std::atomic_bool running; static bool initialized; static std::mutex mtx; static QtRocket* instance; // Motor "database(s)" std::vector motorModels; utils::Logger* logger; std::shared_ptr rocket; std::shared_ptr simOptions; }; #endif // QTROCKET_H