/* Ċ Ġ* ĠSp ine ĠRuntime s ĠSoftware ĠLicense Ċ Ġ* ĠVersion Ġ 2 . 3 Ċ Ġ* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 3 - 2 0 1 5 , ĠEs ot eric ĠSoftware Ċ Ġ* ĠAll Ġrights Ġreserved . Ċ Ġ* Ċ Ġ* ĠYou Ġare Ġgranted Ġa Ġper pe tual , Ġnon - exclusive , Ġnon - s ublic ens able Ġand Ċ Ġ* Ġnon - transfer able Ġlicense Ġto Ġuse , Ġinstall , Ġexecute Ġand Ġperform Ġthe ĠSp ine Ċ Ġ* ĠRuntime s ĠSoftware Ġ( the Ġ" Software ") Ġand Ġderivative Ġworks Ġsole ly Ġfor Ġpersonal Ċ Ġ* Ġor Ġinternal Ġuse . ĠWithout Ġthe Ġwritten Ġpermission Ġof ĠEs ot eric ĠSoftware Ġ( see Ċ Ġ* ĠSection Ġ 2 Ġof Ġthe ĠSp ine ĠSoftware ĠLicense ĠAgreement ), Ġyou Ġmay Ġnot Ġ( a ) Ġmodify , Ċ Ġ* Ġtranslate , Ġadapt Ġor Ġotherwise Ġcreate Ġderivative Ġworks , Ġimprovements Ġof Ġthe Ċ Ġ* ĠSoftware Ġor Ġdevelop Ġnew Ġapplications Ġusing Ġthe ĠSoftware Ġor Ġ( b ) Ġremove , Ċ Ġ* Ġdelete , Ġalter Ġor Ġob sc ure Ġany Ġtrade marks Ġor Ġany Ġcopyright , Ġtrade mark , Ġpat ent Ċ Ġ* Ġor Ġother Ġintel lectual Ġproperty Ġor Ġpropri etary Ġrights Ġnotices Ġon Ġor Ġin Ġthe Ċ Ġ* ĠSoftware , Ġincluding Ġany Ġcopy Ġthere of . ĠRedistributions Ġin Ġbinary Ġor Ġsource Ċ Ġ* Ġform Ġmust Ġinclude Ġthis Ġlicense Ġand Ġterms . Ċ Ġ* Ċ Ġ* ĠTHIS ĠSOFTWARE ĠIS ĠPROVIDED ĠBY ĠES OT ERIC ĠSOFTWARE Ġ" AS ĠIS " ĠAND ĠANY ĠEXPRESS ĠOR Ċ Ġ* ĠIMPLIED ĠWARRANTIES , ĠINCLUDING , ĠBUT ĠNOT ĠLIMITED ĠTO , ĠTHE ĠIMPLIED ĠWARRANTIES ĠOF Ċ Ġ* ĠMERCHANTABILITY ĠAND ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠARE ĠDISCLAIMED . ĠIN ĠNO Ċ Ġ* ĠEVENT ĠSHALL ĠES OT ERIC ĠSOFTWARE ĠBE ĠLIABLE ĠFOR ĠANY ĠDIRECT , ĠINDIRECT , ĠINCIDENTAL , Ċ Ġ* ĠSPECIAL , ĠEXEMPLARY , ĠOR ĠCONSEQUENTIAL ĠDAMAGES Ġ( INCLUDING , ĠBUT ĠNOT ĠLIMITED ĠTO , Ċ Ġ* ĠPROCUREMENT ĠOF ĠSUBSTITUTE ĠGOODS ĠOR ĠSERVICES ; ĠLOSS ĠOF ĠUSE , ĠDATA , ĠOR ĠPROFITS ; Ċ Ġ* ĠOR ĠBUSINESS ĠINTERRUPTION ) ĠHOWEVER ĠCAUSED ĠAND ĠON ĠANY ĠTHEORY ĠOF ĠLIABILITY , Ċ Ġ* ĠWHETHER ĠIN ĠCONTRACT , ĠSTRICT ĠLIABILITY , ĠOR ĠTORT Ġ( INCLUDING ĠNEGLIGENCE ĠOR Ċ Ġ* ĠOTHERWISE ) ĠARISING ĠIN ĠANY ĠWAY ĠOUT ĠOF ĠTHE ĠUSE ĠOF ĠTHIS ĠSOFTWARE , ĠEVEN ĠIF Ċ Ġ* ĠADVISED ĠOF ĠTHE ĠPOSSIBILITY ĠOF ĠSUCH ĠDAMAGE . Ċ Ġ*/ Ċ Ċ package Ġcom . es ot eric software . sp ine . animation . timeline Ċ Ċ import Ġcom . ac orn ui . math . Math Utils Ċ import Ġcom . es ot eric software . sp ine . Skeleton Ċ import Ġcom . es ot eric software . sp ine . Sp ine Event Ċ import Ġcom . es ot eric software . sp ine . animation . Animation Ċ import Ġcom . es ot eric software . sp ine . data . animation . timeline . Ik Constraint Timeline Data ĊĊ Ċ class ĠI k Constraint Timeline ( Ċĉ ĉ val Ġik Constraint Index : ĠInt , Ċĉ ĉ data : ĠI k Constraint Timeline Data Ċ ) Ġ: ĠCurve Timeline ( data ) Ġ{ ĊĊ ĉ val Ġframes : ĠFloat Array Ġ// Ġtime , Ġmix , Ġb end Direction , Ġ... ĊĊ ĉ init Ġ{ Ċĉ ĉ frames Ġ= ĠFloat Array ( frame Count Ġ* Ġ 3 ) Ċĉ ĉ for Ġ( i Ġin Ġ 0 .. data . frames . last Index ) Ġ{ Ċĉĉ ĉ val Ġframe Ġ= Ġdata . frames [ i ] Ċĉĉ ĉ val Ġframe Index Ġ= Ġi Ġ* Ġ 3 Ċĉĉ ĉ frames [ frame Index ] Ġ= Ġframe . time Ċĉĉ ĉ frames [ frame Index Ġ+ Ġ 1 ] Ġ= Ġframe . mix Ċĉĉ ĉ frames [ frame Index Ġ+ Ġ 2 ] Ġ= Ġif Ġ( frame . b end Positive ) Ġ 1 f Ġelse Ġ- 1 f Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ override Ġfun Ġapply ( skeleton : ĠS keleton , Ġlast Time : ĠFloat , Ġtime : ĠFloat , Ġevents : ĠMutable List < Sp ine Event > ?, Ġalpha : ĠFloat ) Ġ{ Ċĉ ĉ val Ġframes Ġ= Ġthis . frames Ċĉ ĉ if Ġ( time Ġ< Ġframes [ 0 ]) Ġreturn Ġ Ġ// ĠTime Ġis Ġbefore Ġfirst Ġframe . ĊĊĉ ĉ val Ġik Constraint Ġ= Ġskeleton . ik Constraints [ ik Constraint Index ] ĊĊĉ ĉ if Ġ( time Ġ>= Ġframes [ frames . size Ġ- Ġ 3 ]) Ġ{ Ċĉĉ ĉ // ĠTime Ġis Ġafter Ġlast Ġframe . Ċĉĉ ĉ ik Constraint . mix Ġ+= Ġ( frames [ frames . size Ġ- Ġ 2 ] Ġ- Ġik Constraint . mix ) Ġ* Ġalpha Ċĉĉ ĉ ik Constraint . b end Direction Ġ= Ġframes [ frames . size Ġ- Ġ 1 ]. toInt () Ċĉĉ ĉ return Ċĉ ĉ } ĊĊĉ ĉ // ĠInterpol ate Ġbetween Ġthe Ġprevious Ġframe Ġand Ġthe Ġcurrent Ġframe . Ċĉ ĉ val Ġframe Index Ġ= ĠAnimation . binary Search ( frames , Ġtime , Ġ 3 ) Ċĉ ĉ val Ġprev Frame Mix Ġ= Ġframes [ frame Index Ġ+ ĠPRE V _ FRAME _ MIX ] Ċĉ ĉ val Ġframe Time Ġ= Ġframes [ frame Index ] Ċĉ ĉ var Ġpercent Ġ= ĠMath Utils . clamp ( 1 f Ġ- Ġ( time Ġ- Ġframe Time ) Ġ/ Ġ( frames [ frame Index Ġ+ ĠPRE V _ FRAME _ TIME ] Ġ- Ġframe Time ), Ġ 0 f , Ġ 1 f ) Ċĉ ĉ percent Ġ= Ġget Curve Percent ( frame Index Ġ/ Ġ 3 Ġ- Ġ 1 , Ġpercent ) ĊĊĉ ĉ val Ġmix Ġ= Ġprev Frame Mix Ġ+ Ġ( frames [ frame Index Ġ+ ĠFRAME _ MIX ] Ġ- Ġprev Frame Mix ) Ġ* Ġpercent Ċĉ ĉ ik Constraint . mix Ġ+= Ġ( mix Ġ- Ġik Constraint . mix ) Ġ* Ġalpha Ċĉ ĉ ik Constraint . b end Direction Ġ= Ġframes [ frame Index Ġ+ ĠPRE V _ FRAME _ B END _ DIRECTION ]. toInt () Ċ ĉ } ĊĊ ĉ comp anion Ġobject Ġ{ Ċĉ ĉ private Ġval ĠPRE V _ FRAME _ TIME Ġ= Ġ- 3 Ċĉ ĉ private Ġval ĠPRE V _ FRAME _ MIX Ġ= Ġ- 2 Ċĉ ĉ private Ġval ĠPRE V _ FRAME _ B END _ DIRECTION Ġ= Ġ- 1 Ċĉ ĉ private Ġval ĠFRAME _ MIX Ġ= Ġ 1 Ċ ĉ } Ċ }