package Ġcom . dp . advanced gun n ery control . weapon ais Ċ Ċ import Ġcom . dp . advanced gun n ery control . settings . Settings Ċ import Ġcom . dp . advanced gun n ery control . types and values . Values Ċ import Ġcom . dp . advanced gun n ery control . weapon ais . suffix es . Suffix Base Ċ import Ġcom . fs . star f arer . api . com bat .* Ċ import Ġorg . lazy wizard . lazy lib . com bat . Combat Utils Ċ import Ġorg . lazy wizard . lazy lib . ext . minus Ċ import Ġorg . lazy wizard . lazy lib . ext . plus Ċ import Ġorg . lwjgl . util . vector . Vector 2 f Ċ import Ġkotlin . math .* Ċ Ċ abstract Ġclass ĠSpecific AI Plugin Base ( ĊĠĠĠ Ġprivate Ġval Ġbase AI : ĠAut of ire AI Plugin , ĊĠĠĠ Ġprivate Ġval Ġcustom AI Active : ĠBoolean Ġ= ĠSettings . enable Custom AI (), ĊĠĠĠ Ġvar Ġsuffix : ĠS uffix Base Ġ= ĠS uffix Base ( base AI . weapon ) Ċ ) Ġ: ĠAut of ire AI Plugin Ġ{ ĊĠĠĠ Ġprotected Ġvar Ġtarget Entity : ĠCom bat Entity API ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġlast Target Entity : ĠCom bat Entity API ? Ġ= Ġnull ĊĠĠĠ Ġprotected Ġvar Ġtarget Point : ĠVector 2 f ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġforce Off Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġval Ġweapon Ġ= Ġbase AI . weapon ĊĠĠĠ Ġprivate Ġvar Ġweapon Should Fire Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġcurrent T gt Lead Acc Ġ= Ġ 1 . 0 f ĊĠĠĠ Ġprivate Ġvar Ġlast P 0 Ġ= Ġ 0 . 0 f ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ return Ġa Ġvalue Ġdependent Ġon Ġdistance Ġand Ġvelocity Ġof Ġtarget . ĠLower Ġis Ġbetter ĊĠĠĠĠ Ġ* ĠIf Ġthis Ġturns Ġout Ġto Ġeat Ġtoo Ġmuch Ġperformance , Ġpicking Ġa Ġpseudo - random Ġtarget Ġmight Ġbe Ġbetter ĊĠĠĠĠ Ġ* Ġhint : Ġuse Ġcompute Base Priority ĊĠĠĠĠ Ġ* Ġsimply Ġuse Ġreturn Ġ 0 f Ġif Ġis Base A IO ver writable Ġ= Ġfalse ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġabstract Ġfun Ġcompute Target Priority ( entity : ĠCom bat Entity API , Ġpredicted Location : ĠVector 2 f ): ĠFloat ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ return Ġall Ġenemy Ġentities Ġwithin Ġweapon Ġrange Ġand Ġarc ĊĠĠĠĠ Ġ* Ġhint : Ġuse Ġsomething Ġlike : ĊĠĠĠĠ Ġ* ĠCom bat Utils . get XYZ Within Range (... ). filter NotNull () ĊĠĠĠĠ Ġ* Ġsimply Ġuse Ġempty List () Ġif Ġis Base A IO ver writable Ġ= Ġfalse ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġabstract Ġfun Ġget Re levant Entities Within Range (): ĠList < Combat Entity API > ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ return Ġtrue Ġif Ġthe Ġtarget Ġselected Ġby Ġthe Ġbase AI Ġmatches Ġwhat Ġthe Ġweapon Ġshould Ġtarget ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġabstract Ġfun Ġis Base A IT arget Valid ( ship : ĠShip API ?, Ġmiss ile : ĠM iss ile API ?): ĠBoolean ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ return Ġtrue Ġif Ġthe Ġweapon Ġshould Ġtry Ġto Ġacquire Ġa Ġnew Ġtarget Ġusing Ġcustom ĠAI Ġif Ġbase ĠAI Ġfails ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġabstract Ġfun Ġis Base A IO ver writable (): ĠBoolean ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġperform Ġchecks Ġto Ġsee Ġif Ġthis ĠAI Ġis Ġcompatible Ġwith Ġthe Ġweapon ĊĠĠĠĠ Ġ* Ġif Ġthis Ġreturns Ġfalse , Ġthe Ġbase ĠAI Ġwill Ġbe Ġused Ġinstead ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġabstract Ġfun ĠisValid (): ĠBoolean ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġgets Ġcalled Ġat Ġstart Ġof Ġevery Ġadvance ment Ġframe ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġreset () Ġ{ ĊĠĠĠĠĠĠĠ Ġdetermine Target Leading Accuracy ( target Entity , Ġlast Target Entity ) ĊĠĠĠĠĠĠĠ Ġlast Target Entity Ġ= Ġtarget Entity ĊĠĠĠĠĠĠĠ Ġtarget Entity Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġforce Off Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġtarget Point Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġweapon Should Fire Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġadvance ( p 0 : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlast P 0 Ġ= Ġp 0 ĊĠĠĠĠĠĠĠ Ġreset () ĊĠĠĠĠĠĠĠ Ġif Ġ(! advance Base AI ( p 0 ) Ġ&& Ġcustom AI Active ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadvance With Custom AI () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġadvance Base AI ( p 0 : ĠFloat ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Settings . force Custom AI () Ġ&& Ġis Base A IO ver writable ()) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġbase AI . advance ( p 0 ) ĊĠĠĠĠĠĠĠ Ġif Ġ( is Base A IT arget Valid ( base AI . target Ship , Ġbase AI . target Miss ile )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbase AI . target Miss ile ?. let Ġ{ Ġtarget Entity Ġ= Ġit Ġ} Ġ?: Ġbase AI . target Ship ?. let Ġ{ Ġtarget Entity Ġ= Ġit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbase AI . target ?. let Ġ{ Ġtarget Point Ġ= Ġit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġweapon Should Fire Ġ= Ġbase AI . should Fire () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġadvance With Custom AI () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġvar Ġpotential Targets Ġ= Ġadd Predict ed Location To Targets ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Re levant Entities Within Range (). filter Ġ{ Ġis Host ile ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ). filter Ġ{ Ġis InRange ( it . second , Ġit . first . collision Radius ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠTODO : ĠIt Ġwould Ġbe Ġfaster Ġto Ġget Ġfriend lies Ġand Ġfo es Ġin Ġone Ġgo ĊĠĠĠĠĠĠĠ Ġif Ġ( Settings . custom A IF riend ly Fire Complexity () Ġ>= Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthis Ġis Ġa Ġde cept ively Ġexpensive Ġcall Ġ( there fore Ġlocked Ġbehind Ġopt - in Ġsetting ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpotential Targets Ġ= Ġpotential Targets . filter Ġ{ Ġ! is Friendly Fire ( it . second , Ġget Friend lies ()) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġbest Target Ġ= Ġpotential Targets . min By Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompute Target Priority ( it . first , Ġit . second ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtarget Entity Ġ= Ġbest Target ?. first ĊĠĠĠĠĠĠĠ Ġtarget Point Ġ= Ġbest Target ?. second Ġ?: Ġget Neutral Position ( weapon ) ĊĠĠĠĠĠĠĠ Ġcompute If Should Fire ( potential Targets ). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġweapon Should Fire Ġ= Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġget Friend lies (): ĠList < Pair < Combat Entity API , ĠVector 2 f >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġadd Predict ed Location To Targets ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCom bat Utils . get Ship sWith in Range ( weapon . location , Ġweapon . range ). filter { it Ġ!= Ġweapon . ship }. filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( it . is All y Ġ|| Ġ( it . owner Ġ== Ġ 0 ) Ġ|| Ġ( it . owner Ġ== Ġ 1 0 0 Ġ&& Ġshould Consider Ne utr als As Friend lies ())) Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Within Arc ( it ) Ġ&& Ġ! it . is Fight er ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}). filter Ġ{ Ġis InRange ( it . second , Ġit . first . collision Radius ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġdetermine Target Leading Accuracy ( currentTarget : ĠCom bat Entity API ?, Ġlast Target : ĠCom bat Entity API ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Settings . custom AI Per fect Target Leading ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent T gt Lead Acc Ġ= Ġ 1 . 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcurrent T gt Lead Acc Ġ= Ġif Ġ( currentTarget Ġ== Ġlast Target ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmin ( current T gt Lead Acc Ġ+ Ġ 0 . 2 f Ġ* Ġlast P 0 , Ġ 1 . 0 f ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġweapon . ship ?. mutable Stats ?. aut of ire A im Accuracy ?. modified Value Ġ?: Ġ 1 . 0 f ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġadd Predict ed Location To Targets ( potential Targets : ĠList < Combat Entity API >): ĠList < Pair < Combat Entity API , ĠVector 2 f >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġpotential Targets . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( it , Ġcompute Point To A im At ( it )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġforce Off () Ġ{ ĊĠĠĠĠĠĠĠ Ġbase AI . force Off () ĊĠĠĠĠĠĠĠ Ġforce Off Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Target (): ĠVector 2 f ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtarget Point ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Weapon (): ĠWeapon API Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġweapon ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġapproximate Ġposition Ġwhere Ġthe Ġtarget Ġwill Ġbe Ġafter Ġtravel Ġtime ĊĠĠĠĠ Ġ* Ġbased Ġon Ġposition , Ġvelocity Ġand Ġrotation ĊĠĠĠĠ Ġ* ĠNote : ĠI Ġam Ġsomewhat Ġunsure Ġabout Ġthis Ġfunction ... ĊĠĠĠĠ Ġ* ĠSome Ġobservations : ĊĠĠĠĠ Ġ* Ġ- Ġangles Ġare Ġin Ġdegrees ĊĠĠĠĠ Ġ* Ġ- Ġtarget Ġsh ips Ġcan Ġstr afe , Ġi . e . Ġvelocity Ġdirection Ġ= /= Ġheading ĊĠĠĠĠ Ġ* Ġ- Ġacceleration Ġrefers Ġto Ġmax Ġpossible Ġacceleration , Ġnot Ġcurrent Ġacceleration ĊĠĠĠĠ Ġ* Ġcon clusion : ĠDon 't Ġuse Ġacceleration , Ġtake Ġangular Ġvelocity Ġwith Ġa Ġgr ain Ġof Ġsalt ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġfun Ġcompute Point To A im At ( tgt : ĠCom bat Entity API ): ĠVector 2 f Ġ{ ĊĠĠĠĠĠĠĠ Ġif (! is A im able ( weapon )){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġget Neutral Position ( weapon ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġvar Ġtgt Point Ġ= Ġtgt . location ĊĠĠĠĠĠĠĠ Ġ// Ġno Ġneed Ġto Ġcompute Ġstuff Ġfor Ġbeam Ġor Ġnon - aim able Ġwe apons ĊĠĠĠĠĠĠĠ Ġif Ġ( weapon . is Beam Ġ|| Ġweapon . is Bur st Beam ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtgt Point ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil ĠSettings . custom AI Recursion Level ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtravel T Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlinear Distance From Weapon ( tgt Point ) Ġ/ Ġ( weapon . project ile Speed Ġ* Ġ( 1 . 5 f Ġ- Ġ 0 . 5 f Ġ* Ġcurrent T gt Lead Acc )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvelocity Offset Ġ= Ġ( tgt . velocity Ġ/* + Ġrot ational Velocity Modifier */) Ġtimes _ Ġtravel T ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtgt Point Ġ= Ġtgt . location Ġ+ Ġvelocity Offset ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtgt Point ĊĠĠĠ Ġ} Ċ Ċ // ĠĠĠ Ġprivate Ġfun Ġrotate Vector ( vec : ĠVector 2 f , Ġomega : ĠFloat ): ĠVector 2 f Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġreturn ĠVector 2 f ( vec . x Ġ* Ġcos ( omega ) Ġ- Ġvec . y Ġ* Ġsin ( omega ), Ġvec . x Ġ* Ġsin ( omega ) Ġ+ Ġvec . y Ġ* Ġcos ( omega )) Ċ // ĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Target Ship (): ĠShip API ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtarget Entity Ġas ? ĠShip API ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Target Miss ile (): ĠM iss ile API ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtarget Entity Ġas ? ĠM iss ile API ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġis Within Arc ( entity : ĠCom bat Entity API ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif (! is A im able ( weapon ) Ġ|| Ġweapon . spec . tracking Str Ġ!= Ġnull ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġreturn Ġis Within Arc ( entity . location , Ġentity . collision Radius ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġis Within Arc ( position : ĠVector 2 f , Ġradius : ĠFloat ) Ġ: ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠNote : ĠThis Ġis Ġusing Ġan Ġapprox imated Ġangle , Ġwhich Ġshould Ġbe Ġfine Ġas Ġangles Ġshould Ġbe Ġrather Ġsmall ĊĠĠĠĠĠĠĠ Ġreturn Ġweapon . distance From Arc ( position ) Ġ<= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( radius Ġ/ Ġ( weapon . location Ġ- Ġposition ). length ()) Ġ* Ġ 1 8 0 f Ġ/ ĠPI Ġ* Ġa iming Tolerance Factor ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġopen Ġfun Ġshould Consider Ne utr als As Friend lies () Ġ: ĠBoolean Ġ= Ġtrue ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ return Ġapproximate Ġangular Ġdistance Ġof Ġtarget Ġfrom Ġcurrent Ġweapon Ġfacing Ġin Ġrad ĊĠĠĠĠ Ġ* Ġnote : Ġapproximation Ġworks Ġwell Ġfor Ġsmall Ġvalues Ġand Ġis Ġoff Ġby Ġa Ġfactor Ġof ĠPI / 2 Ġfor Ġ 1 8 0 Â° ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġfun Ġangular Distance From Weapon ( entity : ĠVector 2 f ): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġweapon Direction Ġ= ĠVector 2 f ( cos ( weapon . curr Angle Ġ* Ġdeg To Rad ), Ġsin ( weapon . curr Angle Ġ* Ġdeg To Rad )) ĊĠĠĠĠĠĠĠ Ġval Ġdistance Ġ= Ġentity Ġ- Ġweapon . location ĊĠĠĠĠĠĠĠ Ġval Ġentity Direction Ġ= Ġdistance Ġtimes _ Ġ( 1 f Ġ/ Ġdistance . length ()) ĊĠĠĠĠĠĠĠ Ġreturn Ġ( weapon Direction Ġ- Ġentity Direction ). length () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġis Friendly Fire ( aim Point : ĠVector 2 f , Ġfriend lies : ĠList < Pair < Combat Entity API , ĠVector 2 f >> ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfriend lies In D anger Zone ( aim Point , Ġfriend lies ). isNotEmpty () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġfriend lies In D anger Zone ( ĊĠĠĠĠĠĠĠ Ġaim Point : ĠVector 2 f , ĊĠĠĠĠĠĠĠ Ġfriend lies : ĠList < Pair < Combat Entity API , ĠVector 2 f >> ĊĠĠĠ Ġ): ĠList < Pair < Combat Entity API , ĠVector 2 f >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfriend lies . filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġabs ( angular Distance From Weapon ( aim Point ) Ġ- Ġangular Distance From Weapon ( it . second )) Ġ* Ġlinear Distance From Weapon ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . second ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ<= Ġit . first . collision Radius Ġ* ĠSettings . custom A IF riend ly Fire Ca ution () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġlinear Distance From Weapon ( entity : ĠVector 2 f ): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ( weapon . location Ġ- Ġentity ). length () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġopen Ġfun Ġcompute If Should Fire ( potential Targets : ĠList < Pair < Combat Entity API , ĠVector 2 f >> ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is A im able ( weapon ) Ġ|| Ġweapon . spec . tracking Str Ġ!= Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġpotential Targets . isNotEmpty () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( Settings . custom A IF riend ly Fire Complexity () Ġ>= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Friendly Fire ( vector From Angle Deg ( weapon . curr Angle ), Ġget Friend lies ())) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// ĠNote : ĠIn Ġa Ġsequence , Ġall Ġcalculations Ġare Ġdone Ġon Ġthe Ġfirst Ġelement Ġbefore Ġmoving Ġto Ġthe Ġnext ĊĠĠĠĠĠĠĠ Ġpotential Targets . as Sequence (). filter Ġ{ Ġis InRange ( it . second , Ġit . first . collision Radius ) Ġ}. iterator (). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtolerance Ġ= Ġit . first . collision Radius Ġ* Ġa iming Tolerance Factor Ġ+ Ġa iming Tolerance Flat ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlater al Target Offset Ġ= Ġangular Distance From Weapon ( it . second ) Ġ* Ġlinear Distance From Weapon ( it . second ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( l ateral Target Offset Ġ<= Ġtolerance ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġcompute Base Priority ( entity : ĠCom bat Entity API , Ġpredicted Location : ĠVector 2 f ): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġpredicted Location . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġangular Distance From Weapon ( it ) Ġ+ ĠValues . dist To Angular Dist Eval ution Factor Ġ* Ġlinear Distance From Weapon ( it ) ĊĠĠĠĠĠĠĠ Ġ}. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( last Target Entity Ġ== Ġentity ) Ġit Ġ* Ġ 0 . 0 5 f Ġelse Ġit Ġ// Ġheav ily Ġin cent iv ize Ġstick ing Ġto Ġone Ġtarget ĊĠĠĠĠĠĠĠ Ġ} Ġ* Ġsuffix . modify Priority ( entity ) Ġ* ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( if Ġ( target Ġ== Ġweapon . ship . ship Target ) Ġ 0 . 0 1 f Ġelse Ġ 1 . 0 f ) Ġ// Ġheav ily Ġin cent iv ize Ġtargeting Ġthe Ġship Ġtarget ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġshould Fire (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġweapon Should Fire ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġis InRange ( entity : ĠVector 2 f , Ġradius : ĠFloat Ġ= Ġ 0 f ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġlinear Distance From Weapon ( entity ) Ġ- Ġradius Ġ<= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġweapon . range Ġ+ Ġ( 0 . 2 5 f Ġ* ĠSettings . custom A IT rigger H app iness () Ġ* Ġweapon . project ile Fade Range ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprotected Ġval Ġa iming Tolerance Factor Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 . 0 f Ġ* ĠSettings . custom A IT rigger H app iness () ĊĠĠĠĠĠĠĠ Ġprotected Ġval Ġa iming Tolerance Flat Ġ= Ġ 1 0 f Ġ* ĠSettings . custom A IT rigger H app iness () ĊĠĠĠ Ġ} Ċ } Ċ