package Ġcom . github . ale xj lock wood . ky rie Ċ Ċ import Ġcom . github . ale xj lock wood . ky rie . Animation . Value Evaluator Ċ Ċ /** Ċ Ġ* ĠAbstract s Ġa Ġcollection Ġof Ġ[ Keyframe ] Ġobjects Ġand Ġis Ġused Ġto Ġcalculate Ġvalues Ġbetween Ġthose Ċ Ġ* Ġkey frames Ġfor Ġa Ġgiven Ġ[ Animation ]. Ċ Ġ* Ċ Ġ* Ġ@ param ĠT ĠThe Ġkey frame Ġvalue Ġtype . Ċ Ġ*/ Ċ internal Ġclass ĠObject Keyframe Set < T >( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġevaluator : ĠValue Evaluator < T >, ĊĠĠĠĠĠĠĠ Ġ// ĠOnly Ġused Ġwhen Ġthere Ġare Ġmore Ġthan Ġ 2 Ġkey frames . ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġkey frames : ĠList < Keyframe < T >> Ċ ) Ġ: ĠKey frame Set < T >() Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġfirst Kf Ġ= Ġkey frames . first () ĊĠĠĠ Ġprivate Ġval Ġlast Kf Ġ= Ġkey frames . last () ĊĠĠĠ Ġ// ĠOnly Ġused Ġin Ġthe Ġ 2 - key frame Ġcase . ĊĠĠĠ Ġprivate Ġval Ġinterpol ator Ġ= Ġlast Kf . interpol ator ĊĊĠĠĠ Ġoverride Ġfun Ġget Animated Value ( fraction : ĠFloat ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnum Key frames Ġ= Ġkey frames . size ĊĠĠĠĠĠĠĠ Ġvar Ġfraction Ġ= Ġfraction ĊĠĠĠĠĠĠĠ Ġ// ĠSpecial - case Ġoptimization Ġfor Ġthe Ġcommon Ġcase Ġof Ġonly Ġtwo Ġkey frames . ĊĠĠĠĠĠĠĠ Ġif Ġ( num Key frames Ġ== Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( interpol ator Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfraction Ġ= Ġinterpol ator . get Interpolation ( fraction ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġevaluator . evaluate ( fraction , Ġfirst Kf . value !! , Ġlast Kf . value !! ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( fraction Ġ<= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnext Kf Ġ= Ġkey frames [ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinterpol ator Ġ= Ġnext Kf . interpol ator ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( interpol ator Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfraction Ġ= Ġinterpol ator . get Interpolation ( fraction ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprev Fraction Ġ= Ġfirst Kf . fraction ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinterval Fraction Ġ= Ġ( fraction Ġ- Ġprev Fraction ) Ġ/ Ġ( next Kf . fraction Ġ- Ġprev Fraction ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġevaluator . evaluate ( interval Fraction , Ġfirst Kf . value !! , Ġnext Kf . value !! ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( fraction Ġ>= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpref Kf Ġ= Ġkey frames [ num Key frames Ġ- Ġ 2 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinterpol ator Ġ= Ġlast Kf . interpol ator ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( interpol ator Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfraction Ġ= Ġinterpol ator . get Interpolation ( fraction ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprev Fraction Ġ= Ġpref Kf . fraction ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinterval Fraction Ġ= Ġ( fraction Ġ- Ġprev Fraction ) Ġ/ Ġ( last Kf . fraction Ġ- Ġprev Fraction ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġevaluator . evaluate ( interval Fraction , Ġpref Kf . value !! , Ġlast Kf . value !! ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġvar Ġprev Kf Ġ= Ġfirst Kf ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 1 Ġuntil Ġnum Key frames ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnext Kf Ġ= Ġkey frames [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( fraction Ġ< Ġnext Kf . fraction ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinterpol ator Ġ= Ġnext Kf . interpol ator ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprev Fraction Ġ= Ġprev Kf . fraction ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġinterval Fraction Ġ= Ġ( fraction Ġ- Ġprev Fraction ) Ġ/ Ġ( next Kf . fraction Ġ- Ġprev Fraction ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠApply Ġget Interpolator Ġon Ġthe Ġpro portional Ġduration . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( interpol ator Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinterval Fraction Ġ= Ġinterpol ator . get Interpolation ( interval Fraction ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġevaluator . evaluate ( interval Fraction , Ġprev Kf . value !! , Ġnext Kf . value !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprev Kf Ġ= Ġnext Kf ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// ĠShould n 't Ġget Ġhere . ĊĠĠĠĠĠĠĠ Ġreturn Ġlast Kf . value !! ĊĠĠĠ Ġ} Ċ } Ċ