Merge pull request #8691 from Mailaender/wrange-renamings

Renamed WRange to WDist in the Lua API and documentation
This commit is contained in:
Oliver Brakmann
2015-07-09 23:03:45 +02:00
24 changed files with 51 additions and 38 deletions

View File

@@ -247,7 +247,7 @@ namespace OpenRA.Graphics
} }
// Cells can be pushed up from below if they have non-zero height. // Cells can be pushed up from below if they have non-zero height.
// Each height step is equivalent to 512 WRange units, which is // Each height step is equivalent to 512 WDist units, which is
// one MPos step for diamond cells, but only half a MPos step // one MPos step for diamond cells, but only half a MPos step
// for classic cells. Doh! // for classic cells. Doh!
var heightOffset = map.TileShape == TileShape.Diamond ? map.MaximumTerrainHeight : map.MaximumTerrainHeight / 2; var heightOffset = map.TileShape == TileShape.Diamond ? map.MaximumTerrainHeight : map.MaximumTerrainHeight / 2;

View File

@@ -146,7 +146,7 @@ namespace OpenRA.Traits
return false; return false;
// Target ranges are calculated in 2D, so ignore height differences // Target ranges are calculated in 2D, so ignore height differences
return Positions.Any(t => (t - origin).HorizontalLengthSquared <= range.RangeSquared); return Positions.Any(t => (t - origin).HorizontalLengthSquared <= range.LengthSquared);
} }
public override string ToString() public override string ToString()

View File

@@ -132,7 +132,7 @@ namespace OpenRA.Traits
var oldActors = currentActors; var oldActors = currentActors;
var delta = new WVec(Range, Range, WDist.Zero); var delta = new WVec(Range, Range, WDist.Zero);
currentActors = am.ActorsInBox(Position - delta, Position + delta) currentActors = am.ActorsInBox(Position - delta, Position + delta)
.Where(a => (a.CenterPosition - Position).HorizontalLengthSquared < Range.RangeSquared) .Where(a => (a.CenterPosition - Position).HorizontalLengthSquared < Range.LengthSquared)
.ToList(); .ToList();
var entered = currentActors.Except(oldActors); var entered = currentActors.Except(oldActors);

View File

