]> git.localhorst.tv Git - space.git/commitdiff
added universe environmental resources
authorDaniel Karbach <daniel.karbach@localhorst.tv>
Thu, 9 Jan 2014 07:14:25 +0000 (08:14 +0100)
committerDaniel Karbach <daniel.karbach@localhorst.tv>
Thu, 9 Jan 2014 07:14:25 +0000 (08:14 +0100)
src/world/Universe.cpp
src/world/Universe.h

index daac4dbf8fa9099d22be8149de14ea3d79875fb6..bc1aad8bde2f0dff8c94251c5cb7c7df56f9d65d 100644 (file)
@@ -9,7 +9,9 @@ namespace space {
 Universe::Universe(Vector<int> size, Vector<int> secSize, Vector<int> areaSize)
 : size(size)
 , secSize(secSize)
-, areaSize(areaSize) {
+, areaSize(areaSize)
+, bounds(size * secSize * areaSize)
+, env(bounds.x * bounds.y) {
 
 }
 
@@ -30,6 +32,25 @@ int Universe::AddResource(const Resource &r) {
 }
 
 
+void Universe::DumpEnv(int res, Vector<int> coords, float amount) {
+       if (coords.x < 0) coords.x = 0;
+       if (coords.x > bounds.x) coords.x = bounds.x - 1;
+       if (coords.y < 0) coords.y = 0;
+       if (coords.y > bounds.x) coords.y = bounds.y - 1;
+
+       int index = coords.x * bounds.y + coords.y;
+
+       Env &point = env[index];
+       Env::iterator entry(point.find(res));
+
+       if (entry == point.end()) {
+               point.emplace(res, amount);
+       } else {
+               entry->second += amount;
+       }
+}
+
+
 void Universe::Update(float delta) {
        for (Ship &s : ships) {
                s.Update(delta);
index 807c1cd18fe16444f214abe749afcf601ac587ea..c4754bd0c718b0100baddd9584a6fbe50eb50d5d 100644 (file)
@@ -6,6 +6,7 @@
 #include "../graphics/Vector.h"
 
 #include <list>
+#include <map>
 #include <vector>
 
 
@@ -24,8 +25,11 @@ public:
        const Vector<int> size;
        const Vector<int> secSize;
        const Vector<int> areaSize;
+       const Vector<int> bounds;
 
 public:
+       using Env = std::map<int, float>;
+
        class Area;
 
        class Sector {
@@ -57,6 +61,7 @@ public:
                Vector<int> AreaCoords() const { return coords; }
 
                Sector ParentSector() const { return univ.SectorAt(SectorCoords()); }
+               const Env &GetEnv() const { return univ.EnvAt(coords); }
 
        private:
                const Universe &univ;
@@ -67,6 +72,7 @@ public:
 public:
        Sector SectorAt(Vector<int> coords) const { return Sector(*this, coords); }
        Area AreaAt(Vector<int> coords) const { return Area(*this, coords); }
+       const Env &EnvAt(Vector<int> coords) const { return env[coords.x * bounds.y + coords.y]; }
 
 public:
        Ship *AddShip(const Ship &);
@@ -75,12 +81,18 @@ public:
        int AddResource(const Resource &);
        const Resource &GetResource(int id) const { return resources[id]; }
 
+       void DumpEnv(int res, Vector<int> coords, float amount);
+       void DumpEnv(int res, Vector<float> coords, float amount) {
+               DumpEnv(res, Vector<int>(coords), amount);
+       }
+
 public:
        void Update(float deltaT);
 
 private:
        std::list<Ship> ships;
        std::vector<Resource> resources;
+       std::vector<Env> env;
 
 };