rattletrap-0.1.0: library/Rattletrap/Vector.hs
module Rattletrap.Vector where
import Rattletrap.CompressedWord
import qualified Data.Binary.Bits.Get as BinaryBit
import qualified Data.Binary.Bits.Put as BinaryBit
data Vector = Vector
{ vectorBitSize :: CompressedWord
, vectorDx :: CompressedWord
, vectorDy :: CompressedWord
, vectorDz :: CompressedWord
} deriving (Eq, Ord, Show)
getVector :: BinaryBit.BitGet Vector
getVector = do
bitSize <- getCompressedWord 19
let limit = 2 ^ (compressedWordValue bitSize + 2)
dx <- getCompressedWord limit
dy <- getCompressedWord limit
dz <- getCompressedWord limit
pure
Vector
{vectorBitSize = bitSize, vectorDx = dx, vectorDy = dy, vectorDz = dz}
putVector :: Vector -> BinaryBit.BitPut ()
putVector vector = do
putCompressedWord (vectorBitSize vector)
putCompressedWord (vectorDx vector)
putCompressedWord (vectorDy vector)
putCompressedWord (vectorDz vector)