module Rattletrap.Type.Attribute.Explosion 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.Vector as Vector import qualified Rattletrap.Type.Version as Version import qualified Rattletrap.Utility.Json as Json data Explosion = Explosion { Explosion -> Bool flag :: Bool, Explosion -> I32 actorId :: I32.I32, Explosion -> Vector location :: Vector.Vector } deriving (Explosion -> Explosion -> Bool forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a /= :: Explosion -> Explosion -> Bool $c/= :: Explosion -> Explosion -> Bool == :: Explosion -> Explosion -> Bool $c== :: Explosion -> Explosion -> Bool Eq, Int -> Explosion -> ShowS [Explosion] -> ShowS Explosion -> String forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a showList :: [Explosion] -> ShowS $cshowList :: [Explosion] -> ShowS show :: Explosion -> String $cshow :: Explosion -> String showsPrec :: Int -> Explosion -> ShowS $cshowsPrec :: Int -> Explosion -> ShowS Show) instance Json.FromJSON Explosion where parseJSON :: Value -> Parser Explosion parseJSON = forall a. String -> (Object -> Parser a) -> Value -> Parser a Json.withObject String "Explosion" forall a b. (a -> b) -> a -> b $ \Object object -> do Bool flag <- forall value. FromJSON value => Object -> String -> Parser value Json.required Object object String "flag" I32 actorId <- forall value. FromJSON value => Object -> String -> Parser value Json.required Object object String "actor_id" Vector location <- forall value. FromJSON value => Object -> String -> Parser value Json.required Object object String "location" forall (f :: * -> *) a. Applicative f => a -> f a pure Explosion {Bool flag :: Bool flag :: Bool flag, I32 actorId :: I32 actorId :: I32 actorId, Vector location :: Vector location :: Vector location} instance Json.ToJSON Explosion where toJSON :: Explosion -> Value toJSON Explosion x = [(Key, Value)] -> Value Json.object [ forall value pair. (ToJSON value, KeyValue pair) => String -> value -> pair Json.pair String "flag" forall a b. (a -> b) -> a -> b $ Explosion -> Bool flag Explosion x, forall value pair. (ToJSON value, KeyValue pair) => String -> value -> pair Json.pair String "actor_id" forall a b. (a -> b) -> a -> b $ Explosion -> I32 actorId Explosion x, forall value pair. (ToJSON value, KeyValue pair) => String -> value -> pair Json.pair String "location" forall a b. (a -> b) -> a -> b $ Explosion -> Vector location Explosion x ] schema :: Schema.Schema schema :: Schema schema = String -> Value -> Schema Schema.named String "attribute-explosion" forall a b. (a -> b) -> a -> b $ [((Key, Value), Bool)] -> Value Schema.object [ (forall value pair. (ToJSON value, KeyValue pair) => String -> value -> pair Json.pair String "flag" forall a b. (a -> b) -> a -> b $ Schema -> Value Schema.ref Schema Schema.boolean, Bool True), (forall value pair. (ToJSON value, KeyValue pair) => String -> value -> pair Json.pair String "actor_id" forall a b. (a -> b) -> a -> b $ Schema -> Value Schema.ref Schema I32.schema, Bool True), (forall value pair. (ToJSON value, KeyValue pair) => String -> value -> pair Json.pair String "location" forall a b. (a -> b) -> a -> b $ Schema -> Value Schema.ref Schema Vector.schema, Bool True) ] bitPut :: Explosion -> BitPut.BitPut bitPut :: Explosion -> BitPut bitPut Explosion explosionAttribute = Bool -> BitPut BitPut.bool (Explosion -> Bool flag Explosion explosionAttribute) forall a. Semigroup a => a -> a -> a <> I32 -> BitPut I32.bitPut (Explosion -> I32 actorId Explosion explosionAttribute) forall a. Semigroup a => a -> a -> a <> Vector -> BitPut Vector.bitPut (Explosion -> Vector location Explosion explosionAttribute) bitGet :: Version.Version -> BitGet.BitGet Explosion bitGet :: Version -> BitGet Explosion bitGet Version version = forall a. String -> BitGet a -> BitGet a BitGet.label String "Explosion" forall a b. (a -> b) -> a -> b $ do Bool flag <- forall a. String -> BitGet a -> BitGet a BitGet.label String "flag" BitGet Bool BitGet.bool I32 actorId <- forall a. String -> BitGet a -> BitGet a BitGet.label String "actorId" BitGet I32 I32.bitGet Vector location <- forall a. String -> BitGet a -> BitGet a BitGet.label String "location" forall a b. (a -> b) -> a -> b $ Version -> BitGet Vector Vector.bitGet Version version forall (f :: * -> *) a. Applicative f => a -> f a pure Explosion {Bool flag :: Bool flag :: Bool flag, I32 actorId :: I32 actorId :: I32 actorId, Vector location :: Vector location :: Vector location}