rattletrap-2.0.0: source/library/Rattletrap/Attribute/PartyLeader.hs
module Rattletrap.Attribute.PartyLeader where
import Rattletrap.Primitive
import Rattletrap.RemoteId
import qualified Data.Binary.Bits.Get as BinaryBit
import qualified Data.Binary.Bits.Put as BinaryBit
data PartyLeaderAttribute = PartyLeaderAttribute
{ partyLeaderAttributeSystemId :: Word8
, partyLeaderAttributeId :: Maybe (RemoteId, Word8)
} deriving (Eq, Ord, Show)
getPartyLeaderAttribute :: BinaryBit.BitGet PartyLeaderAttribute
getPartyLeaderAttribute = do
systemId <- getWord8Bits
maybeRemoteAndLocalId <-
if systemId == Word8 0
then pure Nothing
else do
remoteId <- getRemoteId systemId
localId <- getWord8Bits
pure (Just (remoteId, localId))
pure (PartyLeaderAttribute systemId maybeRemoteAndLocalId)
putPartyLeaderAttribute :: PartyLeaderAttribute -> BinaryBit.BitPut ()
putPartyLeaderAttribute partyLeaderAttribute = do
putWord8Bits (partyLeaderAttributeSystemId partyLeaderAttribute)
case partyLeaderAttributeId partyLeaderAttribute of
Nothing -> pure ()
Just (remoteId, localId) -> do
putRemoteId remoteId
putWord8Bits localId