package Ġme . anno . ecs . components . mesh . sdf . shapes Ċ Ċ 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 Ġorg . j om l . AABB f Ċ import Ġorg . j om l . Vector 3 f Ċ import Ġorg . j om l . Vector 4 f Ċ Ċ open Ġclass ĠS DF El lips oid Ġ: ĠS DF Shape () Ġ{ ĊĊĠĠĠ Ġvar Ġhalf Axes Ġ= ĠVector 3 f ( 1 f ) ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! dynamic Size Ġ&& Ġ! global Dynamic ) Ġinvalidate Shader () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġinvalidate Bounds () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield . set ( value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcalculate Base Bounds ( dst : ĠA ABB f ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġr Ġ= Ġhalf Axes ĊĠĠĠĠĠĠĠ Ġdst . set Min (- r . x , Ġ- r . y , Ġ- r . z ) ĊĠĠĠĠĠĠĠ Ġdst . setMax (+ r . x , Ġ+ r . y , Ġ+ r . z ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ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 El lips oid ) ĊĠĠĠĠĠĠĠ Ġsmart Min Begin ( builder , Ġdst Index ) ĊĠĠĠĠĠĠĠ Ġbuilder . append (" sd El lips oid ( pos "). append ( trans . pos Index ). append (',') ĊĠĠĠĠĠĠĠ Ġval Ġdynamic Size Ġ= Ġdynamic Size Ġ|| Ġglobal Dynamic ĊĠĠĠĠĠĠĠ Ġif Ġ( dynamic Size ) Ġbuilder . append Uniform ( uniform s , Ġhalf Axes ) ĊĠĠĠĠĠĠĠ Ġelse Ġbuilder . append Vec ( half Axes ) ĊĠĠĠĠĠĠĠ Ġ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 Ġr Ġ= Ġhalf Axes ĊĠĠĠĠĠĠĠ Ġval Ġk 0 Ġ= Ġlength ( pos . x Ġ/ Ġr . x , Ġpos . y Ġ/ Ġr . y , Ġpos . z Ġ/ Ġr . z ) ĊĠĠĠĠĠĠĠ Ġval Ġk 1 Ġ= Ġlength ( pos . x Ġ/ Ġ( r . x Ġ* Ġr . x ), Ġpos . y Ġ/ Ġ( r . y Ġ* Ġr . y ), Ġpos . z Ġ/ Ġ( r . z Ġ* Ġr . z )) ĊĠĠĠĠĠĠĠ Ġreturn Ġk 0 Ġ* Ġ( k 0 Ġ- Ġ 1 f ) Ġ/ Ġk 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclone (): ĠS DF El lips oid Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġclone Ġ= ĠS DF El lips oid () ĊĠĠĠĠĠĠĠ Ġcopy ( clone ) ĊĠĠĠĠĠĠĠ Ġreturn Ġclone ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcopy ( clone : ĠPref ab Save able ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . copy ( clone ) ĊĠĠĠĠĠĠĠ Ġclone Ġas ĠS DF El lips oid ĊĠĠĠĠĠĠĠ Ġclone . half Axes Ġ= Ġhalf Axes ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval ĠclassName Ġ= Ġ" SD FE l lips oid " ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġfrom Ġhttps :// i qu ile z les . org / www / articles / dist functions / dist functions . htm , ĠIn igo ĠQu ile z ĊĠĠĠĠĠĠĠ Ġ// Ġnot Ġexact ĊĠĠĠĠĠĠĠ Ġconst Ġval Ġsd El lips oid Ġ= Ġ"" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" float Ġsd El lips oid ( vec 3 Ġp , Ġvec 3 Ġr ) Ġ{\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠ Ġfloat Ġk 0 Ġ= Ġlength ( p / r );\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠ Ġfloat Ġk 1 Ġ= Ġlength ( p /( r * r )); \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠ Ġreturn Ġk 0 *( k 0 - 1 . 0 )/ k 1 ;\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" }" ĊĊĠĠĠ Ġ} Ċ Ċ }