1 #ifndef BLOBS_WORLD_SIMULATION_HPP_
2 #define BLOBS_WORLD_SIMULATION_HPP_
6 #include "../app/Assets.hpp"
27 explicit Simulation(Body &root, app::Assets &);
30 Simulation(const Simulation &) = delete;
31 Simulation &operator =(const Simulation &) = delete;
33 Simulation(Simulation &&) = delete;
34 Simulation &operator =(Simulation &&) = delete;
39 Body &Root() noexcept { return root; }
40 const Body &Root() const noexcept { return root; }
42 app::Assets &Assets() noexcept { return assets; }
43 const app::Assets &Assets() const noexcept { return assets; }
44 const Set<Resource> &Resources() const noexcept { return assets.data.resources; }
45 const Set<TileType> &TileTypes() const noexcept { return assets.data.tile_types; }
48 void AddPlanet(Planet &);
51 const std::set<Body *> &Bodies() const noexcept { return bodies; }
52 const std::set<Planet *> &Planets() const noexcept { return planets; }
53 const std::set<Sun *> &Suns() const noexcept { return suns; }
55 void SetAlive(creature::Creature *);
56 std::vector<creature::Creature *> &LiveCreatures() noexcept { return alive; }
57 const std::vector<creature::Creature *> &LiveCreatures() const noexcept { return alive; }
59 void SetDead(creature::Creature *);
60 std::vector<creature::Creature *> &DeadCreatures() noexcept { return dead; }
61 const std::vector<creature::Creature *> &DeadCreatures() const noexcept { return dead; }
63 double Time() const noexcept { return time; }
65 const std::vector<Record> &Records() const noexcept { return records; }
66 void CheckRecords(creature::Creature &) noexcept;
72 std::set<Body *> bodies;
73 std::set<Planet *> planets;
76 std::vector<creature::Creature *> alive;
77 std::vector<creature::Creature *> dead;
80 std::vector<Record> records;