package Ġme . anno . ecs . components . collider Ċ Ċ import Ġcom . bul le tp h ysics . collision . shapes . Caps ule Shape Ċ import Ġcom . bul le tp h ysics . collision . shapes . Collision Shape Ċ import Ġme . anno . ecs . pref ab . Prefab Save able Ċ import Ġme . anno . engine . gui . Line Shapes Ċ import Ġme . anno . io . serialization . Serialized Property Ċ import Ġme . anno . utils . types . Vectors . set Axis Ċ import Ġorg . j om l . AABB d Ċ import Ġorg . j om l . Matrix 4 x 3 d Ċ import Ġorg . j om l . Vector 3 d Ċ import Ġorg . j om l . Vector 3 f Ċ import Ġkotlin . math . max Ċ Ċ class ĠC aps ule Collider Ġ: ĠColl ider () Ġ{ ĊĊĠĠĠ Ġ// Ġwhich Ġaxis Ġthe Ġheight Ġis Ġfor , Ġx Ġ= Ġ 0 , Ġy Ġ= Ġ 1 , Ġz Ġ= Ġ 2 ĊĠĠĠ Ġ@ Serialized Property ĊĠĠĠ Ġvar Ġaxis Ġ= Ġ 0 ĊĊĠĠĠ Ġ@ Serialized Property ĊĠĠĠ Ġvar Ġheight Ġ= Ġ 1 . 0 ĊĊĠĠĠ Ġ@ Serialized Property ĊĠĠĠ Ġvar Ġradius Ġ= Ġ 1 . 0 ĊĊĠĠĠ Ġoverride Ġfun Ġunion ( global Transform : ĠMatrix 4 x 3 d , Ġa abb : ĠA ABB d , Ġtmp : ĠVector 3 d , Ġprefer Exact : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġunion Ġthe Ġtwo Ġr ings Ġand Ġthe Ġtop Ġand Ġbottom Ġpeak ĊĠĠĠĠĠĠĠ Ġval Ġr Ġ= Ġradius ĊĠĠĠĠĠĠĠ Ġval Ġh Ġ= Ġheight Ġ* Ġ 0 . 5 ĊĠĠĠĠĠĠĠ Ġunion Ring ( global Transform , Ġa abb , Ġtmp , Ġaxis , Ġr , Ġ+ h , Ġprefer Exact ) ĊĠĠĠĠĠĠĠ Ġunion Ring ( global Transform , Ġa abb , Ġtmp , Ġaxis , Ġr , Ġ- h , Ġprefer Exact ) ĊĠĠĠĠĠĠĠ Ġval Ġs Ġ= Ġh Ġ+ Ġr ĊĠĠĠĠĠĠĠ Ġa abb . union ( global Transform . transform Position ( tmp . set ( 0 . 0 ). set Axis ( axis , Ġ+ s ))) ĊĠĠĠĠĠĠĠ Ġa abb . union ( global Transform . transform Position ( tmp . set ( 0 . 0 ). set Axis ( axis , Ġ- s ))) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Signed Distance ( delta Pos : ĠVector 3 f ): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġround ness Ġis Ġignored , Ġbecause Ġa Ġcaps ule Ġis Ġalready Ġperfectly Ġround ĊĠĠĠĠĠĠĠ Ġval Ġhalf Ext ends Ġ= Ġ( height Ġ* Ġ 0 . 5 ). toFloat () ĊĠĠĠĠĠĠĠ Ġdelta Pos . absolute () ĊĠĠĠĠĠĠĠ Ġdelta Pos . set Axis ( axis , Ġmax ( delta Pos [ axis ] Ġ- Ġhalf Ext ends , Ġ 0 f )) ĊĠĠĠĠĠĠĠ Ġreturn Ġdelta Pos . length () Ġ- Ġradius . toFloat () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcreate Bullet Shape ( scale : ĠVector 3 d ): ĠCollision Shape Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( axis ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> ĠC aps ule Shape ( radius Ġ* Ġscale . y , Ġheight Ġ* Ġscale . x , Ġaxis ) Ġ// Ġx ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> ĠC aps ule Shape ( radius Ġ* Ġscale . x , Ġheight Ġ* Ġscale . y , Ġaxis ) Ġ// Ġy ĊĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> ĠC aps ule Shape ( radius Ġ* Ġscale . x , Ġheight Ġ* Ġscale . z , Ġaxis ) Ġ// Ġz ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠRuntimeException () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdraw Shape () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġtodo Ġtest Ġthis ĊĠĠĠĠĠĠĠ Ġ// Ġtodo Ġonly Ġdraw Ġif Ġselected Ġor Ġcoll ider Ġdebug Ġmode ĊĠĠĠĠĠĠĠ Ġ// Ġtodo Ġcolor Ġbased Ġon Ġphysics Ġ/ Ġtrigger Ġ( ?) ĊĠĠĠĠĠĠĠ Ġval Ġh Ġ= Ġheight Ġ* Ġ 0 . 5 ĊĠĠĠĠĠĠĠ Ġval Ġr Ġ= Ġradius ĊĠĠĠĠĠĠĠ Ġwhen Ġ( axis ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLine Shapes . draw Line ( entity , Ġ- h , Ġ- r , Ġ 0 . 0 , Ġ+ h , Ġ- r , Ġ 0 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLine Shapes . draw Line ( entity , Ġ- h , Ġ+ r , Ġ 0 . 0 , Ġ+ h , Ġ+ r , Ġ 0 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLine Shapes . draw Line ( entity , Ġ- h , Ġ 0 . 0 , Ġ- r , Ġ+ h , Ġ 0 . 0 , Ġ- r ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLine Shapes . draw Line ( entity , Ġ- h , Ġ 0 . 0 , Ġ+ r , Ġ+ h , Ġ 0 . 0 , Ġ+ r ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLine Shapes . draw Sphere ( entity , Ġr , ĠVector 3 d (- h , Ġ 0 . 0 , Ġ 0 . 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLine Shapes . draw Sphere ( entity , Ġr , ĠVector 3 d (+ h , Ġ 0 . 0 , Ġ 0 . 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLine Shapes . draw Line ( entity , Ġ- r , Ġ- h , Ġ 0 . 0 , Ġ- r , Ġ+ h , Ġ 0 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLine Shapes . draw Line ( entity , Ġ+ r , Ġ- h , Ġ 0 . 0 , Ġ+ r , Ġ+ h , Ġ 0 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLine Shapes . draw Line ( entity , Ġ 0 . 0 , Ġ- h , Ġ- r , Ġ 0 . 0 , Ġ+ h , Ġ- r ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLine Shapes . draw Line ( entity , Ġ 0 . 0 , Ġ- h , Ġ+ r , Ġ 0 . 0 , Ġ+ h , Ġ+ r ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLine Shapes . draw Sphere ( entity , Ġr , ĠVector 3 d ( 0 . 0 , Ġ- h , Ġ 0 . 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLine Shapes . draw Sphere ( entity , Ġr , ĠVector 3 d ( 0 . 0 , Ġ+ h , Ġ 0 . 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLine Shapes . draw Line ( entity , Ġ- r , Ġ 0 . 0 , Ġ- h , Ġ- r , Ġ 0 . 0 , Ġ+ h ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLine Shapes . draw Line ( entity , Ġ+ r , Ġ 0 . 0 , Ġ- h , Ġ+ r , Ġ 0 . 0 , Ġ+ h ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLine Shapes . draw Line ( entity , Ġ 0 . 0 , Ġ- r , Ġ- h , Ġ 0 . 0 , Ġ- r , Ġ+ h ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLine Shapes . draw Line ( entity , Ġ 0 . 0 , Ġ+ r , Ġ- h , Ġ 0 . 0 , Ġ+ r , Ġ+ h ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLine Shapes . draw Sphere ( entity , Ġr , ĠVector 3 d ( 0 . 0 , Ġ 0 . 0 , Ġ- h )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLine Shapes . draw Sphere ( entity , Ġr , ĠVector 3 d ( 0 . 0 , Ġ 0 . 0 , Ġ+ h )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclone (): ĠC aps ule Collider Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġclone Ġ= ĠC aps ule Collider () ĊĠĠĠĠĠĠĠ Ġcopy ( clone ) ĊĠĠĠĠĠĠĠ Ġreturn Ġclone ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcopy ( clone : ĠPref ab Save able ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . copy ( clone ) ĊĠĠĠĠĠĠĠ Ġclone Ġas ĠC aps ule Collider ĊĠĠĠĠĠĠĠ Ġclone . axis Ġ= Ġaxis ĊĠĠĠĠĠĠĠ Ġclone . height Ġ= Ġheight ĊĠĠĠĠĠĠĠ Ġclone . radius Ġ= Ġradius ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval ĠclassName Ġget () Ġ= Ġ" Caps ule Collider " Ċ Ċ } Ċ