rattletrap-2.0.0: source/library/Rattletrap/Initialization.hs
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
-- ^ Not every class has an initial location. See
-- 'Rattletrap.Data.rawClassesWithLocation'.
, initializationRotation :: Maybe Int8Vector
-- ^ Only classes with location can have rotation, but not every one does.
-- See 'Rattletrap.Data.rawClassesWithRotation'.
} 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