]> git.localhorst.tv Git - space.git/blobdiff - src/world/Universe.h
fix Resource include
[space.git] / src / world / Universe.h
index 563bfd90000b545d56bf754778b5f39d1827ab4a..807c1cd18fe16444f214abe749afcf601ac587ea 100644 (file)
@@ -1,20 +1,20 @@
 #ifndef SPACE_UNIVERSE_H_
 #define SPACE_UNIVERSE_H_
 
-#include "../entity/Entity.h"
-#include "../math/Vector.h"
+#include "Resource.h"
+#include "../entity/Ship.h"
+#include "../graphics/Vector.h"
 
 #include <list>
+#include <vector>
 
 
 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;
@@ -26,21 +26,61 @@ public:
        const Vector<int> areaSize;
 
 public:
-       Entity *AddEntity(const Entity &);
-       const std::list<Entity> &Entities() const { return entities; }
+       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:
-       void Update(float deltaT);
+       Sector SectorAt(Vector<int> coords) const { return Sector(*this, coords); }
+       Area AreaAt(Vector<int> coords) const { return Area(*this, coords); }
 
-private:
+public:
+       Ship *AddShip(const Ship &);
+       const std::list<Ship> &Ships() const { return ships; }
 
-       int numres;
-       int total;
+       int AddResource(const Resource &);
+       const Resource &GetResource(int id) const { return resources[id]; }
 
-       Sector *sec_begin;
-       Sector *sec_end;
+public:
+       void Update(float deltaT);
 
-       std::list<Entity> entities;
+private:
+       std::list<Ship> ships;
+       std::vector<Resource> resources;
 
 };