package Ġcom . zd og . library . render Ċ Ċ data Ġclass ĠVector ( var Ġx : ĠFloat Ġ= Ġ 0 f , Ġvar Ġy : ĠFloat Ġ= Ġ 0 f , Ġvar Ġz : ĠFloat Ġ= Ġ 0 f ) Ġ{ ĊĠĠĠ Ġconstructor ( pos : ĠVector ) Ġ: Ġthis ( pos . x , Ġpos . y , Ġpos . z ) ĊĊĠĠĠ Ġfun Ġset ( vector : ĠVector ?) Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠ Ġvector ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset ( it . x , Ġit . y , Ġit . z ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset ( x : ĠFloat Ġ= Ġ 0 f , Ġy : ĠFloat Ġ= Ġ 0 f , Ġz : ĠFloat Ġ= Ġ 0 f ) Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠ Ġsynchronized ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . x Ġ= Ġx ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . y Ġ= Ġy ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . z Ġ= Ġz ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrotate ( rotation : ĠVector ) Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠ ĠrotateZ ( rotation . z ) ĊĠĠĠĠĠĠĠ ĠrotateY ( rotation . y ) ĊĠĠĠĠĠĠĠ ĠrotateX ( rotation . x ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠrotateZ ( angle : ĠFloat ) Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( angle Ġ== Ġ 0 f Ġ|| Ġangle Ġ% ĠT AU Ġ== Ġ 0 . 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġcos Ġ= ĠMath . cos ( angle . toDouble ()) ĊĠĠĠĠĠĠĠ Ġval Ġsin Ġ= ĠMath . sin ( angle . toDouble ()) ĊĠĠĠĠĠĠĠ Ġval Ġtemp A Ġ= Ġx ĊĠĠĠĠĠĠĠ Ġval Ġtemp B Ġ= Ġy ĊĠĠĠĠĠĠĠ Ġx Ġ= Ġ( temp A Ġ* Ġcos Ġ- Ġtemp B Ġ* Ġsin ). toFloat () ĊĠĠĠĠĠĠĠ Ġy Ġ= Ġ( temp B Ġ* Ġcos Ġ+ Ġtemp A Ġ* Ġsin ). toFloat () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠrotateY ( angle : ĠFloat ) Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( angle Ġ== Ġ 0 f Ġ|| Ġangle Ġ% ĠT AU Ġ== Ġ 0 . 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġcos Ġ= ĠMath . cos ( angle . toDouble ()) ĊĠĠĠĠĠĠĠ Ġval Ġsin Ġ= ĠMath . sin ( angle . toDouble ()) ĊĠĠĠĠĠĠĠ Ġval Ġtemp A Ġ= Ġx ĊĠĠĠĠĠĠĠ Ġval Ġtemp B Ġ= Ġz ĊĠĠĠĠĠĠĠ Ġx Ġ= Ġ( temp A Ġ* Ġcos Ġ- Ġtemp B Ġ* Ġsin ). toFloat () ĊĠĠĠĠĠĠĠ Ġz Ġ= Ġ( temp B Ġ* Ġcos Ġ+ Ġtemp A Ġ* Ġsin ). toFloat () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠrotateX ( angle : ĠFloat ) Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( angle Ġ== Ġ 0 f Ġ|| Ġangle Ġ% ĠT AU Ġ== Ġ 0 . 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġcos Ġ= ĠMath . cos ( angle . toDouble ()) ĊĠĠĠĠĠĠĠ Ġval Ġsin Ġ= ĠMath . sin ( angle . toDouble ()) ĊĠĠĠĠĠĠĠ Ġval Ġtemp A Ġ= Ġy ĊĠĠĠĠĠĠĠ Ġval Ġtemp B Ġ= Ġz ĊĠĠĠĠĠĠĠ Ġy Ġ= Ġ( temp A Ġ* Ġcos Ġ- Ġtemp B Ġ* Ġsin ). toFloat () ĊĠĠĠĠĠĠĠ Ġz Ġ= Ġ( temp B Ġ* Ġcos Ġ+ Ġtemp A Ġ* Ġsin ). toFloat () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġis Same ( pos : ĠVector ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġx Ġ== Ġpos . x Ġ&& Ġy Ġ== Ġpos . y Ġ&& Ġz Ġ== Ġpos . z ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd ( pos : ĠVector ) Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠ Ġadd ( pos . x , Ġpos . y , Ġpos . z ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd ( x : ĠFloat Ġ= Ġ 0 f , Ġy : ĠFloat Ġ= Ġ 0 f , Ġz : ĠFloat Ġ= Ġ 0 f ) Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . x Ġ+= Ġx ĊĠĠĠĠĠĠĠ Ġthis . y Ġ+= Ġy ĊĠĠĠĠĠĠĠ Ġthis . z Ġ+= Ġz ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsubtract ( pos : ĠVector ) Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠ Ġsubtract ( pos . x , Ġpos . y , Ġpos . z ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsubtract ( x : ĠFloat Ġ= Ġ 0 f , Ġy : ĠFloat Ġ= Ġ 0 f , Ġz : ĠFloat Ġ= Ġ 0 f ) Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . x Ġ-= Ġx ĊĠĠĠĠĠĠĠ Ġthis . y Ġ-= Ġy ĊĠĠĠĠĠĠĠ Ġthis . z Ġ-= Ġz ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġmultiply ( pos : ĠVector ) Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠ Ġmultiply ( pos . x , Ġpos . y , Ġpos . z ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġmultiply ( x : ĠFloat Ġ= Ġ 1 f , Ġy : ĠFloat Ġ= Ġ 1 f , Ġz : ĠFloat Ġ= Ġ 1 f ) Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . x Ġ*= Ġx ĊĠĠĠĠĠĠĠ Ġthis . y Ġ*= Ġy ĊĠĠĠĠĠĠĠ Ġthis . z Ġ*= Ġz ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġmultiply ( pos : ĠFloat ) Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠ Ġx Ġ*= Ġpos ĊĠĠĠĠĠĠĠ Ġy Ġ*= Ġpos ĊĠĠĠĠĠĠĠ Ġz Ġ*= Ġpos ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtransform ( translation : ĠVector , Ġrotation : ĠVector , Ġscale : ĠVector ) Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠ Ġmultiply ( scale ) ĊĠĠĠĠĠĠĠ Ġrotate ( rotation ) ĊĠĠĠĠĠĠĠ Ġadd ( translation ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġl erp ( pos : ĠVector , Ġalpha : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġl erp ( pos . x , Ġpos . y , Ġpos . z , Ġalpha ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġl erp ( x : ĠFloat Ġ= Ġ 0 f , Ġy : ĠFloat Ġ= Ġ 0 f , Ġz : ĠFloat Ġ= Ġ 0 f , Ġalpha : ĠFloat ) Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . x Ġ= Ġl erp ( this . x , Ġx , Ġalpha ) ĊĠĠĠĠĠĠĠ Ġthis . y Ġ= Ġl erp ( this . y , Ġy , Ġalpha ) ĊĠĠĠĠĠĠĠ Ġthis . z Ġ= Ġl erp ( this . z , Ġz , Ġalpha ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġmagnitude (): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmagnitude Sqrt ( x Ġ* Ġx Ġ+ Ġy Ġ* Ġy Ġ+ Ġz Ġ* Ġz ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġmagnitude 2 d (): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmagnitude Sqrt ( x Ġ* Ġx Ġ+ Ġy Ġ* Ġy ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġto 2 d (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ" ($ x , Ġ$ y )" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġto 3 d (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ" ($ x , Ġ$ y , Ġ$ z )" ĊĠĠĠ Ġ} Ċ }