X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fworld%2Fsim.cpp;h=b6a198d7365a7336be1d7e224b6fe4aaddd1656b;hb=42db7d9d2286e50896ad172e2e4a8fbe65c8a4a9;hp=46454fd2952197311b72db9bfeace430a44bebdc;hpb=c5556cf5f6813887a3503433c021ccd2e7fae865;p=blobs.git diff --git a/src/world/sim.cpp b/src/world/sim.cpp index 46454fd..b6a198d 100644 --- a/src/world/sim.cpp +++ b/src/world/sim.cpp @@ -1,14 +1,19 @@ #include "Simulation.hpp" #include "Body.hpp" +#include "Planet.hpp" +#include "Sun.hpp" namespace blobs { namespace world { -Simulation::Simulation(Body &r) +Simulation::Simulation(Body &r, app::Assets &assets) : root(r) -, all_bodies() +, assets(assets) +, bodies() +, planets() +, suns() , time(0.0) { AddBody(r); } @@ -19,14 +24,24 @@ Simulation::~Simulation() { void Simulation::AddBody(Body &b) { b.SetSimulation(*this); - all_bodies.push_back(&b); + bodies.insert(&b); +} + +void Simulation::AddPlanet(Planet &p) { + AddBody(p); + planets.insert(&p); +} + +void Simulation::AddSun(Sun &s) { + AddBody(s); + suns.insert(&s); } void Simulation::Tick() { constexpr double dt = 0.01666666666666666666666666666666; time += dt; - for (auto body : all_bodies) { - body->Rotation(body->Rotation() + dt * body->AngularMomentum() / body->Inertia()); + for (auto body : bodies) { + body->Tick(dt); } }