rattletrap-9.3.2: src/lib/Rattletrap/Decode/ReplicationValue.hs
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