From bb71d25045c0e928ef377ffcc367a4043d62f028 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A1rk=C3=B6zi=20Gergely=20J=C3=A1nos?=
 <cycss7@inf.elte.hu>
Date: Mon, 2 May 2022 12:55:52 +0200
Subject: [PATCH] move economy actions from GameOverview to System

---
 Assets/Scripts/Logic/Data/GameOverview.cs     | 12 +++------
 .../Logic/System/StartNextRoundSystem.cs      | 26 +++++++++++++++++++
 .../Logic/System/StartNextRoundSystem.cs.meta |  3 +++
 3 files changed, 32 insertions(+), 9 deletions(-)
 create mode 100644 Assets/Scripts/Logic/System/StartNextRoundSystem.cs
 create mode 100644 Assets/Scripts/Logic/System/StartNextRoundSystem.cs.meta

diff --git a/Assets/Scripts/Logic/Data/GameOverview.cs b/Assets/Scripts/Logic/Data/GameOverview.cs
index 85aa3eb..4935513 100644
--- a/Assets/Scripts/Logic/Data/GameOverview.cs
+++ b/Assets/Scripts/Logic/Data/GameOverview.cs
@@ -4,7 +4,6 @@ using System.Linq;
 using Logic.Command;
 using Logic.Data.World;
 using Logic.Event;
-using Logic.Event.Team;
 using Logic.Handler;
 using Logic.System;
 
@@ -103,12 +102,6 @@ public class GameOverview : IGameOverview {
 			} else {
 				CurrentPhase = GamePhase.Prepare;
 				TimeLeftFromPhase = float.PositiveInfinity;
-				foreach (GameTeam team in Teams) {
-					int oldMoney = team.Money;
-					team.GiveMoney(EconomyConfig.RoundBasePay
-						+ team.PurchasedUnitCount * EconomyConfig.TotalUnitsPurchasedPay);
-					Events.Raise(new TeamMoneyUpdatedEvent(team, oldMoney));
-				}
 			}
 		} else {
 			throw new Exception($"Unexpected phase: {CurrentPhase}");
@@ -126,10 +119,11 @@ public class GameOverview : IGameOverview {
 
 	private void RegisterSystems() {
 		_systems.Add(new DestroyUnitSystem());
-		_systems.Add(new TowerDamagesUnitSystem());
-		_systems.Add(new UnitDamagesCastleSystem());
 		_systems.Add(new InvalidateCachesSystem());
+		_systems.Add(new StartNextRoundSystem());
 		_systems.Add(new TeamStatisticsSystem());
+		_systems.Add(new TowerDamagesUnitSystem());
+		_systems.Add(new UnitDamagesCastleSystem());
 		foreach (BaseSystem system in _systems) system.RegisterListeners(Events);
 	}
 
diff --git a/Assets/Scripts/Logic/System/StartNextRoundSystem.cs b/Assets/Scripts/Logic/System/StartNextRoundSystem.cs
new file mode 100644
index 0000000..73f0f68
--- /dev/null
+++ b/Assets/Scripts/Logic/System/StartNextRoundSystem.cs
@@ -0,0 +1,26 @@
+ďťżusing Logic.Data;
+using Logic.Event;
+
+namespace Logic.System {
+
+/// <summary>
+/// System responsible for initializing the next round
+/// (e.g. giving money to teams) when it starts.
+/// </summary>
+internal class StartNextRoundSystem : BaseSystem {
+	public override void RegisterListeners(EventDispatcher dispatcher) {
+		dispatcher.AddListener<PhaseAdvancedEvent>(OnNextRound);
+	}
+
+	private void OnNextRound(PhaseAdvancedEvent e) {
+		IGameOverview overview = e.Overview;
+		if (e.OldPhase != GamePhase.Fight || overview.CurrentPhase != GamePhase.Prepare) return;
+
+		foreach (GameTeam team in overview.Teams) {
+			team.GiveMoney(overview.EconomyConfig.RoundBasePay
+				+ team.PurchasedUnitCount * overview.EconomyConfig.TotalUnitsPurchasedPay);
+		}
+	}
+}
+
+}
diff --git a/Assets/Scripts/Logic/System/StartNextRoundSystem.cs.meta b/Assets/Scripts/Logic/System/StartNextRoundSystem.cs.meta
new file mode 100644
index 0000000..5e061ca
--- /dev/null
+++ b/Assets/Scripts/Logic/System/StartNextRoundSystem.cs.meta
@@ -0,0 +1,3 @@
+ďťżfileFormatVersion: 2
+guid: 7631717c1aec4f0f97ac2871aa320a4b
+timeCreated: 1651487626
\ No newline at end of file
-- 
GitLab