rattletrap-0.2.0: library/Rattletrap/AttributeValue.hs
module Rattletrap.AttributeValue
( module Rattletrap.AttributeValue
, module Rattletrap.AttributeValue.Boolean
, module Rattletrap.AttributeValue.Byte
, module Rattletrap.AttributeValue.CamSettings
, module Rattletrap.AttributeValue.ClubColors
, module Rattletrap.AttributeValue.Demolish
, module Rattletrap.AttributeValue.Enum
, module Rattletrap.AttributeValue.Explosion
, module Rattletrap.AttributeValue.FlaggedInt
, module Rattletrap.AttributeValue.Float
, module Rattletrap.AttributeValue.GameMode
, module Rattletrap.AttributeValue.Int
, module Rattletrap.AttributeValue.Loadout
, module Rattletrap.AttributeValue.LoadoutOnline
, module Rattletrap.AttributeValue.Loadouts
, module Rattletrap.AttributeValue.LoadoutsOnline
, module Rattletrap.AttributeValue.Location
, module Rattletrap.AttributeValue.MusicStinger
, module Rattletrap.AttributeValue.PartyLeader
, module Rattletrap.AttributeValue.Pickup
, module Rattletrap.AttributeValue.PrivateMatchSettings
, module Rattletrap.AttributeValue.QWord
, module Rattletrap.AttributeValue.Reservation
, module Rattletrap.AttributeValue.RigidBodyState
, module Rattletrap.AttributeValue.String
, module Rattletrap.AttributeValue.TeamPaint
, module Rattletrap.AttributeValue.UniqueId
, module Rattletrap.AttributeValue.WeldedInfo
) where
import Rattletrap.AttributeValue.Boolean
import Rattletrap.AttributeValue.Byte
import Rattletrap.AttributeValue.CamSettings
import Rattletrap.AttributeValue.ClubColors
import Rattletrap.AttributeValue.Demolish
import Rattletrap.AttributeValue.Enum
import Rattletrap.AttributeValue.Explosion
import Rattletrap.AttributeValue.FlaggedInt
import Rattletrap.AttributeValue.Float
import Rattletrap.AttributeValue.GameMode
import Rattletrap.AttributeValue.Int
import Rattletrap.AttributeValue.Loadout
import Rattletrap.AttributeValue.LoadoutOnline
import Rattletrap.AttributeValue.Loadouts
import Rattletrap.AttributeValue.LoadoutsOnline
import Rattletrap.AttributeValue.Location
import Rattletrap.AttributeValue.MusicStinger
import Rattletrap.AttributeValue.PartyLeader
import Rattletrap.AttributeValue.Pickup
import Rattletrap.AttributeValue.PrivateMatchSettings
import Rattletrap.AttributeValue.QWord
import Rattletrap.AttributeValue.Reservation
import Rattletrap.AttributeValue.RigidBodyState
import Rattletrap.AttributeValue.String
import Rattletrap.AttributeValue.TeamPaint
import Rattletrap.AttributeValue.UniqueId
import Rattletrap.AttributeValue.WeldedInfo
import Rattletrap.AttributeValueType
import Rattletrap.Data
import Rattletrap.Text
import qualified Data.Binary.Bits.Get as BinaryBit
import qualified Data.Binary.Bits.Put as BinaryBit
import qualified Data.Map as Map
data AttributeValue
= BooleanAttribute BooleanAttributeValue
| ByteAttribute ByteAttributeValue
| CamSettingsAttribute CamSettingsAttributeValue
| ClubColorsAttribute ClubColorsAttributeValue
| DemolishAttribute DemolishAttributeValue
| EnumAttribute EnumAttributeValue
| ExplosionAttribute ExplosionAttributeValue
| FlaggedIntAttribute FlaggedIntAttributeValue
| FloatAttribute FloatAttributeValue
| GameModeAttribute GameModeAttributeValue
| IntAttribute IntAttributeValue
| LoadoutAttribute LoadoutAttributeValue
| LoadoutOnlineAttribute LoadoutOnlineAttributeValue
| LoadoutsAttribute LoadoutsAttributeValue
| LoadoutsOnlineAttribute LoadoutsOnlineAttributeValue
| LocationAttribute LocationAttributeValue
| MusicStingerAttribute MusicStingerAttributeValue
| PartyLeaderAttribute PartyLeaderAttributeValue
| PickupAttribute PickupAttributeValue
| PrivateMatchSettingsAttribute PrivateMatchSettingsAttributeValue
| QWordAttribute QWordAttributeValue
| ReservationAttribute ReservationAttributeValue
| RigidBodyStateAttribute RigidBodyStateAttributeValue
| StringAttribute StringAttributeValue
| TeamPaintAttribute TeamPaintAttributeValue
| UniqueIdAttribute UniqueIdAttributeValue
| WeldedInfoAttribute WeldedInfoAttributeValue
deriving (Eq, Ord, Show)
getAttributeValue :: (Int, Int) -> Text -> BinaryBit.BitGet AttributeValue
getAttributeValue version name =
case Map.lookup name attributeValueTypes of
Just constructor ->
case constructor of
AVBoolean -> do
x <- getBooleanAttributeValue
pure (BooleanAttribute x)
AVByte -> do
x <- getByteAttributeValue
pure (ByteAttribute x)
AVCamSettings -> do
x <- getCamSettingsAttributeValue
pure (CamSettingsAttribute x)
AVClubColors -> do
x <- getClubColorsAttributeValue
pure (ClubColorsAttribute x)
AVDemolish -> do
x <- getDemolishAttributeValue
pure (DemolishAttribute x)
AVEnum -> do
x <- getEnumAttributeValue
pure (EnumAttribute x)
AVExplosion -> do
x <- getExplosionAttributeValue
pure (ExplosionAttribute x)
AVFlaggedInt -> do
x <- getFlaggedIntAttributeValue
pure (FlaggedIntAttribute x)
AVFloat -> do
x <- getFloatAttributeValue
pure (FloatAttribute x)
AVGameMode -> do
x <- getGameModeAttributeValue version
pure (GameModeAttribute x)
AVInt -> do
x <- getIntAttributeValue
pure (IntAttribute x)
AVLoadout -> do
x <- getLoadoutAttributeValue
pure (LoadoutAttribute x)
AVLoadoutOnline -> do
x <- getLoadoutOnlineAttributeValue
pure (LoadoutOnlineAttribute x)
AVLoadouts -> do
x <- getLoadoutsAttributeValue
pure (LoadoutsAttribute x)
AVLoadoutsOnline -> do
x <- getLoadoutsOnlineAttributeValue
pure (LoadoutsOnlineAttribute x)
AVLocation -> do
x <- getLocationAttributeValue
pure (LocationAttribute x)
AVMusicStinger -> do
x <- getMusicStingerAttributeValue
pure (MusicStingerAttribute x)
AVPartyLeader -> do
x <- getPartyLeaderAttributeValue
pure (PartyLeaderAttribute x)
AVPickup -> do
x <- getPickupAttributeValue
pure (PickupAttribute x)
AVPrivateMatchSettings -> do
x <- getPrivateMatchSettingsAttributeValue
pure (PrivateMatchSettingsAttribute x)
AVQWord -> do
x <- getQWordAttributeValue
pure (QWordAttribute x)
AVReservation -> do
x <- getReservationAttributeValue version
pure (ReservationAttribute x)
AVRigidBodyState -> do
x <- getRigidBodyStateAttributeValue
pure (RigidBodyStateAttribute x)
AVString -> do
x <- getStringAttributeValue
pure (StringAttribute x)
AVTeamPaint -> do
x <- getTeamPaintAttributeValue
pure (TeamPaintAttribute x)
AVUniqueId -> do
x <- getUniqueIdAttributeValue
pure (UniqueIdAttribute x)
AVWeldedInfo -> do
x <- getWeldedInfoAttributeValue
pure (WeldedInfoAttribute x)
Nothing -> fail ("don't know how to get attribute value " ++ show name)
attributeValueTypes :: Map.Map Text AttributeValueType
attributeValueTypes =
Map.mapKeys stringToText (Map.fromList rawAttributeValueTypes)
putAttributeValue :: AttributeValue -> BinaryBit.BitPut ()
putAttributeValue value =
case value of
BooleanAttribute x -> putBooleanAttributeValue x
ByteAttribute x -> putByteAttributeValue x
CamSettingsAttribute x -> putCamSettingsAttributeValue x
ClubColorsAttribute x -> putClubColorsAttributeValue x
DemolishAttribute x -> putDemolishAttributeValue x
EnumAttribute x -> putEnumAttributeValue x
ExplosionAttribute x -> putExplosionAttributeValue x
FlaggedIntAttribute x -> putFlaggedIntAttributeValue x
FloatAttribute x -> putFloatAttributeValue x
GameModeAttribute x -> putGameModeAttributeValue x
IntAttribute x -> putIntAttributeValue x
LoadoutAttribute x -> putLoadoutAttributeValue x
LoadoutOnlineAttribute x -> putLoadoutOnlineAttributeValue x
LoadoutsAttribute x -> putLoadoutsAttributeValue x
LoadoutsOnlineAttribute x -> putLoadoutsOnlineAttributeValue x
LocationAttribute x -> putLocationAttributeValue x
MusicStingerAttribute x -> putMusicStingerAttributeValue x
PartyLeaderAttribute x -> putPartyLeaderAttributeValue x
PickupAttribute x -> putPickupAttributeValue x
PrivateMatchSettingsAttribute x -> putPrivateMatchSettingsAttributeValue x
QWordAttribute x -> putQWordAttributeValue x
ReservationAttribute x -> putReservationAttributeValue x
RigidBodyStateAttribute x -> putRigidBodyStateAttributeValue x
StringAttribute x -> putStringAttributeValue x
TeamPaintAttribute x -> putTeamPaintAttributeValue x
UniqueIdAttribute x -> putUniqueIdAttributeValue x
WeldedInfoAttribute x -> putWeldedInfoAttributeValue x