rattletrap-9.0.3: source/library/Rattletrap/Decode/Vector.hs
module Rattletrap.Decode.Vector
( decodeVectorBits
)
where
import Rattletrap.Decode.Common
import Rattletrap.Decode.CompressedWord
import Rattletrap.Type.CompressedWord
import Rattletrap.Type.Vector
decodeVectorBits :: (Int, Int, Int) -> DecodeBits Vector
decodeVectorBits version = do
size <- decodeCompressedWordBits (if version >= (868, 22, 7) then 21 else 19)
let
limit = getLimit size
bias = getBias size
Vector size bias
<$> fmap (fromDelta bias) (decodeCompressedWordBits limit)
<*> fmap (fromDelta bias) (decodeCompressedWordBits limit)
<*> fmap (fromDelta bias) (decodeCompressedWordBits limit)
getLimit :: CompressedWord -> Word
getLimit = (2 ^) . (+ 2) . compressedWordValue
getBias :: CompressedWord -> Word
getBias = (2 ^) . (+ 1) . compressedWordValue
fromDelta :: Word -> CompressedWord -> Int
fromDelta bias x = fromIntegral (compressedWordValue x) - fromIntegral bias