rattletrap-2.2.0: source/library/Rattletrap/AttributeValue.hs
module Rattletrap.AttributeValue
( module Rattletrap.AttributeValue
, module Rattletrap.Attribute.AppliedDamage
, module Rattletrap.Attribute.Boolean
, module Rattletrap.Attribute.Byte
, module Rattletrap.Attribute.CamSettings
, module Rattletrap.Attribute.ClubColors
, module Rattletrap.Attribute.DamageState
, module Rattletrap.Attribute.Demolish
, module Rattletrap.Attribute.Enum
, module Rattletrap.Attribute.Explosion
, module Rattletrap.Attribute.FlaggedInt
, module Rattletrap.Attribute.Float
, module Rattletrap.Attribute.GameMode
, module Rattletrap.Attribute.Int
, module Rattletrap.Attribute.Loadout
, module Rattletrap.Attribute.LoadoutOnline
, module Rattletrap.Attribute.Loadouts
, module Rattletrap.Attribute.LoadoutsOnline
, module Rattletrap.Attribute.Location
, module Rattletrap.Attribute.MusicStinger
, module Rattletrap.Attribute.PartyLeader
, module Rattletrap.Attribute.Pickup
, module Rattletrap.Attribute.PrivateMatchSettings
, module Rattletrap.Attribute.QWord
, module Rattletrap.Attribute.Reservation
, module Rattletrap.Attribute.RigidBodyState
, module Rattletrap.Attribute.String
, module Rattletrap.Attribute.TeamPaint
, module Rattletrap.Attribute.UniqueId
, module Rattletrap.Attribute.WeldedInfo
) where
import Rattletrap.Attribute.AppliedDamage
import Rattletrap.Attribute.Boolean
import Rattletrap.Attribute.Byte
import Rattletrap.Attribute.CamSettings
import Rattletrap.Attribute.ClubColors
import Rattletrap.Attribute.DamageState
import Rattletrap.Attribute.Demolish
import Rattletrap.Attribute.Enum
import Rattletrap.Attribute.Explosion
import Rattletrap.Attribute.FlaggedInt
import Rattletrap.Attribute.Float
import Rattletrap.Attribute.GameMode
import Rattletrap.Attribute.Int
import Rattletrap.Attribute.Loadout
import Rattletrap.Attribute.LoadoutOnline
import Rattletrap.Attribute.Loadouts
import Rattletrap.Attribute.LoadoutsOnline
import Rattletrap.Attribute.Location
import Rattletrap.Attribute.MusicStinger
import Rattletrap.Attribute.PartyLeader
import Rattletrap.Attribute.Pickup
import Rattletrap.Attribute.PrivateMatchSettings
import Rattletrap.Attribute.QWord
import Rattletrap.Attribute.Reservation
import Rattletrap.Attribute.RigidBodyState
import Rattletrap.Attribute.String
import Rattletrap.Attribute.TeamPaint
import Rattletrap.Attribute.UniqueId
import Rattletrap.Attribute.WeldedInfo
import Rattletrap.AttributeType
import Rattletrap.Data
import Rattletrap.Primitive
import qualified Data.Binary.Bits.Get as BinaryBit
import qualified Data.Binary.Bits.Put as BinaryBit
import qualified Data.Map.Strict as Map
data AttributeValue
= AppliedDamageAttributeValue AppliedDamageAttribute
| BooleanAttributeValue BooleanAttribute
| ByteAttributeValue ByteAttribute
| CamSettingsAttributeValue CamSettingsAttribute
| ClubColorsAttributeValue ClubColorsAttribute
| DamageStateAttributeValue DamageStateAttribute
| DemolishAttributeValue DemolishAttribute
| EnumAttributeValue EnumAttribute
| ExplosionAttributeValue ExplosionAttribute
| FlaggedIntAttributeValue FlaggedIntAttribute
| FloatAttributeValue FloatAttribute
| GameModeAttributeValue GameModeAttribute
| IntAttributeValue IntAttribute
| LoadoutAttributeValue LoadoutAttribute
| LoadoutOnlineAttributeValue LoadoutOnlineAttribute
| LoadoutsAttributeValue LoadoutsAttribute
| LoadoutsOnlineAttributeValue LoadoutsOnlineAttribute
| LocationAttributeValue LocationAttribute
| MusicStingerAttributeValue MusicStingerAttribute
| PartyLeaderAttributeValue PartyLeaderAttribute
| PickupAttributeValue PickupAttribute
| PrivateMatchSettingsAttributeValue PrivateMatchSettingsAttribute
| QWordAttributeValue QWordAttribute
| ReservationAttributeValue ReservationAttribute
| RigidBodyStateAttributeValue RigidBodyStateAttribute
| StringAttributeValue StringAttribute
| TeamPaintAttributeValue TeamPaintAttribute
| UniqueIdAttributeValue UniqueIdAttribute
| WeldedInfoAttributeValue WeldedInfoAttribute
deriving (Eq, Ord, Show)
getAttributeValue :: (Int, Int) -> Text -> BinaryBit.BitGet AttributeValue
getAttributeValue version name =
case Map.lookup name attributeTypes of
Just constructor ->
case constructor of
AppliedDamageAttributeType -> do
x <- getAppliedDamageAttribute
pure (AppliedDamageAttributeValue x)
BooleanAttributeType -> do
x <- getBooleanAttribute
pure (BooleanAttributeValue x)
ByteAttributeType -> do
x <- getByteAttribute
pure (ByteAttributeValue x)
CamSettingsAttributeType -> do
x <- getCamSettingsAttribute
pure (CamSettingsAttributeValue x)
ClubColorsAttributeType -> do
x <- getClubColorsAttribute
pure (ClubColorsAttributeValue x)
DamageStateAttributeType -> do
x <- getDamageStateAttribute
pure (DamageStateAttributeValue x)
DemolishAttributeType -> do
x <- getDemolishAttribute
pure (DemolishAttributeValue x)
EnumAttributeType -> do
x <- getEnumAttribute
pure (EnumAttributeValue x)
ExplosionAttributeType -> do
x <- getExplosionAttribute
pure (ExplosionAttributeValue x)
FlaggedIntAttributeType -> do
x <- getFlaggedIntAttribute
pure (FlaggedIntAttributeValue x)
FloatAttributeType -> do
x <- getFloatAttribute
pure (FloatAttributeValue x)
GameModeAttributeType -> do
x <- getGameModeAttribute version
pure (GameModeAttributeValue x)
IntAttributeType -> do
x <- getIntAttribute
pure (IntAttributeValue x)
LoadoutAttributeType -> do
x <- getLoadoutAttribute
pure (LoadoutAttributeValue x)
LoadoutOnlineAttributeType -> do
x <- getLoadoutOnlineAttribute
pure (LoadoutOnlineAttributeValue x)
LoadoutsAttributeType -> do
x <- getLoadoutsAttribute
pure (LoadoutsAttributeValue x)
LoadoutsOnlineAttributeType -> do
x <- getLoadoutsOnlineAttribute
pure (LoadoutsOnlineAttributeValue x)
LocationAttributeType -> do
x <- getLocationAttribute
pure (LocationAttributeValue x)
MusicStingerAttributeType -> do
x <- getMusicStingerAttribute
pure (MusicStingerAttributeValue x)
PartyLeaderAttributeType -> do
x <- getPartyLeaderAttribute
pure (PartyLeaderAttributeValue x)
PickupAttributeType -> do
x <- getPickupAttribute
pure (PickupAttributeValue x)
PrivateMatchSettingsAttributeType -> do
x <- getPrivateMatchSettingsAttribute
pure (PrivateMatchSettingsAttributeValue x)
QWordAttributeType -> do
x <- getQWordAttribute
pure (QWordAttributeValue x)
ReservationAttributeType -> do
x <- getReservationAttribute version
pure (ReservationAttributeValue x)
RigidBodyStateAttributeType -> do
x <- getRigidBodyStateAttribute
pure (RigidBodyStateAttributeValue x)
StringAttributeType -> do
x <- getStringAttribute
pure (StringAttributeValue x)
TeamPaintAttributeType -> do
x <- getTeamPaintAttribute
pure (TeamPaintAttributeValue x)
UniqueIdAttributeType -> do
x <- getUniqueIdAttribute
pure (UniqueIdAttributeValue x)
WeldedInfoAttributeType -> do
x <- getWeldedInfoAttribute
pure (WeldedInfoAttributeValue x)
Nothing -> fail ("don't know how to get attribute value " ++ show name)
attributeTypes :: Map.Map Text AttributeType
attributeTypes = Map.mapKeys stringToText (Map.fromList rawAttributeTypes)
putAttributeValue :: AttributeValue -> BinaryBit.BitPut ()
putAttributeValue value =
case value of
AppliedDamageAttributeValue x -> putAppliedDamageAttribute x
BooleanAttributeValue x -> putBooleanAttribute x
ByteAttributeValue x -> putByteAttribute x
CamSettingsAttributeValue x -> putCamSettingsAttribute x
ClubColorsAttributeValue x -> putClubColorsAttribute x
DamageStateAttributeValue x -> putDamageStateAttribute x
DemolishAttributeValue x -> putDemolishAttribute x
EnumAttributeValue x -> putEnumAttribute x
ExplosionAttributeValue x -> putExplosionAttribute x
FlaggedIntAttributeValue x -> putFlaggedIntAttribute x
FloatAttributeValue x -> putFloatAttribute x
GameModeAttributeValue x -> putGameModeAttribute x
IntAttributeValue x -> putIntAttribute x
LoadoutAttributeValue x -> putLoadoutAttribute x
LoadoutOnlineAttributeValue x -> putLoadoutOnlineAttribute x
LoadoutsAttributeValue x -> putLoadoutsAttribute x
LoadoutsOnlineAttributeValue x -> putLoadoutsOnlineAttribute x
LocationAttributeValue x -> putLocationAttribute x
MusicStingerAttributeValue x -> putMusicStingerAttribute x
PartyLeaderAttributeValue x -> putPartyLeaderAttribute x
PickupAttributeValue x -> putPickupAttribute x
PrivateMatchSettingsAttributeValue x -> putPrivateMatchSettingsAttribute x
QWordAttributeValue x -> putQWordAttribute x
ReservationAttributeValue x -> putReservationAttribute x
RigidBodyStateAttributeValue x -> putRigidBodyStateAttribute x
StringAttributeValue x -> putStringAttribute x
TeamPaintAttributeValue x -> putTeamPaintAttribute x
UniqueIdAttributeValue x -> putUniqueIdAttribute x
WeldedInfoAttributeValue x -> putWeldedInfoAttribute x