From 20a16ad5f879464e010699abdb41113cda31c79a Mon Sep 17 00:00:00 2001
From: Gustas <37534529+PunkPun@users.noreply.github.com>
Date: Fri, 17 Feb 2023 11:06:41 +0200
Subject: [PATCH] Move force pausing to EndGame method
---
OpenRA.Game/Network/UnitOrders.cs | 2 +-
OpenRA.Game/Scripting/ScriptContext.cs | 7 +------
OpenRA.Game/World.cs | 9 +++++----
OpenRA.Mods.Common/Traits/Player/MissionObjectives.cs | 8 ++------
4 files changed, 9 insertions(+), 17 deletions(-)
diff --git a/OpenRA.Game/Network/UnitOrders.cs b/OpenRA.Game/Network/UnitOrders.cs
index 518b0e9097..186b1d1491 100644
--- a/OpenRA.Game/Network/UnitOrders.cs
+++ b/OpenRA.Game/Network/UnitOrders.cs
@@ -182,7 +182,7 @@ namespace OpenRA.Network
var pause = order.TargetString == "Pause";
// Prevent injected unpause orders from restarting a finished game
- if (orderManager.World.PauseStateLocked && !pause)
+ if (orderManager.World.IsGameOver && !pause)
break;
if (orderManager.World.Paused != pause && world != null && world.LobbyInfo.NonBotClients.Count() > 1)
diff --git a/OpenRA.Game/Scripting/ScriptContext.cs b/OpenRA.Game/Scripting/ScriptContext.cs
index e3ca3ddcd7..421addf371 100644
--- a/OpenRA.Game/Scripting/ScriptContext.cs
+++ b/OpenRA.Game/Scripting/ScriptContext.cs
@@ -223,12 +223,7 @@ namespace OpenRA.Scripting
FatalErrorOccurred = true;
- World.AddFrameEndTask(w =>
- {
- World.EndGame();
- World.SetPauseState(true);
- World.PauseStateLocked = true;
- });
+ World.AddFrameEndTask(w => World.EndGame());
}
public void RegisterMapActor(string name, Actor a)
diff --git a/OpenRA.Game/World.cs b/OpenRA.Game/World.cs
index 099549e0cb..f76b8f4ce6 100644
--- a/OpenRA.Game/World.cs
+++ b/OpenRA.Game/World.cs
@@ -68,15 +68,19 @@ namespace OpenRA
public Player LocalPlayer { get; private set; }
public event Action GameOver = () => { };
+
+ /// Should only be set in
public bool IsGameOver { get; private set; }
public void EndGame()
{
if (!IsGameOver)
{
+ SetPauseState(true);
IsGameOver = true;
foreach (var t in WorldActor.TraitsImplementing())
t.GameOver(this);
+
gameInfo.FinalGameTick = WorldTick;
GameOver();
}
@@ -381,7 +385,6 @@ namespace OpenRA
public bool Paused { get; internal set; }
public bool PredictedPaused { get; internal set; }
- public bool PauseStateLocked { get; set; }
public int WorldTick { get; private set; }
@@ -393,7 +396,7 @@ namespace OpenRA
public void SetPauseState(bool paused)
{
- if (PauseStateLocked)
+ if (IsGameOver)
return;
IssueOrder(Order.FromTargetString("PauseGame", paused ? "Pause" : "UnPause", false));
@@ -615,8 +618,6 @@ namespace OpenRA
public void OutOfSync()
{
EndGame();
- SetPauseState(true);
- PauseStateLocked = true;
}
}
diff --git a/OpenRA.Mods.Common/Traits/Player/MissionObjectives.cs b/OpenRA.Mods.Common/Traits/Player/MissionObjectives.cs
index c2222ba92e..e5a8d3c4e4 100644
--- a/OpenRA.Mods.Common/Traits/Player/MissionObjectives.cs
+++ b/OpenRA.Mods.Common/Traits/Player/MissionObjectives.cs
@@ -165,12 +165,8 @@ namespace OpenRA.Mods.Common.Traits
{
Game.RunAfterDelay(Info.GameOverDelay, () =>
{
- if (!Game.IsCurrentWorld(player.World))
- return;
-
- player.World.EndGame();
- player.World.SetPauseState(true);
- player.World.PauseStateLocked = true;
+ if (Game.IsCurrentWorld(player.World))
+ player.World.EndGame();
});
}
}