@@ -87,74 +87,17 @@ public override void AddAIHints(int slot, Actor actor, PartyRolesConfig.Assignme
8787class BakeOffAI ( BossModule module ) : RotationModule < AutoBakeOff > ( module ) ;
8888public class AutoBakeOff( WorldState ws ) : UnmanagedRotation ( ws , 5 )
8989{
90- private const float BakeOffRange = 5 ;
91- private static readonly Angle BakeOffHalfAngle = 30 . Degrees ( ) ;
92-
9390 protected override void Exec ( Actor ? primaryTarget )
9491 {
95- if ( Player . FindStatus ( SID . Transporting ) != null )
96- return ;
97- if ( ! Player . InCombat )
98- return ;
99-
100- var totalCount = Hints . PriorityTargets . Count ( ) ;
101- if ( totalCount == 0 )
102- return ;
103-
10492 if ( primaryTarget == null )
105- {
106- var best = Hints . PriorityTargets . MinBy ( e => ( e . Actor . Position - Player . Position ) . LengthSq ( ) ) ;
107- if ( best != null )
108- {
109- Hints . ForcedTarget = best . Actor ;
110- Hints . GoalZones . Add ( Hints . GoalSingleTarget ( best . Actor , BakeOffRange ) ) ;
111- }
11293 return ;
113- }
114-
115- var rangeToTarget = Player . DistanceToHitbox ( primaryTarget ) ;
116- if ( rangeToTarget > BakeOffRange + primaryTarget . HitboxRadius + 0.5f )
94+ if ( Player . FindStatus ( SID . Transporting ) != null )
11795 return ;
118-
119- var playerPos = Player . Position ;
120- var currentDir = Player . Rotation . ToDirection ( ) ;
121- var inCone = Hints . NumPriorityTargetsInAOECone ( playerPos , BakeOffRange , currentDir , BakeOffHalfAngle ) ;
122-
123- if ( inCone == totalCount )
124- {
125- UseAction ( Roleplay . AID . BakeOff , primaryTarget ) ;
96+ if ( ! Player . InCombat )
12697 return ;
127- }
128-
129- Hints . GoalZones . Add ( Hints . GoalAOECone ( primaryTarget , BakeOffRange , BakeOffHalfAngle ) ) ;
130- var bestFacing = BestFacingForAllTargets ( ) ;
131- UseAction ( Roleplay . AID . BakeOff , primaryTarget , 0 , default , bestFacing ) ;
132- }
133-
134- private Angle ? BestFacingForAllTargets ( )
135- {
136- var playerPos = Player . Position ;
137- var inRange = Hints . PriorityTargets
138- . Where ( e => ( e . Actor . Position - playerPos ) . Length ( ) <= BakeOffRange + e . Actor . HitboxRadius )
139- . Select ( e => ( e . Actor . Position - playerPos ) . ToAngle ( ) . Normalized ( ) )
140- . OrderBy ( a => a . Rad )
141- . ToList ( ) ;
142- if ( inRange . Count == 0 )
143- return null ;
144- if ( inRange . Count == 1 )
145- return inRange [ 0 ] ;
146-
147- var first = inRange [ 0 ] ;
148- var last = inRange [ ^ 1 ] ;
149- var spanForward = last . Rad - first . Rad ;
150- var spanWrap = 2 * MathF . PI - spanForward ;
151- var coneSpan = 2 * BakeOffHalfAngle . Rad ;
152-
153- if ( spanForward <= coneSpan )
154- return first + ( last - first ) * 0.5f ;
155- if ( spanWrap <= coneSpan )
156- return ( last + ( spanWrap * 0.5f ) . Radians ( ) ) . Normalized ( ) ;
157- return first + ( last - first ) * 0.5f ;
98+ // iterate Hints.PriorityTargets and compare against Hints.NumPriorityTargetsInAOECone. Only execute when they're the same.
99+ // If they're not the same, set a goal zone for an area that will hit all of them, then call useaction with the correct facing angle
100+ UseAction ( Roleplay . AID . BakeOff , primaryTarget ) ;
158101 }
159102}
160103
0 commit comments