X-Git-Url: https://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fworld%2FUniverse.h;h=740592690fb86935f68fccb92eaadd9527fcda1d;hb=11306935dbf7213d583222ce239985e1b3f180bf;hp=563bfd90000b545d56bf754778b5f39d1827ab4a;hpb=a1fd5c4181db1da990b6280892eb1b9f31b73871;p=space.git diff --git a/src/world/Universe.h b/src/world/Universe.h index 563bfd9..7405926 100644 --- a/src/world/Universe.h +++ b/src/world/Universe.h @@ -9,12 +9,10 @@ namespace space { -class Sector; - class Universe { public: - Universe(Vector size, Vector secSize, Vector areaSize, int numres); + Universe(Vector size, Vector secSize, Vector areaSize); ~Universe(); Universe(const Universe &) = delete; @@ -25,6 +23,49 @@ public: const Vector secSize; const Vector areaSize; +public: + class Area; + + class Sector { + + public: + Sector(const Universe &univ, Vector coords) + : univ(univ), coords(coords) { } + + public: + Vector SectorCoords() const { return coords; } + Vector AreaCoords() const { return univ.areaSize * coords; } + + Area AreaAt(Vector ac) const { return univ.AreaAt(AreaCoords() + ac); } + + private: + const Universe &univ; + Vector coords; + + }; + + class Area { + + public: + Area(const Universe &univ, Vector coords) + : univ(univ), coords(coords) { } + + public: + Vector SectorCoords() const { return coords / univ.areaSize; } + Vector AreaCoords() const { return coords; } + + Sector ParentSector() const { return univ.SectorAt(SectorCoords()); } + + private: + const Universe &univ; + Vector coords; + + }; + +public: + Sector SectorAt(Vector coords) const { return Sector(*this, coords); } + Area AreaAt(Vector coords) const { return Area(*this, coords); } + public: Entity *AddEntity(const Entity &); const std::list &Entities() const { return entities; } @@ -33,13 +74,6 @@ public: void Update(float deltaT); private: - - int numres; - int total; - - Sector *sec_begin; - Sector *sec_end; - std::list entities; };