rattletrap-2.2.2: library/Rattletrap/Attribute/Loadout.hs
module Rattletrap.Attribute.Loadout where
import Rattletrap.Primitive
import qualified Data.Binary.Bits.Get as BinaryBit
import qualified Data.Binary.Bits.Put as BinaryBit
data LoadoutAttribute = LoadoutAttribute
{ loadoutAttributeVersion :: Word8
, loadoutAttributeBody :: Word32
, loadoutAttributeDecal :: Word32
, loadoutAttributeWheels :: Word32
, loadoutAttributeRocketTrail :: Word32
, loadoutAttributeAntenna :: Word32
, loadoutAttributeTopper :: Word32
, loadoutAttributeUnknown1 :: Word32
, loadoutAttributeUnknown2 :: Maybe Word32
} deriving (Eq, Ord, Show)
getLoadoutAttribute :: BinaryBit.BitGet LoadoutAttribute
getLoadoutAttribute = do
version <- getWord8Bits
body <- getWord32Bits
decal <- getWord32Bits
wheels <- getWord32Bits
rocketTrail <- getWord32Bits
antenna <- getWord32Bits
topper <- getWord32Bits
g <- getWord32Bits
h <-
if version > Word8 10
then do
h <- getWord32Bits
pure (Just h)
else pure Nothing
pure
(LoadoutAttribute version body decal wheels rocketTrail antenna topper g h)
putLoadoutAttribute :: LoadoutAttribute -> BinaryBit.BitPut ()
putLoadoutAttribute loadoutAttribute = do
putWord8Bits (loadoutAttributeVersion loadoutAttribute)
putWord32Bits (loadoutAttributeBody loadoutAttribute)
putWord32Bits (loadoutAttributeDecal loadoutAttribute)
putWord32Bits (loadoutAttributeWheels loadoutAttribute)
putWord32Bits (loadoutAttributeRocketTrail loadoutAttribute)
putWord32Bits (loadoutAttributeAntenna loadoutAttribute)
putWord32Bits (loadoutAttributeTopper loadoutAttribute)
putWord32Bits (loadoutAttributeUnknown1 loadoutAttribute)
case loadoutAttributeUnknown2 loadoutAttribute of
Nothing -> pure ()
Just x -> putWord32Bits x