Remove ApplyToAllTargetablePositions hack from RectangleShape
In its current form it is bad for performance due to the ITargetablePositions look-up, and fixing that only to remove the hack entirely a few weeks later would be kind of pointless, so let's get this over with.
This commit is contained in:
@@ -38,10 +38,6 @@ namespace OpenRA.Mods.Common.HitShapes
|
||||
"Mobile actors do NOT need this!")]
|
||||
public readonly WAngle LocalYaw = WAngle.Zero;
|
||||
|
||||
// This is just a temporary work-around until we have a customizable PolygonShape
|
||||
[Desc("Applies shape to every TargetablePosition instead of just CenterPosition.")]
|
||||
public readonly bool ApplyToAllTargetablePositions = false;
|
||||
|
||||
int2 quadrantSize;
|
||||
int2 center;
|
||||
|
||||
@@ -103,13 +99,6 @@ namespace OpenRA.Mods.Common.HitShapes
|
||||
var actorPos = actor.CenterPosition;
|
||||
var orientation = actor.Orientation + WRot.FromYaw(LocalYaw);
|
||||
|
||||
var targetablePositions = actor.TraitsImplementing<ITargetablePositions>();
|
||||
if (ApplyToAllTargetablePositions && targetablePositions.Any())
|
||||
{
|
||||
var positions = targetablePositions.SelectMany(tp => tp.TargetablePositions(actor));
|
||||
actorPos = positions.PositionClosestTo(pos);
|
||||
}
|
||||
|
||||
if (pos.Z > actorPos.Z + VerticalTopOffset)
|
||||
return DistanceFromEdge((pos - (actorPos + new WVec(0, 0, VerticalTopOffset))).Rotate(-orientation));
|
||||
|
||||
@@ -124,25 +113,10 @@ namespace OpenRA.Mods.Common.HitShapes
|
||||
var actorPos = actor.CenterPosition;
|
||||
var orientation = actor.Orientation + WRot.FromYaw(LocalYaw);
|
||||
|
||||
var targetablePositions = actor.TraitsImplementing<ITargetablePositions>();
|
||||
if (ApplyToAllTargetablePositions && targetablePositions.Any())
|
||||
{
|
||||
var positions = targetablePositions.SelectMany(tp => tp.TargetablePositions(actor));
|
||||
foreach (var pos in positions)
|
||||
{
|
||||
var vertsTop = combatOverlayVertsTop.Select(v => wr.Screen3DPosition(pos + v.Rotate(orientation)));
|
||||
var vertsBottom = combatOverlayVertsBottom.Select(v => wr.Screen3DPosition(pos + v.Rotate(orientation)));
|
||||
wcr.DrawPolygon(vertsTop.ToArray(), 1, Color.Yellow);
|
||||
wcr.DrawPolygon(vertsBottom.ToArray(), 1, Color.Yellow);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
var vertsTop = combatOverlayVertsTop.Select(v => wr.Screen3DPosition(actorPos + v.Rotate(orientation)));
|
||||
var vertsBottom = combatOverlayVertsBottom.Select(v => wr.Screen3DPosition(actorPos + v.Rotate(orientation)));
|
||||
wcr.DrawPolygon(vertsTop.ToArray(), 1, Color.Yellow);
|
||||
wcr.DrawPolygon(vertsBottom.ToArray(), 1, Color.Yellow);
|
||||
}
|
||||
|
||||
RangeCircleRenderable.DrawRangeCircle(wr, actorPos, OuterRadius, 1, Color.LimeGreen, 0, Color.LimeGreen);
|
||||
}
|
||||
|
||||
@@ -749,6 +749,28 @@ namespace OpenRA.Mods.Common.UtilityCommands
|
||||
}
|
||||
}
|
||||
|
||||
// Removed ApplyToAllTargetablePositions hack from Rectangle shape
|
||||
if (engineVersion < 20170629)
|
||||
{
|
||||
if (node.Key.StartsWith("HitShape", StringComparison.Ordinal))
|
||||
{
|
||||
var shape = node.Value.Nodes.FirstOrDefault(n => n.Key == "Type" && n.Value.Value == "Rectangle");
|
||||
if (shape != null)
|
||||
{
|
||||
var hack = shape.Value.Nodes.FirstOrDefault(n => n.Key == "ApplyToAllTargetablePositions");
|
||||
if (hack != null)
|
||||
{
|
||||
Console.WriteLine("Rectangle.ApplyToAllTargetablePositions has been removed due to incompatibilities");
|
||||
Console.WriteLine("with the HitShape refactor and projectile/warhead victim scans, as well as performance concerns.");
|
||||
Console.WriteLine("If you absolutely want to use it, please ship a duplicate of the old Rectangle code with your mod code.");
|
||||
Console.WriteLine("Otherwise, we recommend using inheritable shape templates for rectangular buildings");
|
||||
Console.WriteLine("and custom setups for the rest (see our official mods for examples).");
|
||||
shape.Value.Nodes.Remove(hack);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
UpgradeActorRules(modData, engineVersion, ref node.Value.Nodes, node, depth + 1);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user