module Rattletrap.Type.Attribute.PickupInfo where

import qualified Rattletrap.BitGet as BitGet
import qualified Rattletrap.BitPut as BitPut
import qualified Rattletrap.Schema as Schema
import qualified Rattletrap.Type.I32 as I32
import qualified Rattletrap.Type.U32 as U32
import qualified Rattletrap.Utility.Json as Json

data PickupInfo = PickupInfo
  { PickupInfo -> Bool
unknown1 :: Bool
  , PickupInfo -> Bool
unknown2 :: Bool
  , PickupInfo -> U32
unknown3 :: U32.U32
  , PickupInfo -> I32
unknown4 :: I32.I32
  , PickupInfo -> I32
unknown5 :: I32.I32
  , PickupInfo -> Bool
unknown6 :: Bool
  , PickupInfo -> Bool
unknown7 :: Bool
  }
  deriving (PickupInfo -> PickupInfo -> Bool
(PickupInfo -> PickupInfo -> Bool)
-> (PickupInfo -> PickupInfo -> Bool) -> Eq PickupInfo
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PickupInfo -> PickupInfo -> Bool
$c/= :: PickupInfo -> PickupInfo -> Bool
== :: PickupInfo -> PickupInfo -> Bool
$c== :: PickupInfo -> PickupInfo -> Bool
Eq, Int -> PickupInfo -> ShowS
[PickupInfo] -> ShowS
PickupInfo -> String
(Int -> PickupInfo -> ShowS)
-> (PickupInfo -> String)
-> ([PickupInfo] -> ShowS)
-> Show PickupInfo
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [PickupInfo] -> ShowS
$cshowList :: [PickupInfo] -> ShowS
show :: PickupInfo -> String
$cshow :: PickupInfo -> String
showsPrec :: Int -> PickupInfo -> ShowS
$cshowsPrec :: Int -> PickupInfo -> ShowS
Show)

instance Json.FromJSON PickupInfo where
  parseJSON :: Value -> Parser PickupInfo
parseJSON = String
-> (Object -> Parser PickupInfo) -> Value -> Parser PickupInfo
forall a. String -> (Object -> Parser a) -> Value -> Parser a
Json.withObject String
"PickupInfo" ((Object -> Parser PickupInfo) -> Value -> Parser PickupInfo)
-> (Object -> Parser PickupInfo) -> Value -> Parser PickupInfo
forall a b. (a -> b) -> a -> b
$ \Object
object -> do
    Bool
unknown1 <- Object -> String -> Parser Bool
forall value. FromJSON value => Object -> String -> Parser value
Json.required Object
object String
"unknown1"
    Bool
unknown2 <- Object -> String -> Parser Bool
forall value. FromJSON value => Object -> String -> Parser value
Json.required Object
object String
"unknown2"
    U32
unknown3 <- Object -> String -> Parser U32
forall value. FromJSON value => Object -> String -> Parser value
Json.required Object
object String
"unknown3"
    I32
unknown4 <- Object -> String -> Parser I32
forall value. FromJSON value => Object -> String -> Parser value
Json.required Object
object String
"unknown4"
    I32
unknown5 <- Object -> String -> Parser I32
forall value. FromJSON value => Object -> String -> Parser value
Json.required Object
object String
"unknown5"
    Bool
unknown6 <- Object -> String -> Parser Bool
forall value. FromJSON value => Object -> String -> Parser value
Json.required Object
object String
"unknown6"
    Bool
unknown7 <- Object -> String -> Parser Bool
forall value. FromJSON value => Object -> String -> Parser value
Json.required Object
object String
"unknown7"
    PickupInfo -> Parser PickupInfo
forall (f :: * -> *) a. Applicative f => a -> f a
pure PickupInfo :: Bool -> Bool -> U32 -> I32 -> I32 -> Bool -> Bool -> PickupInfo
PickupInfo
      { Bool
unknown1 :: Bool
unknown1 :: Bool
unknown1
      , Bool
unknown2 :: Bool
unknown2 :: Bool
unknown2
      , U32
unknown3 :: U32
unknown3 :: U32
unknown3
      , I32
unknown4 :: I32
unknown4 :: I32
unknown4
      , I32
unknown5 :: I32
unknown5 :: I32
unknown5
      , Bool
unknown6 :: Bool
unknown6 :: Bool
unknown6
      , Bool
unknown7 :: Bool
unknown7 :: Bool
unknown7
      }

instance Json.ToJSON PickupInfo where
  toJSON :: PickupInfo -> Value
toJSON PickupInfo
x = [Pair] -> Value
Json.object
    [ String -> Bool -> Pair
forall value pair.
(ToJSON value, KeyValue pair) =>
String -> value -> pair
Json.pair String
"unknown1" (Bool -> Pair) -> Bool -> Pair
forall a b. (a -> b) -> a -> b
$ PickupInfo -> Bool
unknown1 PickupInfo
x
    , String -> Bool -> Pair
forall value pair.
(ToJSON value, KeyValue pair) =>
String -> value -> pair
Json.pair String
"unknown2" (Bool -> Pair) -> Bool -> Pair
forall a b. (a -> b) -> a -> b
$ PickupInfo -> Bool
unknown2 PickupInfo
x
    , String -> U32 -> Pair
forall value pair.
(ToJSON value, KeyValue pair) =>
String -> value -> pair
Json.pair String
"unknown3" (U32 -> Pair) -> U32 -> Pair
forall a b. (a -> b) -> a -> b
$ PickupInfo -> U32
unknown3 PickupInfo
x
    , String -> I32 -> Pair
forall value pair.
(ToJSON value, KeyValue pair) =>
String -> value -> pair
Json.pair String
"unknown4" (I32 -> Pair) -> I32 -> Pair
forall a b. (a -> b) -> a -> b
$ PickupInfo -> I32
unknown4 PickupInfo
x
    , String -> I32 -> Pair
forall value pair.
(ToJSON value, KeyValue pair) =>
String -> value -> pair
Json.pair String
"unknown5" (I32 -> Pair) -> I32 -> Pair
forall a b. (a -> b) -> a -> b
$ PickupInfo -> I32
unknown5 PickupInfo
x
    , String -> Bool -> Pair
forall value pair.
(ToJSON value, KeyValue pair) =>
String -> value -> pair
Json.pair String
"unknown6" (Bool -> Pair) -> Bool -> Pair
forall a b. (a -> b) -> a -> b
$ PickupInfo -> Bool
unknown6 PickupInfo
x
    , String -> Bool -> Pair
forall value pair.
(ToJSON value, KeyValue pair) =>
String -> value -> pair
Json.pair String
"unknown7" (Bool -> Pair) -> Bool -> Pair
forall a b. (a -> b) -> a -> b
$ PickupInfo -> Bool
unknown7 PickupInfo
x
    ]

schema :: Schema.Schema
schema :: Schema
schema = String -> Value -> Schema
Schema.named String
"pickup-info" (Value -> Schema) -> Value -> Schema
forall a b. (a -> b) -> a -> b
$ [(Pair, Bool)] -> Value
Schema.object
  [ (String -> Value -> Pair
forall value pair.
(ToJSON value, KeyValue pair) =>
String -> value -> pair
Json.pair String
"unknown1" (Value -> Pair) -> Value -> Pair
forall a b. (a -> b) -> a -> b
$ Schema -> Value
Schema.ref Schema
Schema.boolean, Bool
True)
  , (String -> Value -> Pair
forall value pair.
(ToJSON value, KeyValue pair) =>
String -> value -> pair
Json.pair String
"unknown2" (Value -> Pair) -> Value -> Pair
forall a b. (a -> b) -> a -> b
$ Schema -> Value
Schema.ref Schema
Schema.boolean, Bool
True)
  , (String -> Value -> Pair
forall value pair.
(ToJSON value, KeyValue pair) =>
String -> value -> pair
Json.pair String
"unknown3" (Value -> Pair) -> Value -> Pair
forall a b. (a -> b) -> a -> b
$ Schema -> Value
Schema.ref Schema
U32.schema, Bool
True)
  , (String -> Value -> Pair
forall value pair.
(ToJSON value, KeyValue pair) =>
String -> value -> pair
Json.pair String
"unknown4" (Value -> Pair) -> Value -> Pair
forall a b. (a -> b) -> a -> b
$ Schema -> Value
Schema.ref Schema
I32.schema, Bool
True)
  , (String -> Value -> Pair
forall value pair.
(ToJSON value, KeyValue pair) =>
String -> value -> pair
Json.pair String
"unknown5" (Value -> Pair) -> Value -> Pair
forall a b. (a -> b) -> a -> b
$ Schema -> Value
Schema.ref Schema
I32.schema, Bool
True)
  , (String -> Value -> Pair
forall value pair.
(ToJSON value, KeyValue pair) =>
String -> value -> pair
Json.pair String
"unknown6" (Value -> Pair) -> Value -> Pair
forall a b. (a -> b) -> a -> b
$ Schema -> Value
Schema.ref Schema
Schema.boolean, Bool
True)
  , (String -> Value -> Pair
forall value pair.
(ToJSON value, KeyValue pair) =>
String -> value -> pair
Json.pair String
"unknown7" (Value -> Pair) -> Value -> Pair
forall a b. (a -> b) -> a -> b
$ Schema -> Value
Schema.ref Schema
Schema.boolean, Bool
True)
  ]

bitPut :: PickupInfo -> BitPut.BitPut
bitPut :: PickupInfo -> BitPut
bitPut PickupInfo
x =
  Bool -> BitPut
BitPut.bool (PickupInfo -> Bool
unknown1 PickupInfo
x)
    BitPut -> BitPut -> BitPut
forall a. Semigroup a => a -> a -> a
<> Bool -> BitPut
BitPut.bool (PickupInfo -> Bool
unknown2 PickupInfo
x)
    BitPut -> BitPut -> BitPut
forall a. Semigroup a => a -> a -> a
<> U32 -> BitPut
U32.bitPut (PickupInfo -> U32
unknown3 PickupInfo
x)
    BitPut -> BitPut -> BitPut
forall a. Semigroup a => a -> a -> a
<> I32 -> BitPut
I32.bitPut (PickupInfo -> I32
unknown4 PickupInfo
x)
    BitPut -> BitPut -> BitPut
forall a. Semigroup a => a -> a -> a
<> I32 -> BitPut
I32.bitPut (PickupInfo -> I32
unknown5 PickupInfo
x)
    BitPut -> BitPut -> BitPut
forall a. Semigroup a => a -> a -> a
<> Bool -> BitPut
BitPut.bool (PickupInfo -> Bool
unknown6 PickupInfo
x)
    BitPut -> BitPut -> BitPut
forall a. Semigroup a => a -> a -> a
<> Bool -> BitPut
BitPut.bool (PickupInfo -> Bool
unknown7 PickupInfo
x)

bitGet :: BitGet.BitGet PickupInfo
bitGet :: BitGet PickupInfo
bitGet = String -> BitGet PickupInfo -> BitGet PickupInfo
forall a. String -> BitGet a -> BitGet a
BitGet.label String
"PickupInfo" (BitGet PickupInfo -> BitGet PickupInfo)
-> BitGet PickupInfo -> BitGet PickupInfo
forall a b. (a -> b) -> a -> b
$ do
  Bool
unknown1 <- String -> BitGet Bool -> BitGet Bool
forall a. String -> BitGet a -> BitGet a
BitGet.label String
"unknown1" BitGet Bool
BitGet.bool
  Bool
unknown2 <- String -> BitGet Bool -> BitGet Bool
forall a. String -> BitGet a -> BitGet a
BitGet.label String
"unknown2" BitGet Bool
BitGet.bool
  U32
unknown3 <- String -> BitGet U32 -> BitGet U32
forall a. String -> BitGet a -> BitGet a
BitGet.label String
"unknown3" BitGet U32
U32.bitGet
  I32
unknown4 <- String -> BitGet I32 -> BitGet I32
forall a. String -> BitGet a -> BitGet a
BitGet.label String
"unknown4" BitGet I32
I32.bitGet
  I32
unknown5 <- String -> BitGet I32 -> BitGet I32
forall a. String -> BitGet a -> BitGet a
BitGet.label String
"unknown5" BitGet I32
I32.bitGet
  Bool
unknown6 <- String -> BitGet Bool -> BitGet Bool
forall a. String -> BitGet a -> BitGet a
BitGet.label String
"unknown6" BitGet Bool
BitGet.bool
  Bool
unknown7 <- String -> BitGet Bool -> BitGet Bool
forall a. String -> BitGet a -> BitGet a
BitGet.label String
"unknown7" BitGet Bool
BitGet.bool
  PickupInfo -> BitGet PickupInfo
forall (f :: * -> *) a. Applicative f => a -> f a
pure PickupInfo :: Bool -> Bool -> U32 -> I32 -> I32 -> Bool -> Bool -> PickupInfo
PickupInfo
    { Bool
unknown1 :: Bool
unknown1 :: Bool
unknown1
    , Bool
unknown2 :: Bool
unknown2 :: Bool
unknown2
    , U32
unknown3 :: U32
unknown3 :: U32
unknown3
    , I32
unknown4 :: I32
unknown4 :: I32
unknown4
    , I32
unknown5 :: I32
unknown5 :: I32
unknown5
    , Bool
unknown6 :: Bool
unknown6 :: Bool
unknown6
    , Bool
unknown7 :: Bool
unknown7 :: Bool
unknown7
    }