diff --git a/OpenRA.Game/Traits/Player/VictoryConditions.cs b/OpenRA.Game/Traits/Player/VictoryConditions.cs index 8dc2be1209..b3e3d66c49 100644 --- a/OpenRA.Game/Traits/Player/VictoryConditions.cs +++ b/OpenRA.Game/Traits/Player/VictoryConditions.cs @@ -29,7 +29,7 @@ namespace OpenRA.Traits interface IVictoryConditions { bool HasLost { get; } bool HasWon { get; } } - class VictoryConditions : ITick, IVictoryConditions + class VictoryConditions : ITick, IVictoryConditions, IResolveOrder { public bool HasLost { get; private set; } public bool HasWon { get; private set; } @@ -45,15 +45,25 @@ namespace OpenRA.Traits var hasLost = !hasAnything && self.Owner != self.World.NeutralPlayer; if (hasLost && !HasLost) - { - Game.Debug("{0} is defeated.".F(self.Owner.PlayerName)); - foreach(var a in self.World.Queries.OwnedBy[self.Owner]) - a.InflictDamage(a,a.Health,null); - - self.Owner.Shroud.Disabled = true; - } + Surrender(self); + HasLost = hasLost; } + + public void ResolveOrder(Actor self, Order order) + { + if (order.OrderString == "Surrender") + Surrender(self); + } + + void Surrender(Actor self) + { + Game.Debug("{0} is defeated.".F(self.Owner.PlayerName)); + foreach (var a in self.World.Queries.OwnedBy[self.Owner]) + a.InflictDamage(a, a.Health, null); + + self.Owner.Shroud.Disabled = true; + } } /* tag trait for things that must be destroyed for a short game to end */