]> git.localhorst.tv Git - space.git/blobdiff - src/world/Universe.h
some cleanup
[space.git] / src / world / Universe.h
index 563bfd90000b545d56bf754778b5f39d1827ab4a..740592690fb86935f68fccb92eaadd9527fcda1d 100644 (file)
@@ -9,12 +9,10 @@
 
 namespace space {
 
-class Sector;
-
 class Universe {
 
 public:
-       Universe(Vector<int> size, Vector<int> secSize, Vector<int> areaSize, int numres);
+       Universe(Vector<int> size, Vector<int> secSize, Vector<int> areaSize);
        ~Universe();
 
        Universe(const Universe &) = delete;
@@ -25,6 +23,49 @@ public:
        const Vector<int> secSize;
        const Vector<int> areaSize;
 
+public:
+       class Area;
+
+       class Sector {
+
+       public:
+               Sector(const Universe &univ, Vector<int> coords)
+               : univ(univ), coords(coords) { }
+
+       public:
+               Vector<int> SectorCoords() const { return coords; }
+               Vector<int> AreaCoords() const { return univ.areaSize * coords; }
+
+               Area AreaAt(Vector<int> ac) const { return univ.AreaAt(AreaCoords() + ac); }
+
+       private:
+               const Universe &univ;
+               Vector<int> coords;
+
+       };
+
+       class Area {
+
+       public:
+               Area(const Universe &univ, Vector<int> coords)
+               : univ(univ), coords(coords) { }
+
+       public:
+               Vector<int> SectorCoords() const { return coords / univ.areaSize; }
+               Vector<int> AreaCoords() const { return coords; }
+
+               Sector ParentSector() const { return univ.SectorAt(SectorCoords()); }
+
+       private:
+               const Universe &univ;
+               Vector<int> coords;
+
+       };
+
+public:
+       Sector SectorAt(Vector<int> coords) const { return Sector(*this, coords); }
+       Area AreaAt(Vector<int> coords) const { return Area(*this, coords); }
+
 public:
        Entity *AddEntity(const Entity &);
        const std::list<Entity> &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<Entity> entities;
 
 };