/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġandroidx . compose . animation . core Ċ Ċ /** Ċ Ġ* ĠThis Ġinterface Ġprovides Ġa Ġconvenient Ġway Ġto Ġquery Ġfrom Ġan Ġ[ Vector ized Animation Spec ] Ġor Ċ Ġ* Ġ[ Float Dec ay Animation Spec ]: ĠIt Ġsp ares Ġthe Ġneed Ġto Ġpass Ġthe Ġstarting Ġconditions Ġand Ġin Ġsome Ġcases Ċ Ġ* Ġending Ġcondition Ġfor Ġeach Ġvalue Ġor Ġvelocity Ġquery , Ġand Ġinstead Ġonly Ġrequires Ġthe Ġplay Ġtime Ġto Ġbe Ċ Ġ* Ġpassed Ġfor Ġsuch Ġqueries . Ċ Ġ* Ċ Ġ* ĠThe Ġimplementation Ġof Ġthis Ġinterface Ġshould Ġcache Ġthe Ġstarting Ġconditions Ġand Ġending Ċ Ġ* Ġconditions Ġof Ġanimations Ġas Ġneeded . Ċ Ġ* Ċ Ġ* Ġ__ Note __: Ġ[ Animation ] Ġdoes Ġnot Ġtrack Ġthe Ġlifecycle Ġof Ġan Ġanimation . ĠIt Ġmerely Ġreact s Ġto Ġplay Ġtime Ċ Ġ* Ġchange Ġand Ġreturns Ġthe Ġnew Ġvalue / velocity Ġas Ġa Ġresult . ĠIt Ġcan Ġbe Ġused Ġas Ġa Ġbuilding Ġblock Ġfor Ċ Ġ* Ġmore Ġlifecycle Ġaware Ġanimations . ĠIn Ġcontrast , Ġ[ Anim atable ] Ġand Ġ[ Transition ] Ġare Ċ Ġ* Ġstate ful Ġand Ġmanage Ġtheir Ġown Ġl ifec yc les , Ġand Ġsubscribe / unsubscribe Ġfrom Ġan Ċ Ġ* Ġ[ Animation Clock Observable ] Ġas Ġneeded . Ċ Ġ* Ċ Ġ* Ġ@ see Ġ[ Anim atable ] Ċ Ġ* Ġ@ see Ġ[ update Transition ] Ċ Ġ*/ Ċ interface ĠAnimation < T , ĠV Ġ: ĠAnimation Vector > Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThis Ġamount Ġof Ġtime Ġin Ġnan oseconds Ġthat Ġthe Ġanimation Ġwill Ġrun Ġbefore Ġit Ġfinishes ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ get : Suppress (" MethodName Units ") ĊĠĠĠ Ġval Ġduration Nan os : ĠLong ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġ[ Two Way Converter ] Ġthat Ġwill Ġbe Ġused Ġto Ġconvert Ġvalue / velocity Ġfrom Ġany Ġarbitrary Ġdata ĊĠĠĠĠ Ġ* Ġtype Ġto Ġ[ Animation Vector ]. ĠThis Ġmakes Ġit Ġpossible Ġto Ġanimate Ġdifferent Ġdimensions Ġof Ġthe ĊĠĠĠĠ Ġ* Ġdata Ġobject Ġindependently Ġ( e . g . Ġx / y Ġdimensions Ġof Ġthe Ġposition Ġdata ). ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġtype Converter : ĠTwo Way Converter < T , ĠV > ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThis Ġis Ġthe Ġvalue Ġthat Ġthe Ġ[ Animation ] Ġwill Ġreach Ġwhen Ġit Ġfinishes Ġun inter rupted . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġtarget Value : ĠT ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠWhether Ġor Ġnot Ġthe Ġ[ Animation ] Ġrepresents Ġan Ġinfinite Ġanimation . ĠThat Ġis , Ġone Ġthat Ġwill ĊĠĠĠĠ Ġ* Ġnot Ġfinish Ġby Ġitself , Ġone Ġthat Ġneeds Ġan Ġexternal Ġaction Ġto Ġstop . ĠFor Ġexamples , Ġan ĊĠĠĠĠ Ġ* Ġin determinate Ġprogress Ġbar , Ġwhich Ġwill Ġonly Ġstop Ġwhen Ġit Ġis Ġremoved Ġfrom Ġthe Ġcomposition . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġis Infinite : ĠBoolean ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġvalue Ġof Ġthe Ġanimation Ġat Ġthe Ġgiven Ġplay Ġtime . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġplay Time Nan os Ġthe Ġplay Ġtime Ġthat Ġis Ġused Ġto Ġdetermine Ġthe Ġvalue Ġof Ġthe Ġanimation . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠgetValue From Nan os ( play Time Nan os : ĠLong ): ĠT ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġvelocity Ġ( in Ġ[ Animation Vector ] Ġform ) Ġof Ġthe Ġanimation Ġat Ġthe Ġgiven Ġplay Ġtime . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġplay Time Nan os Ġthe Ġplay Ġtime Ġthat Ġis Ġused Ġto Ġcalculate Ġthe Ġvelocity Ġof Ġthe Ġanimation . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Velocity Vector From Nan os ( play Time Nan os : ĠLong ): ĠV ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġwhether Ġthe Ġanimation Ġis Ġfinished Ġat Ġthe Ġgiven Ġplay Ġtime . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġplay Time Nan os Ġthe Ġplay Ġtime Ġused Ġto Ġdetermine Ġwhether Ġthe Ġanimation Ġis Ġfinished . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġis Finished From Nan os ( play Time Nan os : ĠLong ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġplay Time Nan os Ġ>= Ġduration Nan os ĊĠĠĠ Ġ} Ċ } Ċ Ċ internal Ġval ĠAnimation < *, Ġ* >. duration Millis : ĠLong ĊĠĠĠ Ġget () Ġ= Ġduration Nan os Ġ/ ĠM illis To Nan os Ċ Ċ internal Ġconst Ġval ĠM illis To Nan os : ĠLong Ġ= Ġ 1 _ 0 0 0 _ 0 0 0 L Ċ Ċ /** Ċ Ġ* ĠReturns Ġthe Ġvelocity Ġof Ġthe Ġanimation Ġat Ġthe Ġgiven Ġplay Ġtime . Ċ Ġ* Ċ Ġ* Ġ@ param Ġplay Time Nan os Ġthe Ġplay Ġtime Ġthat Ġis Ġused Ġto Ġcalculate Ġthe Ġvelocity Ġof Ġthe Ġanimation . Ċ Ġ*/ Ċ fun Ġ< T , ĠV Ġ: ĠAnimation Vector > ĠAnimation < T , ĠV >. get Velocity From Nan os ( play Time Nan os : ĠLong ): ĠT Ġ= ĊĠĠĠ Ġtype Converter . convert From Vector ( get Velocity Vector From Nan os ( play Time Nan os )) Ċ /** Ċ Ġ* ĠCreates Ġa Ġ[ Target Based Animation ] Ġfrom Ġa Ġgiven Ġ[ Vector ized Animation Spec ] Ġof Ġ[ Animation Vector ] Ġtype . ĠThis Ċ Ġ* Ġconvenient Ġmethod Ġis Ġintended Ġfor Ġwhen Ġthe Ġvalue Ġbeing Ġanimated Ġ( i . e . Ġstart Ġvalue , Ġend Ġvalue , Ċ Ġ* Ġetc ) Ġis Ġof Ġ[ Animation Vector ] Ġtype . Ċ Ġ* Ċ Ġ* Ġ@ param Ġinitial Value Ġthe Ġvalue Ġthat Ġthe Ġanimation Ġwill Ġstart Ġfrom Ċ Ġ* Ġ@ param Ġtarget Value Ġthe Ġvalue Ġthat Ġthe Ġanimation Ġwill Ġend Ġat Ċ Ġ* Ġ@ param Ġinitial Velocity Ġthe Ġinitial Ġvelocity Ġto Ġstart Ġthe Ġanimation Ġat Ċ Ġ* Ġ@ suppress Ċ Ġ*/ Ċ /* @ Visible ForTesting ( otherwise Ġ= ĠPACK AGE _ PRIVATE ) */ Ċ fun Ġ< V Ġ: ĠAnimation Vector > ĠVector ized Animation Spec < V >. create Animation ( ĊĠĠĠ Ġinitial Value : ĠV , ĊĠĠĠ Ġtarget Value : ĠV , ĊĠĠĠ Ġinitial Velocity : ĠV Ċ ): ĠTarget Based Animation < V , ĠV > Ġ= ĊĠĠĠ ĠTarget Based Animation ( ĊĠĠĠĠĠĠĠ Ġanimation Spec Ġ= Ġthis , ĊĠĠĠĠĠĠĠ Ġinitial Value Ġ= Ġinitial Value , ĊĠĠĠĠĠĠĠ Ġtarget Value Ġ= Ġtarget Value , ĊĠĠĠĠĠĠĠ Ġinitial Velocity Vector Ġ= Ġinitial Velocity , ĊĠĠĠĠĠĠĠ Ġtype Converter Ġ= ĠTwo Way Converter ({ Ġit Ġ}, Ġ{ Ġit Ġ}) ĊĠĠĠ Ġ) Ċ Ċ /** Ċ Ġ* ĠCreates Ġa Ġ[ Target Based Animation ] Ġwith Ġthe Ġgiven Ġstart / end Ġconditions Ġof Ġthe Ġanimation , Ġand Ċ Ġ* Ġthe Ġprovided Ġ[ animation Spec ]. Ċ Ġ* Ċ Ġ* ĠThe Ġresulting Ġ[ Animation ] Ġassumes Ġthat Ġthe Ġstart Ġvalue Ġand Ġvelocity , Ġas Ġwell Ġas Ġend Ġvalue Ġdo Ċ Ġ* Ġnot Ġchange Ġthroughout Ġthe Ġanimation , Ġand Ġcache Ġthese Ġvalues . ĠThis Ġcaching Ġenables Ġmuch Ġmore Ċ Ġ* Ġconvenient Ġquery Ġfor Ġanimation Ġvalue Ġand Ġvelocity Ġ( where Ġonly Ġplay time Ġneeds Ġto Ġbe Ġpassed Ċ Ġ* Ġinto Ġthe Ġmethods ). Ċ Ġ* Ċ Ġ* Ġ__ Note __: ĠWhen Ġinter ru ptions Ġhappen Ġto Ġthe Ġ[ Target Based Animation ], Ġa Ġnew Ġinstance Ġshould Ċ Ġ* Ġbe Ġcreated Ġthat Ġuse Ġthe Ġcurrent Ġvalue Ġand Ġvelocity Ġas Ġthe Ġstarting Ġconditions . ĠThis Ġtype Ġof Ċ Ġ* Ġinter ruption Ġhandling Ġis Ġthe Ġdefault Ġbehavior Ġfor Ġboth Ġ[ Anim atable ] Ġand Ċ Ġ* Ġ[ Transition ]. ĠConsider Ġusing Ġthose ĠAPIs Ġfor Ġthe Ġinter ruption Ġhandling , Ġas Ġwell Ġas Ċ Ġ* Ġbuilt - in Ġanimation Ġlifecycle Ġmanagement . Ċ Ġ* Ċ Ġ* Ġ@ param Ġanimation Spec Ġthe Ġ[ Animation Spec ] Ġthat Ġwill Ġbe Ġused Ġto Ġcalculate Ġvalue / velocity Ċ Ġ* Ġ@ param Ġinitial Value Ġthe Ġstart Ġvalue Ġof Ġthe Ġanimation Ċ Ġ* Ġ@ param Ġtarget Value Ġthe Ġend Ġvalue Ġof Ġthe Ġanimation Ċ Ġ* Ġ@ param Ġinitial Velocity Ġthe Ġstart Ġvelocity Ġ( of Ġtype Ġ[ T ] Ġof Ġthe Ġanimation Ċ Ġ* Ġ@ param Ġtype Converter Ġthe Ġ[ Two Way Converter ] Ġthat Ġis Ġused Ġto Ġconvert Ġanimation Ġtype Ġ[ T ] Ġfrom / to Ġ[ V ] Ċ Ġ*/ Ċ fun Ġ< T , ĠV Ġ: ĠAnimation Vector > ĠTarget Based Animation ( ĊĠĠĠ Ġanimation Spec : ĠAnimation Spec < T >, ĊĠĠĠ Ġtype Converter : ĠTwo Way Converter < T , ĠV >, ĊĠĠĠ Ġinitial Value : ĠT , ĊĠĠĠ Ġtarget Value : ĠT , ĊĠĠĠ Ġinitial Velocity : ĠT Ċ ) Ġ= ĠTarget Based Animation ( ĊĠĠĠ Ġanimation Spec , ĊĠĠĠ Ġtype Converter , ĊĠĠĠ Ġinitial Value , ĊĠĠĠ Ġtarget Value , ĊĠĠĠ Ġtype Converter . convertTo Vector ( initial Velocity ) Ċ ) Ċ Ċ /** Ċ Ġ* ĠThis Ġis Ġa Ġconvenient Ġanimation Ġwrapper Ġclass Ġthat Ġworks Ġfor Ġall Ġtarget Ġbased Ġanimations , Ġi . e . Ċ Ġ* Ġanimations Ġthat Ġhas Ġa Ġpre - defined Ġend Ġvalue , Ġun like Ġdecay . Ċ Ġ* Ċ Ġ* ĠIt Ġassumes Ġthat Ġthe Ġstarting Ġvalue Ġand Ġvelocity , Ġas Ġwell Ġas Ġending Ġvalue Ġdo Ġnot Ġchange Ġthroughout Ċ Ġ* Ġthe Ġanimation , Ġand Ġcache Ġthese Ġvalues . ĠThis Ġcaching Ġenables Ġmuch Ġmore Ġconvenient Ġquery Ġfor Ċ Ġ* Ġanimation Ġvalue Ġand Ġvelocity Ġ( where Ġonly Ġplay time Ġneeds Ġto Ġbe Ġpassed Ġinto Ġthe Ġmethods ). Ċ Ġ* Ċ Ġ* Ġ__ Note __: ĠWhen Ġinter ru ptions Ġhappen Ġto Ġthe Ġ[ Target Based Animation ], Ġa Ġnew Ġinstance Ġshould Ċ Ġ* Ġbe Ġcreated Ġthat Ġuse Ġthe Ġcurrent Ġvalue Ġand Ġvelocity Ġas Ġthe Ġstarting Ġconditions . ĠThis Ġtype Ġof Ċ Ġ* Ġinter ruption Ġhandling Ġis Ġthe Ġdefault Ġbehavior Ġfor Ġboth Ġ[ Anim atable ] Ġand Ċ Ġ* Ġ[ Transition ]. ĠConsider Ġusing Ġthose ĠAPIs Ġfor Ġthe Ġinter ruption Ġhandling , Ġas Ġwell Ġas Ċ Ġ* Ġbuilt - in Ġanimation Ġlifecycle Ġmanagement . Ċ Ġ* Ċ Ġ* Ġ@ param Ġanimation Spec Ġthe Ġ[ Vector ized Animation Spec ] Ġthat Ġwill Ġbe Ġused Ġto Ġcalculate Ġvalue / velocity Ċ Ġ* Ġ@ param Ġinitial Value Ġthe Ġstart Ġvalue Ġof Ġthe Ġanimation Ċ Ġ* Ġ@ param Ġtarget Value Ġthe Ġend Ġvalue Ġof Ġthe Ġanimation Ċ Ġ* Ġ@ param Ġtype Converter Ġthe Ġ[ Two Way Converter ] Ġthat Ġis Ġused Ġto Ġconvert Ġanimation Ġtype Ġ[ T ] Ġfrom / to Ġ[ V ] Ċ Ġ* Ġ@ param Ġinitial Velocity Vector Ġthe Ġstart Ġvelocity Ġof Ġthe Ġanimation Ġin Ġthe Ġform Ġof Ġ[ Animation Vector ] Ċ Ġ* Ċ Ġ* Ġ@ see Ġ[ Transition ] Ċ Ġ* Ġ@ see Ġ[ update Transition ] Ċ Ġ* Ġ@ see Ġ[ Anim atable ] Ċ Ġ*/ Ċ class ĠTarget Based Animation < T , ĠV Ġ: ĠAnimation Vector > Ġinternal Ġconstructor ( ĊĠĠĠ Ġinternal Ġval Ġanimation Spec : ĠVector ized Animation Spec < V >, ĊĠĠĠ Ġoverride Ġval Ġtype Converter : ĠTwo Way Converter < T , ĠV >, ĊĠĠĠ Ġval Ġinitial Value : ĠT , ĊĠĠĠ Ġoverride Ġval Ġtarget Value : ĠT , ĊĠĠĠ Ġinitial Velocity Vector : ĠV ? Ġ= Ġnull Ċ ) Ġ: ĠAnimation < T , ĠV > Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa Ġ[ Target Based Animation ] Ġwith Ġthe Ġgiven Ġstart / end Ġconditions Ġof Ġthe Ġanimation , Ġand ĊĠĠĠĠ Ġ* Ġthe Ġprovided Ġ[ animation Spec ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThe Ġresulting Ġ[ Animation ] Ġassumes Ġthat Ġthe Ġstart Ġvalue Ġand Ġvelocity , Ġas Ġwell Ġas Ġend Ġvalue Ġdo ĊĠĠĠĠ Ġ* Ġnot Ġchange Ġthroughout Ġthe Ġanimation , Ġand Ġcache Ġthese Ġvalues . ĠThis Ġcaching Ġenables Ġmuch Ġmore ĊĠĠĠĠ Ġ* Ġconvenient Ġquery Ġfor Ġanimation Ġvalue Ġand Ġvelocity Ġ( where Ġonly Ġplay time Ġneeds Ġto Ġbe Ġpassed ĊĠĠĠĠ Ġ* Ġinto Ġthe Ġmethods ). ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ__ Note __: ĠWhen Ġinter ru ptions Ġhappen Ġto Ġthe Ġ[ Target Based Animation ], Ġa Ġnew Ġinstance Ġshould ĊĠĠĠĠ Ġ* Ġbe Ġcreated Ġthat Ġuse Ġthe Ġcurrent Ġvalue Ġand Ġvelocity Ġas Ġthe Ġstarting Ġconditions . ĠThis Ġtype Ġof ĊĠĠĠĠ Ġ* Ġinter ruption Ġhandling Ġis Ġthe Ġdefault Ġbehavior Ġfor Ġboth Ġ[ Anim atable ] Ġand ĊĠĠĠĠ Ġ* Ġ[ Transition ]. ĠConsider Ġusing Ġthose ĠAPIs Ġfor Ġthe Ġinter ruption Ġhandling , Ġas Ġwell Ġas ĊĠĠĠĠ Ġ* Ġbuilt - in Ġanimation Ġlifecycle Ġmanagement . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġanimation Spec Ġthe Ġ[ Animation Spec ] Ġthat Ġwill Ġbe Ġused Ġto Ġcalculate Ġvalue / velocity ĊĠĠĠĠ Ġ* Ġ@ param Ġtype Converter Ġthe Ġ[ Two Way Converter ] Ġthat Ġis Ġused Ġto Ġconvert Ġanimation Ġtype Ġ[ T ] Ġfrom / to Ġ[ V ] ĊĠĠĠĠ Ġ* Ġ@ param Ġinitial Value Ġthe Ġstart Ġvalue Ġof Ġthe Ġanimation ĊĠĠĠĠ Ġ* Ġ@ param Ġtarget Value Ġthe Ġend Ġvalue Ġof Ġthe Ġanimation ĊĠĠĠĠ Ġ* Ġ@ param Ġinitial Velocity Vector Ġthe Ġstart Ġvelocity Ġvector , Ġnull Ġby Ġdefault Ġ( mean ing Ġ 0 Ġvelocity ). ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġanimation Spec : ĠAnimation Spec < T >, ĊĠĠĠĠĠĠĠ Ġtype Converter : ĠTwo Way Converter < T , ĠV >, ĊĠĠĠĠĠĠĠ Ġinitial Value : ĠT , ĊĠĠĠĠĠĠĠ Ġtarget Value : ĠT , ĊĠĠĠĠĠĠĠ Ġinitial Velocity Vector : ĠV ? Ġ= Ġnull ĊĠĠĠ Ġ) Ġ: Ġthis ( ĊĠĠĠĠĠĠĠ Ġanimation Spec . vector ize ( type Converter ), ĊĠĠĠĠĠĠĠ Ġtype Converter , ĊĠĠĠĠĠĠĠ Ġinitial Value , ĊĠĠĠĠĠĠĠ Ġtarget Value , ĊĠĠĠĠĠĠĠ Ġinitial Velocity Vector ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġval Ġinitial Value Vector Ġ= Ġtype Converter . convertTo Vector ( initial Value ) ĊĠĠĠ Ġprivate Ġval Ġtarget Value Vector Ġ= Ġtype Converter . convertTo Vector ( target Value ) ĊĠĠĠ Ġprivate Ġval Ġinitial Velocity Vector Ġ= ĊĠĠĠĠĠĠĠ Ġinitial Velocity Vector ?. copy () Ġ?: Ġtype Converter . convertTo Vector ( initial Value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. newInstance () ĊĊĠĠĠ Ġoverride Ġval Ġis Infinite : ĠBoolean Ġget () Ġ= Ġanimation Spec . isIn finite ĊĠĠĠ Ġoverride Ġfun ĠgetValue From Nan os ( play Time Nan os : ĠLong ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ(! is Finished From Nan os ( play Time Nan os )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Converter . convert From Vector ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanimation Spec . getValue From Nan os ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplay Time Nan os , Ġinitial Value Vector , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Value Vector , Ġinitial Velocity Vector ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Value ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ get : Suppress (" MethodName Units ") ĊĠĠĠ Ġoverride Ġval Ġduration Nan os : ĠLong Ġ= Ġanimation Spec . get Duration Nan os ( ĊĠĠĠĠĠĠĠ Ġinitial Value Ġ= Ġinitial Value Vector , ĊĠĠĠĠĠĠĠ Ġtarget Value Ġ= Ġtarget Value Vector , ĊĠĠĠĠĠĠĠ Ġinitial Velocity Ġ= Ġthis . initial Velocity Vector ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġval Ġend Velocity Ġ= Ġanimation Spec . getEnd Velocity ( ĊĠĠĠĠĠĠĠ Ġinitial Value Vector , ĊĠĠĠĠĠĠĠ Ġtarget Value Vector , ĊĠĠĠĠĠĠĠ Ġthis . initial Velocity Vector ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġoverride Ġfun Ġget Velocity Vector From Nan os ( play Time Nan os : ĠLong ): ĠV Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ(! is Finished From Nan os ( play Time Nan os )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanimation Spec . get Velocity From Nan os ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplay Time Nan os , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Value Vector , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Value Vector , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Velocity Vector ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġend Velocity ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* Ġ[ Dec ay Animation ] Ġis Ġan Ġanimation Ġthat Ġslow s Ġdown Ġfrom Ġ[ initial Velocity Vector ] Ġas Ċ Ġ* Ġtime Ġgoes Ġon . Ġ[ Dec ay Animation ] Ġis Ġstate less , Ġand Ġit Ġdoes Ġnot Ġhave Ġany Ġconcept Ġof Ġlifecycle . ĠIt Ċ Ġ* Ġserves Ġas Ġan Ġanimation Ġcalculation Ġengine Ġthat Ġsupports Ġconvenient Ġquery Ġof Ġvalue / velocity Ċ Ġ* Ġgiven Ġa Ġplay Ġtime . ĠTo Ġachieve Ġthat , Ġ[ Dec ay Animation ] Ġstores Ġall Ġthe Ġanimation Ġrelated Ċ Ġ* Ġinformation : Ġ[ initial Value ], Ġ[ initial Velocity Vector ], Ġdecay Ġanimation Ġspec , Ġ[ type Converter ]. Ċ Ġ* Ċ Ġ* Ġ__ Note __: ĠUnless Ġthere 's Ġa Ġneed Ġto Ġcontrol Ġthe Ġtiming Ġmanually , Ġit 's Ċ Ġ* Ġgenerally Ġrecommended Ġto Ġuse Ġhigher Ġlevel Ġanimation ĠAPIs Ġthat Ġbuild Ġon Ġtop Ġ[ Dec ay Animation ], Ċ Ġ* Ġsuch Ġas Ġ[ Anim atable . animate Dec ay ], Ġ[ Animation State . animate Dec ay ], Ġetc . Ċ Ġ* Ċ Ġ* Ġ@ see ĠAnim atable . animate Dec ay Ċ Ġ* Ġ@ see ĠAnimation State . animate Dec ay Ċ Ġ*/ Ċ class ĠDec ay Animation < T , ĠV Ġ: ĠAnimation Vector > Ġ/*@ Visible ForTesting */ Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġanimation Spec : ĠVector ized Dec ay Animation Spec < V >, ĊĠĠĠ Ġoverride Ġval Ġtype Converter : ĠTwo Way Converter < T , ĠV >, ĊĠĠĠ Ġval Ġinitial Value : ĠT , ĊĠĠĠ Ġinitial Velocity Vector : ĠV Ċ ) Ġ: ĠAnimation < T , ĠV > Ġ{ ĊĠĠĠ Ġprivate Ġval Ġinitial Value Vector : ĠV Ġ= Ġtype Converter . convertTo Vector ( initial Value ) ĊĠĠĠ Ġval Ġinitial Velocity Vector : ĠV Ġ= Ġinitial Velocity Vector . copy () ĊĠĠĠ Ġprivate Ġval Ġend Velocity : ĠV ĊĊĠĠĠ Ġoverride Ġval Ġtarget Value : ĠT Ġ= Ġtype Converter . convert From Vector ( ĊĠĠĠĠĠĠĠ Ġanimation Spec . getTarget Value ( initial Value Vector , Ġinitial Velocity Vector ) ĊĠĠĠ Ġ) ĊĠĠĠ Ġ@ get : Suppress (" MethodName Units ") ĊĠĠĠ Ġoverride Ġval Ġduration Nan os : ĠLong ĊĊĠĠĠ Ġ// ĠDec ay Animation Ġfinishes Ġby Ġdesign ĊĠĠĠ Ġoverride Ġval Ġis Infinite : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ[ Dec ay Animation ] Ġis Ġan Ġanimation Ġthat Ġslow s Ġdown Ġfrom Ġ[ initial Velocity Vector ] Ġas Ġtime Ġgoes ĊĠĠĠĠ Ġ* Ġon . Ġ[ Dec ay Animation ] Ġis Ġstate less , Ġand Ġit Ġdoes Ġnot Ġhave Ġany Ġconcept Ġof Ġlifecycle . ĠIt ĊĠĠĠĠ Ġ* Ġserves Ġas Ġan Ġanimation Ġcalculation Ġengine Ġthat Ġsupports Ġconvenient Ġquery Ġof Ġvalue / velocity ĊĠĠĠĠ Ġ* Ġgiven Ġa Ġplay Ġtime . ĠTo Ġachieve Ġthat , Ġ[ Dec ay Animation ] Ġstores Ġall Ġthe Ġanimation Ġrelated ĊĠĠĠĠ Ġ* Ġinformation : Ġ[ initial Value ], Ġ[ initial Velocity Vector ], Ġdecay Ġanimation Ġspec , Ġ[ type Converter ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ__ Note __: ĠUnless Ġthere 's Ġa Ġneed Ġto Ġcontrol Ġthe Ġtiming Ġmanually , Ġit 's ĊĠĠĠĠ Ġ* Ġgenerally Ġrecommended Ġto Ġuse Ġhigher Ġlevel Ġanimation ĠAPIs Ġthat Ġbuild Ġon Ġtop Ġ[ Dec ay Animation ], ĊĠĠĠĠ Ġ* Ġsuch Ġas Ġ[ Anim atable . animate Dec ay ], Ġ[ Animation State . animate Dec ay ], Ġetc . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġanimation Spec ĠDec ay Ġanimation Ġspec Ġthat Ġdefines Ġthe Ġslow - down Ġcurve Ġof Ġthe Ġanimation ĊĠĠĠĠ Ġ* Ġ@ param Ġtype Converter ĠType Ġconverter Ġto Ġconvert Ġthe Ġtype Ġ[ T ] Ġfrom Ġand Ġto Ġ[ Animation Vector ] ĊĠĠĠĠ Ġ* Ġ@ param Ġinitial Value ĠThe Ġstarting Ġvalue Ġof Ġthe Ġanimation ĊĠĠĠĠ Ġ* Ġ@ param Ġinitial Velocity Vector ĠThe Ġstarting Ġvelocity Ġof Ġthe Ġanimation Ġin Ġ[ Animation Vector ] Ġform ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ see ĠAnim atable . animate Dec ay ĊĠĠĠĠ Ġ* Ġ@ see ĠAnimation State . animate Dec ay ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġanimation Spec : ĠDec ay Animation Spec < T >, ĊĠĠĠĠĠĠĠ Ġtype Converter : ĠTwo Way Converter < T , ĠV >, ĊĠĠĠĠĠĠĠ Ġinitial Value : ĠT , ĊĠĠĠĠĠĠĠ Ġinitial Velocity Vector : ĠV ĊĠĠĠ Ġ) Ġ: Ġthis ( ĊĠĠĠĠĠĠĠ Ġanimation Spec . vector ize ( type Converter ), ĊĠĠĠĠĠĠĠ Ġtype Converter , ĊĠĠĠĠĠĠĠ Ġinitial Value , ĊĠĠĠĠĠĠĠ Ġinitial Velocity Vector ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ[ Dec ay Animation ] Ġis Ġan Ġanimation Ġthat Ġslow s Ġdown Ġfrom Ġ[ initial Velocity ] Ġas Ġtime Ġgoes Ġon . ĊĠĠĠĠ Ġ* Ġ[ Dec ay Animation ] Ġis Ġstate less , Ġand Ġit Ġdoes Ġnot Ġhave Ġany Ġconcept Ġof Ġlifecycle . ĠIt ĊĠĠĠĠ Ġ* Ġserves Ġas Ġan Ġanimation Ġcalculation Ġengine Ġthat Ġsupports Ġconvenient Ġquery Ġof Ġvalue / velocity ĊĠĠĠĠ Ġ* Ġgiven Ġa Ġplay Ġtime . ĠTo Ġachieve Ġthat , Ġ[ Dec ay Animation ] Ġstores Ġall Ġthe Ġanimation Ġrelated ĊĠĠĠĠ Ġ* Ġinformation : Ġ[ initial Value ], Ġ[ initial Velocity ], Ġ[ animation Spec ], Ġ[ type Converter ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ__ Note __: ĠUnless Ġthere 's Ġa Ġneed Ġto Ġcontrol Ġthe Ġtiming Ġmanually , Ġit 's ĊĠĠĠĠ Ġ* Ġgenerally Ġrecommended Ġto Ġuse Ġhigher Ġlevel Ġanimation ĠAPIs Ġthat Ġbuild Ġon Ġtop Ġ[ Dec ay Animation ], ĊĠĠĠĠ Ġ* Ġsuch Ġas Ġ[ Anim atable . animate Dec ay ], Ġ[ Animation State . animate Dec ay ], Ġetc . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġanimation Spec ĠDec ay Ġanimation Ġspec Ġthat Ġdefines Ġthe Ġslow - down Ġcurve Ġof Ġthe Ġanimation ĊĠĠĠĠ Ġ* Ġ@ param Ġtype Converter ĠType Ġconverter Ġto Ġconvert Ġthe Ġtype Ġ[ T ] Ġfrom Ġand Ġto Ġ[ Animation Vector ] ĊĠĠĠĠ Ġ* Ġ@ param Ġinitial Value ĠThe Ġstarting Ġvalue Ġof Ġthe Ġanimation ĊĠĠĠĠ Ġ* Ġ@ param Ġinitial Velocity ĠThe Ġstarting Ġvelocity Ġof Ġthe Ġanimation ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ see ĠAnim atable . animate Dec ay ĊĠĠĠĠ Ġ* Ġ@ see ĠAnimation State . animate Dec ay ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġanimation Spec : ĠDec ay Animation Spec < T >, ĊĠĠĠĠĠĠĠ Ġtype Converter : ĠTwo Way Converter < T , ĠV >, ĊĠĠĠĠĠĠĠ Ġinitial Value : ĠT , ĊĠĠĠĠĠĠĠ Ġinitial Velocity : ĠT ĊĠĠĠ Ġ) Ġ: Ġthis ( ĊĠĠĠĠĠĠĠ Ġanimation Spec . vector ize ( type Converter ), ĊĠĠĠĠĠĠĠ Ġtype Converter , ĊĠĠĠĠĠĠĠ Ġinitial Value , ĊĠĠĠĠĠĠĠ Ġtype Converter . convertTo Vector ( initial Velocity ) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġduration Nan os Ġ= Ġanimation Spec . get Duration Nan os ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Value Vector , Ġinitial Velocity Vector ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġend Velocity Ġ= Ġanimation Spec . get Velocity From Nan os ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġduration Nan os , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Value Vector , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Velocity Vector ĊĠĠĠĠĠĠĠ Ġ). copy () ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġend Velocity . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġend Velocity [ i ] Ġ= Ġend Velocity [ i ]. coerce In ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ- animation Spec . abs Velocity Threshold , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanimation Spec . abs Velocity Threshold ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetValue From Nan os ( play Time Nan os : ĠLong ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Finished From Nan os ( play Time Nan os )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtype Converter . convert From Vector ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanimation Spec . getValue From Nan os ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplay Time Nan os , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Value Vector , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Velocity Vector ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtarget Value ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Velocity Vector From Nan os ( play Time Nan os : ĠLong ): ĠV Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Finished From Nan os ( play Time Nan os )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġanimation Spec . get Velocity From Nan os ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplay Time Nan os , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Value Vector , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Velocity Vector ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġend Velocity ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* Ġ[ Dec ay Animation ] Ġis Ġan Ġanimation Ġthat Ġslow s Ġdown Ġfrom Ġ[ initial Velocity ] Ġas Ċ Ġ* Ġtime Ġgoes Ġon . Ġ[ Dec ay Animation ] Ġis Ġstate less , Ġand Ġit Ġdoes Ġnot Ġhave Ġany Ġconcept Ġof Ġlifecycle . ĠIt Ċ Ġ* Ġserves Ġas Ġan Ġanimation Ġcalculation Ġengine Ġthat Ġsupports Ġconvenient Ġquery Ġof Ġvalue / velocity Ċ Ġ* Ġgiven Ġa Ġplay Ġtime . ĠTo Ġachieve Ġthat , Ġ[ Dec ay Animation ] Ġstores Ġall Ġthe Ġanimation Ġrelated Ċ Ġ* Ġinformation : Ġ[ initial Value ], Ġ[ initial Velocity ], Ġdecay Ġanimation Ġspec . Ċ Ġ* Ċ Ġ* Ġ__ Note __: ĠUnless Ġthere 's Ġa Ġneed Ġto Ġcontrol Ġthe Ġtiming Ġmanually , Ġit 's Ċ Ġ* Ġgenerally Ġrecommended Ġto Ġuse Ġhigher Ġlevel Ġanimation ĠAPIs Ġthat Ġbuild Ġon Ġtop Ġ[ Dec ay Animation ], Ċ Ġ* Ġsuch Ġas Ġ[ Anim atable . animate Dec ay ], Ġ[ animate Dec ay ], Ġetc . Ċ Ġ* Ċ Ġ* Ġ@ param Ġanimation Spec Ġdecay Ġanimation Ġthat Ġwill Ġbe Ġused Ċ Ġ* Ġ@ param Ġinitial Value Ġstarting Ġvalue Ġthat Ġwill Ġbe Ġpassed Ġto Ġthe Ġdecay Ġanimation Ċ Ġ* Ġ@ param Ġinitial Velocity Ġstarting Ġvelocity Ġfor Ġthe Ġdecay Ġanimation , Ġ 0 f Ġby Ġdefault Ċ Ġ*/ Ċ fun ĠDec ay Animation ( ĊĠĠĠ Ġanimation Spec : ĠFloat Dec ay Animation Spec , ĊĠĠĠ Ġinitial Value : ĠFloat , ĊĠĠĠ Ġinitial Velocity : ĠFloat Ġ= Ġ 0 f Ċ ) Ġ= ĠDec ay Animation ( ĊĠĠĠ Ġanimation Spec . generate Dec ay Animation Spec (), ĊĠĠĠ ĠFloat . Vector Converter , ĊĠĠĠ Ġinitial Value , ĊĠĠĠ ĠAnimation Vector ( initial Velocity ) Ċ ) Ċ