world.NeutralPlayer has been defeated

This commit is contained in:
Paul Chote
2010-05-23 20:26:30 +12:00
parent bbbd65a6eb
commit a6f5b12a55
13 changed files with 20 additions and 17 deletions

View File

@@ -25,6 +25,8 @@ namespace OpenRA.FileFormats
public readonly string Name; public readonly string Name;
public readonly string Palette; public readonly string Palette;
public readonly string Race; public readonly string Race;
public readonly bool OwnsWorld = false;
public readonly bool isSpecial = false;
public PlayerReference(MiniYaml my) public PlayerReference(MiniYaml my)
{ {

View File

@@ -41,6 +41,7 @@ namespace OpenRA
public readonly string InternalName; public readonly string InternalName;
public readonly CountryInfo Country; public readonly CountryInfo Country;
public readonly int Index; public readonly int Index;
public readonly bool isSpecial = false;
public ShroudRenderer Shroud; public ShroudRenderer Shroud;
public World World { get; private set; } public World World { get; private set; }

View File

@@ -29,7 +29,6 @@ namespace OpenRA.Widgets.Delegates
bg.Children.RemoveAll(w => controls.Contains(w)); bg.Children.RemoveAll(w => controls.Contains(w));
controls.Clear(); controls.Clear();
var unwantedPlayers = new[] { Game.world.NeutralPlayer, Game.world.LocalPlayer };
var y = 50; var y = 50;
var margin = 20; var margin = 20;
var labelWidth = (bg.Bounds.Width - 3 * margin) / 3; var labelWidth = (bg.Bounds.Width - 3 * margin) / 3;
@@ -58,7 +57,7 @@ namespace OpenRA.Widgets.Delegates
y += 35; 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 pp = p;
var label = new LabelWidget var label = new LabelWidget

View File

@@ -45,7 +45,7 @@ namespace OpenRA.Widgets
if (world.players.Count > 2) /* more than just us + neutral */ if (world.players.Count > 2) /* more than just us + neutral */
{ {
var conds = world.Queries.WithTrait<IVictoryConditions>() var conds = world.Queries.WithTrait<IVictoryConditions>()
.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)) if (conds.Any(c => c.Actor.Owner == world.LocalPlayer && c.Trait.HasLost))
DrawText("YOU ARE DEFEATED"); DrawText("YOU ARE DEFEATED");

View File

@@ -48,7 +48,7 @@ namespace OpenRA.Widgets
? actor.Info.Traits.Get<ValuedInfo>().Description ? actor.Info.Traits.Get<ValuedInfo>().Description
: actor.Info.Name; : actor.Info.Name;
var text2 = (actor.Owner == world.LocalPlayer) 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; var renderer = Game.chrome.renderer;

View File

@@ -52,8 +52,6 @@ namespace OpenRA
get { return players.ContainsKey(localPlayerIndex) ? players[localPlayerIndex] : null; } get { return players.ContainsKey(localPlayerIndex) ? players[localPlayerIndex] : null; }
} }
public Player NeutralPlayer { get; private set; }
public void SetLocalPlayer(int index) public void SetLocalPlayer(int index)
{ {
localPlayerIndex = 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("Palette").SetValue( player, kv.Value.Palette );// Todo: set Player.Color as well
player.GetType().GetField("PlayerName").SetValue( player, kv.Value.Name ); player.GetType().GetField("PlayerName").SetValue( player, kv.Value.Name );
player.GetType().GetField("InternalName").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<CountryInfo>().FirstOrDefault(c => kv.Value.Race == c.Race); var country = WorldActor.Info.Traits.WithInterface<CountryInfo>().FirstOrDefault(c => kv.Value.Race == c.Race);
if (country == null) if (country == null)
@@ -111,9 +110,8 @@ namespace OpenRA
AddPlayer(player); AddPlayer(player);
// Todo: Obsolete usage of "World.NeutralPlayer" if (kv.Value.OwnsWorld)
if (kv.Value.Name == "Neutral") WorldActor.Owner = player;
NeutralPlayer = player;
} }
Timer.Time( "worldActor: {0}" ); Timer.Time( "worldActor: {0}" );

