/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 1 ĠJean Ġd ' Arc . Ċ Ġ* Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ġof Ġthis Ġsoftware Ċ Ġ* Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ċ Ġ* Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ċ Ġ* Ġsublicense , Ġand / or Ġsell Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ċ Ġ* Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ġall Ġcopies Ġor Ġsubstantial Ċ Ġ* Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR ĠIMPLIED , ĠINCLUDING ĠBUT Ċ Ġ* ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNON - INFRINGEMENT . Ċ Ġ* ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER ĠLIABILITY , Ċ Ġ* ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE Ċ Ġ* ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN ĠTHE ĠSOFTWARE . Ċ Ġ*/ Ċ Ċ package Ġcom . zyn aps . physics . geometry Ċ Ċ import Ġcom . zyn aps . math . A abb Ċ import Ġcom . zyn aps . math . Matrix 4 Ċ import Ġcom . zyn aps . math . Vector 3 Ċ import Ġcom . zyn aps . physics . Globals Ċ import Ġkotlin . math . max Ċ Ċ class ĠConv ex H ull ( private Ġval Ġpoints : ĠArray < Vector 3 >, Ġscale : ĠFloat Ġ= Ġ 1 F , Ġtolerance : ĠFloat Ġ= ĠGlobals . COLL ISION _ TO LER ANCE ) Ġ: ĠCollision Skin () Ġ{ ĊĠĠĠ Ġprivate Ġval Ġscale Ġ= Ġscale Ġ+ Ġtolerance ĊĊĠĠĠ Ġprivate Ġval Ġbounds Ġ= Ġpoints . fold ( A abb ()) Ġ{ Ġbox , Ġvec Ġ-> Ġbox . aggregate ( vec Ġ* Ġthis . scale ) Ġ} ĊĊĠĠĠ Ġoverride Ġvar Ġorigin Ġ= ĠVector 3 . ZERO ĊĊĠĠĠ Ġoverride Ġvar Ġbasis Ġ= ĠMatrix 4 . IDENTITY ĊĊĠĠĠ Ġoverride Ġval Ġbounding Sphere Ġ= Ġmax ( bounds . width , Ġmax ( bounds . height , Ġbounds . depth )) Ġ* Ġ 0 . 5 F ĊĊĠĠĠ Ġoverride Ġfun Ġget Support ( direction : ĠVector 3 ) Ġ= Ġbasis Ġ* Ġget Support Local ( direction Ġ* Ġbasis ) Ġ+ Ġorigin ĊĊĠĠĠ Ġoverride Ġfun Ġcalculate Body In ertia ( mass : ĠFloat ): ĠMatrix 4 Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġxx Ġ= Ġbounds . width Ġ* Ġbounds . width ĊĠĠĠĠĠĠĠ Ġval Ġyy Ġ= Ġbounds . height Ġ* Ġbounds . height ĊĠĠĠĠĠĠĠ Ġval Ġzz Ġ= Ġbounds . depth Ġ* Ġbounds . depth ĊĠĠĠĠĠĠĠ Ġreturn ĠMatrix 4 . create Scale ( mass Ġ/ Ġ 1 2 F Ġ* Ġ( zz Ġ+ Ġyy ), Ġmass Ġ/ Ġ 1 2 F Ġ* Ġ( xx Ġ+ Ġzz ), Ġmass Ġ/ Ġ 1 2 F Ġ* Ġ( xx Ġ+ Ġyy )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Support Local ( v : ĠVector 3 ): ĠVector 3 Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġout Ġ= ĠVector 3 . ZERO ĊĠĠĠĠĠĠĠ Ġvar Ġdist Ġ= ĠFloat . NEGATIVE _ INFINITY ĊĠĠĠĠĠĠĠ Ġfor Ġ( point Ġin Ġpoints ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdot Ġ= Ġv . x Ġ* Ġpoint . x Ġ+ Ġv . y Ġ* Ġpoint . y Ġ+ Ġv . z Ġ* Ġpoint . z ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( dot Ġ> Ġdist ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdist Ġ= Ġdot ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout Ġ= Ġpoint ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġout Ġ* Ġscale ĊĠĠĠ Ġ} Ċ } Ċ