1 #ifndef BLOBS_WORLD_SIMULATION_HPP_
2 #define BLOBS_WORLD_SIMULATION_HPP_
6 #include "../app/Assets.hpp"
28 explicit Simulation(app::Assets &);
31 Simulation(const Simulation &) = delete;
32 Simulation &operator =(const Simulation &) = delete;
34 Simulation(Simulation &&) = delete;
35 Simulation &operator =(Simulation &&) = delete;
40 app::Assets &Assets() noexcept { return assets; }
41 const app::Assets &Assets() const noexcept { return assets; }
42 const Set<Resource> &Resources() const noexcept { return assets.data.resources; }
43 const Set<TileType> &TileTypes() const noexcept { return assets.data.tile_types; }
46 void AddPlanet(Planet &);
49 const std::set<Body *> &Bodies() const noexcept { return bodies; }
50 const std::set<Planet *> &Planets() const noexcept { return planets; }
51 const std::set<Sun *> &Suns() const noexcept { return suns; }
52 Planet &PlanetByName(const std::string &);
54 void SetAlive(creature::Creature *);
55 std::vector<creature::Creature *> &LiveCreatures() noexcept { return alive; }
56 const std::vector<creature::Creature *> &LiveCreatures() const noexcept { return alive; }
58 void SetDead(creature::Creature *);
59 std::vector<creature::Creature *> &DeadCreatures() noexcept { return dead; }
60 const std::vector<creature::Creature *> &DeadCreatures() const noexcept { return dead; }
62 double Time() const noexcept { return time; }
64 const std::vector<Record> &Records() const noexcept { return records; }
65 void CheckRecords(creature::Creature &) noexcept;
66 void LogRecord(const Record &);
73 std::set<Body *> bodies;
74 std::set<Planet *> planets;
77 std::vector<creature::Creature *> alive;
78 std::vector<creature::Creature *> dead;
81 std::vector<Record> records;