@@ -75,7 +75,7 @@ namespace OpenRA.Traits
public static IEnumerable<CPos> CellsInRange(Map map, WPos pos, WDist range) public static IEnumerable<CPos> CellsInRange(Map map, WPos pos, WDist range)
{ {
var r = (range.Length + 1023) / 1024; var r = (range.Length + 1023) / 1024;
var limit = range.RangeSquared; var limit = range.LengthSquared;
var cell = map.CellContaining(pos); var cell = map.CellContaining(pos);
foreach (var c in map.FindTilesInCircle(cell, r, true)) foreach (var c in map.FindTilesInCircle(cell, r, true))

View File

@@ -23,7 +23,7 @@ namespace OpenRA
public struct WDist : IComparable, IComparable<WDist>, IEquatable<WDist>, IScriptBindable, ILuaAdditionBinding, ILuaSubtractionBinding, ILuaEqualityBinding, ILuaTableBinding public struct WDist : IComparable, IComparable<WDist>, IEquatable<WDist>, IScriptBindable, ILuaAdditionBinding, ILuaSubtractionBinding, ILuaEqualityBinding, ILuaTableBinding
{ {
public readonly int Length; public readonly int Length;
public long RangeSquared { get { return (long)Length * (long)Length; } } public long LengthSquared { get { return (long)Length * (long)Length; } }
public WDist(int r) { Length = r; } public WDist(int r) { Length = r; }
public static readonly WDist Zero = new WDist(0); public static readonly WDist Zero = new WDist(0);
@@ -110,7 +110,7 @@ namespace OpenRA
WDist a; WDist a;
WDist b; WDist b;
if (!left.TryGetClrValue<WDist>(out a) || !right.TryGetClrValue<WDist>(out b)) if (!left.TryGetClrValue<WDist>(out a) || !right.TryGetClrValue<WDist>(out b))
throw new LuaException("Attempted to call WRange.Add(WRange, WRange) with invalid arguments."); throw new LuaException("Attempted to call WDist.Add(WDist, WDist) with invalid arguments.");
return new LuaCustomClrObject(a + b); return new LuaCustomClrObject(a + b);
} }
@@ -120,7 +120,7 @@ namespace OpenRA
WDist a; WDist a;
WDist b; WDist b;
if (!left.TryGetClrValue<WDist>(out a) || !right.TryGetClrValue<WDist>(out b)) if (!left.TryGetClrValue<WDist>(out a) || !right.TryGetClrValue<WDist>(out b))
throw new LuaException("Attempted to call WRange.Subtract(WRange, WRange) with invalid arguments."); throw new LuaException("Attempted to call WDist.Subtract(WDist, WDist) with invalid arguments.");
return new LuaCustomClrObject(a - b); return new LuaCustomClrObject(a - b);
} }
@@ -130,7 +130,7 @@ namespace OpenRA
WDist a; WDist a;
WDist b; WDist b;
if (!left.TryGetClrValue<WDist>(out a) || !right.TryGetClrValue<WDist>(out b)) if (!left.TryGetClrValue<WDist>(out a) || !right.TryGetClrValue<WDist>(out b))
throw new LuaException("Attempted to call WRange.Equals(WRange, WRange) with invalid arguments."); throw new LuaException("Attempted to call WDist.Equals(WDist, WDist) with invalid arguments.");
return a == b; return a == b;
} }
@@ -141,14 +141,15 @@ namespace OpenRA
{ {
switch (key.ToString()) switch (key.ToString())
{ {
case "Range": return Length; case "Length": return Length;
default: throw new LuaException("WPos does not define a member '{0}'".F(key)); case "Range": Game.Debug("WRange.Range is deprecated. Use WDist.Length instead"); return Length;
default: throw new LuaException("WDist does not define a member '{0}'".F(key));
} }
} }
set set
{ {
throw new LuaException("WRange is read-only. Use WRange.New to create a new value"); throw new LuaException("WDist is read-only. Use WDist.New to create a new value");
} }
} }
#endregion #endregion

View File

@@ -37,7 +37,7 @@ namespace OpenRA
// Target ranges are calculated in 2D, so ignore height differences // Target ranges are calculated in 2D, so ignore height differences
var vec = new WVec(r, r, WDist.Zero); var vec = new WVec(r, r, WDist.Zero);
return world.ActorMap.ActorsInBox(origin - vec, origin + vec).Where( return world.ActorMap.ActorsInBox(origin - vec, origin + vec).Where(
a => (a.CenterPosition - origin).HorizontalLengthSquared <= r.RangeSquared); a => (a.CenterPosition - origin).HorizontalLengthSquared <= r.LengthSquared);
} }
} }

View File

