Skip to content

Commit

Permalink
merge fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
CarnifexOptimus committed Jan 29, 2025
1 parent f86357f commit 7e1ecfe
Show file tree
Hide file tree
Showing 148 changed files with 2,402 additions and 2,301 deletions.
4 changes: 2 additions & 2 deletions BossMod/Autorotation/PlanPresetConverter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ private record class TrackChanges(Dictionary<string, string> OptionRenames);
private record class ModuleChanges(Dictionary<string, TrackChanges> TrackChanges, Dictionary<string, string> TrackRenames);
private record class ModuleConverter(Dictionary<string, ModuleChanges> ModuleChanges, Dictionary<string, string> ModuleRenames);

public static VersionedJSONSchema PlanSchema = BuildSchema(true);
public static VersionedJSONSchema PresetSchema = BuildSchema(false);
public static readonly VersionedJSONSchema PlanSchema = BuildSchema(true);
public static readonly VersionedJSONSchema PresetSchema = BuildSchema(false);

private static VersionedJSONSchema BuildSchema(bool plan)
{
Expand Down
2 changes: 1 addition & 1 deletion BossMod/Autorotation/RotationModuleManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,7 @@ public void Update(float estimatedAnimLockDelay, bool isMoving)
_ => (ResolveTargetOverride(strategy, param)?.Position + off1 * off2.Degrees().ToDirection()) ?? Player?.Position ?? default,
};

public override string ToString() => string.Join(", ", _activeModules?.Select(m => m.Module.GetType().Name) ?? []);
public override string ToString() => string.Join(", ", ActiveModules?.Select(m => m.Module.GetType().Name) ?? []);

