#pragma once #include #include class CoreInstance; class World; #define GENERATE_FACTORY_GAME_INSTANCE(Class) \ GameInstance* GameFactory(CoreInstance& core) { return new Class(core); } class GameInstance { CoreInstance& core_; std::shared_ptr world_; std::atomic is_running_ = true; void start(); // Stop call from the core void stop(); public: // Stop call from game void quit(); // Init vulkan GameInstance(CoreInstance& core); virtual ~GameInstance() = default; std::shared_ptr GetWorld() const { return world_; } CoreInstance& GetCore() const { return core_; } friend class CoreInstance; };