package Ġorg . us first . f rc . team 4 3 2 2 . command v 2 Ċ Ċ import Ġjava . util . concurrent . Copy On Write ArrayList Ċ Ċ abstract Ġclass ĠTrigger Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtriggers Ġ= ĠCopy On Write ArrayList < Trigger >() ĊĠĠĠĠĠĠĠ Ġvar Ġenabled Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġupdate Triggers () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( enabled ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtriggers . forEach Ġ{ Ġit . poll () Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġon ( trig Fun : Ġ() Ġ-> ĠBoolean ): ĠTrigger Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġobject Ġ: ĠTrigger () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget () Ġ= Ġtrig Fun () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġtriggers . add ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġprev State : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġpress Cmd : ĠCommand ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġrelease Cmd : ĠCommand ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġhold Cmd : ĠCommand ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġcancel Cmd : ĠCommand ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġtoggle Cmd : ĠCommand ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġhold Started : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġtoggle State : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġhold Runs Limit : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġhold Runs Count : ĠInt Ġ= Ġ 0 ĊĊĊĠĠĠ Ġoperator Ġfun Ġinvoke (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġget () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġabstract Ġfun Ġget (): ĠBoolean ĊĊĠĠĠ Ġfun Ġwhen Pressed ( c : ĠCommand ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpress Cmd Ġ= Ġc ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġwhile Hel d ( c : ĠCommand , Ġruns : ĠInt Ġ= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġhold Cmd Ġ= Ġc ĊĠĠĠĠĠĠĠ Ġhold Runs Limit Ġ= Ġruns ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġwhen Released ( c : ĠCommand ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrelease Cmd Ġ= Ġc ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcancel When Pressed ( c : ĠCommand ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcancel Cmd Ġ= Ġc ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtoggle When Pressed ( c : ĠCommand ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtoggle Cmd Ġ= Ġc ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpoll () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcur Ġ= Ġget () ĊĠĠĠĠĠĠĠ Ġif Ġ( cur Ġ&& Ġprev State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! hold Started ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhold Started Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhold Cmd ?. start () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhold Runs Count Ġ+= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( hold Cmd ?. isRunning () Ġ!= Ġtrue Ġ&& Ġ( hold Runs Limit Ġ== Ġ 0 Ġ|| Ġhold Runs Count Ġ< Ġhold Runs Limit )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhold Cmd ?. start () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( cur Ġ&& Ġ! prev State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpress Cmd ?. start () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( toggle State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoggle Cmd ?. cancel () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoggle Cmd ?. start () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoggle State Ġ= Ġ! toggle State ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcancel Cmd ?. cancel () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ(! cur Ġ&& Ġprev State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhold Started Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhold Runs Count Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhold Cmd ?. cancel () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrelease Cmd ?. start () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġprev State Ġ= Ġcur ĊĠĠĠ Ġ} Ċ }