module Rattletrap.Decode.ReplicationValue ( decodeReplicationValueBits ) where import Rattletrap.Decode.Common import Rattletrap.Decode.DestroyedReplication import Rattletrap.Decode.SpawnedReplication import Rattletrap.Decode.UpdatedReplication import Rattletrap.Type.ClassAttributeMap import Rattletrap.Type.CompressedWord import Rattletrap.Type.ReplicationValue import Rattletrap.Type.Word32le import qualified Control.Monad.Trans.Class as Trans import qualified Control.Monad.Trans.State as State import qualified Data.Map as Map decodeReplicationValueBits :: (Int, Int, Int) -> ClassAttributeMap -> CompressedWord -> State.StateT (Map.Map CompressedWord Word32le) DecodeBits ReplicationValue decodeReplicationValueBits version classAttributeMap actorId = do actorMap <- State.get isOpen <- Trans.lift getBool if isOpen then do isNew <- Trans.lift getBool if isNew then ReplicationValueSpawned <$> decodeSpawnedReplicationBits version classAttributeMap actorId else ReplicationValueUpdated <$> Trans.lift (decodeUpdatedReplicationBits version classAttributeMap actorMap actorId ) else ReplicationValueDestroyed <$> Trans.lift decodeDestroyedReplicationBits