summaryrefslogtreecommitdiff
path: root/kurator
diff options
context:
space:
mode:
authorAki <please@ignore.pl>2023-02-14 00:51:49 +0100
committerAki <please@ignore.pl>2023-02-14 00:51:49 +0100
commitdc0cc293b7b8efed67a0a550237dce38f33ff37d (patch)
tree83a6cf40ecd76b49f590dd669626b439cf34d64e /kurator
parent632c367ae6885657e6c99b96b8bf7a96b61a2bb9 (diff)
downloadkurator-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.cpp79
-rw-r--r--kurator/src/Battle.h7
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;