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 . so y wiz . kor io . async . suspend Test Ċ import Ġcom . so y wiz . kor io . file . std . resources V fs Ċ import Ġcom . so y wiz . kor io . util . OS Ċ import Ġkotlin . test . Test Ċ import Ġkotlin . test . assertEquals ĊĊ Ċ class ĠB one Position Test Ġ{ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest () Ġ= Ġsuspend Test ({ Ġ! OS . is Js Ġ}) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġexpected Result Ġ= Ġ""" walk , 1 8 8 . 1 5 3 7 5 , 1 3 5 . 8 5 5 4 8 ,- 5 1 . 3 6 9 9 9 5 Ċ walk , 2 2 5 . 4 9 4 2 6 , 1 7 5 . 7 3 3 5 8 ,- 3 7 . 5 5 2 9 4 Ċ walk , 2 3 0 . 3 0 6 2 , 1 8 4 . 0 2 7 8 ,- 3 3 . 8 2 4 5 2 8 Ċ walk , 2 1 2 . 1 2 5 6 7 , 1 6 4 . 7 5 3 3 7 ,- 3 7 . 1 6 6 3 6 3 Ċ walk , 1 9 2 . 2 9 4 1 9 , 1 4 8 . 2 7 8 4 1 ,- 4 0 . 1 6 5 1 6 Ċ walk , 1 6 6 . 2 7 4 1 , 1 2 9 . 1 8 2 1 1 ,- 4 5 . 4 7 4 8 8 Ċ walk , 1 2 8 . 5 1 7 7 , 1 0 5 . 2 2 0 7 2 ,- 5 4 . 6 9 0 0 1 Ċ walk , 1 2 2 . 0 7 0 5 2 6 , 9 2 . 1 5 7 5 3 ,- 5 8 . 3 7 8 0 9 4 Ċ walk , 1 0 0 . 3 0 9 7 4 6 , 7 7 . 4 4 6 2 9 ,- 6 8 . 1 5 1 6 9 5 Ċ walk , 8 6 . 2 6 3 4 9 , 7 1 . 9 5 1 9 8 ,- 7 5 . 8 2 3 Ċ walk , 9 8 . 4 5 2 0 5 , 8 0 . 4 3 9 8 9 6 ,- 7 5 . 3 0 5 6 6 Ċ walk , 1 4 6 . 3 1 8 7 7 , 1 0 7 . 1 8 8 8 1 ,- 6 3 . 3 3 9 4 9 7 """ ĊĊĠĠĠĠĠĠĠ Ġval Ġresource Ġ= Ġresources V fs [" sp ine boy / sp ine boy - ess . json "] ĊĠĠĠĠĠĠĠ Ġval Ġjson Ġ= ĠS keleton Json ( object Ġ: ĠAttachment Loader Ġ{ Ġ}) ĊĠĠĠĠĠĠĠ Ġval Ġskeleton Data Ġ= Ġjson . read Skeleton Data ( resource ) ĊĠĠĠĠĠĠĠ Ġval Ġskeleton Ġ= ĠS keleton ( skeleton Data ) ĊĠĠĠĠĠĠĠ Ġval Ġbone Ġ= Ġskeleton . find Bone (" gun - tip ") ĊĠĠĠĠĠĠĠ Ġval Ġfps Ġ= Ġ 1 Ġ/ Ġ 1 5 f ĊĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġval Ġanimation Ġ= Ġskeleton Data . animations . find Ġ{ Ġit . name Ġ== Ġ" walk " Ġ} Ġ?: Ġthrow ĠException (" Animation Ġwalk Ġnot Ġfound ") ĊĠĠĠĠĠĠĠ Ġvar Ġtime Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġwhile Ġ( time Ġ< Ġanimation . duration ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanimation . apply ( skeleton , Ġtime , Ġtime , Ġfalse , Ġnull , Ġ 1 f , ĠMix Blend . first , ĠMix Direction .` in `) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġskeleton . update World Transform () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ+= Ġ"${ animation . name }, ${ bone !!. world X }, ${ bone . world Y }, ${ bone . world Rotation X }\ n " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Ġ+= Ġfps ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected Result , Ġresult . trim ()) ĊĠĠĠ Ġ} Ċ } ĊĊ