module Rattletrap.Encode.ProductAttribute ( putProductAttributes , putProductAttribute ) where import Data.Semigroup ((<>)) import Rattletrap.Encode.CompressedWord import Rattletrap.Encode.Word32le import Rattletrap.Encode.Word8le import Rattletrap.Type.ProductAttribute import Rattletrap.Type.Str import Rattletrap.Type.Word8le import qualified Data.Binary.Bits.Put as BinaryBits putProductAttributes :: [ProductAttribute] -> BinaryBits.BitPut () putProductAttributes attributes = do putWord8Bits (Word8le (fromIntegral (length attributes))) mapM_ putProductAttribute attributes putProductAttribute :: ProductAttribute -> BinaryBits.BitPut () putProductAttribute attribute = do BinaryBits.putBool (productAttributeUnknown attribute) putWord32Bits (productAttributeObjectId attribute) case productAttributeObjectName attribute of Just name -> case fromStr name of "TAGame.ProductAttribute_Painted_TA" -> case productAttributeValue attribute of Nothing -> pure () Just (Left x) -> putCompressedWord x Just (Right x) -> BinaryBits.putWord32be 31 x "TAGame.ProductAttribute_UserColor_TA" -> case productAttributeValue attribute of Nothing -> BinaryBits.putBool False Just value -> do BinaryBits.putBool True case value of Left x -> putCompressedWord x Right x -> BinaryBits.putWord32be 31 x _ -> fail ("unknown object name for product attribute " <> show attribute) Nothing -> fail ("missing object name for product attribute " <> show attribute)