module Rattletrap.Decode.Initialization
  ( decodeInitializationBits
  )
where

import Rattletrap.Decode.Common
import Rattletrap.Decode.Int8Vector
import Rattletrap.Decode.Vector
import Rattletrap.Type.Initialization

decodeInitializationBits
  :: (Int, Int, Int) -> Bool -> Bool -> DecodeBits Initialization
decodeInitializationBits :: (Int, Int, Int) -> Bool -> Bool -> DecodeBits Initialization
decodeInitializationBits (Int, Int, Int)
version Bool
hasLocation Bool
hasRotation =
  Maybe Vector -> Maybe Int8Vector -> Initialization
Initialization
    (Maybe Vector -> Maybe Int8Vector -> Initialization)
-> BitGet (Maybe Vector)
-> BitGet (Maybe Int8Vector -> Initialization)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Bool -> BitGet Vector -> BitGet (Maybe Vector)
forall (m :: * -> *) (f :: * -> *) a.
(Applicative m, Alternative f) =>
Bool -> m a -> m (f a)
decodeWhen Bool
hasLocation ((Int, Int, Int) -> BitGet Vector
decodeVectorBits (Int, Int, Int)
version)
    BitGet (Maybe Int8Vector -> Initialization)
-> BitGet (Maybe Int8Vector) -> DecodeBits Initialization
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Bool -> BitGet Int8Vector -> BitGet (Maybe Int8Vector)
forall (m :: * -> *) (f :: * -> *) a.
(Applicative m, Alternative f) =>
Bool -> m a -> m (f a)
decodeWhen Bool
hasRotation BitGet Int8Vector
decodeInt8VectorBits