]> git.localhorst.tv Git - blobs.git/blobdiff - src/world/Simulation.hpp
track a few things
[blobs.git] / src / world / Simulation.hpp
index 31489c6de7aef91e20c93c1164771260eb251e62..5df595fb26d0eab0c3d0b799a93f333b4bcf6270 100644 (file)
@@ -1,13 +1,18 @@
 #ifndef BLOBS_WORLD_SIMULATION_HPP_
 #define BLOBS_WORLD_SIMULATION_HPP_
 
+#include "Record.hpp"
 #include "Set.hpp"
 #include "../app/Assets.hpp"
 
 #include <set>
+#include <vector>
 
 
 namespace blobs {
+namespace creature {
+       class Creature;
+}
 namespace world {
 
 class Body;
@@ -31,10 +36,6 @@ public:
 public:
        void Tick(double dt);
 
-       void AddBody(Body &);
-       void AddPlanet(Planet &);
-       void AddSun(Sun &);
-
        Body &Root() noexcept { return root; }
        const Body &Root() const noexcept { return root; }
 
@@ -43,19 +44,40 @@ public:
        const Set<Resource> &Resources() const noexcept { return assets.data.resources; }
        const Set<TileType> &TileTypes() const noexcept { return assets.data.tile_types; }
 
+       void AddBody(Body &);
+       void AddPlanet(Planet &);
+       void AddSun(Sun &);
+
        const std::set<Body *> &Bodies() const noexcept { return bodies; }
        const std::set<Planet *> &Planets() const noexcept { return planets; }
        const std::set<Sun *> &Suns() const noexcept { return suns; }
 
+       void SetAlive(creature::Creature *);
+       std::vector<creature::Creature *> &LiveCreatures() noexcept { return alive; }
+       const std::vector<creature::Creature *> &LiveCreatures() const noexcept { return alive; }
+
+       void SetDead(creature::Creature *);
+       std::vector<creature::Creature *> &DeadCreatures() noexcept { return dead; }
+       const std::vector<creature::Creature *> &DeadCreatures() const noexcept { return dead; }
+
        double Time() const noexcept { return time; }
 
+       const std::vector<Record> &Records() const noexcept { return records; }
+       void CheckRecords(creature::Creature &) noexcept;
+
 private:
        Body &root;
        app::Assets &assets;
+
        std::set<Body *> bodies;
        std::set<Planet *> planets;
        std::set<Sun *> suns;
+
+       std::vector<creature::Creature *> alive;
+       std::vector<creature::Creature *> dead;
+
        double time;
+       std::vector<Record> records;
 
 };