52 lines
915 B
C++
Executable File

#pragma once
#include "DeerCore/Tools/Memory.h"
#include "DeerCore/Tools/TypeDefs.h"
#include <atomic>
#include <functional>
namespace Deer {
class EntityEnvironment;
class GizmoRenderer;
class World;
struct WorldCamera;
using WorldCallback = std::function<void(World&)>;
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> entityEnvironment;
private:
std::atomic<WorldState> executingState;
WorldSettings worldSettings;
}; // namespace World
} // namespace Deer