rattletrap-0.1.0: library/Rattletrap/AttributeValue/Pickup.hs
module Rattletrap.AttributeValue.Pickup where
import Rattletrap.Word32
import qualified Data.Binary.Bits.Get as BinaryBit
import qualified Data.Binary.Bits.Put as BinaryBit
data PickupAttributeValue = PickupAttributeValue
{ pickupAttributeValueInstigatorId :: Maybe Word32
, pickupAttributeValuePickedUp :: Bool
} deriving (Eq, Ord, Show)
getPickupAttributeValue :: BinaryBit.BitGet PickupAttributeValue
getPickupAttributeValue = do
instigator <- BinaryBit.getBool
maybeInstigatorId <-
if instigator
then do
instigatorId <- getWord32Bits
pure (Just instigatorId)
else pure Nothing
pickedUp <- BinaryBit.getBool
pure (PickupAttributeValue maybeInstigatorId pickedUp)
putPickupAttributeValue :: PickupAttributeValue -> BinaryBit.BitPut ()
putPickupAttributeValue pickupAttributeValue = do
case pickupAttributeValueInstigatorId pickupAttributeValue of
Nothing -> BinaryBit.putBool False
Just instigatorId -> do
BinaryBit.putBool True
putWord32Bits instigatorId
BinaryBit.putBool (pickupAttributeValuePickedUp pickupAttributeValue)