From a6f5b12a551d9f44c99827f1ce0abf7266e9be8b Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Sun, 23 May 2010 20:26:30 +1200 Subject: [PATCH] world.NeutralPlayer has been defeated --- OpenRA.FileFormats/Map/PlayerReference.cs | 2 ++ OpenRA.Game/Player.cs | 3 ++- OpenRA.Game/Widgets/Delegates/DiplomacyDelegate.cs | 3 +-- OpenRA.Game/Widgets/PostGameWidget.cs | 2 +- OpenRA.Game/Widgets/WorldTooltipWidget.cs | 2 +- OpenRA.Game/World.cs | 8 +++----- OpenRA.Mods.RA/BridgeLayer.cs | 2 +- OpenRA.Mods.RA/ConquestVictoryConditions.cs | 2 +- OpenRA.Mods.RA/CrateDrop.cs | 4 ++-- OpenRA.Mods.RA/CrateSpawner.cs | 2 +- OpenRA.Mods.RA/SpawnMapActors.cs | 3 +-- mods/ra/maps/shellmap/map.yaml | 2 ++ mods/ra/maps/snowyridge/map.yaml | 2 ++ 13 files changed, 20 insertions(+), 17 deletions(-) diff --git a/OpenRA.FileFormats/Map/PlayerReference.cs b/OpenRA.FileFormats/Map/PlayerReference.cs index e49a44afe9..04b8edfb88 100644 --- a/OpenRA.FileFormats/Map/PlayerReference.cs +++ b/OpenRA.FileFormats/Map/PlayerReference.cs @@ -25,6 +25,8 @@ namespace OpenRA.FileFormats public readonly string Name; public readonly string Palette; public readonly string Race; + public readonly bool OwnsWorld = false; + public readonly bool isSpecial = false; public PlayerReference(MiniYaml my) { diff --git a/OpenRA.Game/Player.cs b/OpenRA.Game/Player.cs index 0736ddae4b..65f0c00bf1 100644 --- a/OpenRA.Game/Player.cs +++ b/OpenRA.Game/Player.cs @@ -41,7 +41,8 @@ namespace OpenRA public readonly string InternalName; public readonly CountryInfo Country; public readonly int Index; - + public readonly bool isSpecial = false; + public ShroudRenderer Shroud; public World World { get; private set; } diff --git a/OpenRA.Game/Widgets/Delegates/DiplomacyDelegate.cs b/OpenRA.Game/Widgets/Delegates/DiplomacyDelegate.cs index a69d56fe32..5d86a67dbd 100644 --- a/OpenRA.Game/Widgets/Delegates/DiplomacyDelegate.cs +++ b/OpenRA.Game/Widgets/Delegates/DiplomacyDelegate.cs @@ -29,7 +29,6 @@ namespace OpenRA.Widgets.Delegates bg.Children.RemoveAll(w => controls.Contains(w)); controls.Clear(); - var unwantedPlayers = new[] { Game.world.NeutralPlayer, Game.world.LocalPlayer }; var y = 50; var margin = 20; var labelWidth = (bg.Bounds.Width - 3 * margin) / 3; @@ -58,7 +57,7 @@ namespace OpenRA.Widgets.Delegates y += 35; - foreach (var p in Game.world.players.Values.Except(unwantedPlayers)) + foreach (var p in Game.world.players.Values.Where(a => a != Game.world.LocalPlayer && !a.isSpecial)) { var pp = p; var label = new LabelWidget diff --git a/OpenRA.Game/Widgets/PostGameWidget.cs b/OpenRA.Game/Widgets/PostGameWidget.cs index c5d27385cf..c121a0feb7 100644 --- a/OpenRA.Game/Widgets/PostGameWidget.cs +++ b/OpenRA.Game/Widgets/PostGameWidget.cs @@ -45,7 +45,7 @@ namespace OpenRA.Widgets if (world.players.Count > 2) /* more than just us + neutral */ { var conds = world.Queries.WithTrait() - .Where(c => c.Actor.Owner != world.NeutralPlayer); + .Where(c => !c.Actor.Owner.isSpecial); if (conds.Any(c => c.Actor.Owner == world.LocalPlayer && c.Trait.HasLost)) DrawText("YOU ARE DEFEATED"); diff --git a/OpenRA.Game/Widgets/WorldTooltipWidget.cs b/OpenRA.Game/Widgets/WorldTooltipWidget.cs index 92e1fce88e..4728499804 100644 --- a/OpenRA.Game/Widgets/WorldTooltipWidget.cs +++ b/OpenRA.Game/Widgets/WorldTooltipWidget.cs @@ -48,7 +48,7 @@ namespace OpenRA.Widgets ? actor.Info.Traits.Get().Description : actor.Info.Name; var text2 = (actor.Owner == world.LocalPlayer) - ? "" : (actor.Owner == world.NeutralPlayer ? "{0}" : "{0} ({1})").F(actor.Owner.PlayerName, world.LocalPlayer.Stances[actor.Owner]); + ? "" : (actor.Owner.isSpecial ? "{0}" : "{0} ({1})").F(actor.Owner.PlayerName, world.LocalPlayer.Stances[actor.Owner]); var renderer = Game.chrome.renderer; diff --git a/OpenRA.Game/World.cs b/OpenRA.Game/World.cs index 5c62f19d18..cce7b64502 100644 --- a/OpenRA.Game/World.cs +++ b/OpenRA.Game/World.cs @@ -52,8 +52,6 @@ namespace OpenRA get { return players.ContainsKey(localPlayerIndex) ? players[localPlayerIndex] : null; } } - public Player NeutralPlayer { get; private set; } - public void SetLocalPlayer(int index) { localPlayerIndex = index; @@ -103,6 +101,7 @@ namespace OpenRA player.GetType().GetField("Palette").SetValue( player, kv.Value.Palette );// Todo: set Player.Color as well player.GetType().GetField("PlayerName").SetValue( player, kv.Value.Name ); player.GetType().GetField("InternalName").SetValue( player, kv.Value.Name ); + player.GetType().GetField("isSpecial").SetValue( player, kv.Value.isSpecial ); var country = WorldActor.Info.Traits.WithInterface().FirstOrDefault(c => kv.Value.Race == c.Race); if (country == null) @@ -111,9 +110,8 @@ namespace OpenRA AddPlayer(player); - // Todo: Obsolete usage of "World.NeutralPlayer" - if (kv.Value.Name == "Neutral") - NeutralPlayer = player; + if (kv.Value.OwnsWorld) + WorldActor.Owner = player; } Timer.Time( "worldActor: {0}" ); diff --git a/OpenRA.Mods.RA/BridgeLayer.cs b/OpenRA.Mods.RA/BridgeLayer.cs index 1653a3d427..9b4927ccb1 100644 --- a/OpenRA.Mods.RA/BridgeLayer.cs +++ b/OpenRA.Mods.RA/BridgeLayer.cs @@ -80,7 +80,7 @@ namespace OpenRA.Mods.RA if (replacedTiles.Any()) { - var a = w.CreateActor(template.Bridge, new int2(ni, nj), w.NeutralPlayer); + var a = w.CreateActor(template.Bridge, new int2(ni, nj), w.WorldActor.Owner); var br = a.traits.Get(); foreach (var t in replacedTiles.Keys) diff --git a/OpenRA.Mods.RA/ConquestVictoryConditions.cs b/OpenRA.Mods.RA/ConquestVictoryConditions.cs index 9be1395a75..e8958bc405 100644 --- a/OpenRA.Mods.RA/ConquestVictoryConditions.cs +++ b/OpenRA.Mods.RA/ConquestVictoryConditions.cs @@ -40,7 +40,7 @@ namespace OpenRA.Mods.RA var hasAnything = self.World.Queries.OwnedBy[self.Owner] .WithTrait().Any(); - var hasLost = !hasAnything && self.Owner != self.World.NeutralPlayer; + var hasLost = !hasAnything && !self.Owner.isSpecial; if (hasLost && !HasLost) Surrender(self); diff --git a/OpenRA.Mods.RA/CrateDrop.cs b/OpenRA.Mods.RA/CrateDrop.cs index 81e14a8443..a9906defac 100644 --- a/OpenRA.Mods.RA/CrateDrop.cs +++ b/OpenRA.Mods.RA/CrateDrop.cs @@ -69,12 +69,12 @@ namespace OpenRA.Mods.RA { self.World.AddFrameEndTask(w => { - var crate = new Actor(w, "crate", new int2(0, 0), w.NeutralPlayer); + var crate = new Actor(w, "crate", new int2(0, 0), w.WorldActor.Owner); crates.Add(crate); self.World.WorldActor.traits.Get().Remove(crate, crate.traits.Get()); var startPos = w.ChooseRandomEdgeCell(); - var plane = w.CreateActor("BADR", startPos, w.NeutralPlayer); + var plane = w.CreateActor("BADR", startPos, w.WorldActor.Owner); plane.traits.Get().Facing = Util.GetFacing(p - startPos, 0); plane.CancelActivity(); plane.QueueActivity(new FlyCircle(p)); diff --git a/OpenRA.Mods.RA/CrateSpawner.cs b/OpenRA.Mods.RA/CrateSpawner.cs index d0152fce34..eddf9f94e3 100644 --- a/OpenRA.Mods.RA/CrateSpawner.cs +++ b/OpenRA.Mods.RA/CrateSpawner.cs @@ -71,7 +71,7 @@ namespace OpenRA.Mods.RA if (self.World.IsCellBuildable(p, inWater)) { self.World.AddFrameEndTask( - w => crates.Add(w.CreateActor("crate", p, self.World.NeutralPlayer))); + w => crates.Add(w.CreateActor("crate", p, self.World.WorldActor.Owner))); break; } } diff --git a/OpenRA.Mods.RA/SpawnMapActors.cs b/OpenRA.Mods.RA/SpawnMapActors.cs index 09d0828545..089ca7d76f 100644 --- a/OpenRA.Mods.RA/SpawnMapActors.cs +++ b/OpenRA.Mods.RA/SpawnMapActors.cs @@ -36,8 +36,7 @@ namespace OpenRA.Mods.RA foreach (var actorReference in world.Map.Actors) MapActors[actorReference.Key] = world.CreateActor(actorReference.Value.Name, actorReference.Value.Location, - world.players.Values.FirstOrDefault(p => p.InternalName == actorReference.Value.Owner) - ?? world.NeutralPlayer); + world.players.Values.FirstOrDefault(p => p.InternalName == actorReference.Value.Owner)); Game.skipMakeAnims = false; } diff --git a/mods/ra/maps/shellmap/map.yaml b/mods/ra/maps/shellmap/map.yaml index fb3d8111b5..c858bd6722 100644 --- a/mods/ra/maps/shellmap/map.yaml +++ b/mods/ra/maps/shellmap/map.yaml @@ -21,6 +21,8 @@ Players: Name: Neutral Palette: neutral Race: allies + OwnsWorld:true + isSpecial:true PlayerReference@GoodGuy: Name: GoodGuy Palette: player1 diff --git a/mods/ra/maps/snowyridge/map.yaml b/mods/ra/maps/snowyridge/map.yaml index dbb0ec5272..a6b44f91ce 100644 --- a/mods/ra/maps/snowyridge/map.yaml +++ b/mods/ra/maps/snowyridge/map.yaml @@ -23,6 +23,8 @@ Players: Name: Neutral Palette: neutral Race: allies + OwnsWorld:true + isSpecial:true Actors: Actor0: tc02 Neutral 25,39