package Ġinfo . la ht . three kt . math Ċ Ċ import Ġinfo . la ht . three kt . core . Clone able Ċ import Ġinfo . la ht . three kt . core . Float Buffer Attribute Ċ import Ġkotlin . math . abs Ċ import Ġkotlin . math . sqrt ĊĊ Ċ class ĠVector 4 ( ĊĠĠĠ Ġvar Ġx : ĠFloat , ĊĠĠĠ Ġvar Ġy : ĠFloat , ĊĠĠĠ Ġvar Ġz : ĠFloat , ĊĠĠĠ Ġvar Ġw : ĠFloat Ċ ) Ġ: ĠClone able , ĠFlat table Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġsize Ġ= Ġ 4 ĊĊĠĠĠ Ġconstructor () Ġ: Ġthis ( 0 . toFloat (), Ġ 0 . toFloat (), Ġ 0 . toFloat (), Ġ 0 . toFloat ()) ĊĊĠĠĠ Ġconstructor ( x : ĠInt , Ġy : ĠInt , Ġz : ĠInt , Ġw : ĠInt ) Ġ: Ġthis ( x . toFloat (), Ġy . toFloat (), Ġz . toFloat (), Ġw . toFloat ()) ĊĊĠĠĠ Ġfun Ġset ( x : ĠNumber , Ġy : ĠNumber , Ġz : ĠNumber , Ġw : ĠNumber ): ĠVector 4 Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . x Ġ= Ġx . toFloat () ĊĠĠĠĠĠĠĠ Ġthis . y Ġ= Ġy . toFloat () ĊĠĠĠĠĠĠĠ Ġthis . z Ġ= Ġz . toFloat () ĊĠĠĠĠĠĠĠ Ġthis . w Ġ= Ġw . toFloat () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd ( v : ĠVector 4 ): ĠVector 4 Ġ{ ĊĊĠĠĠĠĠĠĠ Ġthis . x Ġ+= Ġv . x ĊĠĠĠĠĠĠĠ Ġthis . y Ġ+= Ġv . y ĊĠĠĠĠĠĠĠ Ġthis . z Ġ+= Ġv . z ĊĠĠĠĠĠĠĠ Ġthis . w Ġ+= Ġv . w ĊĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Scalar ( s : ĠFloat ): ĠVector 4 Ġ{ ĊĊĠĠĠĠĠĠĠ Ġthis . x Ġ+= Ġs ĊĠĠĠĠĠĠĠ Ġthis . y Ġ+= Ġs ĊĠĠĠĠĠĠĠ Ġthis . z Ġ+= Ġs ĊĠĠĠĠĠĠĠ Ġthis . w Ġ+= Ġs ĊĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Vectors ( a : ĠVector 4 , Ġb : ĠVector 4 ): ĠVector 4 Ġ{ ĊĊĠĠĠĠĠĠĠ Ġthis . x Ġ= Ġa . x Ġ+ Ġb . x ĊĠĠĠĠĠĠĠ Ġthis . y Ġ= Ġa . y Ġ+ Ġb . y ĊĠĠĠĠĠĠĠ Ġthis . z Ġ= Ġa . z Ġ+ Ġb . z ĊĠĠĠĠĠĠĠ Ġthis . w Ġ= Ġa . w Ġ+ Ġb . w ĊĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Scaled Vector ( v : ĠVector 4 , Ġs : ĠFloat ): ĠVector 4 Ġ{ ĊĊĠĠĠĠĠĠĠ Ġthis . x Ġ+= Ġv . x Ġ* Ġs ĊĠĠĠĠĠĠĠ Ġthis . y Ġ+= Ġv . y Ġ* Ġs ĊĠĠĠĠĠĠĠ Ġthis . z Ġ+= Ġv . z Ġ* Ġs ĊĠĠĠĠĠĠĠ Ġthis . w Ġ+= Ġv . w Ġ* Ġs ĊĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsub ( v : ĠVector 4 ): ĠVector 4 Ġ{ ĊĊĠĠĠĠĠĠĠ Ġthis . x Ġ-= Ġv . x ĊĠĠĠĠĠĠĠ Ġthis . y Ġ-= Ġv . y ĊĠĠĠĠĠĠĠ Ġthis . z Ġ-= Ġv . z ĊĠĠĠĠĠĠĠ Ġthis . w Ġ-= Ġv . w ĊĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsub Scalar ( s : ĠFloat ): ĠVector 4 Ġ{ ĊĊĠĠĠĠĠĠĠ Ġthis . x Ġ-= Ġs ĊĠĠĠĠĠĠĠ Ġthis . y Ġ-= Ġs ĊĠĠĠĠĠĠĠ Ġthis . z Ġ-= Ġs ĊĠĠĠĠĠĠĠ Ġthis . w Ġ-= Ġs ĊĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsub Vectors ( a : ĠVector 4 , Ġb : ĠVector 4 ): ĠVector 4 Ġ{ ĊĊĠĠĠĠĠĠĠ Ġthis . x Ġ= Ġa . x Ġ- Ġb . x ĊĠĠĠĠĠĠĠ Ġthis . y Ġ= Ġa . y Ġ- Ġb . y ĊĠĠĠĠĠĠĠ Ġthis . z Ġ= Ġa . z Ġ- Ġb . z ĊĠĠĠĠĠĠĠ Ġthis . w Ġ= Ġa . w Ġ- Ġb . w ĊĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġmultiply Scalar ( scalar : ĠNumber ): ĠVector 4 Ġ{ ĊĊĠĠĠĠĠĠĠ Ġthis . x Ġ*= Ġscalar . toFloat () ĊĠĠĠĠĠĠĠ Ġthis . y Ġ*= Ġscalar . toFloat () ĊĠĠĠĠĠĠĠ Ġthis . z Ġ*= Ġscalar . toFloat () ĊĠĠĠĠĠĠĠ Ġthis . w Ġ*= Ġscalar . toFloat () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġapply Matrix 4 ( m : ĠMatrix 4 ): ĠVector 4 Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġthis . x ĊĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġthis . y ĊĠĠĠĠĠĠĠ Ġval Ġz Ġ= Ġthis . z ĊĠĠĠĠĠĠĠ Ġval Ġw Ġ= Ġthis . w ĊĠĠĠĠĠĠĠ Ġval Ġe Ġ= Ġm . elements ĊĊĠĠĠĠĠĠĠ Ġthis . x Ġ= Ġe [ 0 ] Ġ* Ġx Ġ+ Ġe [ 4 ] Ġ* Ġy Ġ+ Ġe [ 8 ] Ġ* Ġz Ġ+ Ġe [ 1 2 ] Ġ* Ġw ĊĠĠĠĠĠĠĠ Ġthis . y Ġ= Ġe [ 1 ] Ġ* Ġx Ġ+ Ġe [ 5 ] Ġ* Ġy Ġ+ Ġe [ 9 ] Ġ* Ġz Ġ+ Ġe [ 1 3 ] Ġ* Ġw ĊĠĠĠĠĠĠĠ Ġthis . z Ġ= Ġe [ 2 ] Ġ* Ġx Ġ+ Ġe [ 6 ] Ġ* Ġy Ġ+ Ġe [ 1 0 ] Ġ* Ġz Ġ+ Ġe [ 1 4 ] Ġ* Ġw ĊĠĠĠĠĠĠĠ Ġthis . w Ġ= Ġe [ 3 ] Ġ* Ġx Ġ+ Ġe [ 7 ] Ġ* Ġy Ġ+ Ġe [ 1 1 ] Ġ* Ġz Ġ+ Ġe [ 1 5 ] Ġ* Ġw ĊĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdivide Scalar ( scalar : ĠFloat ): ĠVector 4 Ġ{ ĊĊĠĠĠĠĠĠĠ Ġreturn Ġthis . multiply Scalar ( 1 f Ġ/ Ġscalar ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfloor (): ĠVector 4 Ġ{ ĊĊĠĠĠĠĠĠĠ Ġthis . x Ġ= Ġkotlin . math . floor ( this . x ) ĊĠĠĠĠĠĠĠ Ġthis . y Ġ= Ġkotlin . math . floor ( this . y ) ĊĠĠĠĠĠĠĠ Ġthis . z Ġ= Ġkotlin . math . floor ( this . z ) ĊĠĠĠĠĠĠĠ Ġthis . w Ġ= Ġkotlin . math . floor ( this . w ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġceil (): ĠVector 4 Ġ{ ĊĊĠĠĠĠĠĠĠ Ġthis . x Ġ= Ġkotlin . math . ceil ( this . x ) ĊĠĠĠĠĠĠĠ Ġthis . y Ġ= Ġkotlin . math . ceil ( this . y ) ĊĠĠĠĠĠĠĠ Ġthis . z Ġ= Ġkotlin . math . ceil ( this . z ) ĊĠĠĠĠĠĠĠ Ġthis . w Ġ= Ġkotlin . math . ceil ( this . w ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġround (): ĠVector 4 Ġ{ ĊĊĠĠĠĠĠĠĠ Ġthis . x Ġ= Ġkotlin . math . round ( this . x ) ĊĠĠĠĠĠĠĠ Ġthis . y Ġ= Ġkotlin . math . round ( this . y ) ĊĠĠĠĠĠĠĠ Ġthis . z Ġ= Ġkotlin . math . round ( this . z ) ĊĠĠĠĠĠĠĠ Ġthis . w Ġ= Ġkotlin . math . round ( this . w ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġround To Zero (): ĠVector 4 Ġ{ ĊĊĠĠĠĠĠĠĠ Ġthis . x Ġ= Ġif Ġ( this . x Ġ< Ġ 0 ) Ġkotlin . math . ceil ( this . x ) Ġelse Ġkotlin . math . floor ( this . x ) ĊĠĠĠĠĠĠĠ Ġthis . y Ġ= Ġif Ġ( this . y Ġ< Ġ 0 ) Ġkotlin . math . ceil ( this . y ) Ġelse Ġkotlin . math . floor ( this . y ) ĊĠĠĠĠĠĠĠ Ġthis . z Ġ= Ġif Ġ( this . z Ġ< Ġ 0 ) Ġkotlin . math . ceil ( this . z ) Ġelse Ġkotlin . math . floor ( this . z ) ĊĠĠĠĠĠĠĠ Ġthis . w Ġ= Ġif Ġ( this . w Ġ< Ġ 0 ) Ġkotlin . math . ceil ( this . w ) Ġelse Ġkotlin . math . floor ( this . w ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġneg ate (): ĠVector 4 Ġ{ ĊĊĠĠĠĠĠĠĠ Ġthis . x Ġ= Ġ- this . x ĊĠĠĠĠĠĠĠ Ġthis . y Ġ= Ġ- this . y ĊĠĠĠĠĠĠĠ Ġthis . z Ġ= Ġ- this . z ĊĠĠĠĠĠĠĠ Ġthis . w Ġ= Ġ- this . w ĊĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdot ( v : ĠVector 4 ): ĠFloat Ġ{ ĊĊĠĠĠĠĠĠĠ Ġreturn Ġthis . x Ġ* Ġv . x Ġ+ Ġthis . y Ġ* Ġv . y Ġ+ Ġthis . z Ġ* Ġv . z Ġ+ Ġthis . w Ġ* Ġv . w ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġlength Sq (): ĠFloat Ġ{ ĊĊĠĠĠĠĠĠĠ Ġreturn Ġthis . x Ġ* Ġthis . x Ġ+ Ġthis . y Ġ* Ġthis . y Ġ+ Ġthis . z Ġ* Ġthis . z Ġ+ Ġthis . w Ġ* Ġthis . w ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġlength (): ĠFloat Ġ{ ĊĊĠĠĠĠĠĠĠ Ġreturn Ġsqrt ( this . x Ġ* Ġthis . x Ġ+ Ġthis . y Ġ* Ġthis . y Ġ+ Ġthis . z Ġ* Ġthis . z Ġ+ Ġthis . w Ġ* Ġthis . w ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġman h att an Length (): ĠFloat Ġ{ ĊĊĠĠĠĠĠĠĠ Ġreturn Ġabs ( this . x ) Ġ+ Ġabs ( this . y ) Ġ+ Ġabs ( this . z ) Ġ+ Ġabs ( this . w ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġnormalize (): ĠVector 4 Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġl Ġ= Ġthis . length () ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . divide Scalar ( if Ġ( l . isNaN ()) Ġ 1 f Ġelse Ġl ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Length ( length : ĠFloat ): ĠVector 4 Ġ{ ĊĊĠĠĠĠĠĠĠ Ġreturn Ġthis . normalize (). multiply Scalar ( length ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġl erp ( v : ĠVector 4 , Ġalpha : ĠFloat ): ĠVector 4 Ġ{ ĊĊĠĠĠĠĠĠĠ Ġthis . x Ġ+= Ġ( v . x Ġ- Ġthis . x ) Ġ* Ġalpha ĊĠĠĠĠĠĠĠ Ġthis . y Ġ+= Ġ( v . y Ġ- Ġthis . y ) Ġ* Ġalpha ĊĠĠĠĠĠĠĠ Ġthis . z Ġ+= Ġ( v . z Ġ- Ġthis . z ) Ġ* Ġalpha ĊĠĠĠĠĠĠĠ Ġthis . w Ġ+= Ġ( v . w Ġ- Ġthis . w ) Ġ* Ġalpha ĊĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġl erp Vectors ( v 1 : ĠVector 4 , Ġv 2 : ĠVector 4 , Ġalpha : ĠFloat ): ĠVector 4 Ġ{ ĊĊĠĠĠĠĠĠĠ Ġreturn Ġthis . sub Vectors ( v 2 , Ġv 1 ). multiply Scalar ( alpha ). add ( v 1 ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfrom Array ( array : ĠFloat Array , Ġoffset : ĠInt Ġ= Ġ 0 ): ĠVector 4 Ġ{ ĊĊĠĠĠĠĠĠĠ Ġthis . x Ġ= Ġarray [ offset ] ĊĠĠĠĠĠĠĠ Ġthis . y Ġ= Ġarray [ offset Ġ+ Ġ 1 ] ĊĠĠĠĠĠĠĠ Ġthis . z Ġ= Ġarray [ offset Ġ+ Ġ 2 ] ĊĠĠĠĠĠĠĠ Ġthis . w Ġ= Ġarray [ offset Ġ+ Ġ 3 ] ĊĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġan Ġarray Ġ[ x , Ġy , Ġz ], Ġor Ġcopies Ġx , Ġy Ġand Ġz Ġinto Ġthe Ġprovided Ġarray . ĊĠĠĠĠ Ġ* Ġ@ param Ġarray Ġ( optional ) Ġarray Ġto Ġstore Ġthe Ġvector Ġto . ĠIf ĠVector 3 Ġis Ġnot Ġprovided , Ġa Ġnew Ġarray Ġwill Ġbe Ġcreated . ĊĠĠĠĠ Ġ* Ġ@ param Ġoffset Ġ( optional ) Ġoptional Ġoffset Ġinto Ġthe Ġarray . ĊĠĠĠĠ Ġ* Ġ@ return ĠThe Ġcreated Ġor Ġprovided Ġarray . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġto Array ( array : ĠFloat Array ?, Ġoffset : ĠInt ): ĠFloat Array Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ@ Suppress (" NAME _ SH ADO WING ") ĊĠĠĠĠĠĠĠ Ġval Ġarray Ġ= Ġarray Ġ?: ĠFloat Array ( 4 ) ĊĊĠĠĠĠĠĠĠ Ġarray [ offset ] Ġ= Ġthis . x ĊĠĠĠĠĠĠĠ Ġarray [ offset Ġ+ Ġ 1 ] Ġ= Ġthis . y ĊĠĠĠĠĠĠĠ Ġarray [ offset Ġ+ Ġ 2 ] Ġ= Ġthis . z ĊĠĠĠĠĠĠĠ Ġarray [ offset Ġ+ Ġ 3 ] Ġ= Ġthis . w ĊĊĠĠĠĠĠĠĠ Ġreturn Ġarray ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġfrom Buffer Attribute ( attribute : ĠFloat Buffer Attribute , Ġindex : ĠInt ): ĠVector 4 Ġ{ ĊĊĠĠĠĠĠĠĠ Ġthis . x Ġ= Ġattribute . getX ( index ) ĊĠĠĠĠĠĠĠ Ġthis . y Ġ= Ġattribute . getY ( index ) ĊĠĠĠĠĠĠĠ Ġthis . z Ġ= Ġattribute . getZ ( index ) ĊĠĠĠĠĠĠĠ Ġthis . w Ġ= Ġattribute . get W ( index ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġclone (): ĠVector 4 Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠVector 4 ( x , Ġy , Ġz , Ġw ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcopy ( v : ĠVector 4 ): ĠVector 4 Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġset ( v . x , Ġv . y , Ġv . z , Ġv . w ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this Ġ=== Ġother ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġif Ġ( java Class Ġ!= Ġother ?. java Class ) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġother Ġas ĠVector 4 ĊĊĠĠĠĠĠĠĠ Ġif Ġ( x Ġ!= Ġother . x ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( y Ġ!= Ġother . y ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( z Ġ!= Ġother . z ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( w Ġ!= Ġother . w ) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġx . hashCode () ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġy . hashCode () ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġz . hashCode () ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġw . hashCode () ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ" Vector 4 ( x =$ x , Ġy =$ y , Ġz =$ z , Ġw =$ w )" ĊĠĠĠ Ġ} Ċ Ċ } Ċ