Do the right thing when stances change
This commit is contained in:
@@ -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:
|
||||||
|
|||||||
@@ -102,6 +102,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)
|
||||||
{
|
{
|
||||||
if (a.Info.Traits.Contains<BuildingInfo>())
|
if (a.Info.Traits.Contains<BuildingInfo>())
|
||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user