private IEnumerable<Actor> FilteredPartyMembers(StrategyPartyFiltering filter)
{
Expand Down
23 changes: 14 additions & 9 deletions BossMod/BossModule/AOEShapes.cs
Original file line number Diff line number Diff line change
Expand Up @@ -247,7 +247,8 @@ public RelSimplifiedComplexPolygon GetCombinedPolygon(WPos origin)
if (Shapes2 != null)
{
Polygon = clipper.Simplify(shapes1);
for (var i = 0; i < Shapes2.Count; ++i)
var count = Shapes2.Count;
for (var i = 0; i < count; ++i)
{
var shape = Shapes2[i];
var singleShapeOperand = CreateOperandFromShape(shape, origin);
Expand Down Expand Up @@ -312,27 +313,31 @@ public override void Draw(MiniArena arena, WPos origin, Angle rotation, uint col
public override void Outline(MiniArena arena, WPos origin, Angle rotation, uint color = 0)
{
var combinedPolygon = Polygon ?? GetCombinedPolygon(origin);
for (var i = 0; i < combinedPolygon.Parts.Count; ++i)
var count = combinedPolygon.Parts.Count;
for (var i = 0; i < count; ++i)
{
var part = combinedPolygon.Parts[i];
var exteriorEdges = part.ExteriorEdges.ToList();
for (var j = 0; j < exteriorEdges.Count; ++j)
var exteriorEdges = part.ExteriorEdges;
var exteriorCount = exteriorEdges.Count;
for (var j = 0; j < exteriorCount; ++j)
{
var (start, end) = exteriorEdges[j];
arena.PathLineTo(origin + start);
if (j != exteriorEdges.Count - 1)
if (j != exteriorCount - 1)
arena.PathLineTo(origin + end);
}
MiniArena.PathStroke(true, color);

foreach (var holeIndex in part.Holes)
var lenHoles = part.Holes.Length;
for (var k = 0; k < lenHoles; ++k)
{
var interiorEdges = part.InteriorEdges(holeIndex).ToList();
for (var j = 0; j < interiorEdges.Count; ++j)
var interiorEdges = part.InteriorEdges(part.Holes[k]);
var interiorCount = interiorEdges.Count;
for (var j = 0; j < interiorCount; ++j)
{
var (start, end) = interiorEdges[j];
arena.PathLineTo(origin + start);
if (j != interiorEdges.Count - 1)
if (j != interiorCount - 1)
arena.PathLineTo(origin + end);
}
MiniArena.PathStroke(true, color);
Expand Down
87 changes: 57 additions & 30 deletions BossMod/BossModule/ArenaBounds.cs
Original file line number Diff line number Diff line change
Expand Up @@ -58,29 +58,35 @@ public List<RelTriangle> ClipAndTriangulateCone(WDir centerOffset, float innerRa
(true, false) => CurveApprox.DonutSector(innerRadius, outerRadius, centerDirection - halfAngle, centerDirection + halfAngle, MaxApproxError),
(true, true) => CurveApprox.Donut(innerRadius, outerRadius, MaxApproxError),
};
for (var i = 0; i < points.Length; ++i)
var len = points.Length;
var offset = centerOffset;
for (var i = 0; i < len; ++i)
{
points[i] += centerOffset;
points[i] += offset;
}
return ClipAndTriangulate(points);
}

public List<RelTriangle> ClipAndTriangulateCircle(WDir centerOffset, float radius)
{
var points = CurveApprox.Circle(radius, MaxApproxError);
for (var i = 0; i < points.Length; ++i)
var len = points.Length;
var offset = centerOffset;
for (var i = 0; i < len; ++i)
{
points[i] += centerOffset;
points[i] += offset;
}
return ClipAndTriangulate(points);
}

public List<RelTriangle> ClipAndTriangulateCapsule(WDir centerOffset, WDir direction, float radius, float length)
{
var points = CurveApprox.Capsule(direction, length, radius, MaxApproxError);
for (var i = 0; i < points.Length; ++i)
var len = points.Length;
var offset = centerOffset;
for (var i = 0; i < len; ++i)
{
points[i] += centerOffset;
points[i] += offset;
}
return ClipAndTriangulate(points);
}
Expand All @@ -90,9 +96,11 @@ public List<RelTriangle> ClipAndTriangulateDonut(WDir centerOffset, float innerR
if (innerRadius < outerRadius && innerRadius >= 0)
{
var points = CurveApprox.Donut(innerRadius, outerRadius, MaxApproxError);
for (var i = 0; i < points.Length; ++i)
var len = points.Length;
var offset = centerOffset;
for (var i = 0; i < len; ++i)
{
points[i] += centerOffset;
points[i] += offset;
}
return ClipAndTriangulate(points);
}
Expand Down Expand Up @@ -144,13 +152,18 @@ public sealed record class ArenaBoundsCircle(float Radius, float MapResolution =

protected override PolygonClipper.Operand BuildClipPoly() => new((ReadOnlySpan<WDir>)CurveApprox.Circle(Radius, MaxApproxError));
public override void PathfindMap(Pathfinding.Map map, WPos center) => map.Init(_cachedMap ??= BuildMap(), center);
public override bool Contains(WDir offset) => offset.LengthSq() <= Radius * Radius;
public override bool Contains(WDir offset)
{
var radius = Radius;
return offset.LengthSq() <= radius * radius;
}
public override float IntersectRay(WDir originOffset, WDir dir) => Intersect.RayCircle(originOffset, dir, Radius);

public override WDir ClampToBounds(WDir offset)
{
if (offset.LengthSq() > Radius * Radius)
offset *= Radius / offset.Length();
var radius = Radius;
if (offset.LengthSq() > radius * radius)
offset *= radius / offset.Length();
return offset;
}

Expand All @@ -177,8 +190,11 @@ private static float CalculateScaleFactor(Angle Rotation)
public override void PathfindMap(Pathfinding.Map map, WPos center) => map.Init(_cachedMap ??= BuildMap(), center);
private Pathfinding.Map BuildMap()
{
var map = new Pathfinding.Map(MapResolution, default, HalfWidth, HalfHeight, Rotation);
map.BlockPixelsInside2(ShapeDistance.InvertedRect(default, Rotation, HalfHeight, HalfHeight, HalfWidth), -1);
var halfWidth = HalfWidth;
var halfHeight = HalfHeight;
var rotation = Rotation;
var map = new Pathfinding.Map(MapResolution, default, halfWidth, halfHeight, rotation);
map.BlockPixelsInside2(ShapeDistance.InvertedRect(default, rotation, halfHeight, halfHeight, halfWidth), -1);
return map;
}

Expand All @@ -187,13 +203,16 @@ private Pathfinding.Map BuildMap()

public override WDir ClampToBounds(WDir offset)
{
var offsetX = offset.Dot(Orientation.OrthoL());
var offsetY = offset.Dot(Orientation);
if (Math.Abs(offsetX) > HalfWidth)
offsetX = Math.Sign(offsetX) * HalfWidth;
if (Math.Abs(offsetY) > HalfHeight)
offsetY = Math.Sign(offsetY) * HalfHeight;
return Orientation.OrthoL() * offsetX + Orientation * offsetY;
var orientation = Orientation;
var halfWidth = HalfWidth;
var halfHeight = HalfHeight;
var offsetX = offset.Dot(orientation.OrthoL());
var offsetY = offset.Dot(orientation);
if (Math.Abs(offsetX) > halfWidth)
offsetX = Math.Sign(offsetX) * halfWidth;
if (Math.Abs(offsetY) > halfHeight)
offsetY = Math.Sign(offsetY) * halfHeight;
return orientation.OrthoL() * offsetX + orientation * offsetY;
}
}

Expand All @@ -214,11 +233,15 @@ public ArenaBoundsCustom(float Radius, RelSimplifiedComplexPolygon Poly, float M
poly = Poly;

var edgeList = new List<(WDir, WDir)>();
for (var i = 0; i < Poly.Parts.Count; ++i)
var count = Poly.Parts.Count;
for (var i = 0; i < count; ++i)
{
var part = Poly.Parts[i];
edgeList.AddRange(part.ExteriorEdges);
for (var j = 0; j < part.Holes.Length; ++j)
var len = part.Holes.Length;
if (len == 0)
continue;
for (var j = 0; j < len; ++j)
{
edgeList.AddRange(part.InteriorEdges(j));
}
Expand Down Expand Up @@ -253,7 +276,8 @@ public override WDir ClampToBounds(WDir offset)
}
var minDistance = float.MaxValue;
var nearestPoint = offset;
for (var i = 0; i < edges.Length; ++i)
var len = edges.Length;
for (var i = 0; i < len; ++i)
{
ref var edge = ref edges[i];
var edge1 = edge.Item1;
Expand All @@ -279,21 +303,24 @@ private Pathfinding.Map BuildMap()
if (HalfHeight == default) // calculate bounding box if not already done by ArenaBoundsComplex to reduce amount of point in polygon tests
{
float minX = float.MaxValue, maxX = float.MinValue, minZ = float.MaxValue, maxZ = float.MinValue;

for (var i = 0; i < polygon.Parts.Count; ++i)
var count = polygon.Parts.Count;
for (var i = 0; i < count; ++i)
{
var part = polygon.Parts[i];
for (var j = 0; j < part.Exterior.Length; ++j)
var len = part.Exterior.Length;
for (var j = 0; j < len; ++j)
{
var vertex = part.Exterior[j];
var vertexX = vertex.X;
var vertexZ = vertex.Z;
if (vertex.X < minX)
minX = vertex.X;
minX = vertexX;
if (vertex.X > maxX)
maxX = vertex.X;
maxX = vertexX;
if (vertex.Z < minZ)
minZ = vertex.Z;
minZ = vertexZ;
if (vertex.Z > maxZ)
maxZ = vertex.Z;
maxZ = vertexZ;
}
}
HalfWidth = (maxX - minX) * Half;
Expand Down
3 changes: 2 additions & 1 deletion BossMod/BossModule/BossModule.cs
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,8 @@ public List<Actor> Enemies(uint oid)
public List<Actor> Enemies(ReadOnlySpan<uint> enemies)
{
List<Actor> relevantenemies = [];
for (var i = 0; i < enemies.Length; ++i)
var len = enemies.Length;
for (var i = 0; i < len; ++i)
{
var enemy = enemies[i];
var entry = RelevantEnemies.GetValueOrDefault(enemy);
Expand Down
24 changes: 15 additions & 9 deletions BossMod/BossModule/MiniArena.cs
Original file line number Diff line number Diff line change
Expand Up @@ -281,7 +281,8 @@ public void Zone(List<RelTriangle> triangulation, uint color = 0)
var drawlist = ImGui.GetWindowDrawList();
var restoreFlags = drawlist.Flags;
drawlist.Flags &= ~ImDrawListFlags.AntiAliasedFill;
for (var i = 0; i < triangulation.Count; ++i)
var count = triangulation.Count;
for (var i = 0; i < count; ++i)
{
var tri = triangulation[i];
drawlist.AddTriangleFilled(ScreenCenter + WorldOffsetToScreenOffset(tri.A), ScreenCenter + WorldOffsetToScreenOffset(tri.B), ScreenCenter + WorldOffsetToScreenOffset(tri.C), color != 0 ? color : Colors.AOE);
Expand Down Expand Up @@ -349,13 +350,13 @@ public void TextWorld(WPos center, string text, uint color, float fontSize = 17)
public void Border(uint color)
{
var dl = ImGui.GetWindowDrawList();

for (var i = 0; i < _bounds.ShapeSimplified.Parts.Count; ++i)
var count = _bounds.ShapeSimplified.Parts.Count;
for (var i = 0; i < count; ++i)
{
var part = _bounds.ShapeSimplified.Parts[i];
Vector2? lastPoint = null;

for (var j = 0; j < part.Exterior.Length; ++j)
var exteriorLen = part.Exterior.Length;
for (var j = 0; j < exteriorLen; ++j)
{
var offset = part.Exterior[j];
var currentPoint = ScreenCenter + WorldOffsetToScreenOffset(offset);
Expand All @@ -366,12 +367,14 @@ public void Border(uint color)

dl.PathStroke(color, ImDrawFlags.Closed, 2);

foreach (var holeIndex in part.Holes)
var lenHoles = part.Holes.Length;
for (var l = 0; l < lenHoles; ++l)
{
lastPoint = null;

var holeInteriorPoints = part.Interior(holeIndex);
for (var k = 0; k < holeInteriorPoints.Length; ++k)
var holeInteriorPoints = part.Interior(part.Holes[l]);
var interiorLen = holeInteriorPoints.Length;
for (var k = 0; k < interiorLen; ++k)
{
var offset = holeInteriorPoints[k];
var currentPoint = ScreenCenter + WorldOffsetToScreenOffset(offset);
Expand Down Expand Up @@ -467,7 +470,10 @@ public void Actors(IEnumerable<Actor> actors, uint color = 0, bool allowDeadAndU

public void Actors(List<Actor> actors, uint color = 0, bool allowDeadAndUntargetable = false)
{
for (var i = 0; i < actors.Count; ++i)
var count = actors.Count;
if (count == 0)
return;
for (var i = 0; i < count; ++i)
{
Actor(actors[i], color == 0 ? Colors.Enemy : color, allowDeadAndUntargetable);
}
Expand Down
Loading

0 comments on commit 7e1ecfe

Please sign in to comment.