rattletrap-0.2.0: library/Rattletrap/ReplicationValue.hs
module Rattletrap.ReplicationValue
( module Rattletrap.ReplicationValue
, module Rattletrap.ReplicationValue.Destroyed
, module Rattletrap.ReplicationValue.Spawned
, module Rattletrap.ReplicationValue.Updated
) where
import Rattletrap.ActorMap
import Rattletrap.ClassAttributeMap
import Rattletrap.CompressedWord
import Rattletrap.ReplicationValue.Destroyed
import Rattletrap.ReplicationValue.Spawned
import Rattletrap.ReplicationValue.Updated
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