View File

@@ -80,7 +80,7 @@ namespace OpenRA.Mods.RA
if (replacedTiles.Any()) 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<Bridge>(); var br = a.traits.Get<Bridge>();
foreach (var t in replacedTiles.Keys) foreach (var t in replacedTiles.Keys)

View File

@@ -40,7 +40,7 @@ namespace OpenRA.Mods.RA
var hasAnything = self.World.Queries.OwnedBy[self.Owner] var hasAnything = self.World.Queries.OwnedBy[self.Owner]
.WithTrait<MustBeDestroyed>().Any(); .WithTrait<MustBeDestroyed>().Any();
var hasLost = !hasAnything && self.Owner != self.World.NeutralPlayer; var hasLost = !hasAnything && !self.Owner.isSpecial;
if (hasLost && !HasLost) if (hasLost && !HasLost)
Surrender(self); Surrender(self);

View File

@@ -69,12 +69,12 @@ namespace OpenRA.Mods.RA
{ {
self.World.AddFrameEndTask(w => 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); crates.Add(crate);
self.World.WorldActor.traits.Get<UnitInfluence>().Remove(crate, crate.traits.Get<IOccupySpace>()); self.World.WorldActor.traits.Get<UnitInfluence>().Remove(crate, crate.traits.Get<IOccupySpace>());
var startPos = w.ChooseRandomEdgeCell(); var startPos = w.ChooseRandomEdgeCell();
var plane = w.CreateActor("BADR", startPos, w.NeutralPlayer); var plane = w.CreateActor("BADR", startPos, w.WorldActor.Owner);
plane.traits.Get<Unit>().Facing = Util.GetFacing(p - startPos, 0); plane.traits.Get<Unit>().Facing = Util.GetFacing(p - startPos, 0);
plane.CancelActivity(); plane.CancelActivity();
plane.QueueActivity(new FlyCircle(p)); plane.QueueActivity(new FlyCircle(p));

View File

@@ -71,7 +71,7 @@ namespace OpenRA.Mods.RA
if (self.World.IsCellBuildable(p, inWater)) if (self.World.IsCellBuildable(p, inWater))
{ {
self.World.AddFrameEndTask( 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; break;
} }
} }

View File

@@ -36,8 +36,7 @@ namespace OpenRA.Mods.RA
foreach (var actorReference in world.Map.Actors) foreach (var actorReference in world.Map.Actors)
MapActors[actorReference.Key] = world.CreateActor(actorReference.Value.Name, actorReference.Value.Location, MapActors[actorReference.Key] = world.CreateActor(actorReference.Value.Name, actorReference.Value.Location,
world.players.Values.FirstOrDefault(p => p.InternalName == actorReference.Value.Owner) world.players.Values.FirstOrDefault(p => p.InternalName == actorReference.Value.Owner));
?? world.NeutralPlayer);
Game.skipMakeAnims = false; Game.skipMakeAnims = false;
} }

View File

@@ -21,6 +21,8 @@ Players:
Name: Neutral Name: Neutral
Palette: neutral Palette: neutral
Race: allies Race: allies
OwnsWorld:true
isSpecial:true
PlayerReference@GoodGuy: PlayerReference@GoodGuy:
Name: GoodGuy Name: GoodGuy
Palette: player1 Palette: player1

View File

@@ -23,6 +23,8 @@ Players:
Name: Neutral Name: Neutral
Palette: neutral Palette: neutral
Race: allies Race: allies
OwnsWorld:true
isSpecial:true
Actors: Actors:
Actor0: tc02 Neutral 25,39 Actor0: tc02 Neutral 25,39