#ifndef SRC_ENGINE_H_ #define SRC_ENGINE_H_ #include #include #include #include #include #include "typedefs.h" #include "settings.h" #include "assets/Assets.h" #include "content/Content.h" #include "content/ContentPack.h" #include "files/engine_paths.h" class Level; class Screen; class EnginePaths; class ResPaths; namespace fs = std::filesystem; namespace gui { class GUI; } class initialize_error : public std::runtime_error { public: initialize_error(const std::string& message) : std::runtime_error(message) {} }; class Engine { std::unique_ptr assets = nullptr; std::shared_ptr screen = nullptr; std::vector contentPacks; EngineSettings& settings; std::unique_ptr content = nullptr; EnginePaths* paths; std::unique_ptr resPaths = nullptr; uint64_t frame = 0; double lastTime = 0.0; double delta = 0.0; std::unique_ptr gui; public: Engine(EngineSettings& settings, EnginePaths* paths); ~Engine(); void updateTimers(); void updateHotkeys(); void mainloop(); Assets* getAssets(); gui::GUI* getGUI(); EngineSettings& getSettings(); void setScreen(std::shared_ptr screen); EnginePaths* getPaths(); const Content* getContent() const; std::vector& getContentPacks(); void setLanguage(std::string locale); void loadContent(); void loadWorldContent(const fs::path& folder); void loadAllPacks(); }; #endif // SRC_ENGINE_H_