@@ -57,7 +57,7 @@ namespace OpenRA.Mods.Common.Activities
var diff = new WVec(radius, radius, WDist.Zero); var diff = new WVec(radius, radius, WDist.Zero);
var candidates = self.World.ActorMap.ActorsInBox(self.CenterPosition - diff, self.CenterPosition + diff) var candidates = self.World.ActorMap.ActorsInBox(self.CenterPosition - diff, self.CenterPosition + diff)
.Where(primaryFilter).Select(a => new { Actor = a, Ls = (self.CenterPosition - a.CenterPosition).HorizontalLengthSquared }) .Where(primaryFilter).Select(a => new { Actor = a, Ls = (self.CenterPosition - a.CenterPosition).HorizontalLengthSquared })
.Where(p => p.Ls <= radius.RangeSquared).OrderBy(p => p.Ls).Select(p => p.Actor); .Where(p => p.Ls <= radius.LengthSquared).OrderBy(p => p.Ls).Select(p => p.Actor);
if (preferenceFilters != null) if (preferenceFilters != null)
foreach (var filter in preferenceFilters) foreach (var filter in preferenceFilters)
{ {

View File

@@ -48,8 +48,8 @@ namespace OpenRA.Mods.Common.Activities
var maxCells = (maxRange.Length + 1023) / 1024; var maxCells = (maxRange.Length + 1023) / 1024;
var minCells = minRange.Length / 1024; var minCells = minRange.Length / 1024;
var outerSq = maxRange.RangeSquared; var outerSq = maxRange.LengthSquared;
var innerSq = minRange.RangeSquared; var innerSq = minRange.LengthSquared;
var center = Target.CenterPosition; var center = Target.CenterPosition;
return map.FindTilesInAnnulus(targetPosition, minCells + 1, maxCells).Where(c => return map.FindTilesInAnnulus(targetPosition, minCells + 1, maxCells).Where(c =>

View File

@@ -22,7 +22,7 @@ namespace OpenRA.Mods.Common.Effects
{ {
public class BulletInfo : IProjectileInfo public class BulletInfo : IProjectileInfo
{ {
[Desc("Projectile speed in WRange / tick, two values indicate variable velocity.")] [Desc("Projectile speed in WDist / tick, two values indicate variable velocity.")]
public readonly WDist[] Speed = { new WDist(17) }; public readonly WDist[] Speed = { new WDist(17) };
[Desc("Maximum offset at the maximum range.")] [Desc("Maximum offset at the maximum range.")]
public readonly WDist Inaccuracy = WDist.Zero; public readonly WDist Inaccuracy = WDist.Zero;

View File

@@ -26,7 +26,7 @@ namespace OpenRA.Mods.Common.Effects
[SequenceReference("Image")] public readonly string Sequence = "idle"; [SequenceReference("Image")] public readonly string Sequence = "idle";
public readonly string Palette = "effect"; public readonly string Palette = "effect";
public readonly bool Shadow = false; public readonly bool Shadow = false;
[Desc("Projectile speed in WRange / tick")] [Desc("Projectile speed in WDist / tick")]
public readonly WDist Speed = new WDist(8); public readonly WDist Speed = new WDist(8);
[Desc("Maximum vertical pitch when changing altitude.")] [Desc("Maximum vertical pitch when changing altitude.")]
public readonly WAngle MaximumPitch = WAngle.FromDegrees(30); public readonly WAngle MaximumPitch = WAngle.FromDegrees(30);
@@ -182,7 +182,7 @@ namespace OpenRA.Mods.Common.Effects
var cell = world.Map.CellContaining(pos); var cell = world.Map.CellContaining(pos);
var shouldExplode = (pos.Z < 0) // Hit the ground var shouldExplode = (pos.Z < 0) // Hit the ground
|| (dist.LengthSquared < info.CloseEnough.RangeSquared) // Within range || (dist.LengthSquared < info.CloseEnough.LengthSquared) // Within range
|| (info.RangeLimit != 0 && ticks > info.RangeLimit) // Ran out of fuel || (info.RangeLimit != 0 && ticks > info.RangeLimit) // Ran out of fuel
|| (info.Blockable && world.ActorMap.GetUnitsAt(cell).Any(a => a.HasTrait<IBlocksProjectiles>())) // Hit a wall or other blocking obstacle || (info.Blockable && world.ActorMap.GetUnitsAt(cell).Any(a => a.HasTrait<IBlocksProjectiles>())) // Hit a wall or other blocking obstacle
|| !world.Map.Contains(cell) // This also avoids an IndexOutOfRangeException in GetTerrainInfo below. || !world.Map.Contains(cell) // This also avoids an IndexOutOfRangeException in GetTerrainInfo below.

View File

@@ -59,15 +59,27 @@ namespace OpenRA.Mods.Common.Scripting
public WVec Zero { get { return WVec.Zero; } } public WVec Zero { get { return WVec.Zero; } }
} }
[ScriptGlobal("WDist")]
public class WDistGlobal : ScriptGlobal
{
public WDistGlobal(ScriptContext context) : base(context) { }
[Desc("Create a new WDist.")]
public WDist New(int r) { return new WDist(r); }
[Desc("Create a new WDist by cell distance")]
public WDist FromCells(int numCells) { return WDist.FromCells(numCells); }
}
[ScriptGlobal("WRange")] [ScriptGlobal("WRange")]
public class WRangeGlobal : ScriptGlobal public class WRangeGlobal : ScriptGlobal
{ {
public WRangeGlobal(ScriptContext context) : base(context) { } public WRangeGlobal(ScriptContext context) : base(context) { }
[Desc("Create a new WRange.")] [Desc("Create a new WRange. DEPRECATED! Will be removed.")]
public WDist New(int r) { return new WDist(r); } public WDist New(int r) { Game.Debug("WRange is deprecated. Use WDist instead."); return new WDist(r); }
[Desc("Create a new WRange by cell distance")] [Desc("Create a new WRange by cell distance. DEPRECATED! Will be removed.")]
public WDist FromCells(int numCells) { return WDist.FromCells(numCells); } public WDist FromCells(int numCells) { Game.Debug("WRange is deprecated. Use WDist instead."); return WDist.FromCells(numCells); }
} }
} }

View File

@@ -112,7 +112,7 @@ namespace OpenRA.Mods.Common.Traits
var d = self.CenterPosition - other.CenterPosition; var d = self.CenterPosition - other.CenterPosition;
var distSq = d.HorizontalLengthSquared; var distSq = d.HorizontalLengthSquared;
if (distSq > info.IdealSeparation.RangeSquared) if (distSq > info.IdealSeparation.LengthSquared)
return WVec.Zero; return WVec.Zero;
if (distSq < 1) if (distSq < 1)

View File

@@ -268,7 +268,7 @@ namespace OpenRA.Mods.Common.Traits
if (modifiers.HasModifier(TargetModifiers.ForceAttack)) if (modifiers.HasModifier(TargetModifiers.ForceAttack))
{ {
var targetRange = (self.World.Map.CenterOfCell(location) - self.CenterPosition).HorizontalLengthSquared; var targetRange = (self.World.Map.CenterOfCell(location) - self.CenterPosition).HorizontalLengthSquared;
if (targetRange > ab.GetMaximumRange().RangeSquared) if (targetRange > ab.GetMaximumRange().LengthSquared)
cursor = ab.Info.OutsideRangeCursor; cursor = ab.Info.OutsideRangeCursor;
return true; return true;

View File

@@ -144,7 +144,7 @@ namespace OpenRA.Mods.Common.Traits
return; return;
var targetCell = self.World.Map.CellContaining(target.CenterPosition); var targetCell = self.World.Map.CellContaining(target.CenterPosition);
if ((self.CenterPosition - target.CenterPosition).LengthSquared < transport.MinimumDistance.RangeSquared) if ((self.CenterPosition - target.CenterPosition).LengthSquared < transport.MinimumDistance.LengthSquared)
return; return;
transport.RequestTransport(targetCell, nextActivity); transport.RequestTransport(targetCell, nextActivity);

View File

@@ -26,7 +26,7 @@ namespace OpenRA.Mods.Common.Traits
[Desc("Travel time - split equally between ascent and descent")] [Desc("Travel time - split equally between ascent and descent")]
public readonly int FlightDelay = 400; public readonly int FlightDelay = 400;
[Desc("Visual ascent velocity in WRange / tick")] [Desc("Visual ascent velocity in WDist / tick")]
public readonly WDist FlightVelocity = new WDist(512); public readonly WDist FlightVelocity = new WDist(512);
[Desc("Descend immediately on the target, with half the FlightDelay")] [Desc("Descend immediately on the target, with half the FlightDelay")]

View File

@@ -107,7 +107,7 @@ namespace OpenRA.Mods.Common.Traits
public void UnitProducedByOther(Actor self, Actor producer, Actor produced) public void UnitProducedByOther(Actor self, Actor producer, Actor produced)
{ {
// Work around for actors produced within the region not triggering until the second tick // Work around for actors produced within the region not triggering until the second tick
if ((produced.CenterPosition - self.CenterPosition).HorizontalLengthSquared <= info.Range.RangeSquared) if ((produced.CenterPosition - self.CenterPosition).HorizontalLengthSquared <= info.Range.LengthSquared)
{ {
var stance = self.Owner.Stances[produced.Owner]; var stance = self.Owner.Stances[produced.Owner];
if (!info.ValidStances.HasFlag(stance)) if (!info.ValidStances.HasFlag(stance))

View File

@@ -92,7 +92,7 @@ namespace OpenRA.Mods.Common.Traits
// Select only the tiles that are within range from the requested SubCell // Select only the tiles that are within range from the requested SubCell
// This assumes that the SubCell does not change during the path traversal // This assumes that the SubCell does not change during the path traversal
var tilesInRange = world.Map.FindTilesInCircle(targetCell, range.Length / 1024 + 1) var tilesInRange = world.Map.FindTilesInCircle(targetCell, range.Length / 1024 + 1)
.Where(t => (world.Map.CenterOfCell(t) - target).LengthSquared <= range.RangeSquared .Where(t => (world.Map.CenterOfCell(t) - target).LengthSquared <= range.LengthSquared
&& mi.CanEnterCell(self.World as World, self as Actor, t)); && mi.CanEnterCell(self.World as World, self as Actor, t));
// See if there is any cell within range that does not involve a cross-domain request // See if there is any cell within range that does not involve a cross-domain request

View File

@@ -66,7 +66,7 @@ namespace OpenRA.Mods.Common.Warheads
continue; continue;
// If the impact position is within any actor's health radius, we have a direct hit // If the impact position is within any actor's health radius, we have a direct hit
if ((unit.CenterPosition - pos).LengthSquared <= healthInfo.Radius.RangeSquared) if ((unit.CenterPosition - pos).LengthSquared <= healthInfo.Radius.LengthSquared)
return true; return true;
} }

View File

@@ -56,7 +56,7 @@ namespace OpenRA.Mods.D2k.Traits
public void RequestTransport(CPos destination, Activity afterLandActivity) public void RequestTransport(CPos destination, Activity afterLandActivity)
{ {
var destPos = self.World.Map.CenterOfCell(destination); var destPos = self.World.Map.CenterOfCell(destination);
if (destination == CPos.Zero || (self.CenterPosition - destPos).LengthSquared < info.MinDistance.RangeSquared) if (destination == CPos.Zero || (self.CenterPosition - destPos).LengthSquared < info.MinDistance.LengthSquared)
{ {
WantsTransport = false; // Be sure to cancel any pending transports WantsTransport = false; // Be sure to cancel any pending transports
return; return;
@@ -122,7 +122,7 @@ namespace OpenRA.Mods.D2k.Traits
return false; return false;
var destPos = self.World.Map.CenterOfCell(Destination); var destPos = self.World.Map.CenterOfCell(Destination);
if ((self.CenterPosition - destPos).LengthSquared < info.MinDistance.RangeSquared) if ((self.CenterPosition - destPos).LengthSquared < info.MinDistance.LengthSquared)
{ {
MovementCancelled(self); MovementCancelled(self);
return false; return false;
@@ -150,7 +150,7 @@ namespace OpenRA.Mods.D2k.Traits
// Last change to change our mind... // Last change to change our mind...
var destPos = self.World.Map.CenterOfCell(Destination); var destPos = self.World.Map.CenterOfCell(Destination);
if ((self.CenterPosition - destPos).LengthSquared < info.MinDistance.RangeSquared) if ((self.CenterPosition - destPos).LengthSquared < info.MinDistance.LengthSquared)
{ {
MovementCancelled(self); MovementCancelled(self);
return false; return false;

View File

@@ -332,7 +332,7 @@ getAirstrikeTarget = function()
local list = Nod.GetGroundAttackers() local list = Nod.GetGroundAttackers()
local target = list[DateTime.GameTime % #list + 1].CenterPosition local target = list[DateTime.GameTime % #list + 1].CenterPosition
local sams = Map.ActorsInCircle(target, WRange.New(8 * 1024), function(actor) local sams = Map.ActorsInCircle(target, WDist.New(8 * 1024), function(actor)
return actor.Type == "sam" end) return actor.Type == "sam" end)
if #sams == 0 then if #sams == 0 then

View File

@@ -284,7 +284,7 @@ InitTriggers = function()
USSRTruk.Move(BaseCameraWaypoint.Location) USSRTruk.Move(BaseCameraWaypoint.Location)
end end
end) end)
Trigger.OnEnteredProximityTrigger(BaseCameraWaypoint.CenterPosition, WRange.New(7 * 1024), function(a, id) Trigger.OnEnteredProximityTrigger(BaseCameraWaypoint.CenterPosition, WDist.New(7 * 1024), function(a, id)
if a.Type == "truk" and not baseCamera then if a.Type == "truk" and not baseCamera then
Trigger.RemoveProximityTrigger(id) Trigger.RemoveProximityTrigger(id)
baseCamera = Actor.Create("camera", true, { Owner = player, Location = BaseCameraWaypoint.Location }) baseCamera = Actor.Create("camera", true, { Owner = player, Location = BaseCameraWaypoint.Location })

View File

@@ -391,7 +391,7 @@ InitTriggers = function()
end) end)
local tanksLeft = 0 local tanksLeft = 0
Trigger.OnExitedProximityTrigger(ProvingGroundsCameraPoint.CenterPosition, WRange.New(10 * 1024), function(a, id) Trigger.OnExitedProximityTrigger(ProvingGroundsCameraPoint.CenterPosition, WDist.New(10 * 1024), function(a, id)
if a.Type == "5tnk" then if a.Type == "5tnk" then
tanksLeft = tanksLeft + 1 tanksLeft = tanksLeft + 1
if tanksLeft == 3 then if tanksLeft == 3 then

View File

@@ -240,7 +240,7 @@ WorldLoaded = function()
end) end)
end) end)
Trigger.OnEnteredProximityTrigger(USSRExpansionPoint.CenterPosition, WRange.New(4 * 1024), function(unit, id) Trigger.OnEnteredProximityTrigger(USSRExpansionPoint.CenterPosition, WDist.New(4 * 1024), function(unit, id)
if unit.Owner == player and Radar.Owner == player then if unit.Owner == player and Radar.Owner == player then
Trigger.RemoveProximityTrigger(id) Trigger.RemoveProximityTrigger(id)

View File

@@ -243,8 +243,8 @@ SetupBridges = function()
Media.DisplayMessage("Commander! The Soviets destroyed the bridges to disable our reinforcements. Repair them for additional reinforcements.", "Incoming Report") Media.DisplayMessage("Commander! The Soviets destroyed the bridges to disable our reinforcements. Repair them for additional reinforcements.", "Incoming Report")
RepairBridges = allies.AddSecondaryObjective("Repair the two southern bridges.") RepairBridges = allies.AddSecondaryObjective("Repair the two southern bridges.")
local bridgeA = Map.ActorsInCircle(BrokenBridge1.CenterPosition, WRange.FromCells(1), function(self) return self.Type == "bridge1" end) local bridgeA = Map.ActorsInCircle(BrokenBridge1.CenterPosition, WDist.FromCells(1), function(self) return self.Type == "bridge1" end)
local bridgeB = Map.ActorsInCircle(BrokenBridge2.CenterPosition, WRange.FromCells(1), function(self) return self.Type == "bridge1" end) local bridgeB = Map.ActorsInCircle(BrokenBridge2.CenterPosition, WDist.FromCells(1), function(self) return self.Type == "bridge1" end)
Utils.Do(bridgeA, function(bridge) Utils.Do(bridgeA, function(bridge)
Trigger.OnDamaged(bridge, function() Trigger.OnDamaged(bridge, function()