module Rattletrap.ReplicationValue.Updated where

import Rattletrap.ActorMap
import Rattletrap.Attribute
import Rattletrap.ClassAttributeMap
import Rattletrap.CompressedWord

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

data UpdatedReplicationValue = UpdatedReplicationValue
  { updatedReplicationValueAttributes :: [Attribute]
  } deriving (Eq, Ord, Show)

getUpdatedReplicationValue
  :: (Int, Int)
  -> ClassAttributeMap
  -> ActorMap
  -> CompressedWord
  -> BinaryBit.BitGet UpdatedReplicationValue
getUpdatedReplicationValue version classAttributeMap actorMap actorId = do
  attributes <- getAttributes version classAttributeMap actorMap actorId
  pure (UpdatedReplicationValue attributes)

putUpdatedReplicationValue :: UpdatedReplicationValue -> BinaryBit.BitPut ()
putUpdatedReplicationValue updatedReplicationValue =
  putAttributes (updatedReplicationValueAttributes updatedReplicationValue)