#pragma once #include #include #include #include "assets/sectordef.hpp" #include "sector.hpp" #include "entity.hpp" namespace game { class World { std::vector> sectors_; std::vector> entities_; public: World(); size_t AddSector(std::shared_ptr def); void LinkPortals(size_t sector1, const std::string& portal_name1, size_t sector2, const std::string& portal_name2); template T* Spawn(TArgs&&... args) { auto entity = std::make_unique(this, std::forward(args)...); T* entity_ptr = entity.get(); entities_.push_back(std::move(entity)); return entity_ptr; } Sector& GetSector(size_t idx) { return *sectors_[idx]; } const Sector& GetSector(size_t idx) const { return *sectors_[idx]; } }; }