/** Ċ Ġ* ĠThe ĠMIT ĠLicense Ġ( MIT ) Ċ Ġ* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 2 - 2 0 1 8 ĠDrag on B ones Ġteam Ġand Ġother Ġcontributors Ċ Ġ* Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ġof Ċ Ġ* Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ġin Ċ Ġ* Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ġto Ċ Ġ* Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ġcopies Ġof Ċ Ġ* Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ġfurnished Ġto Ġdo Ġso , Ċ Ġ* Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ġall Ċ Ġ* Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR Ċ Ġ* ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , ĠFITNESS Ċ Ġ* ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE ĠAUTHORS ĠOR Ċ Ġ* ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER ĠLIABILITY , ĠWHETHER Ċ Ġ* ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , ĠOUT ĠOF ĠOR ĠIN Ċ Ġ* ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN ĠTHE ĠSOFTWARE . Ċ Ġ*/ Ċ Ċ package Ġcom . so y wiz . k orge . dragon bones Ċ Ċ import Ġcom . dragon bones . arm ature .* Ċ import Ġcom . dragon bones . core .* Ċ import Ġcom . dragon bones . model .* Ċ import Ġcom . dragon bones . util .* Ċ import Ġcom . so y wiz . k mem .* Ċ import Ġcom . so y wiz . k orge . view .* Ċ import Ġcom . so y wiz . k orge . view . Blend Mode Ċ import Ġcom . so y wiz . kor im . bitmap .* Ċ import Ġcom . so y wiz . kor im . color .* Ċ import Ġcom . so y wiz . k orm a . geom .* Ċ import Ġkotlin . math .* Ċ Ċ /** Ċ Ġ* Ġ- ĠThe ĠDrag on bones Ġslot . Ċ Ġ* Ġ@ version ĠDrag on B ones Ġ 3 . 0 Ċ Ġ* Ġ@ language Ġen _ US Ċ Ġ*/ Ċ /** Ċ Ġ* Ġ- ĠDrag on bones Ġæı Ĵ æ§ ½ ãĢĤ Ċ Ġ* Ġ@ version ĠDrag on B ones Ġ 3 . 0 Ċ Ġ* Ġ@ language Ġzh _ CN Ċ Ġ*/ Ċ class ĠK orge Db Slot ( pool : ĠSingle Object Pool < K orge Db Slot >) Ġ: ĠSlot ( pool ) Ġ{ Ċ ĉ override Ġfun ĠtoString (): ĠString Ġ{ Ċĉ ĉ return Ġ"[ class ĠDrag on bones Slot ]" Ċ ĉ } ĊĊ ĉ private Ġvar Ġ_ texture Scale : ĠDouble Ġ= Ġ 1 . 0 Ċ ĉ private Ġvar Ġ_ render Display : ĠView ? Ġ= Ġnull ĊĊ ĉ override Ġfun Ġ_ on Clear () Ġ{ Ċĉ ĉ super ._ on Clear () ĊĊĉ ĉ this ._ texture Scale Ġ= Ġ 1 . 0 Ċĉ ĉ this ._ render Display Ġ= Ġnull Ċ ĉ } ĊĊ ĉ override Ġfun Ġ_ init Display ( value : ĠAny , Ġis Ret ain : ĠBoolean ) Ġ{ Ċ ĉ } ĊĊ ĉ override Ġfun Ġ_ dispose Display ( value : ĠAny , Ġis Release : ĠBoolean ) Ġ{ Ċĉ ĉ if Ġ(! is Release ) Ġ{ Ċĉĉ ĉ // ( value Ġas ĠDisplay Object ). destroy () Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ override Ġfun Ġ_ on Update Display () Ġ{ Ċĉ ĉ this ._ render Display Ġ= Ġ( if Ġ( this ._ display Ġ!= Ġnull ) Ġthis ._ display Ġelse Ġthis ._ raw Display ) Ġas ĠView Ċ ĉ } ĊĊ ĉ override Ġfun Ġ_ add Display () Ġ{ Ċĉ ĉ val Ġcontainer Ġ= Ġthis ._ arm ature ?. display Ġas ĠK orge Db Arm ature Display Ċĉ ĉ container . addChild ( this ._ render Display !! ) Ċ ĉ } ĊĊ ĉ override Ġfun Ġ_ replace Display ( value : ĠAny ) Ġ{ Ċĉ ĉ val Ġcontainer Ġ= Ġthis ._ arm ature ?. display Ġas ĠK orge Db Arm ature Display Ċĉ ĉ val Ġprev Display Ġ= Ġvalue Ġas ĠView Ċĉ ĉ container . addChild ( this ._ render Display !! ) Ċĉ ĉ container . swap Children ( this ._ render Display !! , Ġprev Display ) Ċĉ ĉ container . removeChild ( prev Display ) Ċĉ ĉ this ._ texture Scale Ġ= Ġ 1 . 0 Ċ ĉ } ĊĊ ĉ override Ġfun Ġ_ remove Display () Ġ{ Ċĉ ĉ this ._ render Display ?. parent ?. removeChild ( this ._ render Display ) Ċ ĉ } ĊĊ ĉ override Ġfun Ġ_ update Z Order () Ġ{ Ċĉ ĉ val Ġcontainer Ġ= Ġthis ._ arm ature ?. display Ġas ĠK orge Db Arm ature Display Ċĉ ĉ val Ġindex Ġ= Ġcontainer . getChild Index ( this ._ render Display !! ) Ċĉ ĉ if Ġ( index Ġ== Ġthis ._ z Order ) Ġ{ Ċĉĉ ĉ return Ċĉ ĉ } ĊĊĉ ĉ container . addChild At ( this ._ render Display !! , Ġthis ._ z Order ) Ċ ĉ } ĊĊ ĉ /** Ċĉ Ġ* Ġ@ internal Ċĉ Ġ*/ Ċ ĉ override Ġfun Ġ_ update Visible () Ġ{ Ċĉ ĉ this ._ render Display ?. visible Ġ= Ġthis ._ parent !!. visible Ġ&& Ġthis ._ visible Ċ ĉ } ĊĊ ĉ override Ġfun Ġ_ update Blend Mode () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrender Display Ġ= Ġthis ._ render Display Ċĉ ĉ if Ġ( render Display Ġ!= Ġnull Ġ&& Ġrender Display . is Container ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrender Display . blend Mode Ġ= Ġwhen Ġ( this ._ blend Mode ) Ġ{ Ċĉĉĉ ĉ com . dragon bones . core . Blend Mode . Normal Ġ-> ĠBlend Mode . IN HER IT Ċĉĉĉ ĉ com . dragon bones . core . Blend Mode . Add Ġ-> ĠBlend Mode . ADD Ċĉĉĉ ĉ com . dragon bones . core . Blend Mode . Dar ken Ġ-> ĠBlend Mode . D AR KEN Ċĉĉĉ ĉ com . dragon bones . core . Blend Mode . Difference Ġ-> ĠBlend Mode . DI FFER ENCE Ċĉĉĉ ĉ com . dragon bones . core . Blend Mode . Hard Light Ġ-> ĠBlend Mode . H AR DL IGHT Ċĉĉĉ ĉ com . dragon bones . core . Blend Mode . Light en Ġ-> ĠBlend Mode . LIGHT EN Ċĉĉĉ ĉ com . dragon bones . core . Blend Mode . Multiply Ġ-> ĠBlend Mode . MULTI PLY Ċĉĉĉ ĉ com . dragon bones . core . Blend Mode . Overlay Ġ-> ĠBlend Mode . OVER LAY Ċĉĉĉ ĉ com . dragon bones . core . Blend Mode . Screen Ġ-> ĠBlend Mode . SCREEN Ċĉĉĉ ĉ else Ġ-> Ġrender Display . blend Mode Ċĉĉ ĉ } Ċĉ ĉ } Ċĉ ĉ // ĠTODO Ġchild Ġarm ature . Ċ ĉ } ĊĊ ĉ override Ġfun Ġ_ update Color () Ġ{ Ċĉ ĉ val Ġalpha Ġ= Ġthis ._ color Transform . alpha Multiplier Ġ* Ġthis ._ global Alpha Ċĉ ĉ // this ._ render Display ?. alpha Ġ= Ġalpha Ċĉ ĉ // this ._ render Display ?. alpha Ġ= Ġ 1 . 0 ĊĊĉ ĉ if Ġ( this ._ render Display Ġis ĠImage Ġ|| Ġthis ._ render Display Ġis ĠMesh ) Ġ{ Ċĉĉ ĉ val Ġcolor Ġ= Ġ( round ( this ._ color Transform . red Multiplier Ġ* Ġ 0 xFF ). toInt () Ġshl Ġ 1 6 ) Ġ+ Ċĉĉĉĉ ĉ ( round ( this ._ color Transform . green Multiplier Ġ* Ġ 0 xFF ). toInt () Ġshl Ġ 8 ) Ġ+ Ċĉĉĉĉ ĉ round ( this ._ color Transform . blue Multiplier Ġ* Ġ 0 xFF ). toInt () Ċĉĉ ĉ this ._ render Display ?. tint Ġ= ĠRGBA ( color , Ġ( alpha Ġ* Ġ 2 5 5 . 0 ). toInt ()) Ċĉ ĉ } Ġelse Ġ{ Ċĉĉ ĉ this ._ render Display ?. alpha Ġ= Ġalpha Ċĉ ĉ } Ċĉ ĉ // ĠTODO Ġchild Ġarm ature . Ċ ĉ } ĊĊ ĉ override Ġfun Ġ_ update Frame () Ġ{ Ċĉ ĉ var Ġcurrent Texture Data Ġ= Ġthis ._ texture Data Ġas ĠK orge Db Texture Data ? ĊĊĠĠĠĠĠĠĠ Ġval Ġgeometry Data Ġ= Ġthis ._ geometry Data ĊĠĠĠĠĠĠĠ Ġif Ġ( this ._ display Index Ġ>= Ġ 0 Ġ&& Ġthis ._ display Ġ!== Ġnull Ġ&& Ġcurrent Texture Data Ġ!== Ġnull ) Ġ{ Ċĉĉ ĉ var Ġcurrent Texture Atlas Data Ġ= Ġcurrent Texture Data . parent Ġas ĠK orge Db Texture Atlas Data ĊĊĉĉ ĉ if Ġ( this ._ arm ature ?. re placed Texture Ġ!= Ġnull ) Ġ{ Ġ// ĠUpdate Ġreplaced Ġtexture Ġatlas . Ċĉĉĉ ĉ if Ġ( this ._ arm ature ? ._ replace Texture Atlas Data Ġ=== Ġnull ) Ġ{ Ċĉĉĉĉ ĉ current Texture Atlas Data Ġ= Ġpool . texture Atlas Data . borrow () Ċĉĉĉĉ ĉ current Texture Atlas Data . copyFrom ( current Texture Data . parent Ġas ĠK orge Db Texture Atlas Data ) Ċĉĉĉĉ ĉ current Texture Atlas Data . render Texture Ġ= Ġthis ._ arm ature ?. re placed Texture Ġas ? ĠBitmap ? Ċĉĉĉĉ ĉ this ._ arm ature ? ._ replace Texture Atlas Data Ġ= Ġcurrent Texture Atlas Data Ċĉĉĉ ĉ } Ġelse Ġ{ Ċĉĉĉĉ ĉ current Texture Atlas Data Ġ= Ġthis ._ arm ature ? ._ replace Texture Atlas Data Ġas ĠK orge Db Texture Atlas Data Ċĉĉĉ ĉ } ĊĊĉĉĉ ĉ current Texture Data Ġ= Ġcurrent Texture Atlas Data . get Texture ( current Texture Data . name ) Ġas ĠK orge Db Texture Data Ċĉĉ ĉ } ĊĊĉĉ ĉ val Ġrender Texture Ġ= Ġcurrent Texture Data . render Texture Ċĉĉ ĉ if Ġ( render Texture Ġ!== Ġnull ) Ġ{ Ċĉĉĉ ĉ if Ġ( geometry Data Ġ!== Ġnull ) Ġ{ Ġ// ĠMesh . Ċĉĉĉĉ ĉ val Ġdata Ġ= Ġgeometry Data . data !! Ċĉĉĉĉ ĉ val ĠintArray Ġ= Ġdata . int Array !! Ċĉĉĉĉ ĉ val Ġfloat Array Ġ= Ġdata . float Array !! Ċĉĉĉĉ ĉ val Ġvertex Count Ġ= ĠintArray [ geometry Data . offset Ġ+ ĠBinary Offset . Geometry Vertex Count ]. toInt () Ċĉĉĉĉ ĉ val Ġtriangle Count Ġ= Ċĉĉĉĉĉ ĉ int Array [ geometry Data . offset Ġ+ ĠBinary Offset . Geometry Triangle Count ]. toInt () Ċĉĉĉĉ ĉ var Ġvertex Offset Ġ= Ċĉĉĉĉĉ ĉ int Array [ geometry Data . offset Ġ+ ĠBinary Offset . Geometry Float Offset ]. toInt () ĊĊĉĉĉĉ ĉ if Ġ( vertex Offset Ġ< Ġ 0 ) Ġ{ Ċĉĉĉĉĉ ĉ vertex Offset Ġ+= Ġ 6 5 5 3 6 Ġ// ĠFixed Ġout Ġof Ġbounds Ġbug . Ċĉĉĉĉ ĉ } ĊĊĉĉĉĉ ĉ val Ġuv Offset Ġ= Ġvertex Offset Ġ+ Ġvertex Count Ġ* Ġ 2 Ċĉĉĉĉ ĉ val Ġscale Ġ= Ġthis ._ arm ature !! ._ arm ature Data !!. scale ĊĊĉĉĉĉ ĉ val Ġmesh Display Ġ= Ġthis ._ render Display Ġas ĠMesh Ċĉĉĉĉ ĉ val Ġtexture Atlas Width Ġ= Ġif Ġ( current Texture Atlas Data . width Ġ> Ġ 0 . 0 ) Ġcurrent Texture Atlas Data . width Ġelse Ġrender Texture . bmp . width Ċĉĉĉĉ ĉ val Ġtexture Atlas Height Ġ= Ġif Ġ( current Texture Atlas Data . height Ġ> Ġ 0 . 0 ) Ġcurrent Texture Atlas Data . height Ġelse Ġrender Texture . bmp . height Ċĉĉĉĉ ĉ val Ġregion Ġ= Ġcurrent Texture Data . region ĊĊĉĉĉĉ ĉ mesh Display . vertices Ġ= ĠFloat 3 2 Buffer Alloc ( vertex Count Ġ* Ġ 2 ) Ċĉĉĉĉ ĉ mesh Display . u vs Ġ= ĠFloat 3 2 Buffer Alloc ( vertex Count Ġ* Ġ 2 ) Ċĉĉĉĉ ĉ mesh Display . indices Ġ= ĠUint 1 6 Buffer Alloc ( triangle Count Ġ* Ġ 3 ) Ċĉĉĉĉ ĉ mesh Display . name Ġ= Ġname ĊĊĉĉĉĉ ĉ // println (" Slot [$ name ] =( vertex Count =$ vertex Count , triangle Count =$ triangle Count , vertex Offset =$ vertex Offset )") ĊĊĉĉĉĉ ĉ // for Ġ( let Ġi Ġ= Ġ 0 , Ġl Ġ= Ġvertex Count Ġ* Ġ 2 ; Ġi Ġ< Ġl ; Ġ++ i ) Ġ{ Ċĉĉĉĉ ĉ for Ġ( i Ġin Ġ 0 Ġuntil Ġvertex Count Ġ* Ġ 2 ) Ġ{ Ċĉĉĉĉĉ ĉ mesh Display . vertices [ i ] Ġ= Ġ( float Array [ vertex Offset Ġ+ Ġi ] Ġ* Ġscale ). toFloat () Ċĉĉĉĉ ĉ } ĊĊĉĉĉĉ ĉ // for Ġ( let Ġi Ġ= Ġ 0 ; Ġi Ġ< Ġtriangle Count Ġ* Ġ 3 ; Ġ++ i ) Ġ{ Ċĉĉĉĉ ĉ for Ġ( i Ġin Ġ 0 Ġuntil Ġtriangle Count Ġ* Ġ 3 ) Ġ{ Ċĉĉĉĉĉ ĉ mesh Display . indices [ i ] Ġ= ĠintArray [ geometry Data . offset Ġ+ ĠBinary Offset . Geometry Vertex Indices Ġ+ Ġi ]. toInt () Ċĉĉĉĉ ĉ } ĊĊĉĉĉĉ ĉ // for Ġ( let Ġi Ġ= Ġ 0 , Ġl Ġ= Ġvertex Count Ġ* Ġ 2 ; Ġi Ġ< Ġl ; Ġi Ġ+= Ġ 2 ) Ġ{ Ċĉĉĉĉ ĉ for Ġ( i Ġin Ġ 0 Ġuntil Ġvertex Count Ġ* Ġ 2 Ġstep Ġ 2 ) Ġ{ Ċĉĉĉĉĉ ĉ val Ġu Ġ= Ġfloat Array [ uv Offset Ġ+ Ġi ] Ċĉĉĉĉĉ ĉ val Ġv Ġ= Ġfloat Array [ uv Offset Ġ+ Ġi Ġ+ Ġ 1 ] ĊĊĉĉĉĉĉ ĉ if Ġ( current Texture Data . rot ated ) Ġ{ Ċĉĉĉĉĉĉ ĉ mesh Display . u vs [ i ] Ġ= Ġ(( region . x Ġ+ Ġ( 1 . 0 Ġ- Ġv ) Ġ* Ġregion . width ) Ġ/ Ġtexture Atlas Width ). toFloat () Ċĉĉĉĉĉĉ ĉ mesh Display . u vs [ i Ġ+ Ġ 1 ] Ġ= Ġ(( region . y Ġ+ Ġu Ġ* Ġregion . height ) Ġ/ Ġtexture Atlas Height ). toFloat () Ċĉĉĉĉĉ ĉ } Ġelse Ġ{ Ċĉĉĉĉĉĉ ĉ mesh Display . u vs [ i ] Ġ= Ġ(( region . x Ġ+ Ġu Ġ* Ġregion . width ) Ġ/ Ġtexture Atlas Width ). toFloat () Ċĉĉĉĉĉĉ ĉ mesh Display . u vs [ i Ġ+ Ġ 1 ] Ġ= Ġ(( region . y Ġ+ Ġv Ġ* Ġregion . height ) Ġ/ Ġtexture Atlas Height ). toFloat () Ċĉĉĉĉĉ ĉ } Ċĉĉĉĉ ĉ } ĊĊĉĉĉĉ ĉ this ._ texture Scale Ġ= Ġ 1 . 0 Ċĉĉĉĉ ĉ mesh Display . texture Ġ= Ġrender Texture Ċĉĉĉĉ ĉ mesh Display . dirty ++ Ċĉĉĉĉ ĉ mesh Display . index Dirty ++ Ċĉĉĉĉ ĉ mesh Display . name Ġ= Ġthis . name ĊĊĉĉĉĉ ĉ val Ġis Skin ned Ġ= Ġgeometry Data !!. weight Ġ!== Ġnull Ċĉĉĉĉ ĉ val Ġis Surface Ġ= Ġthis ._ parent ? ._ bone Data ?. is Surface Ġ?: Ġfalse Ċĉĉĉĉ ĉ if Ġ( is Skin ned Ġ|| Ġis Surface ) Ġ{ Ċĉĉĉĉĉ ĉ this ._ identity Transform () Ċĉĉĉĉ ĉ } Ċĉĉĉ ĉ } Ġelse Ġ{ Ġ// ĠNormal Ġtexture . Ċĉĉĉĉ ĉ this ._ texture Scale Ġ= Ġcurrent Texture Data . parent !!. scale Ġ* Ġthis ._ arm ature !! ._ arm ature Data !!. scale Ċĉĉĉĉ ĉ val Ġnormal Display Ġ= Ġthis ._ render Display Ġas ĠImage Ċĉĉĉĉ ĉ normal Display . bitmap Ġ= Ġrender Texture Ċĉĉĉĉ ĉ // normal Display . name Ġ= Ġrender Texture . name Ċĉĉĉĉ ĉ normal Display . name Ġ= Ġthis . name Ċĉĉĉ ĉ } ĊĊĉĉĉ ĉ this ._ visible Dirty Ġ= Ġtrue ĊĊĉĉĉ ĉ return Ċĉĉ ĉ } Ċĉ ĉ } ĊĊĉ ĉ if Ġ( geometry Data Ġ!== Ġnull ) Ġ{ Ċĉĉ ĉ val Ġmesh Display Ġ= Ġthis ._ render Display Ġas ĠMesh Ċĉĉ ĉ // mesh Display . texture Ġ= Ġnull Ġas Ġany Ċĉĉ ĉ mesh Display . texture Ġ= Ġnull Ċĉĉ ĉ mesh Display . x Ġ= Ġ 0 . 0 Ċĉĉ ĉ mesh Display . y Ġ= Ġ 0 . 0 Ċĉĉ ĉ mesh Display . visible Ġ= Ġfalse Ċĉ ĉ } Ġelse Ġ{ Ċĉĉ ĉ val Ġnormal Display Ġ= Ġthis ._ render Display Ġas ĠImage Ċĉĉ ĉ // normal Display . bitmap Ġ= Ġnull Ġas Ġany Ċĉĉ ĉ normal Display . bitmap Ġ= ĠBit maps . transparent Ċĉĉ ĉ normal Display . x Ġ= Ġ 0 . 0 Ċĉĉ ĉ normal Display . y Ġ= Ġ 0 . 0 Ċĉĉ ĉ normal Display . visible Ġ= Ġfalse Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ override Ġfun Ġ_ update Mesh () Ġ{ Ċĉ ĉ val Ġscale Ġ= Ġthis ._ arm ature !! ._ arm ature Data !!. scale Ċĉ ĉ val Ġde form Vertices Ġ= Ġ( this ._ display Frame Ġas ĠDisplay Frame ). def orm Vertices Ċĉ ĉ val Ġbones Ġ= Ġthis ._ geometry B ones Ċĉ ĉ val Ġgeometry Data Ġ= Ġthis ._ geometry Data Ġas ĠGeometry Data Ċĉ ĉ val Ġweight Data Ġ= Ġgeometry Data . weight ĊĊĉ ĉ val Ġhas De form Ġ= Ġde form Vertices . size Ġ> Ġ 0 Ġ&& Ġgeometry Data . inherit De form Ċĉ ĉ val Ġmesh Display Ġ= Ġthis ._ render Display Ġas ĠMesh ĊĊĉ ĉ // println ("_ update Mesh :" Ġ+ Ġthis . name Ġ+ Ġ", Ġhas De form =$ has De form , Ġweight Data =${ weight Data ?. count }, Ġde form Vertices =${ def orm Vertices . size }") ĊĊĉ ĉ if Ġ( weight Data Ġ!== Ġnull ) Ġ{ Ċĉĉ ĉ val Ġdata Ġ= Ġgeometry Data . data !! Ċĉĉ ĉ val ĠintArray Ġ= Ġdata . int Array !! Ċĉĉ ĉ val Ġfloat Array Ġ= Ġdata . float Array !! Ċĉĉ ĉ val Ġvertex Count Ġ= ĠintArray [ geometry Data . offset Ġ+ ĠBinary Offset . Geometry Vertex Count ]. toInt () Ċĉĉ ĉ var Ġweight Float Offset Ġ= ĠintArray [ weight Data . offset Ġ+ ĠBinary Offset . We ig th Float Offset ]. toInt () ĊĊĉĉ ĉ if Ġ( weight Float Offset Ġ< Ġ 0 ) Ġ{ Ċĉĉĉ ĉ weight Float Offset Ġ+= Ġ 6 5 5 3 6 Ġ// ĠFixed Ġout Ġof Ġbounds Ġbug . Ċĉĉ ĉ } ĊĊĉĉ ĉ // for Ġ( let Ġi Ġ= Ġ 0 , Ġi D Ġ= Ġ 0 , Ġi B Ġ= Ġweight Data . offset Ġ+ ĠBinary Offset . We ig th Bone Indices Ġ+ Ġbones . length , Ġi V Ġ= Ġweight Float Offset , Ġi F Ġ= Ġ 0 ; i Ġ< Ġvertex Count ;++ i ) Ġ{ Ċĉĉ ĉ var Ġi D Ġ= Ġ 0 Ċĉĉ ĉ var Ġi B Ġ= Ġweight Data . offset Ġ+ ĠBinary Offset . We ig th Bone Indices Ġ+ Ġbones . length Ċĉĉ ĉ var Ġi V Ġ= Ġweight Float Offset Ċĉĉ ĉ var Ġi F Ġ= Ġ 0 Ċĉĉ ĉ for Ġ( i Ġin Ġ 0 Ġuntil Ġvertex Count ) Ġ{ Ċĉĉĉ ĉ if Ġ( i D Ġ>= Ġmesh Display . vertices . size ) Ġbreak Ġ// Ġ@ TODO : ĠThis Ġshouldn 't Ġbe Ġrequired ! ĊĊĉĉĉ ĉ val Ġbone Count Ġ= ĠintArray [ iB ++] Ċĉĉĉ ĉ var Ġx G Ġ= Ġ 0 f Ċĉĉĉ ĉ var Ġy G Ġ= Ġ 0 f ĊĊĉĉĉ ĉ // for Ġ( let Ġj Ġ= Ġ 0 ; Ġj Ġ< Ġbone Count ; Ġ++ j ) Ġ{ Ċĉĉĉ ĉ for Ġ( j Ġin Ġ 0 Ġuntil Ġbone Count ) Ġ{ Ċĉĉĉĉ ĉ val Ġbone Index Ġ= ĠintArray [ iB ++ ]. toInt () Ċĉĉĉĉ ĉ val Ġbone Ġ= Ġbones [ bone Index ] Ġ?: Ġcontinue ĊĊĉĉĉĉ ĉ val Ġmatrix Ġ= Ġbone . global Transform Matrix Ċĉĉĉĉ ĉ val Ġweight Ġ= Ġfloat Array [ i V ++] Ċĉĉĉĉ ĉ var Ġx L : ĠFloat Ġ= Ġ( float Array [ i V ++] Ġ* Ġscale ). toFloat () Ċĉĉĉĉ ĉ var Ġy L : ĠFloat Ġ= Ġ( float Array [ i V ++] Ġ* Ġscale ). toFloat () ĊĊĉĉĉĉ ĉ if Ġ( has De form ) Ġ{ Ċĉĉĉĉĉ ĉ x L Ġ+= Ġde form Vertices [ i F ++ ]. toFloat () Ċĉĉĉĉĉ ĉ y L Ġ+= Ġde form Vertices [ i F ++ ]. toFloat () Ċĉĉĉĉ ĉ } ĊĊĉĉĉĉ ĉ x G Ġ+= Ġmatrix . transform Xf ( x L , Ġy L ) Ġ* Ġweight Ċĉĉĉĉ ĉ y G Ġ+= Ġmatrix . transform Y f ( x L , Ġy L ) Ġ* Ġweight Ċĉĉĉ ĉ } ĊĊĉĉĉ ĉ mesh Display . vertices [ i D ++] Ġ= Ġx G Ċĉĉĉ ĉ mesh Display . vertices [ i D ++] Ġ= Ġy G Ċĉĉ ĉ } Ċĉ ĉ } Ġelse Ġ{ Ċĉĉ ĉ val Ġis Surface Ġ= Ġthis ._ parent ? ._ bone Data ?. is Surface Ġ?: Ġfalse Ċĉĉ ĉ val Ġdata Ġ= Ġgeometry Data . data !! Ċĉĉ ĉ val ĠintArray Ġ= Ġdata . int Array !! Ċĉĉ ĉ val Ġfloat Array Ġ= Ġdata . float Array !! Ċĉĉ ĉ val Ġvertex Count Ġ= ĠintArray [ geometry Data . offset Ġ+ ĠBinary Offset . Geometry Vertex Count ]. toInt () Ċĉĉ ĉ var Ġvertex Offset Ġ= ĠintArray [ geometry Data . offset Ġ+ ĠBinary Offset . Geometry Float Offset ]. toInt () ĊĊĉĉ ĉ if Ġ( vertex Offset Ġ< Ġ 0 ) Ġ{ Ċĉĉĉ ĉ vertex Offset Ġ+= Ġ 6 5 5 3 6 Ġ// ĠFixed Ġout Ġof Ġbounds Ġbug . Ċĉĉ ĉ } ĊĊĉĉ ĉ // for Ġ( let Ġi Ġ= Ġ 0 , Ġl Ġ= Ġvertex Count Ġ* Ġ 2 ; Ġi Ġ< Ġl ; Ġi Ġ+= Ġ 2 ) Ġ{ Ċĉĉ ĉ for Ġ( i Ġin Ġ 0 Ġuntil Ġvertex Count Ġ* Ġ 2 Ġstep Ġ 2 ) Ġ{ Ċĉĉĉ ĉ if Ġ( i Ġ+ Ġ 1 Ġ>= Ġmesh Display . vertices . size ) Ġbreak Ġ// Ġ@ TODO : ĠThis Ġshouldn 't Ġbe Ġrequired ! ĊĊĉĉĉ ĉ var Ġx : ĠFloat Ġ= Ġ( float Array [ vertex Offset Ġ+ Ġi Ġ+ Ġ 0 ] Ġ* Ġscale ). toFloat () Ċĉĉĉ ĉ var Ġy : ĠFloat Ġ= Ġ( float Array [ vertex Offset Ġ+ Ġi Ġ+ Ġ 1 ] Ġ* Ġscale ). toFloat () ĊĊĉĉĉ ĉ if Ġ( has De form ) Ġ{ Ċĉĉĉĉ ĉ x Ġ+= Ġde form Vertices [ i Ġ+ Ġ 0 ]. toFloat () Ċĉĉĉĉ ĉ y Ġ+= Ġde form Vertices [ i Ġ+ Ġ 1 ]. toFloat () Ċĉĉĉ ĉ } ĊĊĉĉĉ ĉ if Ġ( is Surface ) Ġ{ Ċĉĉĉĉ ĉ val Ġmatrix Ġ= Ġ( this ._ parent Ġas ĠSurface )._ getGlobal Transform Matrix ( x , Ġy ) ĊĊĉĉĉĉ ĉ mesh Display . vertices [ i Ġ+ Ġ 0 ] Ġ= Ġmatrix . transform Xf ( x , Ġy ). toFloat () Ċĉĉĉĉ ĉ mesh Display . vertices [ i Ġ+ Ġ 1 ] Ġ= Ġmatrix . transform Y f ( x , Ġy ). toFloat () Ċĉĉĉ ĉ } Ġelse Ġ{ Ċĉĉĉĉ ĉ mesh Display . vertices [ i Ġ+ Ġ 0 ] Ġ= Ġx . toFloat () Ċĉĉĉĉ ĉ mesh Display . vertices [ i Ġ+ Ġ 1 ] Ġ= Ġy . toFloat () Ċĉĉĉ ĉ } Ċĉĉ ĉ } Ċĉ ĉ } ĊĊĉ ĉ mesh Display . updated Vertices () Ċ ĉ } ĊĊ ĉ private Ġval Ġm Ġ= Ġcom . so y wiz . k orm a . geom . Matrix () ĊĊ ĉ override Ġfun Ġ_ update Transform () Ġ{ Ċĉ ĉ this . update Global Transform () Ġ// ĠUpdate Ġtransform . ĊĊĉ ĉ val Ġtransform Ġ= Ġthis . global ĊĊĠĠĠĠĠĠĠ Ġval Ġrd Ġ= Ġthis ._ render Display ĊĊĉ ĉ if Ġ( rd Ġ=== Ġthis ._ raw Display Ġ|| Ġrd Ġ=== Ġthis ._ mesh Display ) Ġ{ Ċĉĉ ĉ val Ġx Ġ= Ġtransform . xf Ġ- Ġ( this . global Transform Matrix . af Ġ* Ġthis ._ pivot X Ġ+ Ġthis . global Transform Matrix . cf Ġ* Ġthis ._ pivot Y ) Ċĉĉ ĉ val Ġy Ġ= Ġtransform . yf Ġ- Ġ( this . global Transform Matrix . bf Ġ* Ġthis ._ pivot X Ġ+ Ġthis . global Transform Matrix . df Ġ* Ġthis ._ pivot Y ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( rd Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrd . position ( x , Ġy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrd . scale ( transform . scale X Ġ* Ġthis ._ texture Scale , Ġtransform . scale Y Ġ* Ġthis ._ texture Scale ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċĉ ĉ } Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( rd Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrd . position ( transform . xf . toDouble (), Ġtransform . yf . toDouble ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrd . scale ( transform . scale X . toDouble (), Ġtransform . scale Y . toDouble ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċĉ ĉ } ĊĊĠĠĠĠĠĠĠ Ġif Ġ( rd Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrd . rotation Ġ= Ġtransform . rotation . radians ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrd . skew (- transform . skew . toDouble (). radians , Ġ 0 . 0 . radians ) ĊĠĠĠĠĠĠĠ Ġ} Ċ ĉ } ĊĊ ĉ override Ġfun Ġ_ identity Transform () Ġ{ Ċĉ ĉ m . identity () Ċĉ ĉ this ._ render Display ?. set Matrix ( m ) Ċ ĉ } Ċ } Ċ