module Rattletrap.Attribute.DamageState where

import Rattletrap.Primitive

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

data DamageStateAttribute = DamageStateAttribute
  { damageStateAttributeUnknown1 :: Word8
  , damageStateAttributeUnknown2 :: Bool
  , damageStateAttributeUnknown3 :: Int32
  , damageStateAttributeUnknown4 :: Vector
  , damageStateAttributeUnknown5 :: Bool
  , damageStateAttributeUnknown6 :: Bool
  } deriving (Eq, Ord, Show)

getDamageStateAttribute :: BinaryBit.BitGet DamageStateAttribute
getDamageStateAttribute = do
  unknown1 <- getWord8Bits
  unknown2 <- BinaryBit.getBool
  unknown3 <- getInt32Bits
  unknown4 <- getVector
  unknown5 <- BinaryBit.getBool
  unknown6 <- BinaryBit.getBool
  pure
    (DamageStateAttribute unknown1 unknown2 unknown3 unknown4 unknown5 unknown6)

putDamageStateAttribute :: DamageStateAttribute -> BinaryBit.BitPut ()
putDamageStateAttribute damageStateAttribute = do
  putWord8Bits (damageStateAttributeUnknown1 damageStateAttribute)
  BinaryBit.putBool (damageStateAttributeUnknown2 damageStateAttribute)
  putInt32Bits (damageStateAttributeUnknown3 damageStateAttribute)
  putVector (damageStateAttributeUnknown4 damageStateAttribute)
  BinaryBit.putBool (damageStateAttributeUnknown5 damageStateAttribute)
  BinaryBit.putBool (damageStateAttributeUnknown6 damageStateAttribute)