fix #1088; gpsdot should not be given to opponents

This commit is contained in:
Chris Forbes
2011-07-29 17:22:40 +12:00
parent a79cc0a0e0
commit 4e11702a99

View File

@@ -17,17 +17,21 @@ using OpenRA.Traits;
namespace OpenRA.Mods.RA namespace OpenRA.Mods.RA
{ {
class GpsWatcherInfo : TraitInfo<GpsWatcher> { } class GpsWatcherInfo : ITraitInfo
{
public object Create (ActorInitializer init) { return new GpsWatcher(init.self.Owner); }
}
class GpsWatcher : ISync class GpsWatcher : ISync
{ {
[Sync] [Sync] bool Launched = false;
bool Launched = false; [Sync] public bool GrantedAllies = false;
[Sync] public bool Granted = false;
Player owner;
List<Actor> actors = new List<Actor> { }; List<Actor> actors = new List<Actor> { };
[Sync]
public bool GrantedAllies = false; public GpsWatcher( Player owner ) { this.owner = owner; }
[Sync]
public bool Granted = false;
public void GpsRem(Actor atek) public void GpsRem(Actor atek)
{ {
@@ -53,27 +57,23 @@ namespace OpenRA.Mods.RA
public void RefreshGps(Actor atek) public void RefreshGps(Actor atek)
{ {
RefreshGranted(atek); RefreshGranted();
foreach (TraitPair<GpsWatcher> i in atek.World.ActorsWithTrait<GpsWatcher>()) foreach (TraitPair<GpsWatcher> i in atek.World.ActorsWithTrait<GpsWatcher>())
{ i.Trait.RefreshGranted();
i.Trait.RefreshGranted(atek);
}
if (atek.World.LocalPlayer == null) if (atek.World.LocalPlayer == null)
return; return;
if ((Granted || GrantedAllies) && (atek.World.LocalPlayer.Stances[atek.Owner] == Stance.Ally)) if ((Granted || GrantedAllies) && (atek.World.LocalPlayer.Stances[atek.Owner] == Stance.Ally))
{
atek.World.WorldActor.Trait<Shroud>().ExploreAll(atek.World); atek.World.WorldActor.Trait<Shroud>().ExploreAll(atek.World);
}
} }
public void RefreshGranted(Actor atek) void RefreshGranted()
{ {
Granted = (actors.Count > 0 && Launched); Granted = (actors.Count > 0 && Launched);
GrantedAllies = atek.World.ActorsWithTrait<GpsWatcher>().Any(p => GrantedAllies = owner.World.ActorsWithTrait<GpsWatcher>().Any(p =>
p.Actor.Owner.Stances[atek.Owner] == Stance.Ally && p.Trait.Granted); p.Actor.Owner.Stances[owner] == Stance.Ally && p.Trait.Granted);
} }
} }