summaryrefslogtreecommitdiff
path: root/kurator/src/Campaign.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kurator/src/Campaign.cpp')
-rw-r--r--kurator/src/Campaign.cpp28
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