diff options
Diffstat (limited to 'kurator/src/Campaign.cpp')
-rw-r--r-- | kurator/src/Campaign.cpp | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/kurator/src/Campaign.cpp b/kurator/src/Campaign.cpp index a3f788e..9d88518 100644 --- a/kurator/src/Campaign.cpp +++ b/kurator/src/Campaign.cpp @@ -1,15 +1,20 @@ #include "Campaign.h" +#include <algorithm> #include <memory> #include <utility> +#include <vector> #include <raylib.h> #include <imgui.h> #include <kurator/campaign/Scenario.h> #include <kurator/campaign/scenarios.h> +#include <kurator/campaign/ShipConfig.h> +#include <kurator/stats/events.h> #include "Battle.h" +#include "EventLog.h" #include "Session.h" @@ -17,6 +22,16 @@ namespace kurator { +class Reporter +{ +public: + Reporter(std::vector<campaign::ShipConfig>& _ships) : ships {_ships} {} + void operator()(const stats::ShipLeft& event); +private: + std::vector<campaign::ShipConfig>& ships; +}; + + Campaign::Campaign(std::shared_ptr<Session> _session) : session {std::move(_session)}, ships {}, @@ -53,7 +68,9 @@ Campaign::update(const float) scenario.ships.push_back(std::move(ship)); } } - session->push(std::make_shared<Battle>(session, std::move(scenario))); + auto destroy = [&](const EventLog& log) { log.for_each(Reporter{ships}); }; + session->push(std::make_shared<Battle>(session, std::move(scenario), destroy)); + level++; } if (ImGui::Button("Back")) session->pop(); @@ -69,4 +86,13 @@ Campaign::draw() const } +void +Reporter::operator()(const stats::ShipLeft& event) +{ + using campaign::ShipConfig; + auto was_destroyed = [&event](const ShipConfig& ship){ return ship.identifier.id == event.ship.id; }; + ships.erase(std::remove_if(ships.begin(), ships.end(), was_destroyed), ships.end()); +} + + } // namespace kurator |