module Rattletrap.Attribute.Pickup where

import Rattletrap.Primitive

import qualified Data.Binary.Bits.Get as BinaryBit
import qualified Data.Binary.Bits.Put as BinaryBit

data PickupAttribute = PickupAttribute
  { pickupAttributeInstigatorId :: Maybe Word32
  , pickupAttributePickedUp :: Bool
  } deriving (Eq, Ord, Show)

getPickupAttribute :: BinaryBit.BitGet PickupAttribute
getPickupAttribute = do
  instigator <- BinaryBit.getBool
  maybeInstigatorId <-
    if instigator
      then do
        instigatorId <- getWord32Bits
        pure (Just instigatorId)
      else pure Nothing
  pickedUp <- BinaryBit.getBool
  pure (PickupAttribute maybeInstigatorId pickedUp)

putPickupAttribute :: PickupAttribute -> BinaryBit.BitPut ()
putPickupAttribute pickupAttribute = do
  case pickupAttributeInstigatorId pickupAttribute of
    Nothing -> BinaryBit.putBool False
    Just instigatorId -> do
      BinaryBit.putBool True
      putWord32Bits instigatorId
  BinaryBit.putBool (pickupAttributePickedUp pickupAttribute)