refresh GPS on stance change

This commit is contained in:
Chris Forbes
2011-02-13 16:26:06 +13:00
parent 6281fa481f
commit c1aebff8a8
3 changed files with 15 additions and 9 deletions

View File

@@ -191,7 +191,7 @@ namespace OpenRA.Network
w.WorldActor.Trait<Shroud>().UpdatePlayerStance(w, p, oldStance, s);
foreach (var nsc in w.Queries.WithTrait<INotifyStanceChanged>())
nsc.Trait.StanceChanged(p, target, oldStance, s);
nsc.Trait.StanceChanged(nsc.Actor, p, target, oldStance, s);
}
}
}

View File

@@ -229,5 +229,6 @@ namespace OpenRA.Traits
}
public interface INotifyKeyPress { bool KeyPressed(Actor self, KeyInput e); }
public interface INotifyStanceChanged { void StanceChanged(Player a, Player b, Stance oldStance, Stance newStance); }
public interface INotifyStanceChanged { void StanceChanged(Actor self, Player a, Player b,
Stance oldStance, Stance newStance); }
}

View File

@@ -22,7 +22,7 @@ namespace OpenRA.Mods.RA
public override object Create(ActorInitializer init) { return new GpsPower(init.self, this); }
}
class GpsPower : SupportPower, INotifyDamage, ISync
class GpsPower : SupportPower, INotifyDamage, ISync, INotifyStanceChanged
{
public GpsPower(Actor self, GpsPowerInfo info) : base(self, info) { }
@@ -58,11 +58,16 @@ namespace OpenRA.Mods.RA
}
void RefreshGps(Actor self)
{
if (self.World.LocalPlayer != null)
self.World.LocalShroud.Disabled = self.World.Queries.WithTrait<GpsPower>()
.Any(p => p.Actor.Owner.Stances[self.World.LocalPlayer] == Stance.Ally &&
p.Trait.Granted);
}
{
if (self.World.LocalPlayer != null)
self.World.LocalShroud.Disabled = self.World.Queries.WithTrait<GpsPower>()
.Any(p => p.Actor.Owner.Stances[self.World.LocalPlayer] == Stance.Ally &&
p.Trait.Granted);
}
public void StanceChanged(Actor self, Player a, Player b, Stance oldStance, Stance newStance)
{
RefreshGps(self);
}
}
}