/* Ċ The ĠMIT ĠLicense Ġ( MIT ) Ċ Ċ Copyright ĠÂ© Ġ 2 0 2 1 ĠCheck mate ĠRobot ics Ċ Ċ Permission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ġof Ġthis Ġsoftware Ġand Ċ associated Ġdocumentation Ġfiles Ġ( the ĠâĢľ Software âĢĿ ), Ġto Ġdeal Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ċ without Ġlimitation Ġthe Ġrights Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ċ copies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ċ following Ġconditions : Ċ Ċ The Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ġall Ġcopies Ġor Ġsubstantial Ċ port ions Ġof Ġthe ĠSoftware . Ċ Ċ THE ĠSOFTWARE ĠIS ĠPROVIDED ĠâĢľ AS ĠIS âĢĿ, ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT Ċ LIMIT ED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN Ċ NO ĠEVENT ĠSHALL ĠTHE ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER ĠLIABILITY , Ċ WH ETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE Ċ SOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN ĠTHE ĠSOFTWARE . Ċ */ Ċ Ċ package Ġorg . first insp ires . ft c . team code . robot . abstract s Ċ Ċ import Ġcom . qual comm . robot core . util . Range Ċ Ċ class ĠTrigger ables Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠEnum Ġto Ġstore Ġthe Ġdirection Ġthe Ġtrigger able Ġis Ġtriggered Ġin ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġenum Ġclass ĠTrigger Direction Ġ{ ĊĠĠĠĠĠĠĠ ĠUP , ĠOFF , ĠDOWN ; ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠInterface Ġto Ġmanage Ġcallbacks Ġfor Ġtrigger ables ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġinterface ĠTrigger able Callback Ġ{ ĊĠĠĠĠĠĠĠ Ġoperator Ġfun Ġinvoke () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTrigger able Ġclass Ġto Ġmanage Ġcallbacks Ġand Ġstates ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġabstract Ġclass ĠAbstract Trigger able Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠWhether Ġor Ġnot Ġthe Ġtrigger able Ġis Ġcurrently Ġactive ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġvar Ġactive : ĠBoolean Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprotected Ġset ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Field ĊĠĠĠĠĠĠĠ Ġvar Ġon Toggle : ĠTrigger able Callback ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠCallback Ġfor Ġwhen Ġthe Ġbutton Ġis Ġpressed ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Field ĊĠĠĠĠĠĠĠ Ġvar Ġon Activate : ĠTrigger able Callback ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠCallback Ġfor Ġwhile Ġthe Ġbutton Ġis Ġpressed ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Field ĊĠĠĠĠĠĠĠ Ġvar Ġwhile Active : ĠTrigger able Callback ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠCallback Ġfor Ġwhen Ġthe Ġbutton Ġis Ġreleased ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Field ĊĠĠĠĠĠĠĠ Ġvar Ġon De activate : ĠTrigger able Callback ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠCallback Ġfor Ġwhile Ġthe Ġtrigger able Ġis Ġde activated ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Field ĊĠĠĠĠĠĠĠ Ġvar Ġwhile Inactive : ĠTrigger able Callback ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠUpdates Ġthe Ġtrigger able Ġstate ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġabstract Ġfun Ġupdate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠButton Ġclass Ġto Ġmanage Ġcallbacks Ġand Ġstates ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġabstract Ġclass ĠAn alog Trigger able Ġ: ĠAbstract Trigger able () Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠThe Ġthreshold Ġfor Ġtrigger able Ġactivation ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġabstract Ġvar Ġactivation Threshold : ĠDouble ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠButton Ġclass Ġto Ġmanage Ġcallbacks Ġand Ġstates ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġclass ĠController Button ( function : Ġ() Ġ-> ĠBoolean ) Ġ: ĠAbstract Trigger able () Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠGet Ġthe Ġvalue Ġof Ġthe Ġbutton Ġfrom Ġthe Ġcontroller ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Field ĊĠĠĠĠĠĠĠ Ġval Ġraw Pressed : Ġ() Ġ-> ĠBoolean Ġ= Ġfunction ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠUpdates Ġthe Ġbutton Ġstate ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġupdate () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġif Ġit 's Ġpressed ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( raw Pressed ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġbut Ġit Ġdoesn 't Ġknow ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! active ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġtell Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactive Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthen Ġrun Ġthe Ġactivate Ġcallback Ġ( if Ġit 's Ġset ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Activate ?. invoke () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Toggle ?. invoke () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġotherwise Ġrun Ġthe Ġnormal Ġactive Ġcallback ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Active ?. invoke () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġif Ġit Ġisn 't Ġpressed ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ(! raw Pressed ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġbut Ġit Ġdoesn 't Ġknow ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( active ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġtell Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactive Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġand Ġrun Ġthe Ġdeactivate Ġcallback Ġ( if Ġit 's Ġset ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon De activate ?. invoke () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Toggle ?. invoke () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġotherwise Ġrun Ġthe Ġnormal Ġinactive Ġcallback ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Inactive ?. invoke () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTrigger Ġclass Ġto Ġmanage Ġcallbacks Ġand Ġstates ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġclass ĠController Trigger ( function : Ġ() Ġ-> ĠFloat ) Ġ: ĠAn alog Trigger able () Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠThe Ġthreshold Ġfor Ġtrigger able Ġactivation ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġoverride Ġvar Ġactivation Threshold Ġ= Ġ 0 . 4 ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠGet Ġthe Ġvalue Ġof Ġthe Ġtrigger Ġfrom Ġthe Ġcontroller ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Field ĊĠĠĠĠĠĠĠ Ġval Ġraw Value : Ġ() Ġ-> ĠFloat Ġ= Ġfunction ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠGet Ġcorrected Ġvalue Ġbased Ġon Ġthe Ġactivation Ġthreshold ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġvar Ġcorrected Value Ġ= Ġ 0 F ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠUpdates Ġthe Ġtrigger Ġstate ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġupdate () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġif Ġit 's Ġover Ġthe Ġthreshold ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( raw Value () Ġ>= Ġactivation Threshold ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġset Ġthe Ġcorrected Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcorrected Value Ġ= ĠRange . scale ( raw Value (). toDouble (), Ġactivation Threshold , Ġ 1 . 0 , Ġ 0 . 0 , Ġ 1 . 0 ). toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġand Ġit Ġdoesn 't Ġknow Ġit 's Ġactive ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! active ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġset Ġit Ġas Ġactive ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactive Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġand Ġrun Ġthe Ġcallback Ġ( if Ġit 's Ġset ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Activate ?. invoke () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Toggle ?. invoke () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthen Ġrun Ġthe Ġrepeat Ġcallback Ġ( if Ġit 's Ġset ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Active ?. invoke () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġif Ġit 's Ġunder Ġthe Ġthreshold ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( raw Value () Ġ< Ġactivation Threshold ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġzero Ġthe Ġcorrected Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcorrected Value Ġ= Ġ 0 F ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġand Ġit Ġthink s Ġit 's Ġactive ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( active ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġset Ġit Ġas Ġinactive ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactive Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġand Ġrun Ġthe Ġcallback Ġ( if Ġit 's Ġset ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon De activate ?. invoke () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Toggle ?. invoke () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthen Ġrun Ġthe Ġrepeat Ġcallback Ġ( if Ġit 's Ġset ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Inactive ?. invoke () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSt ick Ġclass Ġto Ġmanage Ġcallbacks Ġand Ġstates ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġclass ĠController Stick ( function : Ġ() Ġ-> ĠFloat ) Ġ: ĠAn alog Trigger able () Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠThe Ġthreshold Ġfor Ġstick Ġactivation ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġoverride Ġvar Ġactivation Threshold : ĠDouble Ġ= Ġ 0 . 3 ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠGet Ġthe Ġvalue Ġof Ġthe Ġstick Ġfrom Ġthe Ġcontroller ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Field ĊĠĠĠĠĠĠĠ Ġval Ġraw Value : Ġ() Ġ-> ĠFloat Ġ= Ġfunction ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠWhat Ġdirection Ġthe Ġstick Ġis Ġcurrently Ġactive Ġin ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġvar Ġstate Ġ= ĠTrigger Direction . OFF ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠWhat Ġthe Ġvalue Ġof Ġthe Ġstick Ġis Ġif Ġit 's Ġcorrected Ġby Ġthe Ġthreshold ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġvar Ġcorrected Value Ġ= Ġ 0 . 0 F ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠCallback Ġfor Ġwhen Ġthe Ġstick Ġis Ġactivated Ġneg atively ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Field ĊĠĠĠĠĠĠĠ Ġvar Ġon Activate Neg : ĠTrigger able Callback ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠCallback Ġfor Ġwhen Ġthe Ġstick Ġis Ġde activated Ġneg atively ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Field ĊĠĠĠĠĠĠĠ Ġvar Ġon De activate Neg : ĠTrigger able Callback ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠCallback Ġfor Ġwhile Ġthe Ġstick Ġis Ġactive Ġneg atively ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Field ĊĠĠĠĠĠĠĠ Ġvar Ġwhile Active Neg : ĠTrigger able Callback ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠUpdates Ġthe Ġstick Ġstate ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġupdate () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġupdate Ġthe Ġthreshold - corrected Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcorrected Value Ġ= Ġif Ġ( raw Value () Ġ>= Ġactivation Threshold ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRange . scale ( raw Value (). toDouble (), Ġactivation Threshold , Ġ 1 . 0 , Ġ 0 . 0 , Ġ 1 . 0 ). toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( raw Value () Ġ<= Ġ- activation Threshold ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ- Range . scale (- raw Value (). toDouble (), Ġactivation Threshold , Ġ 1 . 0 , Ġ 0 . 0 , Ġ 1 . 0 ). toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġif Ġit Ġthink s Ġit 's Ġup ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTrigger Direction . UP Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġbut Ġit Ġisn 't ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( raw Value () Ġ< Ġactivation Threshold ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġtell Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactive Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= ĠTrigger Direction . OFF ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġand Ġrun Ġthe Ġdeactivate Ġcallback Ġ( if Ġit 's Ġset ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon De activate ?. invoke () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Toggle ?. invoke () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġotherwise Ġrun Ġthe Ġnormal Ġup Ġcallback Ġ( if Ġit 's Ġset ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Active ?. invoke () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġif Ġit Ġthink s Ġit 's Ġcentered ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTrigger Direction . OFF Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġbut Ġit 's Ġup ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( raw Value () Ġ>= Ġactivation Threshold ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġtell Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactive Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= ĠTrigger Direction . UP ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġand Ġrun Ġthe Ġactivate Ġcallback Ġ( if Ġit 's Ġset ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Activate ?. invoke () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Toggle ?. invoke () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġbut Ġit 's Ġdown ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( raw Value () Ġ<= Ġ- activation Threshold ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġtell Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactive Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= ĠTrigger Direction . DOWN ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġand Ġrun Ġthe Ġnegative Ġactive Ġcallback Ġ( if Ġit 's Ġset ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Activate Neg ?. invoke () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Toggle ?. invoke () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġotherwise Ġrun Ġthe Ġnormal Ġoff Ġcallback Ġ( if Ġit 's Ġset ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Inactive ?. invoke () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġif Ġit Ġthink s Ġit 's Ġdown ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTrigger Direction . DOWN Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġbut Ġit Ġisn 't ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( raw Value () Ġ> Ġ- activation Threshold ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġtell Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactive Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= ĠTrigger Direction . OFF ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġand Ġrun Ġthe Ġnegative Ġde activation Ġcallback Ġ( if Ġit 's Ġset ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon De activate Neg ?. invoke () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Toggle ?. invoke () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġotherwise Ġrun Ġthe Ġnormal Ġdown Ġcallback Ġ( if Ġit 's Ġset ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Active Neg ?. invoke () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ċ }