module Rattletrap.Encode.RigidBodyStateAttribute
  ( putRigidBodyStateAttribute
  )
where

import Rattletrap.Encode.Rotation
import Rattletrap.Encode.Vector
import Rattletrap.Type.RigidBodyStateAttribute

import qualified Data.Binary.Bits.Put as BinaryBits

putRigidBodyStateAttribute :: RigidBodyStateAttribute -> BinaryBits.BitPut ()
putRigidBodyStateAttribute :: RigidBodyStateAttribute -> BitPut ()
putRigidBodyStateAttribute RigidBodyStateAttribute
rigidBodyStateAttribute = do
  Bool -> BitPut ()
BinaryBits.putBool (RigidBodyStateAttribute -> Bool
rigidBodyStateAttributeSleeping RigidBodyStateAttribute
rigidBodyStateAttribute)
  Vector -> BitPut ()
putVector (RigidBodyStateAttribute -> Vector
rigidBodyStateAttributeLocation RigidBodyStateAttribute
rigidBodyStateAttribute)
  Rotation -> BitPut ()
putRotation (RigidBodyStateAttribute -> Rotation
rigidBodyStateAttributeRotation RigidBodyStateAttribute
rigidBodyStateAttribute)
  case RigidBodyStateAttribute -> Maybe Vector
rigidBodyStateAttributeLinearVelocity RigidBodyStateAttribute
rigidBodyStateAttribute of
    Maybe Vector
Nothing -> () -> BitPut ()
forall (f :: * -> *) a. Applicative f => a -> f a
pure ()
    Just Vector
linearVelocity -> Vector -> BitPut ()
putVector Vector
linearVelocity
  case RigidBodyStateAttribute -> Maybe Vector
rigidBodyStateAttributeAngularVelocity RigidBodyStateAttribute
rigidBodyStateAttribute of
    Maybe Vector
Nothing -> () -> BitPut ()
forall (f :: * -> *) a. Applicative f => a -> f a
pure ()
    Just Vector
angularVelocity -> Vector -> BitPut ()
putVector Vector
angularVelocity