package Ġcom . github . dw ur ste is en . min ig dx . math Ċ Ċ import Ġcom . cur ious creature . kotlin . math . Degrees Ċ import Ġcom . cur ious creature . kotlin . math . Float 3 Ċ import Ġcom . cur ious creature . kotlin . math . Quaternion Ċ import Ġcom . cur ious creature . kotlin . math . rotation Ċ import Ġcom . cur ious creature . kotlin . math . translation Ċ import Ġcom . github . dw ur ste is en . min ig dx . Percent Ċ import Ġcom . github . dw ur ste is en . min ig dx . to Percent Ċ import Ġkotlin . math . PI Ċ import Ġkotlin . math . abs Ċ import Ġkotlin . math . asin Ċ import Ġkotlin . math . atan 2 Ċ import Ġkotlin . math . sign Ċ import Ġkotlin . math . sqrt Ċ Ċ data Ġclass ĠVector 3 ( var Ġx : ĠFloat Ġ= Ġ 0 f , Ġvar Ġy : ĠFloat Ġ= Ġ 0 f , Ġvar Ġz : ĠFloat Ġ= Ġ 0 f ) Ġ{ ĊĊĠĠĠ Ġinline Ġvar Ġroll : ĠFloat ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġx ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġinline Ġvar Ġpitch : ĠFloat ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġy ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġinline Ġvar Ġyaw : ĠFloat ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġz ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġz Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( x : ĠNumber , Ġy : ĠNumber , Ġz : ĠNumber ) Ġ: Ġthis ( x . toFloat (), Ġy . toFloat (), Ġz . toFloat ()) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdd Ġvalues Ġto Ġthe Ġcurrent Ġvector . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġadd ( x : ĠNumber Ġ= Ġ 0 f , Ġy : ĠNumber Ġ= Ġ 0 f , Ġz : ĠNumber Ġ= Ġ 0 f ): ĠVector 3 Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . x Ġ+= Ġx . toFloat () ĊĠĠĠĠĠĠĠ Ġthis . y Ġ+= Ġy . toFloat () ĊĠĠĠĠĠĠĠ Ġthis . z Ġ+= Ġz . toFloat () ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdd Ġ[ other ] Ġvector Ġto Ġthe Ġcurrent Ġvector . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġadd ( other : ĠVector 3 ) Ġ= Ġadd ( other . x , Ġother . y , Ġother . z ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ see Ġ[ add ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġadd ( other : ĠImmutable Vector 3 ) Ġ= Ġadd ( other . x , Ġother . y , Ġother . z ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRemove Ġ[ other ] Ġto Ġthe Ġcurrent Ġvector . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġsub ( other : ĠVector 3 ) Ġ= Ġadd (- other . x , Ġ- other . y , Ġ- other . z ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ see Ġ[ sub ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġsub ( other : ĠImmutable Vector 3 ) Ġ= Ġadd (- other . x , Ġ- other . y , Ġ- other . z ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ see Ġ[ sub ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġsub ( x : ĠNumber Ġ= Ġ 0 f , Ġy : ĠNumber Ġ= Ġ 0 f , Ġz : ĠNumber Ġ= Ġ 0 f ) Ġ= ĊĠĠĠĠĠĠĠ Ġadd ( x . toFloat () Ġ* Ġ- 1 f , Ġy . toFloat () Ġ* Ġ- 1 f , Ġz . toFloat () Ġ* Ġ- 1 f ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturn Ġthe Ġneg ate Ġvector : ĊĠĠĠĠ Ġ* Ġall Ġvalues Ġare Ġmultip lied Ġby Ġ- 1 ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġneg ate (): ĠVector 3 Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . x Ġ= Ġ- this . x ĊĠĠĠĠĠĠĠ Ġthis . y Ġ= Ġ- this . y ĊĠĠĠĠĠĠĠ Ġthis . z Ġ= Ġ- this . z ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSet Ġvalues Ġto Ġthe Ġcurrent Ġvector . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset ( x : ĠNumber Ġ= Ġthis . x , Ġy : ĠNumber Ġ= Ġthis . y , Ġz : ĠNumber Ġ= Ġthis . z ): ĠVector 3 Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . x Ġ= Ġx . toFloat () ĊĠĠĠĠĠĠĠ Ġthis . y Ġ= Ġy . toFloat () ĊĠĠĠĠĠĠĠ Ġthis . z Ġ= Ġz . toFloat () ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSet Ġvalues Ġof Ġ[ other ] Ġvector Ġto Ġthe Ġcurrent Ġvector . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset ( other : ĠVector 3 ) Ġ= Ġset ( other . x , Ġother . y , Ġother . z ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ see Ġ[ set ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset ( other : ĠImmutable Vector 3 ) Ġ= Ġset ( other . x , Ġother . y , Ġother . z ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDot Ġproduct Ġbetween Ġanother Ġvector . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġthe Ġvalue Ġhelp Ġyou Ġto Ġknow Ġif Ġvectors Ġare ĊĠĠĠĠ Ġ* Ġin Ġthe Ġsame Ġdirection Ġ(> Ġ 0 ), ĊĠĠĠĠ Ġ* Ġin Ġopposite Ġdirection Ġ(< Ġ 0 ), ĊĠĠĠĠ Ġ* Ġor Ġper pend icular Ġ(= Ġ 0 ) ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ see Ġhttp :// blog . w ol fire . com / 2 0 0 9 / 0 7 / linear - algebra - for - game - developers - part - 2 / ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġdot ( other : ĠVector 3 ): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġx Ġ* Ġother . x Ġ+ Ġy Ġ* Ġother . y Ġ+ Ġz Ġ* Ġother . z ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ see Ġ[ dot ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġdot ( other : ĠImmutable Vector 3 ): ĠFloat Ġ= Ġdot ( other . delegate ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSet Ġthe Ġvector Ġas Ġthe Ġper pend icular Ġvectors ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġcross ( other : ĠVector 3 ): ĠVector 3 Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . set ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ* Ġother . z Ġ- Ġz Ġ* Ġother . y , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġz Ġ* Ġother . x Ġ- Ġx Ġ* Ġother . z , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ* Ġother . y Ġ- Ġy Ġ* Ġother . x ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ see Ġ[ cross ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġcross ( other : ĠImmutable Vector 3 ): ĠVector 3 Ġ= Ġcross ( other . delegate ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠProjects Ġthis Ġvector Ġonto Ġanother Ġvector ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġhttps :// github . com / j Mon key Engine / j monkey engine / blob / master / j me 3 - core / src / main / java / com / j me 3 / math / Vector 3 f . java ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġproject ( other : ĠVector 3 ): ĠVector 3 Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġn Ġ= Ġthis . dot ( other ) Ġ// ĠA Ġ. ĠB ĊĠĠĠĠĠĠĠ Ġval Ġd Ġ= Ġother . length 2 (); Ġ// Ġ| B | ^ 2 ĊĠĠĠĠĠĠĠ Ġreturn Ġset ( other ). scale ( n Ġ/ Ġd ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġproject ( other : ĠImmutable Vector 3 ): ĠVector 3 Ġ= Ġproject ( other . delegate ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠScale Ġthe Ġvector Ġby Ġthe Ġscalar Ġvalue . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġscale ( scalar : ĠFloat ): ĠVector 3 Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . x Ġ*= Ġscalar ĊĠĠĠĠĠĠĠ Ġthis . y Ġ*= Ġscalar ĊĠĠĠĠĠĠĠ Ġthis . z Ġ*= Ġscalar ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRotate Ġthe Ġvector ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġrotate ( x : ĠPercent , Ġy : ĠPercent , Ġz : ĠPercent , Ġangle : ĠDe grees ): ĠVector 3 Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġrotation ( Float 3 ( x . to Percent (), Ġy . to Percent (), Ġz . to Percent ()), Ġangle ) Ġ* Ġtranslation ( this . toFloat 3 ()) ĊĠĠĠĠĠĠĠ Ġset ( result . translation . x , Ġresult . translation . y , Ġresult . translation . z ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRotate Ġthe Ġvector Ġby Ġthe Ġgiven Ġquaternion ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ see : Ġhttps :// game dev . stack exchange . com / questions / 2 8 3 9 5 / rot ating - vector 3 - by - a - qu aternion ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġrotate ( q : ĠQuaternion ): ĠVector 3 Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠExtract Ġthe Ġvector Ġpart Ġof Ġthe Ġquaternion ĊĠĠĠĠĠĠĠ Ġval Ġu Ġ= ĠVector 3 ( q . x , Ġq . y , Ġq . z ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠExtract Ġthe Ġscalar Ġpart Ġof Ġthe Ġquaternion ĊĠĠĠĠĠĠĠ Ġval Ġs Ġ= Ġq . w ĊĊĠĠĠĠĠĠĠ Ġ// ĠDo Ġthe Ġmath ĊĠĠĠĠĠĠĠ Ġval Ġa Ġ= Ġu . copy (). scale ( 2 . 0 f Ġ* Ġu . dot ( this )) ĊĠĠĠĠĠĠĠ Ġval Ġb Ġ= Ġthis . copy (). scale ( s Ġ* Ġs Ġ- Ġu . dot ( u )) ĊĠĠĠĠĠĠĠ Ġval Ġc Ġ= Ġu . copy (). cross ( this ). scale ( 2 . 0 f Ġ* Ġs ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . set ( a . add ( b ). add ( c )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreate Ġa Ġnormal Ġvector Ġto Ġthe Ġcurrent Ġone ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġnormal (): ĠVector 3 Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠVector 3 ( z , Ġy , Ġ- x ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠNormalize Ġthe Ġvector Ġ( the Ġvector Ġwill Ġhave Ġa Ġlength Ġof Ġ 1 ) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġnormalize (): ĠVector 3 Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlen 2 : ĠFloat Ġ= Ġx Ġ* Ġx Ġ+ Ġy Ġ* Ġy Ġ+ Ġz Ġ* Ġz ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( len 2 Ġ== Ġ 0 f Ġ|| Ġlen 2 Ġ== Ġ 1 f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscalar Ġ= Ġ 1 f Ġ/ Ġsqrt ( len 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠVector 3 ( x Ġ* Ġscalar , Ġy Ġ* Ġscalar , Ġz Ġ* Ġscalar ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturn Ġthe Ġlength Ġof Ġthe Ġvector ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġlength (): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsqrt ( length 2 ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġreturn Ġthe Ġlength Ġas Ġpowered Ġof Ġtwo . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIt 's Ġmore Ġefficient Ġwhen Ġyou Ġjust Ġneed Ġto Ġcompare Ġdistance Ġbetween Ġobjects Ġthan ĊĠĠĠĠ Ġ* Ġknowing Ġthe Ġactual Ġdistance ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġlength 2 (): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġx Ġ* Ġx Ġ+ Ġy Ġ* Ġy Ġ+ Ġz Ġ* Ġz ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDistance Ġfrom Ġthis Ġvector Ġto Ġ[ other ] Ġvector . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġdist ( other : ĠVector 3 ): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsqrt ( dist 2 ( other )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdist ( other : ĠImmutable Vector 3 ): ĠFloat Ġ= Ġdist ( other . delegate ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDistance Ġfrom Ġthis Ġvector Ġto Ġ[ other ] Ġvector Ġsquared . ĊĠĠĠĠ Ġ* ĠCan Ġbe Ġuse Ġinstead Ġof Ġ[ dist ] Ġto Ġcompare Ġvector Ġwith ĊĠĠĠĠ Ġ* Ġa Ġfaster Ġcomputation Ġmethod . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġdist 2 ( other : ĠVector 3 ): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġa Ġ= Ġother . x Ġ- Ġx ĊĠĠĠĠĠĠĠ Ġval Ġb Ġ= Ġother . y Ġ- Ġy ĊĠĠĠĠĠĠĠ Ġval Ġc Ġ= Ġother . z Ġ- Ġz ĊĠĠĠĠĠĠĠ Ġreturn Ġa Ġ* Ġa Ġ+ Ġb Ġ* Ġb Ġ+ Ġc Ġ* Ġc ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdist 2 ( other : ĠImmutable Vector 3 ) Ġ= Ġdist 2 ( other . delegate ) ĊĊĠĠĠ Ġfun Ġto Float 3 (): ĠFloat 3 Ġ= ĠFloat 3 ( x , Ġy , Ġz ) ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval ĠX Ġ= ĠVector 3 ( 1 , Ġ 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġval ĠY Ġ= ĠVector 3 ( 0 , Ġ 1 , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġval ĠMIN US _ X Ġ= ĠVector 3 (- 1 , Ġ 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġval ĠMIN US _ Y Ġ= ĠVector 3 ( 0 , Ġ- 1 , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġval ĠZ Ġ= ĠVector 3 ( 0 , Ġ 0 , Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġval ĠZERO Ġ= ĠVector 3 ( 0 , Ġ 0 , Ġ 0 ) ĊĊĠĠĠĠĠĠĠ Ġval ĠFOR WARD Ġ= ĠZ ĊĠĠĠĠĠĠĠ Ġval ĠUP Ġ= ĠY ĊĠĠĠ Ġ} Ċ } Ċ Ċ // Ġhttps :// en . wikipedia . org / wiki / Conversion _ between _ qu atern ions _ and _ Euler _ angles Ċ fun ĠQuaternion . to Vector 3 (): ĠVector 3 Ġ{ ĊĠĠĠ Ġval Ġq Ġ= Ġthis ĊĠĠĠ Ġval Ġangles Ġ= ĠVector 3 () ĊĠĠĠ Ġ// Ġroll Ġ( x - axis Ġrotation ) ĊĠĠĠ Ġval Ġsin r Co sp Ġ= Ġ 2 Ġ* Ġ( q . w Ġ* Ġq . x Ġ+ Ġq . y Ġ* Ġq . z ) ĊĠĠĠ Ġval Ġcos r Co sp Ġ= Ġ 1 Ġ- Ġ 2 Ġ* Ġ( q . x Ġ* Ġq . x Ġ+ Ġq . y Ġ* Ġq . y ) ĊĠĠĠ Ġangles . roll Ġ= Ġatan 2 ( sin r Co sp , Ġcos r Co sp ) ĊĊĠĠĠ Ġ// Ġpitch Ġ( y - axis Ġrotation ) ĊĠĠĠ Ġval Ġsin p Ġ= Ġ 2 Ġ* Ġ( q . w Ġ* Ġq . y Ġ- Ġq . z Ġ* Ġq . x ) ĊĠĠĠ Ġif Ġ( abs ( sin p ) Ġ>= Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġangles . pitch Ġ= Ġcopy sign ( PI . toFloat () Ġ/ Ġ 2 f , Ġsin p ); Ġ// Ġuse Ġ 9 0 Ġdegrees Ġif Ġout Ġof Ġrange ĊĠĠĠ Ġelse ĊĠĠĠĠĠĠĠ Ġangles . pitch Ġ= Ġas in ( sin p ) ĊĊĠĠĠ Ġ// Ġyaw Ġ( z - axis Ġrotation ) ĊĠĠĠ Ġval Ġs iny Co sp Ġ= Ġ 2 Ġ* Ġ( q . w Ġ* Ġq . z Ġ+ Ġq . x Ġ* Ġq . y ) ĊĠĠĠ Ġval Ġcos y Co sp Ġ= Ġ 1 Ġ- Ġ 2 Ġ* Ġ( q . y Ġ* Ġq . y Ġ+ Ġq . z Ġ* Ġq . z ) ĊĠĠĠ Ġangles . yaw Ġ= Ġatan 2 ( sin y Co sp , Ġcos y Co sp ) ĊĊĠĠĠ Ġreturn Ġangles Ċ } Ċ Ċ fun Ġcopy sign ( a : ĠFloat , Ġb : ĠFloat ): ĠFloat Ġ{ ĊĠĠĠ Ġreturn Ġsign ( b ) Ġ* Ġa Ċ } Ċ Ċ fun ĠFloat 3 . to Vector 3 (): ĠVector 3 Ġ= ĠVector 3 ( x , Ġy , Ġz ) Ċ