package Ġapp . the le ma . test . phys Ċ Ċ import Ġapp . the le ma . ecs .* Ċ import Ġapp . the le ma . g 3 d . cam . orbit Camera Control Ċ import Ġapp . the le ma . g 3 d . mesh . box Mesh Ċ import Ġapp . the le ma . g 3 d . scene Ċ import Ġapp . the le ma . gl . mesh Instance Ċ import Ġapp . the le ma . math . Vec 3 Ċ import Ġapp . the le ma . phys .* Ċ import Ġapp . the le ma . test . Test Ċ import Ġapp . the le ma . utils . LOG Ċ import Ġkotlin . random . Random Ċ Ċ class ĠObject Shot Test : ĠTest Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġtest Main () Ġ= Ġmain Entity Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġshape Size Ġ= Ġ 0 . 1 f ĊĠĠĠĠĠĠĠ Ġval Ġbody Mass Ġ= Ġ 1 f ĊĊĠĠĠĠĠĠĠ Ġval Ġobjects Num Ġ= Ġ 1 0 ĊĠĠĠĠĠĠĠ Ġval Ġshot Delay Ġ= Ġ 0 . 5 f ĊĊĠĠĠĠĠĠĠ Ġvar Ġemitted Objects Num Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġdelay Remain Ġ= Ġ 0 f ĊĊĠĠĠĠĠĠĠ Ġrigid Body Physics World Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgravity Ġ= ĠVec 3 ( 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuse Quick Step Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfixed Delta Ġ= Ġ 0 . 0 1 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġiterations Ġ= Ġ 1 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġscene (). start Simulation () ĊĊĠĠĠĠĠĠĠ Ġorbit Camera Control Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Distance Ġ= Ġ 2 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaz imuth Ġ= Ġ 2 . 5 f ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġmain Loop On Update Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( delay Remain Ġ> Ġ 0 f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay Remain Ġ-= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( delay Remain Ġ< Ġ 0 f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay Remain Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( delay Remain Ġ== Ġ 0 f Ġ&& Ġemitted Objects Num Ġ< Ġobjects Num ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay Remain Ġ= Ġshot Delay ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentity (" object $ emit ted Objects Num ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbox Mesh Ġ{ Ġset Size ( 1 f ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmesh Instance () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbox Shape Ġ{ Ġset Size ( shape Size ); Ġmass Ġ= Ġbody Mass Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrigid Body Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode . setPosition ( 0 f , ĠRandom . next Float (), ĠRandom . next Float ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Body Created Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Force ( 1 0 0 f , Ġ 0 f , Ġ 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Simulation () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemitted Objects Num ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġentity (" static ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbox Ġ= Ġbox Mesh Ġ{ Ġset Size ( 1 f , Ġ 1 0 f , Ġ 1 0 f ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmesh Instance () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbox Shape Ġ{ Ġset Size ( box . x Size , Ġbox . y Size , Ġbox . z Size ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrigid Body Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode . setPosition ( 1 0 0 f , Ġ 0 f , Ġ 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Static Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Contact Ġ{ Ġcontact , Ġbody , Ġother Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLOG . info ("${ body . entity . name } Ġcol li ded Ġwith Ġ${ other . entity . name }, Ġdepth Ġ= Ġ${ contact . depth }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLOG . info ("> >> Ġ${ other . entity . name } Ġvelocity : Ġ${ other . get Linear Velocity ( Vec 3 ()) }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