package Ġme . anno . ecs . components . mesh . sdf . shapes Ċ Ċ import Ġme . anno . ecs . annotations . Range Ċ import Ġme . anno . ecs . components . mesh . Type Value Ċ import Ġme . anno . ecs . components . mesh . sdf . Variable Counter Ċ import Ġme . anno . ecs . pref ab . Prefab Save able Ċ import Ġme . anno . math s . Math s . length Ċ import Ġme . anno . math s . Math s . max Ċ import Ġorg . j om l . AABB f Ċ import Ġorg . j om l . Vector 3 f Ċ import Ġorg . j om l . Vector 4 f Ċ import Ġkotlin . math . sqrt Ċ Ċ @ Suppress (" unused ") Ċ open Ġclass ĠS DF Death Star Ġ: ĠS DF Shape () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġparams Ġ= ĠVector 3 f ( 1 f ) ĊĊĠĠĠ Ġ@ Range ( 0 . 0 , Ġ 1 e 3 8 ) ĊĠĠĠ Ġvar Ġradius ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġparams . x ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( params . x Ġ!= Ġvalue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( dynamic Size Ġ|| Ġglobal Dynamic ) Ġinvalidate Bounds () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġinvalidate Shader () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams . x Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Range ( 0 . 0 , Ġ 1 e 3 8 ) ĊĠĠĠ Ġvar Ġcutoff Radius ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġparams . y ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( params . y Ġ!= Ġvalue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( dynamic Size Ġ|| Ġglobal Dynamic ) Ġinvalidate Bounds () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġinvalidate Shader () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams . y Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġmust Ġbe Ġ>= Ġinner Ġradius , Ġif Ġ== Ġinner Ġradius , Ġwe Ġhave Ġa Ġsingle Ġsphere ĊĠĠĠ Ġvar Ġdistance ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġparams . z ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( params . z Ġ!= Ġvalue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( dynamic Size Ġ|| Ġglobal Dynamic ) Ġinvalidate Bounds () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġinvalidate Shader () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams . z Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcalculate Base Bounds ( dst : ĠA ABB f ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġincorrect Ġfor Ġsecond Ġhuge Ġsphere ĊĠĠĠĠĠĠĠ Ġval Ġr Ġ= Ġparams . x ĊĠĠĠĠĠĠĠ Ġdst . set Min (- r , Ġ- r , Ġ- r ) ĊĠĠĠĠĠĠĠ Ġdst . setMax (+ r , Ġ+ r , Ġ+ r ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġbuild Shader ( ĊĠĠĠĠĠĠĠ Ġbuilder : ĠStringBuilder , ĊĠĠĠĠĠĠĠ Ġpos Index 0 : ĠInt , ĊĠĠĠĠĠĠĠ Ġnext Variable Id : ĠVariable Counter , ĊĠĠĠĠĠĠĠ Ġdst Index : ĠInt , ĊĠĠĠĠĠĠĠ Ġuniform s : ĠHashMap < String , ĠType Value >, ĊĠĠĠĠĠĠĠ Ġfunctions : ĠHashSet < String > ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtrans Ġ= Ġbuild Transform ( builder , Ġpos Index 0 , Ġnext Variable Id , Ġuniform s , Ġfunctions ) ĊĠĠĠĠĠĠĠ Ġfunctions . add ( sd Death Star ) ĊĠĠĠĠĠĠĠ Ġsmart Min Begin ( builder , Ġdst Index ) ĊĠĠĠĠĠĠĠ Ġbuilder . append (" sd Death Star ( pos "). append ( trans . pos Index ). append (',') ĊĠĠĠĠĠĠĠ Ġval Ġdynamic Size Ġ= Ġdynamic Size Ġ|| Ġglobal Dynamic ĊĠĠĠĠĠĠĠ Ġif Ġ( dynamic Size ) Ġbuilder . append Uniform ( uniform s , Ġparams ) ĊĠĠĠĠĠĠĠ Ġelse Ġbuilder . append Vec ( params ) ĊĠĠĠĠĠĠĠ Ġbuilder . append (' )') ĊĠĠĠĠĠĠĠ Ġsmart Min End ( builder , Ġdst Index , Ġnext Variable Id , Ġuniform s , Ġfunctions , Ġtrans ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcompute SD F Base ( pos : ĠVector 4 f ): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġp Ġ= Ġparams ĊĠĠĠĠĠĠĠ Ġval Ġra Ġ= Ġp . x ĊĠĠĠĠĠĠĠ Ġval Ġrb Ġ= Ġp . y ĊĠĠĠĠĠĠĠ Ġval Ġd Ġ= Ġp . z ĊĠĠĠĠĠĠĠ Ġval Ġpx Ġ= Ġpos . x ĊĠĠĠĠĠĠĠ Ġval Ġpy Ġ= Ġlength ( pos . y , Ġpos . z ) ĊĠĠĠĠĠĠĠ Ġval Ġra 2 Ġ= Ġra Ġ* Ġra ĊĠĠĠĠĠĠĠ Ġval Ġa Ġ= Ġ( ra 2 Ġ- Ġrb Ġ* Ġrb Ġ+ Ġd Ġ* Ġd ) Ġ/ Ġ( 2 f Ġ* Ġd ) ĊĠĠĠĠĠĠĠ Ġval Ġb Ġ= Ġsqrt ( max ( ra 2 Ġ- Ġa Ġ* Ġa , Ġ 0 f )) ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( px Ġ* Ġb Ġ- Ġpy Ġ* Ġa Ġ> Ġd Ġ* Ġmax ( b Ġ- Ġpy , Ġ 0 f )) Ġlength ( px Ġ- Ġa , Ġpy Ġ- Ġb ) ĊĠĠĠĠĠĠĠ Ġelse Ġmax ( length ( px , Ġpy ) Ġ- Ġra , Ġ- length ( px Ġ- Ġd , Ġpy ) Ġ- Ġrb ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclone (): ĠS DF Death Star Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġclone Ġ= ĠS DF Death Star () ĊĠĠĠĠĠĠĠ Ġcopy ( clone ) ĊĠĠĠĠĠĠĠ Ġreturn Ġclone ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcopy ( clone : ĠPref ab Save able ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . copy ( clone ) ĊĠĠĠĠĠĠĠ Ġclone Ġas ĠS DF Death Star ĊĠĠĠĠĠĠĠ Ġclone . params . set ( params ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval ĠclassName Ġ= Ġ" SD F Death Star " ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġfrom Ġhttps :// i qu ile z les . org / www / articles / dist functions / dist functions . htm , ĠIn igo ĠQu ile z ĊĠĠĠĠĠĠĠ Ġ// Ġhttps :// www . shader toy . com / view / 7 l V XR t ĊĠĠĠĠĠĠĠ Ġconst Ġval Ġsd Death Star Ġ= Ġ"" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" float Ġsd Death Star ( vec 3 Ġp 2 , Ġvec 3 Ġr ) Ġ{\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠ Ġfloat Ġra Ġ= Ġr . x , Ġrb Ġ= Ġr . y , Ġd Ġ= Ġr . z ;\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠ Ġvec 2 Ġp Ġ= Ġvec 2 ( p 2 . x , Ġlength ( p 2 . yz )); \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠ Ġfloat Ġa Ġ= Ġ( ra * ra Ġ- Ġrb * rb Ġ+ Ġd * d )/( 2 . 0 * d );\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠ Ġfloat Ġb Ġ= Ġsqrt ( max ( ra * ra - a * a , 0 . 0 )); \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠ Ġif ( p . x * b - p . y * a Ġ> Ġd * max ( b - p . y , 0 . 0 )) Ġreturn Ġlength ( p - vec 2 ( a , b )); \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠ Ġelse Ġreturn Ġmax (( length ( p )- ra ), \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ-( length ( p - vec 2 ( d , 0 )) - rb )); \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" }" ĊĊĠĠĠ Ġ} Ċ Ċ }