package Ġcom . x 7 ff . parser . replay čĊč Ċ import Ġcom . x 7 ff . parser . buffer . Bit Buffer čĊč Ċ data Ġclass ĠRotation Quaternion ( čĊĠĠĠ Ġval Ġx : ĠFloat , čĊĠĠĠ Ġval Ġy : ĠFloat , čĊĠĠĠ Ġval Ġz : ĠFloat , čĊĠĠĠ Ġval Ġw : ĠFloat č Ċ ): ĠVector Ġ{ čĊĠĠĠ Ġoverride Ġfun Ġx () Ġ= Ġx čĊĠĠĠ Ġoverride Ġfun Ġy () Ġ= Ġy čĊĠĠĠ Ġoverride Ġfun Ġz () Ġ= Ġz čĊčĊĠĠĠ Ġenum Ġclass ĠComponent Ġ{ čĊĠĠĠĠĠĠĠ ĠX , ĠY , ĠZ , ĠW čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġcompanion Ġobject Ġ{ čĊĠĠĠĠĠĠĠ Ġconst Ġval Ġnum Bits Ġ= Ġ 1 8 čĊĠĠĠĠĠĠĠ Ġconst Ġval Ġmax Quaternion Value Ġ= Ġ 0 . 7 0 7 1 0 6 7 8 1 1 8 6 5 4 7 5 2 4 4 f Ġ// Ġ 1 / sqrt ( 2 ) čĊčĊĠĠĠĠĠĠĠ Ġfun ĠBit Buffer . read Rotation Quaternion (): ĠRotation Quaternion Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġget Int From Bits ( 2 ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcomponent Ġ= Ġwhen ( x ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> ĠComponent . X čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> ĠComponent . Y čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> ĠComponent . Z čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 3 Ġ-> ĠComponent . W čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠRuntimeException (" Invalid Ġcomponent : Ġ$ x ") čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO : Ġthese Ġvalues Ġare Ġwrong , Ġneeds Ġfixing čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġa Ġ= Ġget UInt From Bits ( num Bits ). de compress Component () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġb Ġ= Ġget UInt From Bits ( num Bits ). de compress Component () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġc Ġ= Ġget UInt From Bits ( num Bits ). de compress Component () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġd Ġ= ĠMath . sqrt ( 1 . 0 Ġ- Ġ( a Ġ* Ġa ) Ġ- Ġ( b Ġ* Ġb ) Ġ- Ġ( c Ġ* Ġc )). toFloat () čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen ( component ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠComponent . X Ġ-> ĠRotation Quaternion ( d , Ġa , Ġb , Ġc ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠComponent . Y Ġ-> ĠRotation Quaternion ( a , Ġd , Ġb , Ġc ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠComponent . Z Ġ-> ĠRotation Quaternion ( a , Ġb , Ġd , Ġc ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠComponent . W Ġ-> ĠRotation Quaternion ( a , Ġb , Ġc , Ġd ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġprivate Ġfun ĠLong . de compress Component (): ĠFloat Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠmaxValue Ġ= Ġ( 1 Ġshl Ġnum Bits ) Ġ- Ġ 1 čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpositive Range d Value Ġ= Ġthis Ġ/ ĠmaxValue čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrange d Value Ġ= Ġ( positive Range d Value Ġ- Ġ 0 . 5 0 f ) Ġ* Ġ 2 . 0 f čĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġrange d Value Ġ* Ġmax Quaternion Value čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠ Ġ} č Ċ }