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;
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; }
void Update(float deltaT);
private:
-
- int numres;
- int total;
-
- Sector *sec_begin;
- Sector *sec_end;
-
std::list<Entity> entities;
};