Skip to content

Commit

Permalink
BA Absolute Virtue module finished
Browse files Browse the repository at this point in the history
  • Loading branch information
CarnifexOptimus committed Jan 19, 2025
1 parent 17cd0c0 commit 509fc8c
Show file tree
Hide file tree
Showing 56 changed files with 773 additions and 526 deletions.
27 changes: 2 additions & 25 deletions BossMod/Components/PersistentVoidzone.cs
Original file line number Diff line number Diff line change
Expand Up @@ -26,19 +26,7 @@ public override void AddAIHints(int slot, Actor actor, PartyRolesConfig.Assignme
var forbidden = new List<Func<WPos, float>>();
foreach (var s in Sources(Module))
forbidden.Add(Shape.Distance(s.Position, s.Rotation));
hints.AddForbiddenZone(minDistanceFunc);

float minDistanceFunc(WPos pos)
{
var minDistance = float.MaxValue;
for (var i = 0; i < forbidden.Count; ++i)
{
var distance = forbidden[i](pos);
if (distance < minDistance)
minDistance = distance;
}
return minDistance;
}
hints.AddForbiddenZone(ShapeDistance.Union(forbidden));
}
}

Expand Down Expand Up @@ -125,18 +113,7 @@ public override void AddAIHints(int slot, Actor actor, PartyRolesConfig.Assignme
if (shapes.Count == 0)
return;

float distance(WPos p)
{
var minDistance = float.MaxValue;
for (var i = 0; i < shapes.Count; ++i)
{
var distance = shapes[i](p);
if (distance < minDistance)
minDistance = distance;
}
return Inverted ? -minDistance : minDistance;
}
hints.AddForbiddenZone(distance, InvertResolveAt);
hints.AddForbiddenZone(Inverted ? ShapeDistance.InvertedUnion(shapes) : ShapeDistance.Union(shapes), InvertResolveAt);
}

// TODO: reconsider - draw foreground circles instead?
Expand Down
16 changes: 8 additions & 8 deletions BossMod/Components/StackSpread.cs
Original file line number Diff line number Diff line change
Expand Up @@ -185,7 +185,7 @@ public override void AddAIHints(int slot, Actor actor, PartyRolesConfig.Assignme
foreach (var stackWith in ActiveStacks.Where(s => s.Target == actor))
forbidden.Add(ShapeDistance.InvertedCircle(Raid.WithoutSlot().FirstOrDefault(x => !x.IsDead && !IsSpreadTarget(x) && !IsStackTarget(x))!.Position, actorStack.Radius / 3));
if (forbidden.Count > 0)
hints.AddForbiddenZone(p => forbidden.Max(f => f(p)), actorStack.Activation);
hints.AddForbiddenZone(ShapeDistance.Intersection(forbidden), actorStack.Activation);
}
}
else if (!IsSpreadTarget(actor) && !IsStackTarget(actor))
Expand All @@ -195,7 +195,7 @@ public override void AddAIHints(int slot, Actor actor, PartyRolesConfig.Assignme
|| !x.IsInside(actor) && x.InsufficientAmountInside(Module))))
forbidden.Add(ShapeDistance.InvertedCircle(s.Target.Position, s.Radius - 0.25f));
if (forbidden.Count > 0)
hints.AddForbiddenZone(p => forbidden.Max(f => f(p)), ActiveStacks.FirstOrDefault().Activation);
hints.AddForbiddenZone(ShapeDistance.Intersection(forbidden), ActiveStacks.FirstOrDefault().Activation);
}

if (RaidwideOnResolve)
Expand Down Expand Up @@ -493,10 +493,10 @@ public override void AddAIHints(int slot, Actor actor, PartyRolesConfig.Assignme
if (isBaitNotTarget && isBaitTarget || forbiddenActors)
foreach (var b in ActiveBaits.Where(x => x.Target != actor))
forbidden.Add(ShapeDistance.Rect(b.Source.Position, b.Rotation, Range, 0, 2 * HalfWidth));
if (forbiddenInverted.Count > 0)
hints.AddForbiddenZone(p => forbiddenInverted.Max(f => f(p)), ActiveBaits.FirstOrDefault().Activation);
if (forbidden.Count > 0)
hints.AddForbiddenZone(p => forbidden.Min(f => f(p)), ActiveBaits.FirstOrDefault().Activation);
if (forbiddenInverted.Count != 0)
hints.AddForbiddenZone(ShapeDistance.Intersection(forbiddenInverted), ActiveBaits.FirstOrDefault().Activation);
if (forbidden.Count != 0)
hints.AddForbiddenZone(ShapeDistance.Union(forbidden), ActiveBaits.FirstOrDefault().Activation);
}

public override void AddHints(int slot, Actor actor, TextHints hints)
Expand Down Expand Up @@ -571,8 +571,8 @@ public override void AddAIHints(int slot, Actor actor, PartyRolesConfig.Assignme
var forbidden = new List<Func<WPos, float>>();
foreach (var c in Raid.WithoutSlot().Where(x => ActiveStacks.Any(y => y.Target == x)).Exclude(actor))
forbidden.Add(ShapeDistance.InvertedCircle(c.Position, Donut.InnerRadius * 0.25f));
if (forbidden.Count > 0)
hints.AddForbiddenZone(p => forbidden.Max(f => f(p)), ActiveStacks.FirstOrDefault().Activation);
if (forbidden.Count != 0)
hints.AddForbiddenZone(ShapeDistance.Intersection(forbidden), ActiveStacks.FirstOrDefault().Activation);
}

public override void DrawArenaBackground(int pcSlot, Actor pc)
Expand Down
13 changes: 1 addition & 12 deletions BossMod/Components/ThinIce.cs
Original file line number Diff line number Diff line change
Expand Up @@ -52,18 +52,7 @@ public override void AddAIHints(int slot, Actor actor, PartyRolesConfig.Assignme
ShapeDistance.InvertedDonut(pos, ddistance, ddistance + 0.5f),
ShapeDistance.InvertedRect(pos, offset, 0.5f, 0.5f, 0.5f)
};
float maxDistanceFunc(WPos pos)
{
var minDistance = float.MinValue;
for (var i = 0; i < forbidden.Count; ++i)
{
var distance = forbidden[i](pos);
if (distance > minDistance)
minDistance = distance;
}
return minDistance;
}
hints.AddForbiddenZone(maxDistanceFunc, DateTime.MaxValue);
hints.AddForbiddenZone(ShapeDistance.Intersection(forbidden), DateTime.MaxValue);
}
}
}
Loading

0 comments on commit 509fc8c

Please sign in to comment.