rattletrap-0.1.0: library/Rattletrap/ReplicationValue.hs
module Rattletrap.ReplicationValue
( module Rattletrap.ReplicationValue
, module Export
) where
import Rattletrap.ReplicationValue.Destroyed as Export
import Rattletrap.ReplicationValue.Spawned as Export
import Rattletrap.ReplicationValue.Updated as Export
import Rattletrap.ActorMap
import Rattletrap.ClassAttributeMap
import Rattletrap.CompressedWord
import qualified Data.Binary.Bits.Get as BinaryBit
import qualified Data.Binary.Bits.Put as BinaryBit
data ReplicationValue
= SpawnedReplication SpawnedReplicationValue
| UpdatedReplication UpdatedReplicationValue
| DestroyedReplication DestroyedReplicationValue
deriving (Eq, Ord, Show)
getReplicationValue
:: (Int, Int)
-> ClassAttributeMap
-> ActorMap
-> CompressedWord
-> BinaryBit.BitGet (ReplicationValue, ActorMap)
getReplicationValue version classAttributeMap actorMap actorId = do
isOpen <- BinaryBit.getBool
if isOpen
then do
isNew <- BinaryBit.getBool
if isNew
then do
(x, newActorMap) <-
getSpawnedReplicationValue classAttributeMap actorMap actorId
pure (SpawnedReplication x, newActorMap)
else do
x <-
getUpdatedReplicationValue
version
classAttributeMap
actorMap
actorId
pure (UpdatedReplication x, actorMap)
else do
x <- getDestroyedReplicationValue
pure (DestroyedReplication x, actorMap)
putReplicationValue :: ReplicationValue -> BinaryBit.BitPut ()
putReplicationValue value =
case value of
SpawnedReplication x -> do
BinaryBit.putBool True
BinaryBit.putBool True
putSpawnedReplicationValue x
UpdatedReplication x -> do
BinaryBit.putBool True
BinaryBit.putBool False
putUpdatedReplicationValue x
DestroyedReplication x -> do
BinaryBit.putBool False
putDestroyedReplicationValue x