Make vertical range of UpgradeActorsNear customizable
This commit is contained in:
@@ -23,6 +23,10 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
[Desc("The range to search for actors to upgrade.")]
|
[Desc("The range to search for actors to upgrade.")]
|
||||||
public readonly WDist Range = WDist.FromCells(3);
|
public readonly WDist Range = WDist.FromCells(3);
|
||||||
|
|
||||||
|
[Desc("The maximum vertical range above terrain to search for actors to upgrade.",
|
||||||
|
"Ignored if 0 (actors are upgraded regardless of vertical distance).")]
|
||||||
|
public readonly WDist MaximumVerticalOffset = WDist.Zero;
|
||||||
|
|
||||||
[Desc("What diplomatic stances are affected.")]
|
[Desc("What diplomatic stances are affected.")]
|
||||||
public readonly Stance ValidStances = Stance.Ally;
|
public readonly Stance ValidStances = Stance.Ally;
|
||||||
|
|
||||||
@@ -44,6 +48,8 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
WPos cachedPosition;
|
WPos cachedPosition;
|
||||||
WDist cachedRange;
|
WDist cachedRange;
|
||||||
WDist desiredRange;
|
WDist desiredRange;
|
||||||
|
WDist cachedVRange;
|
||||||
|
WDist desiredVRange;
|
||||||
|
|
||||||
bool cachedDisabled = true;
|
bool cachedDisabled = true;
|
||||||
|
|
||||||
@@ -52,12 +58,13 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
this.info = info;
|
this.info = info;
|
||||||
this.self = self;
|
this.self = self;
|
||||||
cachedRange = info.Range;
|
cachedRange = info.Range;
|
||||||
|
cachedVRange = info.MaximumVerticalOffset;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void AddedToWorld(Actor self)
|
public void AddedToWorld(Actor self)
|
||||||
{
|
{
|
||||||
cachedPosition = self.CenterPosition;
|
cachedPosition = self.CenterPosition;
|
||||||
proximityTrigger = self.World.ActorMap.AddProximityTrigger(cachedPosition, cachedRange, WDist.Zero, ActorEntered, ActorExited);
|
proximityTrigger = self.World.ActorMap.AddProximityTrigger(cachedPosition, cachedRange, cachedVRange, ActorEntered, ActorExited);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void RemovedFromWorld(Actor self)
|
public void RemovedFromWorld(Actor self)
|
||||||
@@ -73,14 +80,16 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
{
|
{
|
||||||
Game.Sound.Play(disabled ? info.DisableSound : info.EnableSound, self.CenterPosition);
|
Game.Sound.Play(disabled ? info.DisableSound : info.EnableSound, self.CenterPosition);
|
||||||
desiredRange = disabled ? WDist.Zero : info.Range;
|
desiredRange = disabled ? WDist.Zero : info.Range;
|
||||||
|
desiredVRange = disabled ? WDist.Zero : info.MaximumVerticalOffset;
|
||||||
cachedDisabled = disabled;
|
cachedDisabled = disabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (self.CenterPosition != cachedPosition || desiredRange != cachedRange)
|
if (self.CenterPosition != cachedPosition || desiredRange != cachedRange || desiredVRange != cachedVRange)
|
||||||
{
|
{
|
||||||
cachedPosition = self.CenterPosition;
|
cachedPosition = self.CenterPosition;
|
||||||
cachedRange = desiredRange;
|
cachedRange = desiredRange;
|
||||||
self.World.ActorMap.UpdateProximityTrigger(proximityTrigger, cachedPosition, cachedRange, WDist.Zero);
|
cachedVRange = desiredVRange;
|
||||||
|
self.World.ActorMap.UpdateProximityTrigger(proximityTrigger, cachedPosition, cachedRange, cachedVRange);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user