package Ġcom . so y wiz . k orge 3 d Ċ Ċ import Ġcom . so y wiz . k ds .* Ċ import Ġcom . so y wiz . k orge 3 d . animation .* Ċ import Ġcom . so y wiz . kor im . bitmap .* Ċ import Ġcom . so y wiz . kor im . color .* Ċ import Ġcom . so y wiz . kor im . format .* Ċ import Ġcom . so y wiz . kor io . file . std .* Ċ import Ġcom . so y wiz . k orm a . geom .* Ċ Ċ @ K orge 3 D Experimental Ċ data Ġclass ĠLibrary 3 D ( Ċ ĉ val Ġcamera Defs : ĠFast String Map < Camera Def > Ġ= ĠFast String Map (), Ċ ĉ val Ġlight Defs : ĠFast String Map < Light Def > Ġ= ĠFast String Map (), Ċ ĉ val Ġmaterial Defs : ĠFast String Map < Material Def > Ġ= ĠFast String Map (), Ċ ĉ val Ġeffect Defs : ĠFast String Map < Effect Def > Ġ= ĠFast String Map (), Ċ ĉ val Ġimage Defs : ĠFast String Map < Image Def > Ġ= ĠFast String Map (), Ċ ĉ val Ġgeometry Defs : ĠFast String Map < Geometry Def > Ġ= ĠFast String Map (), Ċ ĉ val Ġskin Defs : ĠFast String Map < Skin Def > Ġ= ĠFast String Map (), Ċ ĉ val Ġanimation Defs : ĠFast String Map < Animation 3 D > Ġ= ĠFast String Map () Ċ ) Ġ{ Ċ ĉ suspend Ġfun Ġload Textures () Ġ{ Ċĉ ĉ image Defs . fast Value ForEach Ġ{ Ġimage Ġ-> Ċĉĉ ĉ image . tex ure Ġ= Ġresources V fs [ image . init From ]. read Bitmap () Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ val Ġbone Defs Ġ= ĠFast String Map < Bone Def >() ĊĊ ĉ fun Ġinstantiate Materials () Ġ{ Ċĉ ĉ geometry Defs . fast Value ForEach Ġ{ Ġgeom Ġ-> Ċĉĉ ĉ for Ġ( bone Ġin Ġgeom . skin ?. bones Ġ?: ĠlistOf ()) Ġ{ Ċĉĉĉ ĉ bone Defs [ bone . name ] Ġ= Ġbone Ċĉĉ ĉ } Ċĉĉ ĉ geom . mesh . material Ġ= Ġgeom . material ?. instantiate () Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ val Ġlibrary Ġ= Ġthis ĊĊ ĉ val Ġmain Scene Ġ= ĠScene 3 D ( this ). apply Ġ{ Ċĉ ĉ id Ġ= Ġ" Main Scene " Ċĉ ĉ name Ġ= Ġ" Main Scene " Ċ ĉ } Ċ ĉ var Ġscenes Ġ= ĠFast String Map < Scene 3 D >() ĊĊ ĉ open Ġclass ĠInstance 3 D ( val Ġlibrary : ĠLibrary 3 D ) Ġ{ Ċĉ ĉ val Ġtransform Ġ= ĠMatrix 3 D () Ċĉ ĉ var Ġdef : ĠDef ? Ġ= Ġnull Ċĉ ĉ val Ġchildren Ġ= Ġarray ListOf < Instance 3 D >() Ċĉ ĉ var Ġid : ĠString Ġ= Ġ"" Ċĉ ĉ var Ġsid : ĠString ? Ġ= Ġnull Ċĉ ĉ var Ġname : ĠString Ġ= Ġ"" Ċĉ ĉ var Ġtype : ĠString Ġ= Ġ"" Ċĉ ĉ var Ġskin : ĠSk in Def ? Ġ= Ġnull Ċĉ ĉ var Ġskeleton : ĠInstance 3 D ? Ġ= Ġnull Ċĉ ĉ var Ġskeleton Id : ĠString ? Ġ= Ġnull Ċ ĉ } ĊĊ ĉ open Ġclass ĠScene 3 D ( library : ĠLibrary 3 D ) Ġ: ĠInstance 3 D ( library ) Ġ{ Ċ ĉ } ĊĊ ĉ open Ġclass ĠDef ĊĊ ĉ open Ġclass ĠP ong ĊĊ ĉ open Ġclass ĠImage Def ( val Ġid : ĠString , Ġval Ġname : ĠString , Ġval Ġinit From : ĠString , Ġvar Ġtex ure : ĠBitmap ? Ġ= Ġnull ) Ġ: ĠDef () Ġ{ ĊĊ ĉ } ĊĊ ĉ open Ġclass ĠObject Def Ġ: ĠDef () ĊĊ ĉ open Ġclass ĠMaterial Def ( val Ġid : ĠString , Ġval Ġname : ĠString , Ġval Ġeffects : ĠList < Effect Def >) Ġ: ĠDef () ĊĊ ĉ open Ġclass ĠLight Def Ġ: ĠObject Def () ĊĊ ĉ open Ġclass ĠCamera Def Ġ: ĠObject Def () Ċ ĉ data Ġclass ĠPers pective Camera Def ( val Ġx fo v : ĠAngle , Ġval Ġz min : ĠDouble , Ġval Ġz max : ĠDouble ) Ġ: ĠCamera Def () ĊĊ ĉ interface ĠLight Kind Def Ġ{ Ċĉ ĉ val Ġsid : ĠString Ċ ĉ } ĊĊ ĉ open Ġclass ĠLight Tex Def ( override Ġval Ġsid : ĠString , Ġval Ġtexture : ĠEffect Param Sampler 2 D ?, Ġval Ġlight Kind : ĠString ) Ġ: Ċĉ ĉ Light Kind Def ĊĊ ĉ open Ġclass ĠLight Color Def ( override Ġval Ġsid : ĠString , Ġval Ġcolor : ĠRGBA , Ġval Ġlight Kind : ĠString ) Ġ: ĠLight Kind Def ĊĊ ĉ data Ġclass ĠEffect Param Surface ( val Ġsurface Type : ĠString , Ġval Ġinit From : ĠImage Def ?) Ċ ĉ data Ġclass ĠEffect Param Sampler 2 D ( val Ġsurface : ĠEffect Param Surface ?) ĊĊ ĉ open Ġclass ĠEffect Def () Ġ: ĠDef () ĊĊ ĉ data Ġclass ĠStandard Effect Def ( Ċĉ ĉ val Ġid : ĠString , Ċĉ ĉ val Ġname : ĠString , Ċĉ ĉ val Ġemission : ĠLight Kind Def ?, Ċĉ ĉ val Ġambient : ĠLight Kind Def ?, Ċĉ ĉ val Ġdiffuse : ĠLight Kind Def ?, Ċĉ ĉ val Ġspecular : ĠLight Kind Def ?, Ċĉ ĉ val Ġsh iness : ĠFloat ?, Ċĉ ĉ val Ġindex _ of _ refr action : ĠFloat ? Ċ ĉ ) Ġ: ĠEffect Def () ĊĊ ĉ data Ġclass ĠGeometry Def ( Ċĉ ĉ val Ġmesh : ĠMesh 3 D , Ċĉ ĉ val Ġskin : ĠSk in Def ? Ġ= Ġnull , Ċĉ ĉ val Ġmaterial : ĠMaterial Def ? Ġ= Ġnull Ċ ĉ ) Ġ: ĠObject Def () ĊĊ ĉ data Ġclass ĠB one Def Ġconstructor ( val Ġindex : ĠInt , Ġval Ġname : ĠString , Ġval Ġinv Bind Matrix : ĠMatrix 3 D ) Ġ: ĠDef () Ġ{ Ċĉ ĉ late init Ġvar Ġskin : ĠSk in Def Ċĉ ĉ fun Ġto Bone () Ġ= ĠB one 3 D ( index , Ġname , Ġinv Bind Matrix . clone ()) Ċ ĉ } ĊĊ ĉ data Ġclass ĠSk in Def ( Ċĉ ĉ val Ġcontroller Id : ĠString , Ċĉ ĉ val Ġcontroller Name : ĠString , Ċĉ ĉ val Ġbind Shape Matrix : ĠMatrix 3 D , Ċĉ ĉ val Ġskin Source : ĠString , Ċĉ ĉ val Ġbones : ĠList < Bone Def > Ċ ĉ ) Ġ: ĠDef () Ġ{ Ċĉ ĉ fun Ġto Skin () Ġ= ĠSk in 3 D ( bind Shape Matrix , Ġbones . map Ġ{ Ġit . to Bone () Ġ}) Ċ ĉ } ĊĊĊ ĉ class ĠPoint Light Def ( Ċĉ ĉ val Ġcolor : ĠRGBA , Ċĉ ĉ val Ġconstant Att enuation : ĠDouble , Ċĉ ĉ val Ġlinear Att enuation : ĠDouble , Ċĉ ĉ val Ġquadr atic Att enuation : ĠDouble Ċ ĉ ) Ġ: ĠLight Def () ĊĊ ĉ class ĠAmb ient Light Def ( Ċĉ ĉ val Ġcolor : ĠRGBA Ċ ĉ ) Ġ: ĠLight Def () Ċ } Ċ Ċ @ K orge 3 D Experimental Ċ class ĠLibrary Inst antiate Context Ġ{ Ċ ĉ val Ġviews ById Ġ= ĠFast String Map < View 3 D >() Ċ } Ċ Ċ @ K orge 3 D Experimental Ċ fun ĠLibrary 3 D . Instance 3 D . instantiate ( joint Parent : ĠJoint 3 D ? Ġ= Ġnull , Ġctx : ĠLibrary Inst antiate Context Ġ= ĠLibrary Inst antiate Context ()): ĠView 3 D Ġ{ Ċ ĉ val Ġdef Ġ= Ġthis . def Ċ ĉ val Ġview : ĠView 3 D Ġ= Ġwhen Ġ( def ) Ġ{ Ċĉ ĉ null Ġ-> Ġ{ Ċĉĉ ĉ if Ġ( type . equals (" JO INT ", Ġignore Case Ġ= Ġtrue )) Ġ{ Ċĉĉĉ ĉ val Ġit Ġ= ĠJoint 3 D ( id , Ġname , Ġsid Ġ?: Ġ" unknown Sid ", Ġjoint Parent , Ġthis . transform ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjoint Parent ?. child Joint s ?. add ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjoint Parent ?. children ?. add ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit Ċĉĉ ĉ } Ġelse Ġ{ Ċĉĉĉ ĉ Container 3 D () Ċĉĉ ĉ } Ċĉ ĉ } Ċĉ ĉ is ĠLibrary 3 D . Geometry Def Ġ-> Ġ{ Ċĉĉ ĉ val Ġskeleton Instance Ġ= Ġif Ġ( skeleton Id Ġ!= Ġnull ) Ġctx . views ById [ skeleton Id !! ] Ġas ? ĠJoint 3 D ? Ġelse Ġnull Ċĉĉ ĉ View With Mesh 3 D ( def . mesh , Ġskeleton Instance ?. let Ġ{ ĠS keleton 3 D ( def . mesh . skin !! , Ġit ) Ġ}) Ċĉ ĉ } Ċĉ ĉ is ĠLibrary 3 D . Perspective Camera Def Ġ-> Ġ{ Ċĉĉ ĉ Camera 3 D . Perspective ( def . x fo v , Ġdef . z min , Ġdef . z max ) Ċĉ ĉ } Ċĉ ĉ is ĠLibrary 3 D . Point Light Def Ġ-> Ġ{ Ċĉĉ ĉ Light 3 D ( def . color , Ġdef . constant Att enuation , Ġdef . linear Att enuation , Ġdef . quadr atic Att enuation ) Ċĉ ĉ } Ċĉ ĉ is ĠLibrary 3 D . Ambient Light Def Ġ-> Ġ{ Ċĉĉ ĉ Light 3 D ( def . color , Ġ 0 . 0 0 0 0 1 , Ġ 0 . 0 0 0 0 1 , Ġ 0 . 0 0 0 0 1 ) Ċĉ ĉ } Ċĉ ĉ else Ġ-> ĠTODO (" def =$ def ") Ċ ĉ } Ċ ĉ view . id Ġ= Ġthis . id Ċ ĉ ctx . views ById [ this . id ] Ġ= Ġview Ċ ĉ view . name Ġ= Ġthis . name Ċ ĉ // view . local Transform . set Matrix ( this . transform . clone (). transpose ()) Ċ ĉ view . transform . set Matrix ( this . transform ) Ċ ĉ if Ġ( view Ġis ĠJoint 3 D ) Ġ{ Ċĉ ĉ for Ġ( child Ġin Ġchildren ) Ġ{ Ċĉĉ ĉ child . instantiate ( view , Ġctx ) Ċĉ ĉ } Ċ ĉ } Ġelse Ġif Ġ( view Ġis ĠContainer 3 D ) Ġ{ Ċĉ ĉ for Ġ( child Ġin Ġchildren ) Ġ{ Ċĉĉ ĉ view . addChild ( child . instantiate ( null , Ġctx )) Ċĉ ĉ } Ċ ĉ } Ċ ĉ return Ġview Ċ } Ċ Ċ @ K orge 3 D Experimental Ċ fun ĠLibrary 3 D . Light Kind Def . instantiate (): ĠMaterial 3 D . Light Ġ{ Ċ ĉ return Ġwhen Ġ( this ) Ġ{ Ċĉ ĉ is ĠLibrary 3 D . Light Tex Def Ġ-> ĠMaterial 3 D . Light Texture ( this . texture ?. surface ?. init From ?. tex ure ) Ċĉ ĉ is ĠLibrary 3 D . Light Color Def Ġ-> ĠMaterial 3 D . Light Color ( this . color ) Ċĉ ĉ else Ġ-> Ġerror (" Unsupported Ġ$ this ") Ċ ĉ } Ċ } Ċ Ċ @ K orge 3 D Experimental Ċ fun ĠLibrary 3 D . Material Def . instantiate (): ĠMaterial 3 D Ġ{ Ċ ĉ val Ġeffect Ġ= Ġthis . effects . first OrNull () Ġas ? ĠLibrary 3 D . Standard Effect Def ? Ċ ĉ return ĠMaterial 3 D ( Ċĉ ĉ em ission Ġ= Ġeffect ?. em ission ?. instantiate () Ġ?: ĠMaterial 3 D . Light Color ( Colors . BLACK ), Ċĉ ĉ ambient Ġ= Ġeffect ?. ambient ?. instantiate () Ġ?: ĠMaterial 3 D . Light Color ( Colors . BLACK ), Ċĉ ĉ diffuse Ġ= Ġeffect ?. diffuse ?. instantiate () Ġ?: ĠMaterial 3 D . Light Color ( Colors . BLACK ), Ċĉ ĉ specular Ġ= Ġeffect ?. specular ?. instantiate () Ġ?: ĠMaterial 3 D . Light Color ( Colors . BLACK ), Ċĉ ĉ sh iness Ġ= Ġeffect ?. sh iness Ġ?: Ġ 0 . 5 f , Ċĉ ĉ indexOf Ref r action Ġ= Ġeffect ?. index _ of _ refr action Ġ?: Ġ 1 f Ċ ĉ ) Ċ } Ċ