package Ġorg . first insp ires . ft c . team code . util Ċ Ċ import Ġcom . qual comm . robot core . util . Elapsed Time Ċ import Ġkotlin . math . abs Ċ import Ġkotlin . math . sign Ċ Ċ class ĠMotor Interpolation ( initial : ĠDouble , Ġval Ġrate : ĠDouble ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġelapsed Time Ġ= ĠE lapsed Time () ĊĊĠĠĠ Ġprivate Ġvar Ġstarting Time Ġ= Ġelapsed Time . seconds () ĊĊĠĠĠ Ġvar Ġinitial Ġ= Ġinitial ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġval Ġis Busy : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchange Ġ= Ġrate Ġ* Ġ( elapsed Time . seconds () Ġ- Ġstarting Time ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtarget Change Ġ= Ġabs ( target Ġ- Ġinitial ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġchange Ġ< Ġtarget Change ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġcurrent : ĠDouble ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchange Ġ= Ġrate Ġ* Ġ( elapsed Time . seconds () Ġ- Ġstarting Time ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtarget Change Ġ= Ġabs ( target Ġ- Ġinitial ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( change Ġ>= Ġtarget Change ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Ġ+ Ġsign ( target Ġ- Ġinitial ) Ġ* Ġchange ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġtarget Ġ= Ġinitial ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġ!= Ġtarget ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Ġ= Ġcurrent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstarting Time Ġ= Ġelapsed Time . seconds () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Immediate ( value : ĠDouble ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtarget Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġinitial Ġ= Ġvalue ĊĠĠĠ Ġ} Ċ }