#pragma once #include "DeerCore/Tools/Memory.h" #include "DeerCore/Tools/TypeDefs.h" #include #include namespace Deer { class EntityEnvironment; class GizmoRenderer; class World; struct WorldCamera; using WorldCallback = std::function; struct WorldSettings { WorldCallback updateCallback; u_int32_t updateFrequency; #ifdef DEER_RENDER WorldCallback renderCallback; u_int32_t renderFrequency; #endif }; enum class WorldState { Created, Executing, StopRequested, Stopped, DestroyQueued, ReadyToDestroy }; class World { public: World(const WorldSettings&); ~World(); void execute(); void stopExecution(); void destroy(); WorldState getExecutionState(); Scope entityEnvironment; private: std::atomic executingState; WorldSettings worldSettings; }; // namespace World } // namespace Deer