/****************************************************************************** Ċ Ġ* ĠSp ine ĠRuntime s ĠLicense ĠAgreement Ċ Ġ* ĠLast Ġupdated ĠJanuary Ġ 1 , Ġ 2 0 2 0 . ĠRe places Ġall Ġprior Ġversions . Ċ Ġ* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 3 - 2 0 2 0 , ĠEs ot eric ĠSoftware ĠLLC Ċ Ġ* Ċ Ġ* ĠIntegration Ġof Ġthe ĠSp ine ĠRuntime s Ġinto Ġsoftware Ġor Ġotherwise Ġcreating Ċ Ġ* Ġderivative Ġworks Ġof Ġthe ĠSp ine ĠRuntime s Ġis Ġpermitted Ġunder Ġthe Ġterms Ġand Ċ Ġ* Ġconditions Ġof ĠSection Ġ 2 Ġof Ġthe ĠSp ine ĠEditor ĠLicense ĠAgreement : Ċ Ġ* Ġhttp :// es ot eric software . com / sp ine - editor - license Ċ Ġ* Ċ Ġ* ĠOtherwise , Ġit Ġis Ġpermitted Ġto Ġintegrate Ġthe ĠSp ine ĠRuntime s Ġinto Ġsoftware Ċ Ġ* Ġor Ġotherwise Ġcreate Ġderivative Ġworks Ġof Ġthe ĠSp ine ĠRuntime s Ġ( collect ively , Ċ Ġ* Ġ" Products "), Ġprovided Ġthat Ġeach Ġuser Ġof Ġthe ĠProducts Ġmust Ġobtain Ġtheir Ġown Ċ Ġ* ĠSp ine ĠEditor Ġlicense Ġand Ġre distribution Ġof Ġthe ĠProducts Ġin Ġany Ġform Ġmust Ċ Ġ* Ġinclude Ġthis Ġlicense Ġand Ġcopyright Ġnotice . Ċ Ġ* Ċ Ġ* ĠTHE ĠSP INE ĠRUN TIMES ĠARE ĠPROVIDED ĠBY ĠES OT ERIC ĠSOFTWARE ĠLLC Ġ" 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 ĠLLC ĠBE ĠLIABLE ĠFOR ĠANY Ċ Ġ* ĠDIRECT , ĠINDIRECT , ĠINCIDENTAL , ĠSPECIAL , ĠEXEMPLARY , ĠOR ĠCONSEQUENTIAL ĠDAMAGES Ċ Ġ* Ġ( INCLUDING , ĠBUT ĠNOT ĠLIMITED ĠTO , ĠPROCUREMENT ĠOF ĠSUBSTITUTE ĠGOODS ĠOR ĠSERVICES , Ċ Ġ* ĠBUSINESS ĠINTERRUPTION , ĠOR ĠLOSS ĠOF ĠUSE , ĠDATA , ĠOR ĠPROFITS ) Ġ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 Ċ Ġ* ĠTHE ĠSP INE ĠRUN TIMES , ĠEVEN ĠIF ĠADVISED ĠOF ĠTHE ĠPOSSIBILITY ĠOF ĠSUCH ĠDAMAGE . Ċ Ġ*/ Ċ Ċ package Ġcom . es ot eric software . sp ine Ċ Ċ import Ġcom . es ot eric software . sp ine . Animation . Mix Blend .* Ċ import Ġcom . es ot eric software . sp ine . Animation . Mix Direction .* Ċ import Ġcom . es ot eric software . sp ine . attachments .* Ċ import Ġcom . es ot eric software . sp ine . utils .* Ċ import Ġcom . es ot eric software . sp ine . utils . Sp ine Utils . arraycopy Ċ import Ġcom . so y wiz . k ds .* Ċ import Ġcom . so y wiz . k ds . iter ators .* Ċ import Ġkotlin . math .* Ċ Ċ /** ĠA Ġsimple Ġcontainer Ġfor Ġa Ġlist Ġof Ġtime lines Ġand Ġa Ġname . Ġ Ġ*/ Ċ class ĠAnimation ( ĊĠĠĠ Ġ/** ĠThe Ġanimation 's Ġname , Ġwhich Ġis Ġunique Ġacross Ġall Ġanimations Ġin Ġthe Ġskeleton . Ġ Ġ*/ ĊĠĠĠ Ġval Ġname : ĠString , ĊĠĠĠ Ġtime lines : ĠArrayList < Timeline >, ĊĠĠĠ Ġ/** ĠThe Ġduration Ġof Ġthe Ġanimation Ġin Ġseconds , Ġwhich Ġis Ġthe Ġhighest Ġtime Ġof Ġall Ġkeys Ġin Ġthe Ġtimeline . Ġ Ġ*/ ĊĠĠĠ Ġvar Ġduration : ĠFloat Ċ ) Ġ{ ĊĠĠĠ Ġlateinit Ġinternal Ġvar Ġtime lines : ĠArrayList < Timeline > ĊĠĠĠ Ġinternal Ġval Ġtimeline IDs Ġ= ĠInt Set () ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġset Time lines ( time lines ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠIf Ġthe Ġreturned Ġarray Ġor Ġthe Ġtime lines Ġit Ġcontains Ġare Ġmodified , Ġ[. setTime lines ] Ġmust Ġbe Ġcalled . Ġ Ġ*/ ĊĠĠĠ Ġfun ĠgetTime lines (): ĠArrayList < Timeline > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtime lines ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Time lines ( time lines : ĠArrayList < Timeline >) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . time lines Ġ= Ġtime lines ĊĊĠĠĠĠĠĠĠ Ġtimeline IDs . clear () ĊĠĠĠĠĠĠĠ Ġtime lines . fast ForEach Ġ{ Ġtimeline Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtimeline IDs . add ( timeline . property Id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠReturn Ġtrue Ġif Ġthis Ġanimation Ġcontains Ġa Ġtimeline Ġwith Ġthe Ġspecified Ġproperty ĠID . Ġ Ġ*/ ĊĠĠĠ Ġfun Ġhas Timeline ( id : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtimeline IDs . contains ( id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠApplies Ġall Ġthe Ġanimation 's Ġtime lines Ġto Ġthe Ġspecified Ġskeleton . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠSee ĠTimeline Ġ[ Timeline . apply ]. ĊĠĠĠĠ Ġ* Ġ@ param Ġloop ĠIf Ġtrue , Ġthe Ġanimation Ġrepe ats Ġafter Ġ[. get Duration ]. ĊĠĠĠĠ Ġ* Ġ@ param Ġevents ĠMay Ġbe Ġnull Ġto Ġignore Ġfired Ġevents . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġapply ( skeleton : ĠS keleton , Ġlast Time : ĠFloat , Ġtime : ĠFloat , Ġloop : ĠBoolean , Ġevents : ĠArrayList < Event > ?, Ġalpha : ĠFloat , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblend : ĠMix Blend , Ġdirection : ĠMix Direction ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġlast Time Ġ= Ġlast Time ĊĠĠĠĠĠĠĠ Ġvar Ġtime Ġ= Ġtime ĊĊĠĠĠĠĠĠĠ Ġif Ġ( loop Ġ&& Ġduration Ġ!= Ġ 0 f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Ġ% = Ġduration ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( last Time Ġ> Ġ 0 ) Ġlast Time Ġ% = Ġduration ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġtime lines Ġ= Ġthis . time lines ĊĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġn Ġ= Ġtime lines . size ĊĠĠĠĠĠĠĠ Ġwhile Ġ( i Ġ< Ġn ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime lines [ i ]. apply ( skeleton , Ġlast Time , Ġtime , Ġevents , Ġalpha , Ġblend , Ġdirection ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġname Ġ?: Ġ"" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠThe Ġinterface Ġfor Ġall Ġtime lines . Ġ Ġ*/ ĊĠĠĠ Ġinterface ĠTimeline Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ/** ĠUnique ly Ġen codes Ġboth Ġthe Ġtype Ġof Ġthis Ġtimeline Ġand Ġthe Ġskeleton Ġproperty Ġthat Ġit Ġaffects . Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġproperty Id : ĠInt ĊĊĠĠĠĠĠĠĠ Ġ/** ĠApplies Ġthis Ġtimeline Ġto Ġthe Ġskeleton . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġskeleton ĠThe Ġskeleton Ġthe Ġtimeline Ġis Ġbeing Ġapplied Ġto . ĠThis Ġprovides Ġaccess Ġto Ġthe Ġbones , Ġslots , Ġand Ġother ĊĠĠĠĠĠĠĠĠ Ġ* Ġskeleton Ġcomponents Ġthe Ġtimeline Ġmay Ġchange . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġlast Time ĠThe Ġtime Ġthis Ġtimeline Ġwas Ġlast Ġapplied . ĠTime lines Ġsuch Ġas Ġ[ Event Timeline ] Ġtrigger Ġonly Ġat Ġspecific ĊĠĠĠĠĠĠĠĠ Ġ* Ġtimes Ġrather Ġthan Ġevery Ġframe . ĠIn Ġthat Ġcase , Ġthe Ġtimeline Ġtriggers Ġeverything Ġbetween Ġ` last Time ` ĊĠĠĠĠĠĠĠĠ Ġ* Ġ( exclusive ) Ġand Ġ` time ` Ġ( inclusive ). ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġtime ĠThe Ġtime Ġwithin Ġthe Ġanimation . ĠMost Ġtime lines Ġfind Ġthe Ġkey Ġbefore Ġand Ġthe Ġkey Ġafter Ġthis Ġtime Ġso Ġthey Ġcan ĊĠĠĠĠĠĠĠĠ Ġ* Ġinterpolate Ġbetween Ġthe Ġkeys . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġevents ĠIf Ġany Ġevents Ġare Ġfired , Ġthey Ġare Ġadded Ġto Ġthis Ġlist . ĠCan Ġbe Ġnull Ġto Ġignore Ġfired Ġevents Ġor Ġif Ġthe Ġtimeline ĊĠĠĠĠĠĠĠĠ Ġ* Ġdoes Ġnot Ġfire Ġevents . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġalpha Ġ 0 Ġapplies Ġthe Ġcurrent Ġor Ġsetup Ġvalue Ġ( depend ing Ġon Ġ` blend `). Ġ 1 Ġapplies Ġthe Ġtimeline Ġvalue . ĊĠĠĠĠĠĠĠĠ Ġ* ĠBet ween Ġ 0 Ġand Ġ 1 Ġapplies Ġa Ġvalue Ġbetween Ġthe Ġcurrent Ġor Ġsetup Ġvalue Ġand Ġthe Ġtimeline Ġvalue . ĠBy Ġadjust ing ĊĠĠĠĠĠĠĠĠ Ġ* Ġ` alpha ` Ġover Ġtime , Ġan Ġanimation Ġcan Ġbe Ġmixed Ġin Ġor Ġout . Ġ` alpha ` Ġcan Ġalso Ġbe Ġuseful Ġto ĊĠĠĠĠĠĠĠĠ Ġ* Ġapply Ġanimations Ġon Ġtop Ġof Ġeach Ġother Ġ( layer ing ). ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġblend ĠControls Ġhow Ġmixing Ġis Ġapplied Ġwhen Ġ` alpha ` Ġ< Ġ 1 . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġdirection ĠIndicates Ġwhether Ġthe Ġtimeline Ġis Ġmixing Ġin Ġor Ġout . ĠUsed Ġby Ġtime lines Ġwhich Ġperform Ġinstant Ġtransitions , ĊĠĠĠĠĠĠĠĠ Ġ* Ġsuch Ġas Ġ[ Draw Order Timeline ] Ġor Ġ[ Attachment Timeline ], Ġand Ġother Ġsuch Ġas Ġ[ Scale Timeline ]. ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġapply ( skeleton : ĠS keleton , Ġlast Time : ĠFloat , Ġtime : ĠFloat , Ġevents : ĠArrayList < Event > ?, Ġalpha : ĠFloat , Ġblend : ĠMix Blend , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdirection : ĠMix Direction ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠControls Ġhow Ġa Ġtimeline Ġvalue Ġis Ġmixed Ġwith Ġthe Ġsetup Ġpose Ġvalue Ġor Ġcurrent Ġpose Ġvalue Ġwhen Ġa Ġtimeline 's Ġ` alpha ` ĊĠĠĠĠ Ġ* Ġ< Ġ 1 . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠSee ĠTimeline Ġ[ Timeline . apply ]. Ġ Ġ*/ ĊĠĠĠ Ġenum Ġclass ĠMix Blend Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĠTrans itions Ġfrom Ġthe Ġsetup Ġvalue Ġto Ġthe Ġtimeline Ġvalue Ġ( the Ġcurrent Ġvalue Ġis Ġnot Ġused ). ĠBefore Ġthe Ġfirst Ġkey , Ġthe Ġsetup ĊĠĠĠĠĠĠĠĠ Ġ* Ġvalue Ġis Ġset . Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġsetup , ĊĊĠĠĠĠĠĠĠ Ġ/** ĠTrans itions Ġfrom Ġthe Ġcurrent Ġvalue Ġto Ġthe Ġtimeline Ġvalue . ĠBefore Ġthe Ġfirst Ġkey , Ġtransitions Ġfrom Ġthe Ġcurrent Ġvalue Ġto ĊĠĠĠĠĠĠĠĠ Ġ* Ġthe Ġsetup Ġvalue . ĠTime lines Ġwhich Ġperform Ġinstant Ġtransitions , Ġsuch Ġas Ġ[ Draw Order Timeline ] Ġor ĊĠĠĠĠĠĠĠĠ Ġ* Ġ[ Attachment Timeline ], Ġuse Ġthe Ġsetup Ġvalue Ġbefore Ġthe Ġfirst Ġkey . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ` first ` Ġis Ġintended Ġfor Ġthe Ġfirst Ġanimations Ġapplied , Ġnot Ġfor Ġanimations Ġlayer ed Ġon Ġtop Ġof Ġthose . Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfirst , ĊĊĠĠĠĠĠĠĠ Ġ/** ĠTrans itions Ġfrom Ġthe Ġcurrent Ġvalue Ġto Ġthe Ġtimeline Ġvalue . ĠNo Ġchange Ġis Ġmade Ġbefore Ġthe Ġfirst Ġkey Ġ( the Ġcurrent Ġvalue Ġis ĊĠĠĠĠĠĠĠĠ Ġ* Ġkept Ġuntil Ġthe Ġfirst Ġkey ). ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ` replace ` Ġis Ġintended Ġfor Ġanimations Ġlayer ed Ġon Ġtop Ġof Ġothers , Ġnot Ġfor Ġthe Ġfirst Ġanimations Ġapplied . Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġreplace , ĊĊĠĠĠĠĠĠĠ Ġ/** ĠTrans itions Ġfrom Ġthe Ġcurrent Ġvalue Ġto Ġthe Ġcurrent Ġvalue Ġplus Ġthe Ġtimeline Ġvalue . ĠNo Ġchange Ġis Ġmade Ġbefore Ġthe Ġfirst Ġkey ĊĠĠĠĠĠĠĠĠ Ġ* Ġ( the Ġcurrent Ġvalue Ġis Ġkept Ġuntil Ġthe Ġfirst Ġkey ). ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ` add ` Ġis Ġintended Ġfor Ġanimations Ġlayer ed Ġon Ġtop Ġof Ġothers , Ġnot Ġfor Ġthe Ġfirst Ġanimations Ġapplied . ĠProperties ĊĠĠĠĠĠĠĠĠ Ġ* Ġkey ed Ġby Ġadd itive Ġanimations Ġmust Ġbe Ġset Ġmanually Ġor Ġby Ġanother Ġanimation Ġbefore Ġapplying Ġthe Ġadd itive Ġanimations , Ġelse ĊĠĠĠĠĠĠĠĠ Ġ* Ġthe Ġproperty Ġvalues Ġwill Ġincrease Ġcontin ually . Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġadd ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠIndicates Ġwhether Ġa Ġtimeline 's Ġ` alpha ` Ġis Ġmixing Ġout Ġover Ġtime Ġtoward Ġ 0 Ġ( the Ġsetup Ġor Ġcurrent Ġpose Ġvalue ) Ġor ĊĠĠĠĠ Ġ* Ġmixing Ġin Ġtoward Ġ 1 Ġ( the Ġtimeline 's Ġvalue ). ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠSee ĠTimeline Ġ[ Timeline . apply ]. Ġ Ġ*/ ĊĠĠĠ Ġenum Ġclass ĠMix Direction Ġ{ ĊĠĠĠĠĠĠĠ Ġ` in `, Ġout ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġenum Ġclass ĠTimeline Type Ġ{ ĊĠĠĠĠĠĠĠ Ġrotate , Ġtranslate , Ġscale , Ġshe ar , Ġ// ĊĠĠĠĠĠĠĠ Ġattachment , Ġcolor , Ġde form , Ġ// ĊĠĠĠĠĠĠĠ Ġevent , Ġdraw Order , Ġ// ĊĠĠĠĠĠĠĠ Ġik Constraint , Ġtransform Constraint , Ġ// ĊĠĠĠĠĠĠĠ Ġpath Constraint Position , Ġpath Constraint Spacing , Ġpath Constraint Mix , Ġ// ĊĠĠĠĠĠĠĠ Ġtwo Color ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠAn Ġinterface Ġfor Ġtime lines Ġwhich Ġchange Ġthe Ġproperty Ġof Ġa Ġbone . Ġ Ġ*/ ĊĠĠĠ Ġinterface ĠB one Timeline Ġ: ĠTimeline Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ/** ĠThe Ġindex Ġof Ġthe Ġbone Ġin Ġ[ Skeleton . getB ones ] Ġthat Ġwill Ġbe Ġchanged . Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġvar Ġbone Index : ĠInt ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠAn Ġinterface Ġfor Ġtime lines Ġwhich Ġchange Ġthe Ġproperty Ġof Ġa Ġslot . Ġ Ġ*/ ĊĠĠĠ Ġinterface ĠSlot Timeline Ġ: ĠTimeline Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ/** ĠThe Ġindex Ġof Ġthe Ġslot Ġin Ġ[ Skeleton . getS lots ] Ġthat Ġwill Ġbe Ġchanged . Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġvar Ġslot Index : ĠInt ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠThe Ġbase Ġclass Ġfor Ġtime lines Ġthat Ġuse Ġinterpolation Ġbetween Ġkey Ġframe Ġvalues . Ġ Ġ*/ ĊĠĠĠ Ġabstract Ġclass ĠCurve Timeline ( frame Count : ĠInt ) Ġ: ĠTimeline Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġcurves : ĠFloat Array Ġ// Ġtype , Ġx , Ġy , Ġ... ĊĊĠĠĠĠĠĠĠ Ġ/** ĠThe Ġnumber Ġof Ġkey Ġframes Ġfor Ġthis Ġtimeline . Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġframe Count : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġcurves . size Ġ/ ĠBE ZI ER _ SIZE Ġ+ Ġ 1 ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( frame Count Ġ> Ġ 0 ) Ġ{ Ġ" frame Count Ġmust Ġbe Ġ> Ġ 0 : Ġ$ frame Count " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurves Ġ= ĠFloat Array (( frame Count Ġ- Ġ 1 ) Ġ* ĠBE ZI ER _ SIZE ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĠSets Ġthe Ġspecified Ġkey Ġframe Ġto Ġlinear Ġinterpolation . Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġset Linear ( frame Index : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurves [ frame Index Ġ* ĠBE ZI ER _ SIZE ] Ġ= ĠLINE AR ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĠSets Ġthe Ġspecified Ġkey Ġframe Ġto Ġste pped Ġinterpolation . Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġset Ste pped ( frame Index : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurves [ frame Index Ġ* ĠBE ZI ER _ SIZE ] Ġ= ĠSTEP PED ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĠReturns Ġthe Ġinterpolation Ġtype Ġfor Ġthe Ġspecified Ġkey Ġframe . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return ĠLinear Ġis Ġ 0 , Ġste pped Ġis Ġ 1 , ĠBe zier Ġis Ġ 2 . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġget Curve Type ( frame Index : ĠInt ): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġframe Index Ġ* ĠBE ZI ER _ SIZE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġ== Ġcurves . size ) Ġreturn ĠLINE AR ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġcurves [ index ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type Ġ== ĠLINE AR ) Ġreturn ĠLINE AR ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( type Ġ== ĠSTEP PED ) ĠSTEP PED Ġelse ĠBE ZI ER ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĠSets Ġthe Ġspecified Ġkey Ġframe Ġto ĠBe zier Ġinterpolation . Ġ` cx 1 ` Ġand Ġ` cx 2 ` Ġare Ġfrom Ġ 0 Ġto Ġ 1 , ĊĠĠĠĠĠĠĠĠ Ġ* Ġrepresenting Ġthe Ġpercent Ġof Ġtime Ġbetween Ġthe Ġtwo Ġkey Ġframes . Ġ` cy 1 ` Ġand Ġ` cy 2 ` Ġare Ġthe Ġpercent Ġof Ġthe ĊĠĠĠĠĠĠĠĠ Ġ* Ġdifference Ġbetween Ġthe Ġkey Ġframe 's Ġvalues . Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġset Curve ( frame Index : ĠInt , Ġcx 1 : ĠFloat , Ġcy 1 : ĠFloat , Ġcx 2 : ĠFloat , Ġcy 2 : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtmp x Ġ= Ġ(- cx 1 Ġ* Ġ 2 Ġ+ Ġcx 2 ) Ġ* Ġ 0 . 0 3 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtmp y Ġ= Ġ(- cy 1 Ġ* Ġ 2 Ġ+ Ġcy 2 ) Ġ* Ġ 0 . 0 3 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġd dd fx Ġ= Ġ(( cx 1 Ġ- Ġcx 2 ) Ġ* Ġ 3 Ġ+ Ġ 1 ) Ġ* Ġ 0 . 0 0 6 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġd dd fy Ġ= Ġ(( cy 1 Ġ- Ġcy 2 ) Ġ* Ġ 3 Ġ+ Ġ 1 ) Ġ* Ġ 0 . 0 0 6 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġd df x Ġ= Ġtmp x Ġ* Ġ 2 Ġ+ Ġd dd fx ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġd df y Ġ= Ġtmp y Ġ* Ġ 2 Ġ+ Ġd dd fy ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġdf x Ġ= Ġcx 1 Ġ* Ġ 0 . 3 f Ġ+ Ġtmp x Ġ+ Ġd dd fx Ġ* Ġ 0 . 1 6 6 6 6 6 6 7 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġdf y Ġ= Ġcy 1 Ġ* Ġ 0 . 3 f Ġ+ Ġtmp y Ġ+ Ġd dd fy Ġ* Ġ 0 . 1 6 6 6 6 6 6 7 f ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġframe Index Ġ* ĠBE ZI ER _ SIZE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurves Ġ= Ġthis . cur ves ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurves [ i ++] Ġ= ĠBE ZI ER ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġx Ġ= Ġdf x ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġy Ġ= Ġdf y ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġn Ġ= Ġi Ġ+ ĠBE ZI ER _ SIZE Ġ- Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( i Ġ< Ġn ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurves [ i ] Ġ= Ġx ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurves [ i Ġ+ Ġ 1 ] Ġ= Ġy ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdf x Ġ+= Ġd df x ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdf y Ġ+= Ġd df y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd df x Ġ+= Ġd dd fx ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd df y Ġ+= Ġd dd fy ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ+= Ġdf x ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ+= Ġdf y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi Ġ+= Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĠReturns Ġthe Ġinterpolated Ġpercentage Ġfor Ġthe Ġspecified Ġkey Ġframe Ġand Ġlinear Ġpercentage . Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġget Curve Percent ( frame Index : ĠInt , Ġpercent : ĠFloat ): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġpercent Ġ= Ġpercent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpercent Ġ= Ġpercent . coerce In ( 0 f , Ġ 1 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurves Ġ= Ġthis . cur ves ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġframe Index Ġ* ĠBE ZI ER _ SIZE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġcurves [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type Ġ== ĠLINE AR ) Ġreturn Ġpercent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type Ġ== ĠSTEP PED ) Ġreturn Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġx Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstart Ġ= Ġi ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġn Ġ= Ġi Ġ+ ĠBE ZI ER _ SIZE Ġ- Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( i Ġ< Ġn ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ= Ġcurves [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( x Ġ>= Ġpercent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ== Ġstart ) Ġreturn Ġcurves [ i Ġ+ Ġ 1 ] Ġ* Ġpercent Ġ/ Ġx Ġ// ĠFirst Ġpoint Ġis Ġ 0 , 0 . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprev X Ġ= Ġcurves [ i Ġ- Ġ 2 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprev Y Ġ= Ġcurves [ i Ġ- Ġ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġprev Y Ġ+ Ġ( cur ves [ i Ġ+ Ġ 1 ] Ġ- Ġprev Y ) Ġ* Ġ( percent Ġ- Ġprev X ) Ġ/ Ġ( x Ġ- Ġprev X ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi Ġ+= Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġcurves [ i Ġ- Ġ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġy Ġ+ Ġ( 1 Ġ- Ġy ) Ġ* Ġ( percent Ġ- Ġx ) Ġ/ Ġ( 1 Ġ- Ġx ) Ġ// ĠLast Ġpoint Ġis Ġ 1 , 1 . ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠLINE AR Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠSTEP PED Ġ= Ġ 1 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠBE ZI ER Ġ= Ġ 2 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval ĠBE ZI ER _ SIZE Ġ= Ġ 1 0 Ġ* Ġ 2 Ġ- Ġ 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠChanges Ġa Ġbone 's Ġlocal Ġ[ Bone . get Rotation ]. Ġ Ġ*/ ĊĠĠĠ Ġclass ĠRotate Timeline ( frame Count : ĠInt ) Ġ: ĠCurve Timeline ( frame Count ), ĠB one Timeline Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ/** ĠThe Ġindex Ġof Ġthe Ġbone Ġin Ġ[ Skeleton . getB ones ] Ġthat Ġwill Ġbe Ġchanged . Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġoverride Ġvar Ġbone Index : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset ( index ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( index Ġ>= Ġ 0 ) Ġ{ Ġ" index Ġmust Ġbe Ġ>= Ġ 0 ." Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġindex ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĠThe Ġtime Ġin Ġseconds Ġand Ġrotation Ġin Ġdegrees Ġfor Ġeach Ġkey Ġframe . Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġframes : ĠFloat Array Ġ= ĠFloat Array ( frame Count Ġshl Ġ 1 ) Ġ// Ġtime , Ġdegrees , Ġ... ĊĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġproperty Id : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġ( Timeline Type . rotate . ordinal Ġshl Ġ 2 4 ) Ġ+ Ġbone Index ĊĊĠĠĠĠĠĠĠ Ġ/** ĠSets Ġthe Ġtime Ġin Ġseconds Ġand Ġthe Ġrotation Ġin Ġdegrees Ġfor Ġthe Ġspecified Ġkey Ġframe . Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġset Frame ( frame Index : ĠInt , Ġtime : ĠFloat , Ġdegrees : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġframe Index Ġ= Ġframe Index ĊĠĠĠĠĠĠĠĠĠĠĠ Ġframe Index Ġ= Ġframe Index Ġshl Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġframes [ frame Index ] Ġ= Ġtime ĊĠĠĠĠĠĠĠĠĠĠĠ Ġframes [ frame Index Ġ+ ĠROT ATION ] Ġ= Ġdegrees ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġapply ( skeleton : ĠS keleton , Ġlast Time : ĠFloat , Ġtime : ĠFloat , Ġevents : ĠArrayList < Event > ?, Ġalpha : ĠFloat , Ġblend : ĠMix Blend , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdirection : ĠMix Direction ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbone Ġ= Ġskeleton . bones [ bone Index ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! bone . isActive ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġframes Ġ= Ġthis . frames ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( time Ġ< Ġframes [ 0 ]) Ġ{ Ġ// ĠTime Ġis Ġbefore Ġfirst Ġframe . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( blend ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbone . rotation Ġ= Ġbone . data . rotation ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġr Ġ= Ġbone . data . rotation Ġ- Ġbone . rotation ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbone . rotation Ġ+= Ġ( r Ġ- Ġ( 1 6 3 8 4 Ġ- Ġ( 1 6 3 8 4 . 4 9 9 9 9 9 9 9 9 9 9 6 Ġ- Ġr Ġ/ Ġ 3 6 0 ). toInt ()) Ġ* Ġ 3 6 0 ) Ġ* Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( time Ġ>= Ġframes [ frames . size Ġ- ĠEN TR IES ]) Ġ{ Ġ// ĠTime Ġis Ġafter Ġlast Ġframe . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġr Ġ= Ġframes [ frames . size Ġ+ ĠPRE V _ ROT ATION ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( blend ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Ġ-> Ġbone . rotation Ġ= Ġbone . data . rotation Ġ+ Ġr Ġ* Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst , Ġreplace Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr Ġ+= Ġbone . data . rotation Ġ- Ġbone . rotation ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr Ġ-= Ġ(( 1 6 3 8 4 Ġ- Ġ( 1 6 3 8 4 . 4 9 9 9 9 9 9 9 9 9 9 6 Ġ- Ġr Ġ/ Ġ 3 6 0 ). toInt ()) Ġ* Ġ 3 6 0 ). toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbone . rotation Ġ+= Ġr Ġ* Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFall Ġthrough . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Ġ-> Ġbone . rotation Ġ+= Ġr Ġ* Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠInterpol ate Ġbetween Ġthe Ġprevious Ġframe Ġand Ġthe Ġcurrent Ġframe . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġframe Ġ= Ġbinary Search ( frames , Ġtime , ĠEN TR IES ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprev Rotation Ġ= Ġframes [ frame Ġ+ ĠPRE V _ ROT ATION ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġframe Time Ġ= Ġframes [ frame ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpercent Ġ= Ġget Curve Percent (( frame Ġshr Ġ 1 ) Ġ- Ġ 1 , Ġ 1 Ġ- Ġ( time Ġ- Ġframe Time ) Ġ/ Ġ( frames [ frame Ġ+ ĠPRE V _ TIME ] Ġ- Ġframe Time )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġr Ġ= Ġframes [ frame Ġ+ ĠROT ATION ] Ġ- Ġprev Rotation ĊĠĠĠĠĠĠĠĠĠĠĠ Ġr Ġ= Ġprev Rotation Ġ+ Ġ( r Ġ- Ġ( 1 6 3 8 4 Ġ- Ġ( 1 6 3 8 4 . 4 9 9 9 9 9 9 9 9 9 9 6 Ġ- Ġr Ġ/ Ġ 3 6 0 ). toInt ()) Ġ* Ġ 3 6 0 ) Ġ* Ġpercent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( blend ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Ġ-> Ġbone . rotation Ġ= Ġbone . data . rotation Ġ+ Ġ( r Ġ- Ġ( 1 6 3 8 4 Ġ- Ġ( 1 6 3 8 4 . 4 9 9 9 9 9 9 9 9 9 9 6 Ġ- Ġr Ġ/ Ġ 3 6 0 ). toInt ()) Ġ* Ġ 3 6 0 ) Ġ* Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst , Ġreplace Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr Ġ+= Ġbone . data . rotation Ġ- Ġbone . rotation ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbone . rotation Ġ+= Ġ( r Ġ- Ġ( 1 6 3 8 4 Ġ- Ġ( 1 6 3 8 4 . 4 9 9 9 9 9 9 9 9 9 9 6 Ġ- Ġr Ġ/ Ġ 3 6 0 ). toInt ()) Ġ* Ġ 3 6 0 ) Ġ* Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFall Ġthrough . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Ġ-> Ġbone . rotation Ġ+= Ġ( r Ġ- Ġ( 1 6 3 8 4 Ġ- Ġ( 1 6 3 8 4 . 4 9 9 9 9 9 9 9 9 9 9 6 Ġ- Ġr Ġ/ Ġ 3 6 0 ). toInt ()) Ġ* Ġ 3 6 0 ) Ġ* Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠEN TR IES Ġ= Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Ġval ĠPRE V _ TIME Ġ= Ġ- 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Ġval ĠPRE V _ ROT ATION Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Ġval ĠROT ATION Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠChanges Ġa Ġbone 's Ġlocal Ġ[ Bone . getX ] Ġand Ġ[ Bone . getY ]. Ġ Ġ*/ ĊĠĠĠ Ġopen Ġclass ĠTranslate Timeline ( frame Count : ĠInt ) Ġ: ĠCurve Timeline ( frame Count ), ĠB one Timeline Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ/** ĠThe Ġindex Ġof Ġthe Ġbone Ġin Ġ[ Skeleton . getB ones ] Ġthat Ġwill Ġbe Ġchanged . Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġoverride Ġvar Ġbone Index : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset ( index ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( index Ġ>= Ġ 0 ) Ġ{ Ġ" index Ġmust Ġbe Ġ>= Ġ 0 ." Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġindex ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĠThe Ġtime Ġin Ġseconds , Ġx , Ġand Ġy Ġvalues Ġfor Ġeach Ġkey Ġframe . Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġframes : ĠFloat Array Ġ// Ġtime , Ġx , Ġy , Ġ... ĊĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġproperty Id : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġ( Timeline Type . translate . ordinal Ġshl Ġ 2 4 ) Ġ+ Ġbone Index ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġframes Ġ= ĠFloat Array ( frame Count Ġ* ĠEN TR IES ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĠSets Ġthe Ġtime Ġin Ġseconds , Ġx , Ġand Ġy Ġvalues Ġfor Ġthe Ġspecified Ġkey Ġframe . Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġset Frame ( frame Index : ĠInt , Ġtime : ĠFloat , Ġx : ĠFloat , Ġy : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġframe Index Ġ= Ġframe Index ĊĠĠĠĠĠĠĠĠĠĠĠ Ġframe Index Ġ*= ĠEN TR IES ĊĠĠĠĠĠĠĠĠĠĠĠ Ġframes [ frame Index ] Ġ= Ġtime ĊĠĠĠĠĠĠĠĠĠĠĠ Ġframes [ frame Index Ġ+ ĠX ] Ġ= Ġx ĊĠĠĠĠĠĠĠĠĠĠĠ Ġframes [ frame Index Ġ+ ĠY ] Ġ= Ġy ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġapply ( skeleton : ĠS keleton , Ġlast Time : ĠFloat , Ġtime : ĠFloat , Ġevents : ĠArrayList < Event > ?, Ġalpha : ĠFloat , Ġblend : ĠMix Blend , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdirection : ĠMix Direction ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbone Ġ= Ġskeleton . bones [ bone Index ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! bone . isActive ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġframes Ġ= Ġthis . frames ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( time Ġ< Ġframes [ 0 ]) Ġ{ Ġ// ĠTime Ġis Ġbefore Ġfirst Ġframe . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( blend ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbone . x Ġ= Ġbone . data . x ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbone . y Ġ= Ġbone . data . y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbone . x Ġ+= Ġ( bone . data . x Ġ- Ġbone . x ) Ġ* Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbone . y Ġ+= Ġ( bone . data . y Ġ- Ġbone . y ) Ġ* Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġx : ĠFloat ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġy : ĠFloat ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( time Ġ>= Ġframes [ frames . size Ġ- ĠEN TR IES ]) Ġ{ Ġ// ĠTime Ġis Ġafter Ġlast Ġframe . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ= Ġframes [ frames . size Ġ+ ĠPRE V _ X ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ= Ġframes [ frames . size Ġ+ ĠPRE V _ Y ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠInterpol ate Ġbetween Ġthe Ġprevious Ġframe Ġand Ġthe Ġcurrent Ġframe . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġframe Ġ= Ġbinary Search ( frames , Ġtime , ĠEN TR IES ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ= Ġframes [ frame Ġ+ ĠPRE V _ X ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ= Ġframes [ frame Ġ+ ĠPRE V _ Y ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġframe Time Ġ= Ġframes [ frame ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpercent Ġ= Ġget Curve Percent ( frame Ġ/ ĠEN TR IES Ġ- Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ- Ġ( time Ġ- Ġframe Time ) Ġ/ Ġ( frames [ frame Ġ+ ĠPRE V _ TIME ] Ġ- Ġframe Time )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ+= Ġ( frames [ frame Ġ+ ĠX ] Ġ- Ġx ) Ġ* Ġpercent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ+= Ġ( frames [ frame Ġ+ ĠY ] Ġ- Ġy ) Ġ* Ġpercent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( blend ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbone . x Ġ= Ġbone . data . x Ġ+ Ġx Ġ* Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbone . y Ġ= Ġbone . data . y Ġ+ Ġy Ġ* Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst , Ġreplace Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbone . x Ġ+= Ġ( bone . data . x Ġ+ Ġx Ġ- Ġbone . x ) Ġ* Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbone . y Ġ+= Ġ( bone . data . y Ġ+ Ġy Ġ- Ġbone . y ) Ġ* Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbone . x Ġ+= Ġx Ġ* Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbone . y Ġ+= Ġy Ġ* Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠEN TR IES Ġ= Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Ġval ĠPRE V _ TIME Ġ= Ġ- 3 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Ġval ĠPRE V _ X Ġ= Ġ- 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Ġval ĠPRE V _ Y Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Ġval ĠX Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Ġval ĠY Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠChanges Ġa Ġbone 's Ġlocal Ġ[ Bone . get Scale X ] Ġand Ġ[ Bone . get Scale Y ]. Ġ Ġ*/ ĊĠĠĠ Ġclass ĠScale Timeline ( frame Count : ĠInt ) Ġ: ĠTranslate Timeline ( frame Count ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġproperty Id : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġ( Timeline Type . scale . ordinal Ġshl Ġ 2 4 ) Ġ+ Ġbone Index ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġapply ( skeleton : ĠS keleton , Ġlast Time : ĠFloat , Ġtime : ĠFloat , Ġevents : ĠArrayList < Event > ?, Ġalpha : ĠFloat , Ġblend : ĠMix Blend , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdirection : ĠMix Direction ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbone Ġ= Ġskeleton . bones [ bone Index ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! bone . isActive ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġframes Ġ= Ġthis . frames ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( time Ġ< Ġframes [ 0 ]) Ġ{ Ġ// ĠTime Ġis Ġbefore Ġfirst Ġframe . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( blend ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbone . scale X Ġ= Ġbone . data . scale X ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbone . scale Y Ġ= Ġbone . data . scale Y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbone . scale X Ġ+= Ġ( bone . data . scale X Ġ- Ġbone . scale X ) Ġ* Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbone . scale Y Ġ+= Ġ( bone . data . scale Y Ġ- Ġbone . scale Y ) Ġ* Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġx : ĠFloat ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġy : ĠFloat ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( time Ġ>= Ġframes [ frames . size Ġ- ĠAnimation . Translate Timeline . ENTR IES ]) Ġ{ Ġ// ĠTime Ġis Ġafter Ġlast Ġframe . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ= Ġframes [ frames . size Ġ+ ĠAnimation . Translate Timeline . PREV _ X ] Ġ* Ġbone . data . scale X ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ= Ġframes [ frames . size Ġ+ ĠAnimation . Translate Timeline . PREV _ Y ] Ġ* Ġbone . data . scale Y ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠInterpol ate Ġbetween Ġthe Ġprevious Ġframe Ġand Ġthe Ġcurrent Ġframe . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġframe Ġ= Ġbinary Search ( frames , Ġtime , ĠAnimation . Translate Timeline . ENTR IES ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ= Ġframes [ frame Ġ+ ĠAnimation . Translate Timeline . PREV _ X ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ= Ġframes [ frame Ġ+ ĠAnimation . Translate Timeline . PREV _ Y ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġframe Time Ġ= Ġframes [ frame ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpercent Ġ= Ġget Curve Percent ( frame Ġ/ ĠAnimation . Translate Timeline . ENTR IES Ġ- Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ- Ġ( time Ġ- Ġframe Time ) Ġ/ Ġ( frames [ frame Ġ+ ĠAnimation . Translate Timeline . PREV _ TIME ] Ġ- Ġframe Time )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ= Ġ( x Ġ+ Ġ( frames [ frame Ġ+ ĠAnimation . Translate Timeline . X ] Ġ- Ġx ) Ġ* Ġpercent ) Ġ* Ġbone . data . scale X ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ= Ġ( y Ġ+ Ġ( frames [ frame Ġ+ ĠAnimation . Translate Timeline . Y ] Ġ- Ġy ) Ġ* Ġpercent ) Ġ* Ġbone . data . scale Y ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( alpha Ġ== Ġ 1 f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( blend Ġ== Ġadd ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbone . scale X Ġ+= Ġx Ġ- Ġbone . data . scale X ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbone . scale Y Ġ+= Ġy Ġ- Ġbone . data . scale Y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbone . scale X Ġ= Ġx ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbone . scale Y Ġ= Ġy ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠMix ing Ġout Ġuses Ġsign Ġof Ġsetup Ġor Ġcurrent Ġpose , Ġelse Ġuse Ġsign Ġof Ġkey . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbx : ĠFloat ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġby : ĠFloat ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( direction Ġ== Ġout ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( blend ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbx Ġ= Ġbone . data . scale X ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġby Ġ= Ġbone . data . scale Y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbone . scale X Ġ= Ġbx Ġ+ Ġ( kotlin . math . abs ( x ) Ġ* Ġ( bx . sign ) Ġ- Ġbx ) Ġ* Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbone . scale Y Ġ= Ġby Ġ+ Ġ( kotlin . math . abs ( y ) Ġ* Ġ( by . sign ) Ġ- Ġby ) Ġ* Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst , Ġreplace Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbx Ġ= Ġbone . scale X ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġby Ġ= Ġbone . scale Y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbone . scale X Ġ= Ġbx Ġ+ Ġ( kotlin . math . abs ( x ) Ġ* Ġ( bx . sign ) Ġ- Ġbx ) Ġ* Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbone . scale Y Ġ= Ġby Ġ+ Ġ( kotlin . math . abs ( y ) Ġ* Ġ( by . sign ) Ġ- Ġby ) Ġ* Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbx Ġ= Ġbone . scale X ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġby Ġ= Ġbone . scale Y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbone . scale X Ġ= Ġbx Ġ+ Ġ( kotlin . math . abs ( x ) Ġ* Ġ( bx . sign ) Ġ- Ġbone . data . scale X ) Ġ* Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbone . scale Y Ġ= Ġby Ġ+ Ġ( kotlin . math . abs ( y ) Ġ* Ġ( by . sign ) Ġ- Ġbone . data . scale Y ) Ġ* Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( blend ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbx Ġ= Ġkotlin . math . abs ( bone . data . scale X ) Ġ* Ġ( x . sign ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġby Ġ= Ġkotlin . math . abs ( bone . data . scale Y ) Ġ* Ġ( y . sign ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbone . scale X Ġ= Ġbx Ġ+ Ġ( x Ġ- Ġbx ) Ġ* Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbone . scale Y Ġ= Ġby Ġ+ Ġ( y Ġ- Ġby ) Ġ* Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst , Ġreplace Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbx Ġ= Ġkotlin . math . abs ( bone . scale X ) Ġ* Ġ( x . sign ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġby Ġ= Ġkotlin . math . abs ( bone . scale Y ) Ġ* Ġ( y . sign ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbone . scale X Ġ= Ġbx Ġ+ Ġ( x Ġ- Ġbx ) Ġ* Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbone . scale Y Ġ= Ġby Ġ+ Ġ( y Ġ- Ġby ) Ġ* Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbx Ġ= Ġ( x . sign ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġby Ġ= Ġ( y . sign ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbone . scale X Ġ= Ġkotlin . math . abs ( bone . scale X ) Ġ* Ġbx Ġ+ Ġ( x Ġ- Ġkotlin . math . abs ( bone . data . scale X ) Ġ* Ġbx ) Ġ* Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbone . scale Y Ġ= Ġkotlin . math . abs ( bone . scale Y ) Ġ* Ġby Ġ+ Ġ( y Ġ- Ġkotlin . math . abs ( bone . data . scale Y ) Ġ* Ġby ) Ġ* Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠChanges Ġa Ġbone 's Ġlocal Ġ[ Bone . getS he ar X ] Ġand Ġ[ Bone . getS he ar Y ]. Ġ Ġ*/ ĊĠĠĠ Ġclass ĠShe ar Timeline ( frame Count : ĠInt ) Ġ: ĠTranslate Timeline ( frame Count ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġproperty Id : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġ( Timeline Type . she ar . ordinal Ġshl Ġ 2 4 ) Ġ+ Ġbone Index ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġapply ( skeleton : ĠS keleton , Ġlast Time : ĠFloat , Ġtime : ĠFloat , Ġevents : ĠArrayList < Event > ?, Ġalpha : ĠFloat , Ġblend : ĠMix Blend , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdirection : ĠMix Direction ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbone Ġ= Ġskeleton . bones [ bone Index ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! bone . isActive ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġframes Ġ= Ġthis . frames ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( time Ġ< Ġframes [ 0 ]) Ġ{ Ġ// ĠTime Ġis Ġbefore Ġfirst Ġframe . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( blend ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbone . she ar X Ġ= Ġbone . data . she ar X ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbone . she ar Y Ġ= Ġbone . data . she ar Y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbone . she ar X Ġ+= Ġ( bone . data . she ar X Ġ- Ġbone . she ar X ) Ġ* Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbone . she ar Y Ġ+= Ġ( bone . data . she ar Y Ġ- Ġbone . she ar Y ) Ġ* Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġx : ĠFloat ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġy : ĠFloat ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( time Ġ>= Ġframes [ frames . size Ġ- ĠAnimation . Translate Timeline . ENTR IES ]) Ġ{ Ġ// ĠTime Ġis Ġafter Ġlast Ġframe . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ= Ġframes [ frames . size Ġ+ ĠAnimation . Translate Timeline . PREV _ X ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ= Ġframes [ frames . size Ġ+ ĠAnimation . Translate Timeline . PREV _ Y ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠInterpol ate Ġbetween Ġthe Ġprevious Ġframe Ġand Ġthe Ġcurrent Ġframe . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġframe Ġ= Ġbinary Search ( frames , Ġtime , ĠAnimation . Translate Timeline . ENTR IES ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ= Ġframes [ frame Ġ+ ĠAnimation . Translate Timeline . PREV _ X ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ= Ġframes [ frame Ġ+ ĠAnimation . Translate Timeline . PREV _ Y ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġframe Time Ġ= Ġframes [ frame ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpercent Ġ= Ġget Curve Percent ( frame Ġ/ ĠAnimation . Translate Timeline . ENTR IES Ġ- Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ- Ġ( time Ġ- Ġframe Time ) Ġ/ Ġ( frames [ frame Ġ+ ĠAnimation . Translate Timeline . PREV _ TIME ] Ġ- Ġframe Time )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ= Ġx Ġ+ Ġ( frames [ frame Ġ+ ĠAnimation . Translate Timeline . X ] Ġ- Ġx ) Ġ* Ġpercent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ= Ġy Ġ+ Ġ( frames [ frame Ġ+ ĠAnimation . Translate Timeline . Y ] Ġ- Ġy ) Ġ* Ġpercent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( blend ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbone . she ar X Ġ= Ġbone . data . she ar X Ġ+ Ġx Ġ* Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbone . she ar Y Ġ= Ġbone . data . she ar Y Ġ+ Ġy Ġ* Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst , Ġreplace Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbone . she ar X Ġ+= Ġ( bone . data . she ar X Ġ+ Ġx Ġ- Ġbone . she ar X ) Ġ* Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbone . she ar Y Ġ+= Ġ( bone . data . she ar Y Ġ+ Ġy Ġ- Ġbone . she ar Y ) Ġ* Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbone . she ar X Ġ+= Ġx Ġ* Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbone . she ar Y Ġ+= Ġy Ġ* Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠChanges Ġa Ġslot 's Ġ[ Slot . getColor ]. Ġ Ġ*/ ĊĠĠĠ Ġclass ĠColor Timeline ( frame Count : ĠInt ) Ġ: ĠCurve Timeline ( frame Count ), ĠSlot Timeline Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ/** ĠThe Ġindex Ġof Ġthe Ġslot Ġin Ġ[ Skeleton . getS lots ] Ġthat Ġwill Ġbe Ġchanged . Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġoverride Ġvar Ġslot Index : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset ( index ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( index Ġ>= Ġ 0 ) Ġ{ Ġ" index Ġmust Ġbe Ġ>= Ġ 0 ." Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġindex ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĠThe Ġtime Ġin Ġseconds , Ġred , Ġgreen , Ġblue , Ġand Ġalpha Ġvalues Ġfor Ġeach Ġkey Ġframe . Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġframes : ĠFloat Array Ġ// Ġtime , Ġr , Ġg , Ġb , Ġa , Ġ... ĊĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġproperty Id : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġ( Timeline Type . color . ordinal Ġshl Ġ 2 4 ) Ġ+ Ġslot Index ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġframes Ġ= ĠFloat Array ( frame Count Ġ* ĠEN TR IES ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĠSets Ġthe Ġtime Ġin Ġseconds , Ġred , Ġgreen , Ġblue , Ġand Ġalpha Ġfor Ġthe Ġspecified Ġkey Ġframe . Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġset Frame ( frame Index : ĠInt , Ġtime : ĠFloat , Ġr : ĠFloat , Ġg : ĠFloat , Ġb : ĠFloat , Ġa : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġframe Index Ġ= Ġframe Index ĊĠĠĠĠĠĠĠĠĠĠĠ Ġframe Index Ġ*= ĠEN TR IES ĊĠĠĠĠĠĠĠĠĠĠĠ Ġframes [ frame Index ] Ġ= Ġtime ĊĠĠĠĠĠĠĠĠĠĠĠ Ġframes [ frame Index Ġ+ ĠR ] Ġ= Ġr ĊĠĠĠĠĠĠĠĠĠĠĠ Ġframes [ frame Index Ġ+ ĠG ] Ġ= Ġg ĊĠĠĠĠĠĠĠĠĠĠĠ Ġframes [ frame Index Ġ+ ĠB ] Ġ= Ġb ĊĠĠĠĠĠĠĠĠĠĠĠ Ġframes [ frame Index Ġ+ ĠA ] Ġ= Ġa ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġapply ( skeleton : ĠS keleton , Ġlast Time : ĠFloat , Ġtime : ĠFloat , Ġevents : ĠArrayList < Event > ?, Ġalpha : ĠFloat , Ġblend : ĠMix Blend , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdirection : ĠMix Direction ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġslot Ġ= Ġskeleton . slots [ slot Index ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! slot . bone . isActive ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġframes Ġ= Ġthis . frames ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( time Ġ< Ġframes [ 0 ]) Ġ{ Ġ// ĠTime Ġis Ġbefore Ġfirst Ġframe . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( blend ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġslot . color . set To ( slot . data . color ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcolor Ġ= Ġslot . color ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsetup Ġ= Ġslot . data . color ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor . add (( setup . r Ġ- Ġcolor . r ) Ġ* Ġalpha , Ġ( setup . g Ġ- Ġcolor . g ) Ġ* Ġalpha , Ġ( setup . b Ġ- Ġcolor . b ) Ġ* Ġalpha , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( setup . a Ġ- Ġcolor . a ) Ġ* Ġalpha ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġr : ĠFloat ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġg : ĠFloat ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġb : ĠFloat ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġa : ĠFloat ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( time Ġ>= Ġframes [ frames . size Ġ- ĠEN TR IES ]) Ġ{ Ġ// ĠTime Ġis Ġafter Ġlast Ġframe . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġi Ġ= Ġframes . size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr Ġ= Ġframes [ i Ġ+ ĠPRE V _ R ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg Ġ= Ġframes [ i Ġ+ ĠPRE V _ G ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb Ġ= Ġframes [ i Ġ+ ĠPRE V _ B ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa Ġ= Ġframes [ i Ġ+ ĠPRE V _ A ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠInterpol ate Ġbetween Ġthe Ġprevious Ġframe Ġand Ġthe Ġcurrent Ġframe . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġframe Ġ= Ġbinary Search ( frames , Ġtime , ĠEN TR IES ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr Ġ= Ġframes [ frame Ġ+ ĠPRE V _ R ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg Ġ= Ġframes [ frame Ġ+ ĠPRE V _ G ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb Ġ= Ġframes [ frame Ġ+ ĠPRE V _ B ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa Ġ= Ġframes [ frame Ġ+ ĠPRE V _ A ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġframe Time Ġ= Ġframes [ frame ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpercent Ġ= Ġget Curve Percent ( frame Ġ/ ĠEN TR IES Ġ- Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ- Ġ( time Ġ- Ġframe Time ) Ġ/ Ġ( frames [ frame Ġ+ ĠPRE V _ TIME ] Ġ- Ġframe Time )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr Ġ+= Ġ( frames [ frame Ġ+ ĠR ] Ġ- Ġr ) Ġ* Ġpercent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg Ġ+= Ġ( frames [ frame Ġ+ ĠG ] Ġ- Ġg ) Ġ* Ġpercent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb Ġ+= Ġ( frames [ frame Ġ+ ĠB ] Ġ- Ġb ) Ġ* Ġpercent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa Ġ+= Ġ( frames [ frame Ġ+ ĠA ] Ġ- Ġa ) Ġ* Ġpercent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( alpha Ġ== Ġ 1 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġslot . color . set To ( r , Ġg , Ġb , Ġa ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcolor Ġ= Ġslot . color ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( blend Ġ== Ġsetup ) Ġcolor . set To ( slot . data . color ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor . add (( r Ġ- Ġcolor . r ) Ġ* Ġalpha , Ġ( g Ġ- Ġcolor . g ) Ġ* Ġalpha , Ġ( b Ġ- Ġcolor . b ) Ġ* Ġalpha , Ġ( a Ġ- Ġcolor . a ) Ġ* Ġalpha ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠEN TR IES Ġ= Ġ 5 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval ĠPRE V _ TIME Ġ= Ġ- 5 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval ĠPRE V _ R Ġ= Ġ- 4 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval ĠPRE V _ G Ġ= Ġ- 3 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval ĠPRE V _ B Ġ= Ġ- 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval ĠPRE V _ A Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval ĠR Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval ĠG Ġ= Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval ĠB Ġ= Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval ĠA Ġ= Ġ 4 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠChanges Ġa Ġslot 's Ġ[ Slot . getColor ] Ġand Ġ[ Slot . get Dark Color ] Ġfor Ġtwo Ġcolor Ġt int ing . Ġ Ġ*/ ĊĠĠĠ Ġclass ĠTwo Color Timeline ( frame Count : ĠInt ) Ġ: ĠCurve Timeline ( frame Count ), ĠSlot Timeline Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ/** ĠThe Ġindex Ġof Ġthe Ġslot Ġin Ġ[ Skeleton . getS lots ] Ġthat Ġwill Ġbe Ġchanged . ĠThe Ġ[ Slot . get Dark Color ] Ġmust Ġnot Ġbe ĊĠĠĠĠĠĠĠĠ Ġ* Ġnull . Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġoverride Ġvar Ġslot Index : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset ( index ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( index Ġ>= Ġ 0 ) Ġ{ Ġ" index Ġmust Ġbe Ġ>= Ġ 0 ." Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġindex ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĠThe Ġtime Ġin Ġseconds , Ġred , Ġgreen , Ġblue , Ġand Ġalpha Ġvalues Ġfor Ġeach Ġkey Ġframe . Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġframes : ĠFloat Array Ġ// Ġtime , Ġr , Ġg , Ġb , Ġa , Ġr 2 , Ġg 2 , Ġb 2 , Ġ... ĊĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġproperty Id : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġ( Timeline Type . two Color . ordinal Ġshl Ġ 2 4 ) Ġ+ Ġslot Index ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġframes Ġ= ĠFloat Array ( frame Count Ġ* ĠEN TR IES ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĠSets Ġthe Ġtime Ġin Ġseconds , Ġlight , Ġand Ġdark Ġcolors Ġfor Ġthe Ġspecified Ġkey Ġframe . Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġset Frame ( frame Index : ĠInt , Ġtime : ĠFloat , Ġr : ĠFloat , Ġg : ĠFloat , Ġb : ĠFloat , Ġa : ĠFloat , Ġr 2 : ĠFloat , Ġg 2 : ĠFloat , Ġb 2 : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġframe Index Ġ= Ġframe Index ĊĠĠĠĠĠĠĠĠĠĠĠ Ġframe Index Ġ*= ĠEN TR IES ĊĠĠĠĠĠĠĠĠĠĠĠ Ġframes [ frame Index ] Ġ= Ġtime ĊĠĠĠĠĠĠĠĠĠĠĠ Ġframes [ frame Index Ġ+ ĠR ] Ġ= Ġr ĊĠĠĠĠĠĠĠĠĠĠĠ Ġframes [ frame Index Ġ+ ĠG ] Ġ= Ġg ĊĠĠĠĠĠĠĠĠĠĠĠ Ġframes [ frame Index Ġ+ ĠB ] Ġ= Ġb ĊĠĠĠĠĠĠĠĠĠĠĠ Ġframes [ frame Index Ġ+ ĠA ] Ġ= Ġa ĊĠĠĠĠĠĠĠĠĠĠĠ Ġframes [ frame Index Ġ+ ĠR 2 ] Ġ= Ġr 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġframes [ frame Index Ġ+ ĠG 2 ] Ġ= Ġg 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġframes [ frame Index Ġ+ ĠB 2 ] Ġ= Ġb 2 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġapply ( skeleton : ĠS keleton , Ġlast Time : ĠFloat , Ġtime : ĠFloat , Ġevents : ĠArrayList < Event > ?, Ġalpha : ĠFloat , Ġblend : ĠMix Blend , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdirection : ĠMix Direction ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġslot Ġ= Ġskeleton . slots [ slot Index ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! slot . bone . isActive ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġframes Ġ= Ġthis . frames ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( time Ġ< Ġframes [ 0 ]) Ġ{ Ġ// ĠTime Ġis Ġbefore Ġfirst Ġframe . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( blend ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġslot . color . set To ( slot . data . color ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġslot . dark Color !!. set To ( slot . data . dark Color !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlight Ġ= Ġslot . color ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdark Ġ= Ġslot . dark Color ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsetup Light Ġ= Ġslot . data . color ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsetup Dark Ġ= Ġslot . data . dark Color !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlight . add (( setup Light . r Ġ- Ġlight . r ) Ġ* Ġalpha , Ġ( setup Light . g Ġ- Ġlight . g ) Ġ* Ġalpha , Ġ( setup Light . b Ġ- Ġlight . b ) Ġ* Ġalpha , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( setup Light . a Ġ- Ġlight . a ) Ġ* Ġalpha ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdark !!. add (( setup Dark . r Ġ- Ġdark . r ) Ġ* Ġalpha , Ġ( setup Dark . g Ġ- Ġdark . g ) Ġ* Ġalpha , Ġ( setup Dark . b Ġ- Ġdark . b ) Ġ* Ġalpha , Ġ 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġr : ĠFloat ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġg : ĠFloat ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġb : ĠFloat ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġa : ĠFloat ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġr 2 : ĠFloat ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġg 2 : ĠFloat ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġb 2 : ĠFloat ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( time Ġ>= Ġframes [ frames . size Ġ- ĠEN TR IES ]) Ġ{ Ġ// ĠTime Ġis Ġafter Ġlast Ġframe . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġi Ġ= Ġframes . size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr Ġ= Ġframes [ i Ġ+ ĠPRE V _ R ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg Ġ= Ġframes [ i Ġ+ ĠPRE V _ G ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb Ġ= Ġframes [ i Ġ+ ĠPRE V _ B ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa Ġ= Ġframes [ i Ġ+ ĠPRE V _ A ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr 2 Ġ= Ġframes [ i Ġ+ ĠPRE V _ R 2 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg 2 Ġ= Ġframes [ i Ġ+ ĠPRE V _ G 2 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb 2 Ġ= Ġframes [ i Ġ+ ĠPRE V _ B 2 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠInterpol ate Ġbetween Ġthe Ġprevious Ġframe Ġand Ġthe Ġcurrent Ġframe . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġframe Ġ= Ġbinary Search ( frames , Ġtime , ĠEN TR IES ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr Ġ= Ġframes [ frame Ġ+ ĠPRE V _ R ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg Ġ= Ġframes [ frame Ġ+ ĠPRE V _ G ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb Ġ= Ġframes [ frame Ġ+ ĠPRE V _ B ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa Ġ= Ġframes [ frame Ġ+ ĠPRE V _ A ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr 2 Ġ= Ġframes [ frame Ġ+ ĠPRE V _ R 2 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg 2 Ġ= Ġframes [ frame Ġ+ ĠPRE V _ G 2 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb 2 Ġ= Ġframes [ frame Ġ+ ĠPRE V _ B 2 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġframe Time Ġ= Ġframes [ frame ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpercent Ġ= Ġget Curve Percent ( frame Ġ/ ĠEN TR IES Ġ- Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ- Ġ( time Ġ- Ġframe Time ) Ġ/ Ġ( frames [ frame Ġ+ ĠPRE V _ TIME ] Ġ- Ġframe Time )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr Ġ+= Ġ( frames [ frame Ġ+ ĠR ] Ġ- Ġr ) Ġ* Ġpercent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg Ġ+= Ġ( frames [ frame Ġ+ ĠG ] Ġ- Ġg ) Ġ* Ġpercent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb Ġ+= Ġ( frames [ frame Ġ+ ĠB ] Ġ- Ġb ) Ġ* Ġpercent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa Ġ+= Ġ( frames [ frame Ġ+ ĠA ] Ġ- Ġa ) Ġ* Ġpercent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr 2 Ġ+= Ġ( frames [ frame Ġ+ ĠR 2 ] Ġ- Ġr 2 ) Ġ* Ġpercent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg 2 Ġ+= Ġ( frames [ frame Ġ+ ĠG 2 ] Ġ- Ġg 2 ) Ġ* Ġpercent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb 2 Ġ+= Ġ( frames [ frame Ġ+ ĠB 2 ] Ġ- Ġb 2 ) Ġ* Ġpercent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( alpha Ġ== Ġ 1 f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġslot . color . set To ( r , Ġg , Ġb , Ġa ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġslot . dark Color !!. set To ( r 2 , Ġg 2 , Ġb 2 , Ġ 1 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlight Ġ= Ġslot . color ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdark Ġ= Ġslot . dark Color ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( blend Ġ== Ġsetup ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlight . set To ( slot . data . color ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdark !!. set To ( slot . data . dark Color !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlight . add (( r Ġ- Ġlight . r ) Ġ* Ġalpha , Ġ( g Ġ- Ġlight . g ) Ġ* Ġalpha , Ġ( b Ġ- Ġlight . b ) Ġ* Ġalpha , Ġ( a Ġ- Ġlight . a ) Ġ* Ġalpha ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdark !!. add (( r 2 Ġ- Ġdark . r ) Ġ* Ġalpha , Ġ( g 2 Ġ- Ġdark . g ) Ġ* Ġalpha , Ġ( b 2 Ġ- Ġdark . b ) Ġ* Ġalpha , Ġ 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠEN TR IES Ġ= Ġ 8 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval ĠPRE V _ TIME Ġ= Ġ- 8 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval ĠPRE V _ R Ġ= Ġ- 7 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval ĠPRE V _ G Ġ= Ġ- 6 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval ĠPRE V _ B Ġ= Ġ- 5 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval ĠPRE V _ A Ġ= Ġ- 4 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval ĠPRE V _ R 2 Ġ= Ġ- 3 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval ĠPRE V _ G 2 Ġ= Ġ- 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval ĠPRE V _ B 2 Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval ĠR Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval ĠG Ġ= Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval ĠB Ġ= Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval ĠA Ġ= Ġ 4 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval ĠR 2 Ġ= Ġ 5 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval ĠG 2 Ġ= Ġ 6 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval ĠB 2 Ġ= Ġ 7 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠChanges Ġa Ġslot 's Ġ[ Slot . get Attachment ]. Ġ Ġ*/ ĊĠĠĠ Ġclass ĠAttachment Timeline ( frame Count : ĠInt ) Ġ: ĠSlot Timeline Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĠThe Ġindex Ġof Ġthe Ġslot Ġin Ġ[ Skeleton . getS lots ] Ġthat Ġwill Ġbe Ġchanged . Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġoverride Ġvar Ġslot Index : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset ( index ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( index Ġ>= Ġ 0 ) Ġ{ Ġ" index Ġmust Ġbe Ġ>= Ġ 0 ." Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġindex ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( frame Count Ġ> Ġ 0 ) Ġ{ Ġ" frame Count Ġmust Ġbe Ġ> Ġ 0 : Ġ$ frame Count " Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĠThe Ġtime Ġin Ġseconds Ġfor Ġeach Ġkey Ġframe . Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġframes : ĠFloat Array Ġ= ĠFloat Array ( frame Count ) Ġ// Ġtime , Ġ... ĊĊĠĠĠĠĠĠĠ Ġ/** ĠThe Ġattachment Ġname Ġfor Ġeach Ġkey Ġframe . ĠMay Ġcontain Ġnull Ġvalues Ġto Ġclear Ġthe Ġattachment . Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġattachment Names : ĠArray < String ?> Ġ= ĠarrayOf Null s ( frame Count ) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġproperty Id : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġ( Timeline Type . attachment . ordinal Ġshl Ġ 2 4 ) Ġ+ Ġslot Index ĊĊĠĠĠĠĠĠĠ Ġ/** ĠThe Ġnumber Ġof Ġkey Ġframes Ġfor Ġthis Ġtimeline . Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġframe Count : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġframes . size ĊĊĠĠĠĠĠĠĠ Ġ/** ĠSets Ġthe Ġtime Ġin Ġseconds Ġand Ġthe Ġattachment Ġname Ġfor Ġthe Ġspecified Ġkey Ġframe . Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġset Frame ( frame Index : ĠInt , Ġtime : ĠFloat , Ġattachment Name : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġframes [ frame Index ] Ġ= Ġtime ĊĠĠĠĠĠĠĠĠĠĠĠ Ġattachment Names [ frame Index ] Ġ= Ġattachment Name ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġapply ( skeleton : ĠS keleton , Ġlast Time : ĠFloat , Ġtime : ĠFloat , Ġevents : ĠArrayList < Event > ?, Ġalpha : ĠFloat , Ġblend : ĠMix Blend , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdirection : ĠMix Direction ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġslot Ġ= Ġskeleton . slots [ slot Index ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! slot . bone . isActive ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( direction Ġ== Ġout ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( blend Ġ== Ġsetup ) Ġset Attachment ( skeleton , Ġslot , Ġslot . data . attachment Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġframes Ġ= Ġthis . frames ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( time Ġ< Ġframes [ 0 ]) Ġ{ Ġ// ĠTime Ġis Ġbefore Ġfirst Ġframe . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( blend Ġ== Ġsetup Ġ|| Ġblend Ġ== Ġfirst ) Ġset Attachment ( skeleton , Ġslot , Ġslot . data . attachment Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġframe Index : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( time Ġ>= Ġframes [ frames . size Ġ- Ġ 1 ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTime Ġis Ġafter Ġlast Ġframe . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġframe Index Ġ= Ġframes . size Ġ- Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġframe Index Ġ= Ġbinary Search ( frames , Ġtime ) Ġ- Ġ 1 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Attachment ( skeleton , Ġslot , Ġattachment Names [ frame Index ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġset Attachment ( skeleton : ĠS keleton , Ġslot : ĠSlot , Ġattachment Name : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġslot . set Attachment ( if Ġ( attachment Name Ġ== Ġnull ) Ġnull Ġelse Ġskeleton . get Attachment ( slot Index , Ġattachment Name )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠChanges Ġa Ġslot 's Ġ[ Slot . get De form ] Ġto Ġde form Ġa Ġ[ Vertex Attachment ]. Ġ Ġ*/ ĊĠĠĠ Ġclass ĠDe form Timeline ( frame Count : ĠInt ) Ġ: ĠCurve Timeline ( frame Count ), ĠSlot Timeline Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĠThe Ġindex Ġof Ġthe Ġslot Ġin Ġ[ Skeleton . getS lots ] Ġthat Ġwill Ġbe Ġchanged . Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġoverride Ġvar Ġslot Index : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset ( index ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( index Ġ>= Ġ 0 ) Ġ{ Ġ" index Ġmust Ġbe Ġ>= Ġ 0 ." Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġindex ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĠThe Ġattachment Ġthat Ġwill Ġbe Ġdef or med . Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġattachment : ĠVertex Attachment ĊĊĠĠĠĠĠĠĠ Ġ/** ĠThe Ġtime Ġin Ġseconds Ġfor Ġeach Ġkey Ġframe . Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġframes : ĠFloat Array Ġ= ĠFloat Array ( frame Count ) Ġ// Ġtime , Ġ... ĊĊĠĠĠĠĠĠĠ Ġ/** ĠThe Ġvertices Ġfor Ġeach Ġkey Ġframe . Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġvertices : ĠArray < Float Array > Ġ= ĠarrayOf Null s < Float Array >( frame Count ) Ġas ĠArray < Float Array > ĊĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġproperty Id : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġ( Timeline Type . def orm . ordinal Ġshl Ġ 2 7 ) Ġ+ Ġattachment . id Ġ+ Ġslot Index ĊĊĠĠĠĠĠĠĠ Ġ/** ĠSets Ġthe Ġtime Ġin Ġseconds Ġand Ġthe Ġvertices Ġfor Ġthe Ġspecified Ġkey Ġframe . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġvertices ĠVertex Ġpositions Ġfor Ġan Ġun weighted ĠVertex Attachment , Ġor Ġde form Ġoffsets Ġif Ġit Ġhas Ġweights . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġset Frame ( frame Index : ĠInt , Ġtime : ĠFloat , Ġvertices : ĠFloat Array ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġframes [ frame Index ] Ġ= Ġtime ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . vertices [ frame Index ] Ġ= Ġvertices ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġapply ( skeleton : ĠS keleton , Ġlast Time : ĠFloat , Ġtime : ĠFloat , Ġevents : ĠArrayList < Event > ?, Ġalpha : ĠFloat , Ġblend : ĠMix Blend , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdirection : ĠMix Direction ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġalpha Ġ= Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġblend Ġ= Ġblend ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġslot Ġ= Ġskeleton . slots [ slot Index ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! slot . bone . isActive ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġslot Attachment Ġ= Ġslot . attachment ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( slot Attachment Ġ! is ĠVertex Attachment Ġ|| Ġslot Attachment . def orm Attachment Ġ!== Ġattachment ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġde form Array Ġ= Ġslot . def orm ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( def orm Array . size Ġ== Ġ 0 ) Ġblend Ġ= Ġsetup ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġframe Vertices Ġ= Ġthis . vertices ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvertex Count Ġ= Ġframe Vertices [ 0 ]. size ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġframes Ġ= Ġthis . frames ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( time Ġ< Ġframes [ 0 ]) Ġ{ Ġ// ĠTime Ġis Ġbefore Ġfirst Ġframe . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( blend ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġde form Array . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( alpha Ġ== Ġ 1 f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġde form Array . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġde form Ġ= Ġde form Array . setSize ( vertex Count ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( slot Attachment . bones Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUn weighted Ġvertex Ġpositions . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsetup Vertices Ġ= Ġslot Attachment . vertices ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġvertex Count ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġde form [ i ] Ġ+= Ġ( setup Vertices ! ![ i ] Ġ- Ġde form [ i ]) Ġ* Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWeight ed Ġde form Ġoffsets . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġalpha Ġ= Ġ 1 Ġ- Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġvertex Count ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġde form [ i ] Ġ*= Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġde form Ġ= Ġde form Array . setSize ( vertex Count ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( time Ġ>= Ġframes [ frames . size Ġ- Ġ 1 ]) Ġ{ Ġ// ĠTime Ġis Ġafter Ġlast Ġframe . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast Vertices Ġ= Ġframe Vertices [ frames . size Ġ- Ġ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( alpha Ġ== Ġ 1 f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( blend Ġ== Ġadd ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( slot Attachment . bones Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUn weighted Ġvertex Ġpositions , Ġno Ġalpha . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsetup Vertices Ġ= Ġslot Attachment . vertices ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġvertex Count ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġde form [ i ] Ġ+= Ġlast Vertices [ i ] Ġ- Ġsetup Vertices ! ![ i ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWeight ed Ġde form Ġoffsets , Ġno Ġalpha . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġvertex Count ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġde form [ i ] Ġ+= Ġlast Vertices [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠVertex Ġpositions Ġor Ġde form Ġoffsets , Ġno Ġalpha . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarray copy ( last Vertices , Ġ 0 , Ġde form , Ġ 0 , Ġvertex Count ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( blend ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( slot Attachment . bones Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUn weighted Ġvertex Ġpositions , Ġwith Ġalpha . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsetup Vertices Ġ= Ġslot Attachment . vertices ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġvertex Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsetup Ġ= Ġsetup Vertices ! ![ i ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġde form [ i ] Ġ= Ġsetup Ġ+ Ġ( last Vertices [ i ] Ġ- Ġsetup ) Ġ* Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWeight ed Ġde form Ġoffsets , Ġwith Ġalpha . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġvertex Count ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġde form [ i ] Ġ= Ġlast Vertices [ i ] Ġ* Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst , Ġreplace Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠVertex Ġpositions Ġor Ġde form Ġoffsets , Ġwith Ġalpha . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġvertex Count ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġde form [ i ] Ġ+= Ġ( last Vertices [ i ] Ġ- Ġde form [ i ]) Ġ* Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( slot Attachment . bones Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUn weighted Ġvertex Ġpositions , Ġno Ġalpha . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsetup Vertices Ġ= Ġslot Attachment . vertices ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġvertex Count ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġde form [ i ] Ġ+= Ġ( last Vertices [ i ] Ġ- Ġsetup Vertices ! ![ i ]) Ġ* Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWeight ed Ġde form Ġoffsets , Ġalpha . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġvertex Count ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġde form [ i ] Ġ+= Ġlast Vertices [ i ] Ġ* Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠInterpol ate Ġbetween Ġthe Ġprevious Ġframe Ġand Ġthe Ġcurrent Ġframe . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġframe Ġ= Ġbinary Search ( frames , Ġtime ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprev Vertices Ġ= Ġframe Vertices [ frame Ġ- Ġ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnext Vertices Ġ= Ġframe Vertices [ frame ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġframe Time Ġ= Ġframes [ frame ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpercent Ġ= Ġget Curve Percent ( frame Ġ- Ġ 1 , Ġ 1 Ġ- Ġ( time Ġ- Ġframe Time ) Ġ/ Ġ( frames [ frame Ġ- Ġ 1 ] Ġ- Ġframe Time )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( alpha Ġ== Ġ 1 f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( blend Ġ== Ġadd ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( slot Attachment . bones Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUn weighted Ġvertex Ġpositions , Ġno Ġalpha . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsetup Vertices Ġ= Ġslot Attachment . vertices ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġvertex Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprev Ġ= Ġprev Vertices [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġde form [ i ] Ġ+= Ġprev Ġ+ Ġ( next Vertices [ i ] Ġ- Ġprev ) Ġ* Ġpercent Ġ- Ġsetup Vertices ! ![ i ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWeight ed Ġde form Ġoffsets , Ġno Ġalpha . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġvertex Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprev Ġ= Ġprev Vertices [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġde form [ i ] Ġ+= Ġprev Ġ+ Ġ( next Vertices [ i ] Ġ- Ġprev ) Ġ* Ġpercent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠVertex Ġpositions Ġor Ġde form Ġoffsets , Ġno Ġalpha . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġvertex Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprev Ġ= Ġprev Vertices [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġde form [ i ] Ġ= Ġprev Ġ+ Ġ( next Vertices [ i ] Ġ- Ġprev ) Ġ* Ġpercent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( blend ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( slot Attachment . bones Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUn weighted Ġvertex Ġpositions , Ġwith Ġalpha . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsetup Vertices Ġ= Ġslot Attachment . vertices ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġvertex Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprev Ġ= Ġprev Vertices [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsetup Ġ= Ġsetup Vertices ! ![ i ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġde form [ i ] Ġ= Ġsetup Ġ+ Ġ( prev Ġ+ Ġ( next Vertices [ i ] Ġ- Ġprev ) Ġ* Ġpercent Ġ- Ġsetup ) Ġ* Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWeight ed Ġde form Ġoffsets , Ġwith Ġalpha . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġvertex Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprev Ġ= Ġprev Vertices [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġde form [ i ] Ġ= Ġ( prev Ġ+ Ġ( next Vertices [ i ] Ġ- Ġprev ) Ġ* Ġpercent ) Ġ* Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst , Ġreplace Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠVertex Ġpositions Ġor Ġde form Ġoffsets , Ġwith Ġalpha . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġvertex Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprev Ġ= Ġprev Vertices [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġde form [ i ] Ġ+= Ġ( prev Ġ+ Ġ( next Vertices [ i ] Ġ- Ġprev ) Ġ* Ġpercent Ġ- Ġde form [ i ]) Ġ* Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( slot Attachment . bones Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUn weighted Ġvertex Ġpositions , Ġwith Ġalpha . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsetup Vertices Ġ= Ġslot Attachment . vertices ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġvertex Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprev Ġ= Ġprev Vertices [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġde form [ i ] Ġ+= Ġ( prev Ġ+ Ġ( next Vertices [ i ] Ġ- Ġprev ) Ġ* Ġpercent Ġ- Ġsetup Vertices ! ![ i ]) Ġ* Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWeight ed Ġde form Ġoffsets , Ġwith Ġalpha . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġvertex Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprev Ġ= Ġprev Vertices [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġde form [ i ] Ġ+= Ġ( prev Ġ+ Ġ( next Vertices [ i ] Ġ- Ġprev ) Ġ* Ġpercent ) Ġ* Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠF ires Ġan Ġ[ Event ] Ġwhen Ġspecific Ġanimation Ġtimes Ġare Ġreached . Ġ Ġ*/ ĊĠĠĠ Ġclass ĠEvent Timeline ( frame Count : ĠInt ) Ġ: ĠTimeline Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( frame Count Ġ> Ġ 0 ) Ġ{ Ġ" frame Count Ġmust Ġbe Ġ> Ġ 0 : Ġ$ frame Count " Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ/** ĠThe Ġtime Ġin Ġseconds Ġfor Ġeach Ġkey Ġframe . Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġframes : ĠFloat Array Ġ= ĠFloat Array ( frame Count ) Ġ// Ġtime , Ġ... ĊĊĠĠĠĠĠĠĠ Ġ/** ĠThe Ġevent Ġfor Ġeach Ġkey Ġframe . Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġevents : ĠArray < Event > Ġ= ĠarrayOf Null s < Event >( frame Count ) Ġas ĠArray < Event > ĊĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġproperty Id : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= ĠTimeline Type . event . ordinal Ġshl Ġ 2 4 ĊĊĠĠĠĠĠĠĠ Ġ/** ĠThe Ġnumber Ġof Ġkey Ġframes Ġfor Ġthis Ġtimeline . Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġframe Count : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġframes . size ĊĊĠĠĠĠĠĠĠ Ġ/** ĠSets Ġthe Ġtime Ġin Ġseconds Ġand Ġthe Ġevent Ġfor Ġthe Ġspecified Ġkey Ġframe . Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġset Frame ( frame Index : ĠInt , Ġevent : ĠEvent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġframes [ frame Index ] Ġ= Ġevent . time ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevents [ frame Index ] Ġ= Ġevent ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĠF ires Ġevents Ġfor Ġframes Ġ> Ġ` last Time ` Ġand Ġ<= Ġ` time `. Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġapply ( skeleton : ĠS keleton , Ġlast Time : ĠFloat , Ġtime : ĠFloat , Ġfired Events : ĠArrayList < Event > ?, Ġalpha : ĠFloat , Ġblend : ĠMix Blend , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdirection : ĠMix Direction ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġlast Time Ġ= Ġlast Time ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( f ired Events Ġ== Ġnull ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġframes Ġ= Ġthis . frames ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġframe Count Ġ= Ġframes . size ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( last Time Ġ> Ġtime ) Ġ{ Ġ// ĠFire Ġevents Ġafter Ġlast Ġtime Ġfor Ġloop ed Ġanimations . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapply ( skeleton , Ġlast Time , ĠInt . MAX _ VALUE . toFloat (), Ġfired Events , Ġalpha , Ġblend , Ġdirection ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Time Ġ= Ġ- 1 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( last Time Ġ>= Ġframes [ frame Count Ġ- Ġ 1 ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠLast Ġtime Ġis Ġafter Ġlast Ġframe . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( time Ġ< Ġframes [ 0 ]) Ġreturn Ġ Ġ// ĠTime Ġis Ġbefore Ġfirst Ġframe . ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġframe : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( last Time Ġ< Ġframes [ 0 ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġframe Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġframe Ġ= Ġbinary Search ( frames , Ġlast Time ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġframe Time Ġ= Ġframes [ frame ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( frame Ġ> Ġ 0 ) Ġ{ Ġ// ĠFire Ġmultiple Ġevents Ġwith Ġthe Ġsame Ġframe . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( frames [ frame Ġ- Ġ 1 ] Ġ!= Ġframe Time ) Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġframe -- ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( frame Ġ< Ġframe Count Ġ&& Ġtime Ġ>= Ġframes [ frame ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfired Events . add ( events [ frame ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġframe ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠChanges Ġa Ġskeleton 's Ġ[ Skeleton . get Draw Order ]. Ġ Ġ*/ ĊĠĠĠ Ġclass ĠDraw Order Timeline ( frame Count : ĠInt ) Ġ: ĠTimeline Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( frame Count Ġ> Ġ 0 ) Ġ{ Ġ" frame Count Ġmust Ġbe Ġ> Ġ 0 : Ġ$ frame Count " Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ/** ĠThe Ġtime Ġin Ġseconds Ġfor Ġeach Ġkey Ġframe . Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġframes : ĠFloat Array Ġ= ĠFloat Array ( frame Count ) Ġ// Ġtime , Ġ... ĊĊĠĠĠĠĠĠĠ Ġ/** ĠThe Ġdraw Ġorder Ġfor Ġeach Ġkey Ġframe . ĠSee Ġ[. set Frame ]. Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġdraw Orders : ĠArray < IntArray ?> Ġ= ĠarrayOf Null s < IntArray >( frame Count ) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġproperty Id : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= ĠTimeline Type . draw Order . ordinal Ġshl Ġ 2 4 ĊĊĠĠĠĠĠĠĠ Ġ/** ĠThe Ġnumber Ġof Ġkey Ġframes Ġfor Ġthis Ġtimeline . Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġframe Count : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġframes . size ĊĊĠĠĠĠĠĠĠ Ġ/** ĠSets Ġthe Ġtime Ġin Ġseconds Ġand Ġthe Ġdraw Ġorder Ġfor Ġthe Ġspecified Ġkey Ġframe . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġdraw Order ĠFor Ġeach Ġslot Ġin Ġ[ Skeleton . slots ], Ġthe Ġindex Ġof Ġthe Ġnew Ġdraw Ġorder . ĠMay Ġbe Ġnull Ġto Ġuse Ġsetup Ġpose ĊĠĠĠĠĠĠĠĠ Ġ* Ġdraw Ġorder . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġset Frame ( frame Index : ĠInt , Ġtime : ĠFloat , Ġdraw Order : ĠInt Array ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġframes [ frame Index ] Ġ= Ġtime ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Orders [ frame Index ] Ġ= Ġdraw Order ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġapply ( skeleton : ĠS keleton , Ġlast Time : ĠFloat , Ġtime : ĠFloat , Ġevents : ĠArrayList < Event > ?, Ġalpha : ĠFloat , Ġblend : ĠMix Blend , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdirection : ĠMix Direction ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdraw Order Ġ= Ġskeleton . draw Order ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġslots Ġ= Ġskeleton . slots ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( direction Ġ== Ġout ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( blend Ġ== Ġsetup ) Ġarray copy ( slots , Ġ 0 , Ġdraw Order , Ġ 0 , Ġslots . size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġframes Ġ= Ġthis . frames ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( time Ġ< Ġframes [ 0 ]) Ġ{ Ġ// ĠTime Ġis Ġbefore Ġfirst Ġframe . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( blend Ġ== Ġsetup Ġ|| Ġblend Ġ== Ġfirst ) Ġarray copy ( slots , Ġ 0 , Ġdraw Order , Ġ 0 , Ġslots . size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġframe : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( time Ġ>= Ġframes [ frames . size Ġ- Ġ 1 ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTime Ġis Ġafter Ġlast Ġframe . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġframe Ġ= Ġframes . size Ġ- Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġframe Ġ= Ġbinary Search ( frames , Ġtime ) Ġ- Ġ 1 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdraw Order To Setup Index Ġ= Ġdraw Orders [ frame ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( draw Order To Setup Index Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarray copy ( slots , Ġ 0 , Ġdraw Order , Ġ 0 , Ġslots . size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġn Ġ= Ġdraw Order To Setup Index . size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( i Ġ< Ġn ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Order . set And Grow ( i , Ġslots [ draw Order To Setup Index [ i ]]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠChanges Ġan ĠIK Ġconstraint 's Ġ[ Ik Constraint . get Mix ], Ġ[ Ik Constraint . get Soft ness ], ĊĠĠĠĠ Ġ* Ġ[ Ik Constraint . getB end Direction ], Ġ[ Ik Constraint . get Stretch ], Ġand Ġ[ Ik Constraint . get Compress ]. Ġ Ġ*/ ĊĠĠĠ Ġclass ĠI k Constraint Timeline ( frame Count : ĠInt ) Ġ: ĠCurve Timeline ( frame Count ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġinternal Ġvar Ġik Constraint Index : ĠInt Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġ/** ĠThe Ġtime Ġin Ġseconds , Ġmix , Ġsoft ness , Ġb end Ġdirection , Ġcompress , Ġand Ġstretch Ġfor Ġeach Ġkey Ġframe . Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġframes : ĠFloat Array Ġ= ĠFloat Array ( frame Count Ġ* ĠEN TR IES ) Ġ// Ġtime , Ġmix , Ġsoft ness , Ġb end Direction , Ġcompress , Ġstretch , Ġ... ĊĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġproperty Id : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġ( Timeline Type . ik Constraint . ordinal Ġshl Ġ 2 4 ) Ġ+ Ġik Constraint Index ĊĊĠĠĠĠĠĠĠ Ġfun Ġset Ik Constraint Index ( index : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( index Ġ>= Ġ 0 ) Ġ{ Ġ" index Ġmust Ġbe Ġ>= Ġ 0 ." Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . ik Constraint Index Ġ= Ġindex ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĠThe Ġindex Ġof Ġthe ĠIK Ġconstraint Ġslot Ġin Ġ[ Skeleton . get Ik Constraints ] Ġthat Ġwill Ġbe Ġchanged . Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġget Ik Constraint Index (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġik Constraint Index ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĠSets Ġthe Ġtime Ġin Ġseconds , Ġmix , Ġsoft ness , Ġb end Ġdirection , Ġcompress , Ġand Ġstretch Ġfor Ġthe Ġspecified Ġkey Ġframe . Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġset Frame ( frame Index : ĠInt , Ġtime : ĠFloat , Ġmix : ĠFloat , Ġsoft ness : ĠFloat , Ġb end Direction : ĠInt , Ġcompress : ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstretch : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġframe Index Ġ= Ġframe Index ĊĠĠĠĠĠĠĠĠĠĠĠ Ġframe Index Ġ*= ĠEN TR IES ĊĠĠĠĠĠĠĠĠĠĠĠ Ġframes [ frame Index ] Ġ= Ġtime ĊĠĠĠĠĠĠĠĠĠĠĠ Ġframes [ frame Index Ġ+ ĠM IX ] Ġ= Ġmix ĊĠĠĠĠĠĠĠĠĠĠĠ Ġframes [ frame Index Ġ+ ĠS OFT NESS ] Ġ= Ġsoft ness ĊĠĠĠĠĠĠĠĠĠĠĠ Ġframes [ frame Index Ġ+ ĠB END _ DIRECTION ] Ġ= Ġb end Direction . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġframes [ frame Index Ġ+ ĠCOMP RESS ] Ġ= Ġ( if Ġ( compress ) Ġ 1 Ġelse Ġ 0 ). toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġframes [ frame Index Ġ+ ĠST RET CH ] Ġ= Ġ( if Ġ( stretch ) Ġ 1 Ġelse Ġ 0 ). toFloat () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġapply ( skeleton : ĠS keleton , Ġlast Time : ĠFloat , Ġtime : ĠFloat , Ġevents : ĠArrayList < Event > ?, Ġalpha : ĠFloat , Ġblend : ĠMix Blend , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdirection : ĠMix Direction ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconstraint Ġ= Ġskeleton . ik Constraints [ ik Constraint Index ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! constraint . active ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġframes Ġ= Ġthis . frames ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( time Ġ< Ġframes [ 0 ]) Ġ{ Ġ// ĠTime Ġis Ġbefore Ġfirst Ġframe . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( blend ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint . mix Ġ= Ġconstraint . data . mix ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint . soft ness Ġ= Ġconstraint . data . soft ness ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint . b end Direction Ġ= Ġconstraint . data . b end Direction ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint . compress Ġ= Ġconstraint . data . compress ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint . stretch Ġ= Ġconstraint . data . stretch ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint . mix Ġ+= Ġ( constraint . data . mix Ġ- Ġconstraint . mix ) Ġ* Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint . soft ness Ġ+= Ġ( constraint . data . soft ness Ġ- Ġconstraint . soft ness ) Ġ* Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint . b end Direction Ġ= Ġconstraint . data . b end Direction ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint . compress Ġ= Ġconstraint . data . compress ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint . stretch Ġ= Ġconstraint . data . stretch ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( time Ġ>= Ġframes [ frames . size Ġ- ĠEN TR IES ]) Ġ{ Ġ// ĠTime Ġis Ġafter Ġlast Ġframe . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( blend Ġ== Ġsetup ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint . mix Ġ= Ġconstraint . data . mix Ġ+ Ġ( frames [ frames . size Ġ+ ĠPRE V _ MIX ] Ġ- Ġconstraint . data . mix ) Ġ* Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint . soft ness Ġ= Ġconstraint . data . soft ness Ġ+ Ġ( frames [ frames . size Ġ+ ĠPRE V _ SOFT NESS ] Ġ- Ġconstraint . data . soft ness ) Ġ* Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( direction Ġ== Ġout ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint . b end Direction Ġ= Ġconstraint . data . b end Direction ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint . compress Ġ= Ġconstraint . data . compress ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint . stretch Ġ= Ġconstraint . data . stretch ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint . b end Direction Ġ= Ġframes [ frames . size Ġ+ ĠPRE V _ B END _ DIRECTION ]. toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint . compress Ġ= Ġframes [ frames . size Ġ+ ĠPRE V _ COMPRESS ] Ġ!= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint . stretch Ġ= Ġframes [ frames . size Ġ+ ĠPRE V _ ST RET CH ] Ġ!= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint . mix Ġ+= Ġ( frames [ frames . size Ġ+ ĠPRE V _ MIX ] Ġ- Ġconstraint . mix ) Ġ* Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint . soft ness Ġ+= Ġ( frames [ frames . size Ġ+ ĠPRE V _ SOFT NESS ] Ġ- Ġconstraint . soft ness ) Ġ* Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( direction Ġ== Ġ` in `) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint . b end Direction Ġ= Ġframes [ frames . size Ġ+ ĠPRE V _ B END _ DIRECTION ]. toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint . compress Ġ= Ġframes [ frames . size Ġ+ ĠPRE V _ COMPRESS ] Ġ!= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint . stretch Ġ= Ġframes [ frames . size Ġ+ ĠPRE V _ ST RET CH ] Ġ!= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠInterpol ate Ġbetween Ġthe Ġprevious Ġframe Ġand Ġthe Ġcurrent Ġframe . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġframe Ġ= Ġbinary Search ( frames , Ġtime , ĠEN TR IES ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmix Ġ= Ġframes [ frame Ġ+ ĠPRE V _ MIX ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsoft ness Ġ= Ġframes [ frame Ġ+ ĠPRE V _ SOFT NESS ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġframe Time Ġ= Ġframes [ frame ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpercent Ġ= Ġget Curve Percent ( frame Ġ/ ĠEN TR IES Ġ- Ġ 1 , Ġ 1 Ġ- Ġ( time Ġ- Ġframe Time ) Ġ/ Ġ( frames [ frame Ġ+ ĠPRE V _ TIME ] Ġ- Ġframe Time )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( blend Ġ== Ġsetup ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint . mix Ġ= Ġconstraint . data . mix Ġ+ Ġ( mix Ġ+ Ġ( frames [ frame Ġ+ ĠM IX ] Ġ- Ġmix ) Ġ* Ġpercent Ġ- Ġconstraint . data . mix ) Ġ* Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint . soft ness Ġ= Ġconstraint . data . soft ness Ġ+ Ġ( soft ness Ġ+ Ġ( frames [ frame Ġ+ ĠS OFT NESS ] Ġ- Ġsoft ness ) Ġ* Ġpercent Ġ- Ġconstraint . data . soft ness ) Ġ* Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( direction Ġ== Ġout ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint . b end Direction Ġ= Ġconstraint . data . b end Direction ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint . compress Ġ= Ġconstraint . data . compress ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint . stretch Ġ= Ġconstraint . data . stretch ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint . b end Direction Ġ= Ġframes [ frame Ġ+ ĠPRE V _ B END _ DIRECTION ]. toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint . compress Ġ= Ġframes [ frame Ġ+ ĠPRE V _ COMPRESS ] Ġ!= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint . stretch Ġ= Ġframes [ frame Ġ+ ĠPRE V _ ST RET CH ] Ġ!= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint . mix Ġ+= Ġ( mix Ġ+ Ġ( frames [ frame Ġ+ ĠM IX ] Ġ- Ġmix ) Ġ* Ġpercent Ġ- Ġconstraint . mix ) Ġ* Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint . soft ness Ġ+= Ġ( soft ness Ġ+ Ġ( frames [ frame Ġ+ ĠS OFT NESS ] Ġ- Ġsoft ness ) Ġ* Ġpercent Ġ- Ġconstraint . soft ness ) Ġ* Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( direction Ġ== Ġ` in `) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint . b end Direction Ġ= Ġframes [ frame Ġ+ ĠPRE V _ B END _ DIRECTION ]. toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint . compress Ġ= Ġframes [ frame Ġ+ ĠPRE V _ COMPRESS ] Ġ!= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint . stretch Ġ= Ġframes [ frame Ġ+ ĠPRE V _ ST RET CH ] Ġ!= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠEN TR IES Ġ= Ġ 6 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval ĠPRE V _ TIME Ġ= Ġ- 6 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval ĠPRE V _ MIX Ġ= Ġ- 5 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval ĠPRE V _ SOFT NESS Ġ= Ġ- 4 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval ĠPRE V _ B END _ DIRECTION Ġ= Ġ- 3 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval ĠPRE V _ COMPRESS Ġ= Ġ- 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval ĠPRE V _ ST RET CH Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval ĠM IX Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval ĠS OFT NESS Ġ= Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval ĠB END _ DIRECTION Ġ= Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval ĠCOMP RESS Ġ= Ġ 4 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval ĠST RET CH Ġ= Ġ 5 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠChanges Ġa Ġtransform Ġconstraint 's Ġ[ Transform Constraint . get Rotate Mix ], Ġ[ Transform Constraint . get Translate Mix ], ĊĠĠĠĠ Ġ* Ġ[ Transform Constraint . get Scale Mix ], Ġand Ġ[ Transform Constraint . getS he ar Mix ]. Ġ Ġ*/ ĊĠĠĠ Ġclass ĠTransform Constraint Timeline ( frame Count : ĠInt ) Ġ: ĠCurve Timeline ( frame Count ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġinternal Ġvar Ġtransform Constraint Index : ĠInt Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġ/** ĠThe Ġtime Ġin Ġseconds , Ġrotate Ġmix , Ġtranslate Ġmix , Ġscale Ġmix , Ġand Ġshe ar Ġmix Ġfor Ġeach Ġkey Ġframe . Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġframes : ĠFloat Array Ġ= ĠFloat Array ( frame Count Ġ* ĠEN TR IES ) Ġ// Ġtime , Ġrotate Ġmix , Ġtranslate Ġmix , Ġscale Ġmix , Ġshe ar Ġmix , Ġ... ĊĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġproperty Id : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġ( Timeline Type . transform Constraint . ordinal Ġshl Ġ 2 4 ) Ġ+ Ġtransform Constraint Index ĊĊĠĠĠĠĠĠĠ Ġfun Ġset Transform Constraint Index ( index : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( index Ġ>= Ġ 0 ) Ġ{ Ġ" index Ġmust Ġbe Ġ>= Ġ 0 ." Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . transform Constraint Index Ġ= Ġindex ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĠThe Ġindex Ġof Ġthe Ġtransform Ġconstraint Ġslot Ġin Ġ[ Skeleton . get Transform Constraints ] Ġthat Ġwill Ġbe Ġchanged . Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġget Transform Constraint Index (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtransform Constraint Index ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĠThe Ġtime Ġin Ġseconds , Ġrotate Ġmix , Ġtranslate Ġmix , Ġscale Ġmix , Ġand Ġshe ar Ġmix Ġfor Ġthe Ġspecified Ġkey Ġframe . Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġset Frame ( frame Index : ĠInt , Ġtime : ĠFloat , Ġrotate Mix : ĠFloat , Ġtranslate Mix : ĠFloat , Ġscale Mix : ĠFloat , Ġshe ar Mix : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġframe Index Ġ= Ġframe Index ĊĠĠĠĠĠĠĠĠĠĠĠ Ġframe Index Ġ*= ĠEN TR IES ĊĠĠĠĠĠĠĠĠĠĠĠ Ġframes [ frame Index ] Ġ= Ġtime ĊĠĠĠĠĠĠĠĠĠĠĠ Ġframes [ frame Index Ġ+ ĠROT ATE ] Ġ= Ġrotate Mix ĊĠĠĠĠĠĠĠĠĠĠĠ Ġframes [ frame Index Ġ+ ĠTRAN SL ATE ] Ġ= Ġtranslate Mix ĊĠĠĠĠĠĠĠĠĠĠĠ Ġframes [ frame Index Ġ+ ĠSC ALE ] Ġ= Ġscale Mix ĊĠĠĠĠĠĠĠĠĠĠĠ Ġframes [ frame Index Ġ+ ĠS HE AR ] Ġ= Ġshe ar Mix ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġapply ( skeleton : ĠS keleton , Ġlast Time : ĠFloat , Ġtime : ĠFloat , Ġevents : ĠArrayList < Event > ?, Ġalpha : ĠFloat , Ġblend : ĠMix Blend , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdirection : ĠMix Direction ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconstraint Ġ= Ġskeleton . transform Constraints [ transform Constraint Index ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! constraint . isActive ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġframes Ġ= Ġthis . frames ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( time Ġ< Ġframes [ 0 ]) Ġ{ Ġ// ĠTime Ġis Ġbefore Ġfirst Ġframe . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġconstraint . data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( blend ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint . rotate Mix Ġ= Ġdata . rotate Mix ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint . translate Mix Ġ= Ġdata . translate Mix ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint . scale Mix Ġ= Ġdata . scale Mix ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint . she ar Mix Ġ= Ġdata . she ar Mix ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint . rotate Mix Ġ+= Ġ( data . rotate Mix Ġ- Ġconstraint . rotate Mix ) Ġ* Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint . translate Mix Ġ+= Ġ( data . translate Mix Ġ- Ġconstraint . translate Mix ) Ġ* Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint . scale Mix Ġ+= Ġ( data . scale Mix Ġ- Ġconstraint . scale Mix ) Ġ* Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint . she ar Mix Ġ+= Ġ( data . she ar Mix Ġ- Ġconstraint . she ar Mix ) Ġ* Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġrotate : ĠFloat ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtranslate : ĠFloat ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġscale : ĠFloat ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġshe ar : ĠFloat ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( time Ġ>= Ġframes [ frames . size Ġ- ĠEN TR IES ]) Ġ{ Ġ// ĠTime Ġis Ġafter Ġlast Ġframe . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġi Ġ= Ġframes . size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrotate Ġ= Ġframes [ i Ġ+ ĠPRE V _ ROT ATE ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtranslate Ġ= Ġframes [ i Ġ+ ĠPRE V _ TRANSL ATE ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale Ġ= Ġframes [ i Ġ+ ĠPRE V _ SCALE ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshe ar Ġ= Ġframes [ i Ġ+ ĠPRE V _ SHE AR ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠInterpol ate Ġbetween Ġthe Ġprevious Ġframe Ġand Ġthe Ġcurrent Ġframe . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġframe Ġ= Ġbinary Search ( frames , Ġtime , ĠEN TR IES ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrotate Ġ= Ġframes [ frame Ġ+ ĠPRE V _ ROT ATE ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtranslate Ġ= Ġframes [ frame Ġ+ ĠPRE V _ TRANSL ATE ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale Ġ= Ġframes [ frame Ġ+ ĠPRE V _ SCALE ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshe ar Ġ= Ġframes [ frame Ġ+ ĠPRE V _ SHE AR ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġframe Time Ġ= Ġframes [ frame ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpercent Ġ= Ġget Curve Percent ( frame Ġ/ ĠEN TR IES Ġ- Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ- Ġ( time Ġ- Ġframe Time ) Ġ/ Ġ( frames [ frame Ġ+ ĠPRE V _ TIME ] Ġ- Ġframe Time )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrotate Ġ+= Ġ( frames [ frame Ġ+ ĠROT ATE ] Ġ- Ġrotate ) Ġ* Ġpercent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtranslate Ġ+= Ġ( frames [ frame Ġ+ ĠTRAN SL ATE ] Ġ- Ġtranslate ) Ġ* Ġpercent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale Ġ+= Ġ( frames [ frame Ġ+ ĠSC ALE ] Ġ- Ġscale ) Ġ* Ġpercent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshe ar Ġ+= Ġ( frames [ frame Ġ+ ĠS HE AR ] Ġ- Ġshe ar ) Ġ* Ġpercent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( blend Ġ== Ġsetup ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġconstraint . data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint . rotate Mix Ġ= Ġdata . rotate Mix Ġ+ Ġ( rotate Ġ- Ġdata . rotate Mix ) Ġ* Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint . translate Mix Ġ= Ġdata . translate Mix Ġ+ Ġ( translate Ġ- Ġdata . translate Mix ) Ġ* Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint . scale Mix Ġ= Ġdata . scale Mix Ġ+ Ġ( scale Ġ- Ġdata . scale Mix ) Ġ* Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint . she ar Mix Ġ= Ġdata . she ar Mix Ġ+ Ġ( she ar Ġ- Ġdata . she ar Mix ) Ġ* Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint . rotate Mix Ġ+= Ġ( rotate Ġ- Ġconstraint . rotate Mix ) Ġ* Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint . translate Mix Ġ+= Ġ( translate Ġ- Ġconstraint . translate Mix ) Ġ* Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint . scale Mix Ġ+= Ġ( scale Ġ- Ġconstraint . scale Mix ) Ġ* Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint . she ar Mix Ġ+= Ġ( she ar Ġ- Ġconstraint . she ar Mix ) Ġ* Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠEN TR IES Ġ= Ġ 5 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval ĠPRE V _ TIME Ġ= Ġ- 5 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval ĠPRE V _ ROT ATE Ġ= Ġ- 4 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval ĠPRE V _ TRANSL ATE Ġ= Ġ- 3 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval ĠPRE V _ SCALE Ġ= Ġ- 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval ĠPRE V _ SHE AR Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval ĠROT ATE Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval ĠTRAN SL ATE Ġ= Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval ĠSC ALE Ġ= Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval ĠS HE AR Ġ= Ġ 4 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠChanges Ġa Ġpath Ġconstraint 's Ġ[ Path Constraint . getPosition ]. Ġ Ġ*/ ĊĠĠĠ Ġopen Ġclass ĠPath Constraint Position Timeline ( frame Count : ĠInt ) Ġ: ĠCurve Timeline ( frame Count ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġinternal Ġvar Ġpath Constraint Index : ĠInt Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġ/** ĠThe Ġtime Ġin Ġseconds Ġand Ġpath Ġconstraint Ġposition Ġfor Ġeach Ġkey Ġframe . Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġframes : ĠFloat Array Ġ= ĠFloat Array ( frame Count Ġ* ĠEN TR IES ) Ġ// Ġtime , Ġposition , Ġ... ĊĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġproperty Id : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġ( Timeline Type . path Constraint Position . ordinal Ġshl Ġ 2 4 ) Ġ+ Ġpath Constraint Index ĊĊĠĠĠĠĠĠĠ Ġfun Ġset Path Constraint Index ( index : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( index Ġ>= Ġ 0 ) Ġ{ Ġ" index Ġmust Ġbe Ġ>= Ġ 0 ." Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . path Constraint Index Ġ= Ġindex ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĠThe Ġindex Ġof Ġthe Ġpath Ġconstraint Ġslot Ġin Ġ[ Skeleton . getPath Constraints ] Ġthat Ġwill Ġbe Ġchanged . Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun ĠgetPath Constraint Index (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġpath Constraint Index ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĠSets Ġthe Ġtime Ġin Ġseconds Ġand Ġpath Ġconstraint Ġposition Ġfor Ġthe Ġspecified Ġkey Ġframe . Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġset Frame ( frame Index : ĠInt , Ġtime : ĠFloat , Ġposition : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġframe Index Ġ= Ġframe Index ĊĠĠĠĠĠĠĠĠĠĠĠ Ġframe Index Ġ*= ĠEN TR IES ĊĠĠĠĠĠĠĠĠĠĠĠ Ġframes [ frame Index ] Ġ= Ġtime ĊĠĠĠĠĠĠĠĠĠĠĠ Ġframes [ frame Index Ġ+ ĠVALUE ] Ġ= Ġposition ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġapply ( skeleton : ĠS keleton , Ġlast Time : ĠFloat , Ġtime : ĠFloat , Ġevents : ĠArrayList < Event > ?, Ġalpha : ĠFloat , Ġblend : ĠMix Blend , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdirection : ĠMix Direction ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconstraint Ġ= Ġskeleton . path Constraints [ path Constraint Index ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! constraint . isActive ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġframes Ġ= Ġthis . frames ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( time Ġ< Ġframes [ 0 ]) Ġ{ Ġ// ĠTime Ġis Ġbefore Ġfirst Ġframe . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( blend ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint . position Ġ= Ġconstraint . data . position ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Ġ-> Ġconstraint . position Ġ+= Ġ( constraint . data . position Ġ- Ġconstraint . position ) Ġ* Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġposition : ĠFloat ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( time Ġ>= Ġframes [ frames . size Ġ- ĠEN TR IES ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTime Ġis Ġafter Ġlast Ġframe . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition Ġ= Ġframes [ frames . size Ġ+ ĠPRE V _ VALUE ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠInterpol ate Ġbetween Ġthe Ġprevious Ġframe Ġand Ġthe Ġcurrent Ġframe . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġframe Ġ= Ġbinary Search ( frames , Ġtime , ĠEN TR IES ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition Ġ= Ġframes [ frame Ġ+ ĠPRE V _ VALUE ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġframe Time Ġ= Ġframes [ frame ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpercent Ġ= Ġget Curve Percent ( frame Ġ/ ĠEN TR IES Ġ- Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ- Ġ( time Ġ- Ġframe Time ) Ġ/ Ġ( frames [ frame Ġ+ ĠPRE V _ TIME ] Ġ- Ġframe Time )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition Ġ+= Ġ( frames [ frame Ġ+ ĠVALUE ] Ġ- Ġposition ) Ġ* Ġpercent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( blend Ġ== Ġsetup ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint . position Ġ= Ġconstraint . data . position Ġ+ Ġ( position Ġ- Ġconstraint . data . position ) Ġ* Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint . position Ġ+= Ġ( position Ġ- Ġconstraint . position ) Ġ* Ġalpha ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠEN TR IES Ġ= Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Ġval ĠPRE V _ TIME Ġ= Ġ- 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Ġval ĠPRE V _ VALUE Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Ġval ĠVALUE Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠChanges Ġa Ġpath Ġconstraint 's Ġ[ Path Constraint . get Spacing ]. Ġ Ġ*/ ĊĠĠĠ Ġclass ĠPath Constraint Spacing Timeline ( frame Count : ĠInt ) Ġ: ĠPath Constraint Position Timeline ( frame Count ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġproperty Id : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġ( Timeline Type . path Constraint Spacing . ordinal Ġshl Ġ 2 4 ) Ġ+ Ġpath Constraint Index ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġapply ( skeleton : ĠS keleton , Ġlast Time : ĠFloat , Ġtime : ĠFloat , Ġevents : ĠArrayList < Event > ?, Ġalpha : ĠFloat , Ġblend : ĠMix Blend , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdirection : ĠMix Direction ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconstraint Ġ= Ġskeleton . path Constraints [ path Constraint Index ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! constraint . isActive ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġframes Ġ= Ġthis . frames ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( time Ġ< Ġframes [ 0 ]) Ġ{ Ġ// ĠTime Ġis Ġbefore Ġfirst Ġframe . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( blend ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint . spacing Ġ= Ġconstraint . data . spacing ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Ġ-> Ġconstraint . spacing Ġ+= Ġ( constraint . data . spacing Ġ- Ġconstraint . spacing ) Ġ* Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġspacing : ĠFloat ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( time Ġ>= Ġframes [ frames . size Ġ- ĠAnimation . Path Constraint Position Timeline . ENTR IES ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTime Ġis Ġafter Ġlast Ġframe . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspacing Ġ= Ġframes [ frames . size Ġ+ ĠAnimation . Path Constraint Position Timeline . PREV _ VALUE ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠInterpol ate Ġbetween Ġthe Ġprevious Ġframe Ġand Ġthe Ġcurrent Ġframe . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġframe Ġ= Ġbinary Search ( frames , Ġtime , ĠAnimation . Path Constraint Position Timeline . ENTR IES ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspacing Ġ= Ġframes [ frame Ġ+ ĠAnimation . Path Constraint Position Timeline . PREV _ VALUE ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġframe Time Ġ= Ġframes [ frame ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpercent Ġ= Ġget Curve Percent ( frame Ġ/ ĠAnimation . Path Constraint Position Timeline . ENTR IES Ġ- Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ- Ġ( time Ġ- Ġframe Time ) Ġ/ Ġ( frames [ frame Ġ+ ĠAnimation . Path Constraint Position Timeline . PREV _ TIME ] Ġ- Ġframe Time )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspacing Ġ+= Ġ( frames [ frame Ġ+ ĠAnimation . Path Constraint Position Timeline . VALUE ] Ġ- Ġspacing ) Ġ* Ġpercent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( blend Ġ== Ġsetup ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint . spacing Ġ= Ġconstraint . data . spacing Ġ+ Ġ( spacing Ġ- Ġconstraint . data . spacing ) Ġ* Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint . spacing Ġ+= Ġ( spacing Ġ- Ġconstraint . spacing ) Ġ* Ġalpha ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠChanges Ġa Ġtransform Ġconstraint 's Ġ[ Path Constraint . get Rotate Mix ] Ġand ĊĠĠĠĠ Ġ* Ġ[ Transform Constraint . get Translate Mix ]. Ġ Ġ*/ ĊĠĠĠ Ġclass ĠPath Constraint Mix Timeline ( frame Count : ĠInt ) Ġ: ĠCurve Timeline ( frame Count ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġinternal Ġvar Ġpath Constraint Index : ĠInt Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġ/** ĠThe Ġtime Ġin Ġseconds , Ġrotate Ġmix , Ġand Ġtranslate Ġmix Ġfor Ġeach Ġkey Ġframe . Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġframes : ĠFloat Array Ġ= ĠFloat Array ( frame Count Ġ* ĠEN TR IES ) Ġ// Ġtime , Ġrotate Ġmix , Ġtranslate Ġmix , Ġ... ĊĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġproperty Id : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġ( Timeline Type . path Constraint Mix . ordinal Ġshl Ġ 2 4 ) Ġ+ Ġpath Constraint Index ĊĊĠĠĠĠĠĠĠ Ġfun Ġset Path Constraint Index ( index : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( index Ġ>= Ġ 0 ) Ġ{ Ġ" index Ġmust Ġbe Ġ>= Ġ 0 ." Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . path Constraint Index Ġ= Ġindex ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĠThe Ġindex Ġof Ġthe Ġpath Ġconstraint Ġslot Ġin Ġ[ Skeleton . getPath Constraints ] Ġthat Ġwill Ġbe Ġchanged . Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun ĠgetPath Constraint Index (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġpath Constraint Index ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĠThe Ġtime Ġin Ġseconds , Ġrotate Ġmix , Ġand Ġtranslate Ġmix Ġfor Ġthe Ġspecified Ġkey Ġframe . Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġset Frame ( frame Index : ĠInt , Ġtime : ĠFloat , Ġrotate Mix : ĠFloat , Ġtranslate Mix : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġframe Index Ġ= Ġframe Index ĊĠĠĠĠĠĠĠĠĠĠĠ Ġframe Index Ġ*= ĠEN TR IES ĊĠĠĠĠĠĠĠĠĠĠĠ Ġframes [ frame Index ] Ġ= Ġtime ĊĠĠĠĠĠĠĠĠĠĠĠ Ġframes [ frame Index Ġ+ ĠROT ATE ] Ġ= Ġrotate Mix ĊĠĠĠĠĠĠĠĠĠĠĠ Ġframes [ frame Index Ġ+ ĠTRAN SL ATE ] Ġ= Ġtranslate Mix ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġapply ( skeleton : ĠS keleton , Ġlast Time : ĠFloat , Ġtime : ĠFloat , Ġevents : ĠArrayList < Event > ?, Ġalpha : ĠFloat , Ġblend : ĠMix Blend , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdirection : ĠMix Direction ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconstraint Ġ= Ġskeleton . path Constraints [ path Constraint Index ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! constraint . isActive ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġframes Ġ= Ġthis . frames ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( time Ġ< Ġframes [ 0 ]) Ġ{ Ġ// ĠTime Ġis Ġbefore Ġfirst Ġframe . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( blend ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint . rotate Mix Ġ= Ġconstraint . data . rotate Mix ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint . translate Mix Ġ= Ġconstraint . data . translate Mix ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint . rotate Mix Ġ+= Ġ( constraint . data . rotate Mix Ġ- Ġconstraint . rotate Mix ) Ġ* Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint . translate Mix Ġ+= Ġ( constraint . data . translate Mix Ġ- Ġconstraint . translate Mix ) Ġ* Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġrotate : ĠFloat ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtranslate : ĠFloat ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( time Ġ>= Ġframes [ frames . size Ġ- ĠEN TR IES ]) Ġ{ Ġ// ĠTime Ġis Ġafter Ġlast Ġframe . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrotate Ġ= Ġframes [ frames . size Ġ+ ĠPRE V _ ROT ATE ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtranslate Ġ= Ġframes [ frames . size Ġ+ ĠPRE V _ TRANSL ATE ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠInterpol ate Ġbetween Ġthe Ġprevious Ġframe Ġand Ġthe Ġcurrent Ġframe . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġframe Ġ= Ġbinary Search ( frames , Ġtime , ĠEN TR IES ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrotate Ġ= Ġframes [ frame Ġ+ ĠPRE V _ ROT ATE ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtranslate Ġ= Ġframes [ frame Ġ+ ĠPRE V _ TRANSL ATE ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġframe Time Ġ= Ġframes [ frame ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpercent Ġ= Ġget Curve Percent ( frame Ġ/ ĠEN TR IES Ġ- Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ- Ġ( time Ġ- Ġframe Time ) Ġ/ Ġ( frames [ frame Ġ+ ĠPRE V _ TIME ] Ġ- Ġframe Time )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrotate Ġ+= Ġ( frames [ frame Ġ+ ĠROT ATE ] Ġ- Ġrotate ) Ġ* Ġpercent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtranslate Ġ+= Ġ( frames [ frame Ġ+ ĠTRAN SL ATE ] Ġ- Ġtranslate ) Ġ* Ġpercent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( blend Ġ== Ġsetup ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint . rotate Mix Ġ= Ġconstraint . data . rotate Mix Ġ+ Ġ( rotate Ġ- Ġconstraint . data . rotate Mix ) Ġ* Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint . translate Mix Ġ= Ġconstraint . data . translate Mix Ġ+ Ġ( translate Ġ- Ġconstraint . data . translate Mix ) Ġ* Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint . rotate Mix Ġ+= Ġ( rotate Ġ- Ġconstraint . rotate Mix ) Ġ* Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint . translate Mix Ġ+= Ġ( translate Ġ- Ġconstraint . translate Mix ) Ġ* Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠEN TR IES Ġ= Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval ĠPRE V _ TIME Ġ= Ġ- 3 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval ĠPRE V _ ROT ATE Ġ= Ġ- 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval ĠPRE V _ TRANSL ATE Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval ĠROT ATE Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval ĠTRAN SL ATE Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ/** Ġ@ param Ġtarget ĠAfter Ġthe Ġfirst Ġand Ġbefore Ġthe Ġlast Ġvalue . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return Ġindex Ġof Ġfirst Ġvalue Ġgreater Ġthan Ġthe Ġtarget . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġbinary Search ( values : ĠFloat Array , Ġtarget : ĠFloat , Ġstep : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġlow Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġhigh Ġ= Ġvalues . size Ġ/ Ġstep Ġ- Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( high Ġ== Ġ 0 ) Ġreturn Ġstep ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcurrent Ġ= Ġhigh . ush r ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( values [( current Ġ+ Ġ 1 ) Ġ* Ġstep ] Ġ<= Ġtarget ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlow Ġ= Ġcurrent Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhigh Ġ= Ġcurrent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( low Ġ== Ġhigh ) Ġreturn Ġ( low Ġ+ Ġ 1 ) Ġ* Ġstep ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Ġ= Ġ( low Ġ+ Ġhigh ). ush r ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** Ġ@ param Ġtarget ĠAfter Ġthe Ġfirst Ġand Ġbefore Ġthe Ġlast Ġvalue . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return Ġindex Ġof Ġfirst Ġvalue Ġgreater Ġthan Ġthe Ġtarget . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġbinary Search ( values : ĠFloat Array , Ġtarget : ĠFloat ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġlow Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġhigh Ġ= Ġvalues . size Ġ- Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( high Ġ== Ġ 0 ) Ġreturn Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcurrent Ġ= Ġhigh . ush r ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( values [ current Ġ+ Ġ 1 ] Ġ<= Ġtarget ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlow Ġ= Ġcurrent Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhigh Ġ= Ġcurrent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( low Ġ== Ġhigh ) Ġreturn Ġlow Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Ġ= Ġ( low Ġ+ Ġhigh ). ush r ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġlinear Search ( values : ĠFloat Array , Ġtarget : ĠFloat , Ġstep : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast Ġ= Ġvalues . size Ġ- Ġstep ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( i Ġ<= Ġlast ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( values [ i ] Ġ> Ġtarget ) Ġreturn Ġi ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi Ġ+= Ġstep ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ- 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