module Rattletrap.Encode.LoadoutAttribute
  ( putLoadoutAttribute
  )
where

import Rattletrap.Encode.Word32le
import Rattletrap.Encode.Word8le
import Rattletrap.Type.LoadoutAttribute

import qualified Data.Binary.Bits.Put as BinaryBits

putLoadoutAttribute :: LoadoutAttribute -> BinaryBits.BitPut ()
putLoadoutAttribute :: LoadoutAttribute -> BitPut ()
putLoadoutAttribute LoadoutAttribute
loadoutAttribute = do
  Word8le -> BitPut ()
putWord8Bits (LoadoutAttribute -> Word8le
loadoutAttributeVersion LoadoutAttribute
loadoutAttribute)
  Word32le -> BitPut ()
putWord32Bits (LoadoutAttribute -> Word32le
loadoutAttributeBody LoadoutAttribute
loadoutAttribute)
  Word32le -> BitPut ()
putWord32Bits (LoadoutAttribute -> Word32le
loadoutAttributeDecal LoadoutAttribute
loadoutAttribute)
  Word32le -> BitPut ()
putWord32Bits (LoadoutAttribute -> Word32le
loadoutAttributeWheels LoadoutAttribute
loadoutAttribute)
  Word32le -> BitPut ()
putWord32Bits (LoadoutAttribute -> Word32le
loadoutAttributeRocketTrail LoadoutAttribute
loadoutAttribute)
  Word32le -> BitPut ()
putWord32Bits (LoadoutAttribute -> Word32le
loadoutAttributeAntenna LoadoutAttribute
loadoutAttribute)
  Word32le -> BitPut ()
putWord32Bits (LoadoutAttribute -> Word32le
loadoutAttributeTopper LoadoutAttribute
loadoutAttribute)
  Word32le -> BitPut ()
putWord32Bits (LoadoutAttribute -> Word32le
loadoutAttributeUnknown1 LoadoutAttribute
loadoutAttribute)
  Maybe Word32le -> (Word32le -> BitPut ()) -> BitPut ()
forall a. Maybe a -> (a -> BitPut ()) -> BitPut ()
putOptional (LoadoutAttribute -> Maybe Word32le
loadoutAttributeUnknown2 LoadoutAttribute
loadoutAttribute) Word32le -> BitPut ()
putWord32Bits
  Maybe Word32le -> (Word32le -> BitPut ()) -> BitPut ()
forall a. Maybe a -> (a -> BitPut ()) -> BitPut ()
putOptional (LoadoutAttribute -> Maybe Word32le
loadoutAttributeEngineAudio LoadoutAttribute
loadoutAttribute) Word32le -> BitPut ()
putWord32Bits
  Maybe Word32le -> (Word32le -> BitPut ()) -> BitPut ()
forall a. Maybe a -> (a -> BitPut ()) -> BitPut ()
putOptional (LoadoutAttribute -> Maybe Word32le
loadoutAttributeTrail LoadoutAttribute
loadoutAttribute) Word32le -> BitPut ()
putWord32Bits
  Maybe Word32le -> (Word32le -> BitPut ()) -> BitPut ()
forall a. Maybe a -> (a -> BitPut ()) -> BitPut ()
putOptional (LoadoutAttribute -> Maybe Word32le
loadoutAttributeGoalExplosion LoadoutAttribute
loadoutAttribute) Word32le -> BitPut ()
putWord32Bits
  Maybe Word32le -> (Word32le -> BitPut ()) -> BitPut ()
forall a. Maybe a -> (a -> BitPut ()) -> BitPut ()
putOptional (LoadoutAttribute -> Maybe Word32le
loadoutAttributeBanner LoadoutAttribute
loadoutAttribute) Word32le -> BitPut ()
putWord32Bits
  Maybe Word32le -> (Word32le -> BitPut ()) -> BitPut ()
forall a. Maybe a -> (a -> BitPut ()) -> BitPut ()
putOptional (LoadoutAttribute -> Maybe Word32le
loadoutAttributeUnknown3 LoadoutAttribute
loadoutAttribute) Word32le -> BitPut ()
putWord32Bits
  Maybe Word32le -> (Word32le -> BitPut ()) -> BitPut ()
forall a. Maybe a -> (a -> BitPut ()) -> BitPut ()
putOptional (LoadoutAttribute -> Maybe Word32le
loadoutAttributeUnknown4 LoadoutAttribute
loadoutAttribute) Word32le -> BitPut ()
putWord32Bits
  Maybe Word32le -> (Word32le -> BitPut ()) -> BitPut ()
forall a. Maybe a -> (a -> BitPut ()) -> BitPut ()
putOptional (LoadoutAttribute -> Maybe Word32le
loadoutAttributeUnknown5 LoadoutAttribute
loadoutAttribute) Word32le -> BitPut ()
putWord32Bits
  Maybe Word32le -> (Word32le -> BitPut ()) -> BitPut ()
forall a. Maybe a -> (a -> BitPut ()) -> BitPut ()
putOptional (LoadoutAttribute -> Maybe Word32le
loadoutAttributeUnknown6 LoadoutAttribute
loadoutAttribute) Word32le -> BitPut ()
putWord32Bits

putOptional :: Maybe a -> (a -> BinaryBits.BitPut ()) -> BinaryBits.BitPut ()
putOptional :: Maybe a -> (a -> BitPut ()) -> BitPut ()
putOptional Maybe a
m a -> BitPut ()
f = case Maybe a
m of
  Just a
x -> a -> BitPut ()
f a
x
  Maybe a
Nothing -> () -> BitPut ()
forall (f :: * -> *) a. Applicative f => a -> f a
pure ()