1 #ifndef BLOBS_WORLD_SIMULATION_HPP_
2 #define BLOBS_WORLD_SIMULATION_HPP_
6 #include "../app/Assets.hpp"
28 explicit Simulation(Body &root, app::Assets &);
31 Simulation(const Simulation &) = delete;
32 Simulation &operator =(const Simulation &) = delete;
34 Simulation(Simulation &&) = delete;
35 Simulation &operator =(Simulation &&) = delete;
40 Body &Root() noexcept { return root; }
41 const Body &Root() const noexcept { return root; }
43 app::Assets &Assets() noexcept { return assets; }
44 const app::Assets &Assets() const noexcept { return assets; }
45 const Set<Resource> &Resources() const noexcept { return assets.data.resources; }
46 const Set<TileType> &TileTypes() const noexcept { return assets.data.tile_types; }
49 void AddPlanet(Planet &);
52 const std::set<Body *> &Bodies() const noexcept { return bodies; }
53 const std::set<Planet *> &Planets() const noexcept { return planets; }
54 const std::set<Sun *> &Suns() const noexcept { return suns; }
56 void SetAlive(creature::Creature *);
57 std::vector<creature::Creature *> &LiveCreatures() noexcept { return alive; }
58 const std::vector<creature::Creature *> &LiveCreatures() const noexcept { return alive; }
60 void SetDead(creature::Creature *);
61 std::vector<creature::Creature *> &DeadCreatures() noexcept { return dead; }
62 const std::vector<creature::Creature *> &DeadCreatures() const noexcept { return dead; }
64 double Time() const noexcept { return time; }
66 const std::vector<Record> &Records() const noexcept { return records; }
67 void CheckRecords(creature::Creature &) noexcept;
68 void LogRecord(const Record &);
76 std::set<Body *> bodies;
77 std::set<Planet *> planets;
80 std::vector<creature::Creature *> alive;
81 std::vector<creature::Creature *> dead;
84 std::vector<Record> records;