diff options
author | Aki <please@ignore.pl> | 2023-02-14 00:51:49 +0100 |
---|---|---|
committer | Aki <please@ignore.pl> | 2023-02-14 00:51:49 +0100 |
commit | dc0cc293b7b8efed67a0a550237dce38f33ff37d (patch) | |
tree | 83a6cf40ecd76b49f590dd669626b439cf34d64e /kurator | |
parent | 632c367ae6885657e6c99b96b8bf7a96b61a2bb9 (diff) | |
download | kurator-dc0cc293b7b8efed67a0a550237dce38f33ff37d.zip kurator-dc0cc293b7b8efed67a0a550237dce38f33ff37d.tar.gz kurator-dc0cc293b7b8efed67a0a550237dce38f33ff37d.tar.bz2 |
Replaced Context+Battle combo with State and arbitrary Systems
Diffstat (limited to 'kurator')
-rw-r--r-- | kurator/src/Battle.cpp | 79 | ||||
-rw-r--r-- | kurator/src/Battle.h | 7 |
2 files changed, 41 insertions, 45 deletions
diff --git a/kurator/src/Battle.cpp b/kurator/src/Battle.cpp index 3eadc28..73a0136 100644 --- a/kurator/src/Battle.cpp +++ b/kurator/src/Battle.cpp @@ -10,13 +10,13 @@ #include <raylib.h> #include <imgui.h> -#include <kurator/engine/Context.h> #include <kurator/engine/Point.h> #include <kurator/campaign/scenarios.h> -#include <kurator/sim/Battle.h> +#include <kurator/sim.h> #include <kurator/sim/components.h> #include <kurator/sim/events.h> #include <kurator/sim/FloatingMovement.h> +#include <kurator/sim/State.h> #include <kurator/stats/events.h> #include <kurator/universe/ShipType.h> #include <kurator/universe/UniqueIdentifier.h> @@ -40,15 +40,15 @@ Battle::Battle(std::shared_ptr<Session> _session) : } -static void attach_markers(engine::Context& ctx); +static void attach_markers(sim::State& ctx); Battle::Battle(std::shared_ptr<Session> _session, campaign::Scenario scenario, Battle::Callback _report) : session {std::move(_session)}, - battle {sim::prepare(scenario)}, + ctx {sim::load_scenario(scenario)}, + simulation_base {sim::base_simulation_systems(ctx)}, report {std::move(_report)} { - auto ctx = battle->context(); ctx.dispatcher.sink<sim::End>().connect<&Battle::on_end>(*this); ctx.dispatcher.sink<sim::Hit>().connect<&Battle::on_hit>(*this); ctx.dispatcher.sink<sim::Destroyed>().connect<&Battle::on_destroyed>(*this); @@ -60,7 +60,7 @@ Battle::Battle(std::shared_ptr<Session> _session, campaign::Scenario scenario, B void -attach_markers(engine::Context& ctx) +attach_markers(sim::State& ctx) { auto ships = ctx.registry.view<sim::Team, universe::ShipType, universe::UniqueIdentifier>(); for (const auto& [entity, team, type, identifier] : ships.each()) { @@ -73,7 +73,6 @@ attach_markers(engine::Context& ctx) Battle::~Battle() { - auto ctx = battle->context(); ctx.dispatcher.sink<sim::End>().disconnect(*this); ctx.dispatcher.sink<sim::Hit>().disconnect(*this); ctx.dispatcher.sink<sim::Destroyed>().disconnect(*this); @@ -95,16 +94,15 @@ time_controls(const char* id, float& time_factor) } -static void progress_timers(engine::Context& ctx); -static void move_ui_pops(engine::Context& ctx); -static void blink_crosses(engine::Context& ctx); -static void animate_lines(engine::Context& ctx); +static void progress_timers(sim::State& ctx); +static void move_ui_pops(sim::State& ctx); +static void blink_crosses(sim::State& ctx); +static void animate_lines(sim::State& ctx); void Battle::update() { - auto ctx = battle->context(); if (IsKeyPressed(KEY_ESCAPE)) return session->set(std::make_shared<Pause>(session, session->current())); if (IsMouseButtonDown(MOUSE_BUTTON_RIGHT)) { @@ -115,7 +113,7 @@ Battle::update() if (IsWindowResized()) ctx.camera.scale = std::min(GetScreenWidth()/30000.0, GetScreenHeight()/30000.0); ctx.clock.update(); - battle->update(ctx); + simulation_base(ctx); progress_timers(ctx); move_ui_pops(ctx); blink_crosses(ctx); @@ -130,7 +128,7 @@ Battle::update() void -progress_timers(engine::Context& ctx) +progress_timers(sim::State& ctx) { auto timers = ctx.registry.view<Timed>(); for (auto&& [entity, timer] : timers.each()) { @@ -142,7 +140,7 @@ progress_timers(engine::Context& ctx) void -move_ui_pops(engine::Context& ctx) +move_ui_pops(sim::State& ctx) { auto pops = ctx.registry.view<PopMove, UIOffset>(); for (auto&& [entity, pop, offset] : pops.each()) { @@ -157,7 +155,7 @@ move_ui_pops(engine::Context& ctx) void -blink_crosses(engine::Context& ctx) +blink_crosses(sim::State& ctx) { auto crosses = ctx.registry.view<Cross>(); for (auto&& [entity, cross] : crosses.each()) { @@ -170,7 +168,7 @@ blink_crosses(engine::Context& ctx) void -animate_lines(engine::Context& ctx) +animate_lines(sim::State& ctx) { auto lines = ctx.registry.view<Line>(); for (auto&& [entity, line] : lines.each()) @@ -178,16 +176,15 @@ animate_lines(engine::Context& ctx) } -static void draw_crosses(engine::ConstContext& ctx); -static void draw_lines(engine::ConstContext& ctx); -static void draw_markers(engine::ConstContext& ctx); -static void draw_pops(engine::ConstContext& ctx); +static void draw_crosses(const sim::State& ctx); +static void draw_lines(const sim::State& ctx); +static void draw_markers(const sim::State& ctx); +static void draw_pops(const sim::State& ctx); void Battle::draw() const { - auto ctx = battle->const_context(); ClearBackground(BLACK); Grid().draw(ctx.camera); draw_crosses(ctx); @@ -199,7 +196,7 @@ Battle::draw() const void -draw_crosses(engine::ConstContext& ctx) +draw_crosses(const sim::State& ctx) { auto crosses = ctx.registry.view<sim::Transform, Cross>(); for (const auto& [entity, transform, cross] : crosses.each()) { @@ -223,7 +220,7 @@ draw_crosses(engine::ConstContext& ctx) void -draw_lines(engine::ConstContext& ctx) +draw_lines(const sim::State& ctx) { auto lines = ctx.registry.view<Line>(); for (const auto& [entity, line] : lines.each()) { @@ -238,7 +235,7 @@ draw_lines(engine::ConstContext& ctx) void -draw_markers(engine::ConstContext& ctx) +draw_markers(const sim::State& ctx) { auto view = ctx.registry.view<const Marker, const sim::Transform>(); for (auto [entity, marker, transform] : view.each()) { @@ -260,7 +257,7 @@ draw_markers(engine::ConstContext& ctx) void -draw_pops(engine::ConstContext& ctx) +draw_pops(const sim::State& ctx) { auto pops = ctx.registry.view<CenteredText, sim::Transform, UIOffset>(); for (const auto& [entity, text, transform, offset] : pops.each()) { @@ -283,16 +280,15 @@ Battle::on_end(const sim::End&) void Battle::on_hit(const sim::Hit& hit) { - auto& registry = battle->context().registry; - if (!registry.valid(hit.victim)) + if (!ctx.registry.valid(hit.victim)) return; - const auto& source = registry.get<sim::Transform>(hit.source); - const auto& victim = registry.get<sim::Transform>(hit.victim); - auto& popup = registry.get<PopupEmitter>(hit.victim); - popup.emit(registry, victim, hit.damage); - const auto line = registry.create(); - registry.emplace<Timed>(line, 0.2, true); - registry.emplace<Line>( + const auto& source = ctx.registry.get<sim::Transform>(hit.source); + const auto& victim = ctx.registry.get<sim::Transform>(hit.victim); + auto& popup = ctx.registry.get<PopupEmitter>(hit.victim); + popup.emit(ctx.registry, victim, hit.damage); + const auto line = ctx.registry.create(); + ctx.registry.emplace<Timed>(line, 0.2, true); + ctx.registry.emplace<Line>( line, RED, source.position, @@ -305,14 +301,13 @@ Battle::on_hit(const sim::Hit& hit) void Battle::on_destroyed(const sim::Destroyed& event) { - auto& registry = battle->context().registry; - if (!registry.valid(event.victim)) + if (!ctx.registry.valid(event.victim)) return; - const auto& victim = registry.get<sim::Transform>(event.victim); - const auto cross = registry.create(); - registry.emplace<Timed>(cross, 1.6); - registry.emplace<Cross>(cross, 0.2, 6.0); - registry.emplace<sim::Transform>(cross, victim.position, 0.0); + const auto& victim = ctx.registry.get<sim::Transform>(event.victim); + const auto cross = ctx.registry.create(); + ctx.registry.emplace<Timed>(cross, 1.6); + ctx.registry.emplace<Cross>(cross, 0.2, 6.0); + ctx.registry.emplace<sim::Transform>(cross, victim.position, 0.0); } diff --git a/kurator/src/Battle.h b/kurator/src/Battle.h index c02717d..f6ec8d6 100644 --- a/kurator/src/Battle.h +++ b/kurator/src/Battle.h @@ -4,9 +4,9 @@ #include <memory> #include <kurator/campaign/Scenario.h> -#include <kurator/engine/Context.h> -#include <kurator/sim/Battle.h> #include <kurator/sim/events.h> +#include <kurator/sim/State.h> +#include <kurator/sim/System.h> #include <kurator/stats/EventLog.h> #include <kurator/stats/events.h> @@ -34,7 +34,8 @@ public: void on_ship_left(const stats::ShipLeft& event); // duplicated? private: std::shared_ptr<Session> session; - std::unique_ptr<sim::Battle> battle; + sim::State ctx; + sim::System simulation_base; ForceBalance balance; stats::EventLog log; Callback report; |