Disable GPS dots without active radar.
This commit is contained in:
@@ -31,17 +31,22 @@ namespace OpenRA.Mods.RA.Traits
|
||||
[SequenceReference("SatelliteImage")] public readonly string SatelliteSequence = "idle";
|
||||
[PaletteReference] public readonly string SatellitePalette = "effect";
|
||||
|
||||
[Desc("Requires an actor with an online `ProvidesRadar` to show GPS dots.")]
|
||||
public readonly bool RequiresActiveRadar = true;
|
||||
|
||||
public override object Create(ActorInitializer init) { return new GpsPower(init.Self, this); }
|
||||
}
|
||||
|
||||
class GpsPower : SupportPower, INotifyKilled, INotifySold, INotifyOwnerChanged, ITick
|
||||
{
|
||||
readonly Actor self;
|
||||
readonly GpsPowerInfo info;
|
||||
GpsWatcher owner;
|
||||
|
||||
public GpsPower(Actor self, GpsPowerInfo info)
|
||||
: base(self, info)
|
||||
{
|
||||
this.self = self;
|
||||
this.info = info;
|
||||
owner = self.Owner.PlayerActor.Trait<GpsWatcher>();
|
||||
owner.GpsAdd(self);
|
||||
@@ -84,16 +89,17 @@ namespace OpenRA.Mods.RA.Traits
|
||||
owner.GpsAdd(self);
|
||||
}
|
||||
|
||||
bool NoActiveRadar { get { return !self.World.ActorsHavingTrait<ProvidesRadar>(r => r.IsActive).Any(a => a.Owner == self.Owner); } }
|
||||
bool wasDisabled;
|
||||
|
||||
public void Tick(Actor self)
|
||||
{
|
||||
if (!wasDisabled && self.IsDisabled())
|
||||
if (!wasDisabled && (self.IsDisabled() || (info.RequiresActiveRadar && NoActiveRadar)))
|
||||
{
|
||||
wasDisabled = true;
|
||||
RemoveGps(self);
|
||||
}
|
||||
else if (wasDisabled && !self.IsDisabled())
|
||||
else if (wasDisabled && !self.IsDisabled() && !(info.RequiresActiveRadar && NoActiveRadar))
|
||||
{
|
||||
wasDisabled = false;
|
||||
owner.GpsAdd(self);
|
||||
|
||||
Reference in New Issue
Block a user