rattletrap-0.1.7: library/Rattletrap/ReplicationValue/Spawned.hs
module Rattletrap.ReplicationValue.Spawned where
import Rattletrap.ActorMap
import Rattletrap.ClassAttributeMap
import Rattletrap.CompressedWord
import Rattletrap.Initialization
import Rattletrap.Text
import Rattletrap.Word32
import qualified Data.Binary.Bits.Get as BinaryBit
import qualified Data.Binary.Bits.Put as BinaryBit
data SpawnedReplicationValue = SpawnedReplicationValue
{ spawnedReplicationValueFlag :: Bool
, spawnedReplicationValueObjectId :: Word32
, spawnedReplicationValue_objectName :: String
, spawnedReplicationValue_className :: String
, spawnedReplicationValueInitialization :: Initialization
} deriving (Eq, Ord, Show)
getSpawnedReplicationValue
:: ClassAttributeMap
-> ActorMap
-> CompressedWord
-> BinaryBit.BitGet (SpawnedReplicationValue, ActorMap)
getSpawnedReplicationValue classAttributeMap actorMap actorId = do
flag <- BinaryBit.getBool
objectId <- getWord32Bits
let newActorMap = updateActorMap actorId objectId actorMap
case getObjectName classAttributeMap objectId of
Nothing -> fail ("could not get object name for id " ++ show objectId)
Just objectName ->
case getClassName objectName of
Nothing ->
fail ("could not get class name for object " ++ show objectName)
Just className -> do
let hasLocation = classHasLocation className
let hasRotation = classHasRotation className
initialization <- getInitialization hasLocation hasRotation
pure
( SpawnedReplicationValue
flag
objectId
(textToString objectName)
(textToString className)
initialization
, newActorMap)
putSpawnedReplicationValue :: SpawnedReplicationValue -> BinaryBit.BitPut ()
putSpawnedReplicationValue spawnedReplicationValue = do
BinaryBit.putBool (spawnedReplicationValueFlag spawnedReplicationValue)
putWord32Bits (spawnedReplicationValueObjectId spawnedReplicationValue)
putInitialization
(spawnedReplicationValueInitialization spawnedReplicationValue)