#pragma once #include "Craft/Common.h" #include "Craft/ComponentManager.h" #include namespace craft { class EEntity; class WWorld { public: WWorld(); virtual ~WWorld(); virtual void Begin(); virtual void Tick(float deltaTime); virtual void FixedTick(); inline bool HasBegun() const { return mHasBegun; } ////////// ENTITIES entId GetNextEntityId(); void Reset(); EEntity &GetEntity(entId id); template entId SpawnEntity(); void DestroyEntity(entId id); size_t GetTotalEntities(); template ComponentManager &GetComponentManager() { static ComponentManager manager; return manager; } private: bool mHasBegun; Dict> mEntities; std::vector> mPendingEntities; ////////// Static entId sNextEntityId; }; ////////// IMPLEMENTATIONS template unsigned int WWorld::SpawnEntity() { auto &entity = mPendingEntities.emplace_back(std::make_unique()); return entity->Id; } } // namespace craft