module Rattletrap.AttributeValue.WeldedInfo where

import Rattletrap.Float32
import Rattletrap.Int32
import Rattletrap.Int8Vector
import Rattletrap.Vector

import qualified Data.Binary.Bits.Get as BinaryBit
import qualified Data.Binary.Bits.Put as BinaryBit

data WeldedInfoAttributeValue = WeldedInfoAttributeValue
  { weldedInfoAttributeValueActive :: Bool
  , weldedInfoAttributeValueActorId :: Int32
  , weldedInfoAttributeValueOffset :: Vector
  , weldedInfoAttributeValueMass :: Float32
  , weldedInfoAttributeValueRotation :: Int8Vector
  } deriving (Eq, Ord, Show)

getWeldedInfoAttributeValue :: BinaryBit.BitGet WeldedInfoAttributeValue
getWeldedInfoAttributeValue = do
  active <- BinaryBit.getBool
  actorId <- getInt32Bits
  offset <- getVector
  mass <- getFloat32Bits
  rotation <- getInt8Vector
  pure (WeldedInfoAttributeValue active actorId offset mass rotation)

putWeldedInfoAttributeValue :: WeldedInfoAttributeValue -> BinaryBit.BitPut ()
putWeldedInfoAttributeValue weldedInfoAttributeValue = do
  BinaryBit.putBool (weldedInfoAttributeValueActive weldedInfoAttributeValue)
  putInt32Bits (weldedInfoAttributeValueActorId weldedInfoAttributeValue)
  putVector (weldedInfoAttributeValueOffset weldedInfoAttributeValue)
  putFloat32Bits (weldedInfoAttributeValueMass weldedInfoAttributeValue)
  putInt8Vector (weldedInfoAttributeValueRotation weldedInfoAttributeValue)