module Rattletrap.Initialization where
import Rattletrap.Primitive
import qualified Data.Binary.Bits.Get as BinaryBit
import qualified Data.Binary.Bits.Put as BinaryBit
data Initialization = Initialization
{ initializationLocation :: Maybe Vector
, initializationRotation :: Maybe Int8Vector
} deriving (Eq, Ord, Show)
getInitialization :: Bool -> Bool -> BinaryBit.BitGet Initialization
getInitialization hasLocation hasRotation = do
location <-
if hasLocation
then do
location <- getVector
pure (Just location)
else pure Nothing
rotation <-
if hasRotation
then do
rotation <- getInt8Vector
pure (Just rotation)
else pure Nothing
pure (Initialization location rotation)
putInitialization :: Initialization -> BinaryBit.BitPut ()
putInitialization initialization = do
case initializationLocation initialization of
Nothing -> pure ()
Just location -> putVector location
case initializationRotation initialization of
Nothing -> pure ()
Just rotation -> putInt8Vector rotation