package Ġcom . mat he ws achin . f ate grand autom ata . core Ċ Ċ import Ġcom . mat he ws achin . f ate grand autom ata . scripts . prefs . Preferences Ċ import Ġjava . io . InputStream Ċ import Ġkotlin . math . min Ċ import Ġkotlin . time . Duration Ċ import Ġkotlin . time . Time Source . Mon otonic Ċ import Ġkotlin . time . milliseconds Ċ import Ġkotlin . time . seconds Ċ Ċ /** Ċ Ġ* ĠChecks Ġif Ġthe Ġstop Ġbutton Ġhas Ġbeen Ġpressed . Ċ Ġ* Ċ Ġ* Ġ@ throws ĠScript Abort Exception Ġif Ġthe Ġbutton Ġhas Ġbeen Ġpressed Ċ Ġ*/ Ċ fun Ġcheck Exit Requested () Ġ{ ĊĠĠĠ Ġif Ġ( Autom ata Api . exit Requested ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠScript Abort Exception () ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠClick s Ġon Ġthe Ġ[ Location ]. Ċ Ġ* Ċ Ġ* Ġ@ param ĠTimes Ġthe Ġamount Ġof Ġtimes Ġto Ġclick Ċ Ġ*/ Ċ fun ĠLocation . click ( Times : ĠInt Ġ= Ġ 1 ) Ġ{ ĊĠĠĠ Ġcheck Exit Requested () ĊĠĠĠ ĠAutom ata Api . Gesture Service ?. click ( this . transform (), ĠTimes ) Ċ } Ċ Ċ /** Ċ Ġ* ĠChecks Ġif Ġthe Ġ[ Region ] Ġcontains Ġthe Ġprovided Ġimage . Ċ Ġ* Ċ Ġ* Ġ@ param ĠImage Ġthe Ġimage Ġto Ġlook Ġfor Ċ Ġ* Ġ@ param ĠTimeout Ġhow Ġlong Ġto Ġsearch Ġfor Ġbefore Ġgiving Ġup Ċ Ġ* Ġ@ param ĠSimilar ity Ġthe Ġminimum Ġsimilarity Ġfor Ġthis Ġsearch Ċ Ġ*/ Ċ fun ĠRegion . exists ( ĊĠĠĠ ĠImage : ĠIP attern , ĊĠĠĠ ĠTimeout : ĠDuration Ġ= ĠDuration . ZERO , ĊĠĠĠ ĠSimilar ity : ĠDouble Ġ= ĠAutom ata Api . Min Similarity Ċ ): ĠBoolean Ġ{ ĊĠĠĠ Ġcheck Exit Requested () ĊĠĠĠ Ġreturn ĠAutom ata Api . check Condition Loop ( ĊĠĠĠĠĠĠĠ Ġ{ ĠAutom ata Api . exists Now ( this , ĠImage , ĠSimilar ity ) Ġ}, ĊĠĠĠĠĠĠĠ ĠTimeout ĊĠĠĠ Ġ) Ċ } Ċ Ċ /** Ċ Ġ* ĠW aits Ġuntil Ġthe Ġgiven Ġimage Ġcannot Ġbe Ġfound Ġin Ġthe Ġ[ Region ] Ġanymore . Ċ Ġ* Ċ Ġ* Ġ@ param ĠImage Ġthe Ġimage Ġto Ġsearch Ġfor Ċ Ġ* Ġ@ param ĠTimeout Ġhow Ġlong Ġto Ġwait Ġfor Ġbefore Ġgiving Ġup Ċ Ġ* Ġ@ param ĠSimilar ity Ġthe Ġminimum Ġsimilarity Ġfor Ġthis Ġsearch Ċ Ġ*/ Ċ fun ĠRegion . wait Van ish ( ĊĠĠĠ ĠImage : ĠIP attern , ĊĠĠĠ ĠTimeout : ĠDuration , ĊĠĠĠ ĠSimilar ity : ĠDouble Ġ= ĠAutom ata Api . Min Similarity Ċ ): ĠBoolean Ġ{ ĊĠĠĠ Ġcheck Exit Requested () ĊĠĠĠ Ġreturn ĠAutom ata Api . check Condition Loop ( ĊĠĠĠĠĠĠĠ Ġ{ Ġ! Autom ata Api . exists Now ( this , ĠImage , ĠSimilar ity ) Ġ}, ĊĠĠĠĠĠĠĠ ĠTimeout ĊĠĠĠ Ġ) Ċ } Ċ Ċ /** Ċ Ġ* ĠClick s Ġon Ġthe Ġcenter Ġof Ġthis ĠRegion . Ċ Ġ*/ Ċ fun ĠRegion . click () Ġ= Ġcenter . click () Ċ Ċ /** Ċ Ġ* ĠGets Ġthe Ġwidth Ġand Ġheight Ġin Ġthe Ġform Ġof Ġa Ġ[ Size ] Ġobject . Ċ Ġ*/ Ċ val ĠIP attern . Size Ġget () Ġ= ĠSize ( width , Ġheight ) Ċ Ċ /** Ċ Ġ* ĠAdds Ġborders Ġaround Ġthe Ġ[ Region ]. Ċ Ġ* Ċ Ġ* Ġ@ param ĠDuration Ġhow Ġlong Ġthe Ġborders Ġshould Ġbe Ġdisplayed Ċ Ġ*/ Ċ fun ĠRegion . highlight ( Duration : ĠDuration Ġ= Ġ 0 . 3 . seconds ) Ġ{ ĊĠĠĠ Ġcheck Exit Requested () ĊĠĠĠ ĠAutom ata Api . Platform Impl ?. highlight ( this . transform (), ĠDuration ) Ċ } Ċ Ċ /** Ċ Ġ* ĠGets Ġthe Ġimage Ġcontent Ġof Ġthis ĠRegion . Ċ Ġ* Ċ Ġ* Ġ@ return Ġan Ġ[ IP attern ] Ġobject Ġwith Ġthe Ġimage Ġdata Ċ Ġ*/ Ċ fun ĠRegion . get Pattern (): ĠIP attern ? Ġ{ ĊĠĠĠ Ġreturn ĠScreen shot Manager . get Screenshot () ĊĠĠĠĠĠĠĠ Ġ? . crop ( this . transform To Image ()) ĊĠĠĠĠĠĠĠ Ġ? . copy () Ċ } Ċ Ċ /** Ċ Ġ* ĠS ear ches Ġfor Ġall Ġoccurrences Ġof Ġa Ġgiven Ġimage Ġin Ġthe Ġ[ Region ]. Ċ Ġ* Ċ Ġ* Ġ@ param ĠPattern Ġthe Ġimage Ġto Ġsearch Ġfor Ċ Ġ* Ġ@ param ĠSimilar ity Ġthe Ġminimum Ġsimilarity Ġfor Ġthis Ġsearch Ċ Ġ* Ċ Ġ* Ġ@ return Ġa Ġlist Ġof Ġall Ġmatches Ġin Ġthe Ġform Ġof Ġ[ Match ] Ġobjects Ċ Ġ*/ Ċ fun ĠRegion . findAll ( ĊĠĠĠ ĠPattern : ĠIP attern , ĊĠĠĠ ĠSimilar ity : ĠDouble Ġ= ĠAutom ata Api . Min Similarity Ċ ): ĠSequence < Match > Ġ{ ĊĠĠĠ Ġvar Ġs shot Ġ= ĠScreen shot Manager . get Screenshot () ĊĊĠĠĠ Ġif Ġ( Preferences . Debug Mode ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . highlight () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġs shot Ġ= Ġs shot !!. crop ( this . transform To Image ()) ĊĊĠĠĠ Ġreturn Ġs shot ĊĠĠĠĠĠĠĠ Ġ. find Matches ( Pattern , ĠSimilar ity ) ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Exit Requested () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġregion Ġ= Ġit . Region . transform From Image () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġconvert Ġthe Ġrelative Ġposition Ġin Ġthe Ġregion Ġto Ġthe Ġabsolute Ġposition Ġon Ġthe Ġscreen ĊĠĠĠĠĠĠĠĠĠĠĠ Ġregion Ġ+= Ġthis . location ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠMatch ( region , Ġit . score ) ĊĠĠĠĠĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠCentral Ġclass Ġused Ġfor Ġtriggering Ġgest ures Ġand Ġimage Ġrecognition . Ċ Ġ*/ Ċ class ĠAutom ata Api Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġvar ĠPlatform Impl : ĠI Platform Impl ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar ĠGest ure Service : ĠI Gesture Service ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġfun Ġregister Platform ( Impl : ĠI Platform Impl ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPlatform Impl Ġ= ĠImp l ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġregister Gest ures ( Impl : ĠI Gesture Service ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGest ure Service Ġ= ĠImp l ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠThe Ġdefault Ġminimum Ġsimilarity Ġused Ġfor Ġimage Ġcomparisons . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠMin Similarity Ġ= Ġ 0 . 8 ĊĊĠĠĠĠĠĠĠ Ġfun Ġload Pattern ( Stream : ĠInputStream ): ĠIP attern Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠPlatform Impl !!. load Pattern ( Stream ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġget Resizable Blank Pattern (): ĠIP attern Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠPlatform Impl !!. get Resizable Blank Pattern () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠWait Ġfor Ġa Ġgiven Ġ[ Duration ]. ĠThe Ġwait Ġis Ġpaused Ġregular ly Ġto Ġcheck Ġif Ġthe Ġstop Ġbutton Ġhas ĊĠĠĠĠĠĠĠĠ Ġ* Ġbeen Ġpressed . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġwait ( Duration : ĠDuration ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġepsilon Ġ= Ġ 1 0 0 0 L ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġleft Ġ= ĠDuration . to Long Milliseconds () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSleep ing Ġthis Ġway Ġallows Ġquick Ġexit Ġif Ġde man ded Ġby Ġuser ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( left Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Exit Requested () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġto Sleep Ġ= Ġmin ( epsilon , Ġleft ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠThread . sleep ( to Sleep ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ-= Ġto Sleep ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Volatile ĊĠĠĠĠĠĠĠ Ġvar Ġexit Requested Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġval ĠWindow Region : ĠRegion Ġget () Ġ= ĠPlatform Impl !!. window Region ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠShows Ġa Ġmessage Ġbox Ġwith Ġthe Ġgiven Ġtitle Ġand Ġmessage . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġshow MessageBox ( Title : ĠString , ĠMessage : ĠString , ĠError : ĠException ? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPlatform Impl ?. message Box ( Title , ĠMessage , ĠError ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠShows Ġa Ġtoast Ġwith Ġthe Ġgiven Ġmessage . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġtoast ( Message : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPlatform Impl ?. toast ( Message ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠChecks Ġif Ġthe Ġ[ Region ] Ġcontains Ġthe Ġprovided Ġimage . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param ĠRegion Ġthe Ġsearch Ġregion ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param ĠImage Ġthe Ġimage Ġto Ġlook Ġfor ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param ĠSimilar ity Ġthe Ġminimum Ġsimilarity Ġfor Ġthis Ġsearch ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġexists Now ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRegion : ĠRegion , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠImage : ĠIP attern , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSimilar ity : ĠDouble Ġ= ĠMin Similarity ĊĠĠĠĠĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Exit Requested () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġs shot Ġ= ĠScreen shot Manager . get Screenshot () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Preferences . Debug Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRegion . highlight () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġs shot Ġ= Ġs shot ?. crop ( Region . transform To Image ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġs shot ?. is Match ( Image , ĠSimilar ity ) Ġ?: Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠRe pe ats Ġthe Ġinvocation Ġof Ġthe ĠCondition Ġuntil Ġit Ġreturns Ġ` true ` Ġor Ġuntil Ġthe Ġtimeout Ġhas ĊĠĠĠĠĠĠĠĠ Ġ* Ġbeen Ġreached . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param ĠCondition Ġa Ġfunction Ġwith Ġa Ġ[ Boolean ] Ġreturn Ġvalue ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param ĠTimeout Ġhow Ġlong Ġto Ġwait Ġfor Ġbefore Ġgiving Ġup ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return Ġ` true ` Ġif Ġthe Ġfunction Ġreturned Ġ` true ` Ġat Ġsome Ġpoint , Ġ` false ` Ġif Ġthe Ġtimeout Ġwas ĊĠĠĠĠĠĠĠĠ Ġ* Ġreached ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġcheck Condition Loop ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCondition : Ġ() Ġ-> ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTimeout : ĠDuration Ġ= ĠDuration . ZERO ĊĠĠĠĠĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠendTime Mark Ġ= ĠMon otonic . mark Now () Ġ+ ĠTimeout ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscan Start Ġ= ĠMon otonic . mark Now () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Condition . invoke ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcheck Ġif Ġwe Ġneed Ġto Ġcancel Ġbecause Ġof Ġtimeout ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( endTime Mark . has Passed Now ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠWait Ġa Ġbit Ġbefore Ġchecking Ġagain . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIf Ġinvocation Duration Ġis Ġgreater Ġthan Ġthe Ġscan Interval , Ġwe Ġdon 't Ġwait . Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscan Interval Ġ= Ġ 3 3 0 . milliseconds ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtime To Wait Ġ= Ġscan Interval Ġ- Ġscan Start . elapsed Now () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( time To Wait . is Positive ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwait ( time To Wait ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠTakes Ġa Ġscreenshot Ġand Ġcaches Ġit Ġfor Ġthe Ġduration Ġof Ġthe Ġfunction Ġinvocation . ĠThis Ġis ĊĠĠĠĠĠĠĠĠ Ġ* Ġuseful Ġwhen Ġyou Ġwant Ġto Ġreuse Ġthe Ġsame Ġscreenshot Ġfor Ġmultiple Ġimage Ġsearches . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param ĠAction Ġa Ġfunction Ġto Ġinvoke Ġwhich Ġwill Ġuse Ġthe Ġcached Ġscreenshot ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġ< T > Ġuse Same Snap In ( Action : Ġ() Ġ-> ĠT ): ĠT Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠScreen shot Manager . snapshot () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠAction () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠScreen shot Manager . use Previous Snap Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠSw ip es Ġfrom Ġone Ġ[ Location ] Ġto Ġanother Ġ[ Location ]. ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param ĠStart Ġthe Ġ[ Location ] Ġwhere Ġthe Ġswipe Ġshould Ġstart ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param ĠEnd Ġthe Ġ[ Location ] Ġwhere Ġthe Ġswipe Ġshould Ġend ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġswipe ( Start : ĠLocation , ĠEnd : ĠLocation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGest ure Service ?. swipe ( Start . transform (), ĠEnd . transform ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }