module Rattletrap.Type.Attribute.AppliedDamage 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.U8 as U8
import qualified Rattletrap.Type.Vector as Vector
import qualified Rattletrap.Type.Version as Version
import qualified Rattletrap.Utility.Json as Json

data AppliedDamage = AppliedDamage
  { AppliedDamage -> U8
unknown1 :: U8.U8
  , AppliedDamage -> Vector
location :: Vector.Vector
  , AppliedDamage -> I32
unknown3 :: I32.I32
  , AppliedDamage -> I32
unknown4 :: I32.I32
  }
  deriving (AppliedDamage -> AppliedDamage -> Bool
(AppliedDamage -> AppliedDamage -> Bool)
-> (AppliedDamage -> AppliedDamage -> Bool) -> Eq AppliedDamage
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: AppliedDamage -> AppliedDamage -> Bool
$c/= :: AppliedDamage -> AppliedDamage -> Bool
== :: AppliedDamage -> AppliedDamage -> Bool
$c== :: AppliedDamage -> AppliedDamage -> Bool
Eq, Int -> AppliedDamage -> ShowS
[AppliedDamage] -> ShowS
AppliedDamage -> String
(Int -> AppliedDamage -> ShowS)
-> (AppliedDamage -> String)
-> ([AppliedDamage] -> ShowS)
-> Show AppliedDamage
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [AppliedDamage] -> ShowS
$cshowList :: [AppliedDamage] -> ShowS
show :: AppliedDamage -> String
$cshow :: AppliedDamage -> String
showsPrec :: Int -> AppliedDamage -> ShowS
$cshowsPrec :: Int -> AppliedDamage -> ShowS
Show)

instance Json.FromJSON AppliedDamage where
  parseJSON :: Value -> Parser AppliedDamage
parseJSON = String
-> (Object -> Parser AppliedDamage)
-> Value
-> Parser AppliedDamage
forall a. String -> (Object -> Parser a) -> Value -> Parser a
Json.withObject String
"AppliedDamage" ((Object -> Parser AppliedDamage) -> Value -> Parser AppliedDamage)
-> (Object -> Parser AppliedDamage)
-> Value
-> Parser AppliedDamage
forall a b. (a -> b) -> a -> b
$ \Object
object -> do
    U8
unknown1 <- Object -> String -> Parser U8
forall value. FromJSON value => Object -> String -> Parser value
Json.required Object
object String
"unknown1"
    Vector
location <- Object -> String -> Parser Vector
forall value. FromJSON value => Object -> String -> Parser value
Json.required Object
object String
"location"
    I32
unknown3 <- Object -> String -> Parser I32
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"
    AppliedDamage -> Parser AppliedDamage
forall (f :: * -> *) a. Applicative f => a -> f a
pure AppliedDamage :: U8 -> Vector -> I32 -> I32 -> AppliedDamage
AppliedDamage { U8
unknown1 :: U8
unknown1 :: U8
unknown1, Vector
location :: Vector
location :: Vector
location, I32
unknown3 :: I32
unknown3 :: I32
unknown3, I32
unknown4 :: I32
unknown4 :: I32
unknown4 }

instance Json.ToJSON AppliedDamage where
  toJSON :: AppliedDamage -> Value
toJSON AppliedDamage
x = [Pair] -> Value
Json.object
    [ String -> U8 -> Pair
forall value pair.
(ToJSON value, KeyValue pair) =>
String -> value -> pair
Json.pair String
"unknown1" (U8 -> Pair) -> U8 -> Pair
forall a b. (a -> b) -> a -> b
$ AppliedDamage -> U8
unknown1 AppliedDamage
x
    , String -> Vector -> Pair
forall value pair.
(ToJSON value, KeyValue pair) =>
String -> value -> pair
Json.pair String
"location" (Vector -> Pair) -> Vector -> Pair
forall a b. (a -> b) -> a -> b
$ AppliedDamage -> Vector
location AppliedDamage
x
    , String -> I32 -> Pair
forall value pair.
(ToJSON value, KeyValue pair) =>
String -> value -> pair
Json.pair String
"unknown3" (I32 -> Pair) -> I32 -> Pair
forall a b. (a -> b) -> a -> b
$ AppliedDamage -> I32
unknown3 AppliedDamage
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
$ AppliedDamage -> I32
unknown4 AppliedDamage
x
    ]

schema :: Schema.Schema
schema :: Schema
schema = String -> Value -> Schema
Schema.named String
"attribute-applied-damage" (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
U8.schema, Bool
True)
  , (String -> Value -> Pair
forall value pair.
(ToJSON value, KeyValue pair) =>
String -> value -> pair
Json.pair String
"location" (Value -> Pair) -> Value -> Pair
forall a b. (a -> b) -> a -> b
$ Schema -> Value
Schema.ref Schema
Vector.schema, 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
I32.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)
  ]

bitPut :: AppliedDamage -> BitPut.BitPut
bitPut :: AppliedDamage -> BitPut
bitPut AppliedDamage
appliedDamageAttribute =
  U8 -> BitPut
U8.bitPut (AppliedDamage -> U8
unknown1 AppliedDamage
appliedDamageAttribute)
    BitPut -> BitPut -> BitPut
forall a. Semigroup a => a -> a -> a
<> Vector -> BitPut
Vector.bitPut (AppliedDamage -> Vector
location AppliedDamage
appliedDamageAttribute)
    BitPut -> BitPut -> BitPut
forall a. Semigroup a => a -> a -> a
<> I32 -> BitPut
I32.bitPut (AppliedDamage -> I32
unknown3 AppliedDamage
appliedDamageAttribute)
    BitPut -> BitPut -> BitPut
forall a. Semigroup a => a -> a -> a
<> I32 -> BitPut
I32.bitPut (AppliedDamage -> I32
unknown4 AppliedDamage
appliedDamageAttribute)

bitGet :: Version.Version -> BitGet.BitGet AppliedDamage
bitGet :: Version -> BitGet AppliedDamage
bitGet Version
version = String -> BitGet AppliedDamage -> BitGet AppliedDamage
forall a. String -> BitGet a -> BitGet a
BitGet.label String
"AppliedDamage" (BitGet AppliedDamage -> BitGet AppliedDamage)
-> BitGet AppliedDamage -> BitGet AppliedDamage
forall a b. (a -> b) -> a -> b
$ do
  U8
unknown1 <- String -> BitGet U8 -> BitGet U8
forall a. String -> BitGet a -> BitGet a
BitGet.label String
"unknown1" BitGet U8
U8.bitGet
  Vector
location <- String -> BitGet Vector -> BitGet Vector
forall a. String -> BitGet a -> BitGet a
BitGet.label String
"location" (BitGet Vector -> BitGet Vector) -> BitGet Vector -> BitGet Vector
forall a b. (a -> b) -> a -> b
$ Version -> BitGet Vector
Vector.bitGet Version
version
  I32
unknown3 <- String -> BitGet I32 -> BitGet I32
forall a. String -> BitGet a -> BitGet a
BitGet.label String
"unknown3" BitGet I32
I32.bitGet
  I32
unknown4 <- String -> BitGet I32 -> BitGet I32
forall a. String -> BitGet a -> BitGet a
BitGet.label String
"unknown4" BitGet I32
I32.bitGet
  AppliedDamage -> BitGet AppliedDamage
forall (f :: * -> *) a. Applicative f => a -> f a
pure AppliedDamage :: U8 -> Vector -> I32 -> I32 -> AppliedDamage
AppliedDamage { U8
unknown1 :: U8
unknown1 :: U8
unknown1, Vector
location :: Vector
location :: Vector
location, I32
unknown3 :: I32
unknown3 :: I32
unknown3, I32
unknown4 :: I32
unknown4 :: I32
unknown4 }