Do the right thing when stances change

This commit is contained in:
Paul Chote
2010-07-27 21:09:43 +12:00
parent 966f607230
commit c6f0b792d3
2 changed files with 27 additions and 2 deletions

View File

@@ -66,9 +66,14 @@ namespace OpenRA.Network
case "SetStance": case "SetStance":
{ {
var targetPlayer = order.Player.World.players[order.TargetLocation.X]; var targetPlayer = order.Player.World.players[order.TargetLocation.X];
var oldStance = order.Player.Stances[targetPlayer];
order.Player.Stances[targetPlayer] = (Stance)order.TargetLocation.Y; order.Player.Stances[targetPlayer] = (Stance)order.TargetLocation.Y;
if (targetPlayer == world.LocalPlayer)
world.WorldActor.traits.Get<Shroud>().UpdatePlayerStance(world, order.Player, oldStance, order.Player.Stances[targetPlayer]);
Game.Debug("{0} has set diplomatic stance vs {1} to {2}".F( Game.Debug("{0} has set diplomatic stance vs {1} to {2}".F(
order.Player.PlayerName, targetPlayer.PlayerName, (Stance)order.TargetLocation.Y)); order.Player.PlayerName, targetPlayer.PlayerName, order.Player.Stances[targetPlayer]));
break; break;
} }
default: default:

View File

@@ -101,6 +101,24 @@ namespace OpenRA.Traits
Dirty(); Dirty();
} }
public void UpdatePlayerStance(World w, Player player, Stance oldStance, Stance newStance)
{
if (oldStance == newStance)
return;
// No longer our ally; remove unit vis
if (oldStance == Stance.Ally)
{
var toRemove = new List<Actor>(vis.Select(a => a.Key).Where(a => a.Owner == player));
foreach (var a in toRemove)
RemoveActor(a);
}
// Is now our ally; add unit vis
if (newStance == Stance.Ally)
foreach (var a in w.Queries.OwnedBy[player])
AddActor(a);
}
public static IEnumerable<int2> GetVisOrigins(Actor a) public static IEnumerable<int2> GetVisOrigins(Actor a)
{ {
@@ -135,7 +153,9 @@ namespace OpenRA.Traits
public void UpdateActor(Actor a) public void UpdateActor(Actor a)
{ {
if (a.Owner == null || a.Owner != a.Owner.World.LocalPlayer) return; if (a.Owner == null || a.Owner.World.LocalPlayer == null
|| a.Owner.Stances[a.Owner.World.LocalPlayer] != Stance.Ally) return;
RemoveActor(a); AddActor(a); RemoveActor(a); AddActor(a);
} }