{-# LANGUAGE DeriveAnyClass #-} {-# LANGUAGE StrictData #-} {-# LANGUAGE TemplateHaskell #-} module Dodge.Data.Item.Combine where import Dodge.Data.Payload import Control.Lens import Data.Aeson import Data.Aeson.TH import Dodge.Data.Equipment.Misc import Dodge.Data.Item.BulletMod import Dodge.Data.Item.Targeting data ItemType = HELD {_ibtHeld :: HeldItemType} | EQUIP {_ibtEquip :: EquipItemType} | CRAFT {_ibtCraft :: CraftType} | ATTACH {_ibtAttach :: AttachType} | AMMOMAG {_ibtAmmoMag :: AmmoMagType} | TARGETING {_ibtTargeting :: TargetingType} | BULLETMOD {_ibtBulletMod :: BulletMod} | STICKYMOD | ITEMSCAN | MAPPER | DROPPER InventoryPathing | CLICKER InventoryPathing | COPIER {_ibtPathing :: InventoryPathing} | NULGATE | UNIGATE | BINGATE | INTROSCAN {_ibtIntroScanType :: IntroScanType} | DETECTOR {_ibtDetector :: Detector} | ARHUD deriving (Eq, Ord, Show, Read) data InventoryPathing = ABSOLUTE | RELCURS | RELITEM deriving (Eq, Ord, Show, Read) data IntroScanType = HEALTH | MAXHEALTH deriving (Eq, Ord, Show, Read, Enum, Bounded) data CraftType = PIPE | TUBE | HARDWARE | SPRING | HOSE | TAPE | CAN | TIN | STEELDRUM | PLANK | GLASSSHARD | SCRAPMETAL | PUMP | MOTOR | TRANSFORMER | PRISM | LIGHTER | MAGNET | ANTIMATTER | PLATE | TRANSMITTER | MICROCHIP | HARDDRIVE | RAM | AIUNIT | CAMERA | MINIDISPLAY -- visual display unit | LED | NAILBOX | IRONBAR | LIGHTSENSOR | SOUNDSENSOR | HEATSENSOR | MICROPHONE | THERMOMETER | CREATURESENSOR | WIRE | FUELCELL | PORTABLEFUSION deriving (Eq, Ord, Show, Read, Enum, Bounded) data AttachType = ZOOMSCOPE | BULLETSYNTH | REMOTESCREEN | JOYSTICK | GIMBAL | GYROSCOPE | UNDERBARRELSLOT | REMOTEDETONATOR | SMOKEREDUCER | HOMINGMODULE | SHELLPAYLOAD {_shellPayload :: Payload} deriving (Eq, Ord, Show, Read) data AmmoMagType = TINMAG | DRUMMAG | BELTMAG | SHELLMAG | BATTERY | CHEMFUELPOUCH deriving (Eq, Ord, Show, Read) data ConsumableItemType = MEDKIT Int | EXPLOSIVES deriving (Eq, Ord, Show, Read) data EquipItemType = MAGSHIELD | FLAMESHIELD | FRONTARMOUR | WRISTARMOUR | INVISIBILITYEQUIPMENT EquipType | BRAINHAT | HAT | HEADLAMP | POWERLEGS | SPEEDLEGS | JUMPLEGS | FUELPACK | BULLETBELTPACK | BULLETBELTBRACER | BATTERYPACK | WRIST_ECG deriving (Eq, Ord, Show, Read) data HeldItemType = BANGSTICK {_xNum :: Int} | REWINDER | TIMESTOPPER | TIMESCROLLER | PISTOL | MACHINEPISTOL | AUTOPISTOL | SMG | BANGCONE | BLUNDERBUSS | GRAPECANNON {_xNum :: Int} | MINIGUNX {_xNum :: Int} | VOLLEYGUN {_xNum :: Int} | RIFLE | ALTERIFLE | AUTORIFLE | BURSTRIFLE | BANGROD | ELEPHANTGUN | AMR | AUTOAMR | SNIPERRIFLE | FLAMESPITTER | FLAMETHROWER | FLAMETORRENT | FLAMEWALL | BLOWTORCH | SPARKGUN | TESLAGUN | LASER | TRACTORGUN | RLAUNCHER | RLAUNCHERX {_xNum :: Int} | GLAUNCHER | POISONSPRAYER | SHATTERGUN | TORCH | FLATSHIELD | KEYCARD Int | BLINKER | BLINKERUNSAFE deriving (Eq, Ord, Show, Read) --Generic, Flat) data Detector = ITEMDETECTOR | CREATUREDETECTOR | WALLDETECTOR deriving (Eq, Ord, Show, Read, Enum, Bounded) --Generic, Flat) makeLenses ''ItemType makeLenses ''HeldItemType makeLenses ''AttachType deriveJSON defaultOptions ''InventoryPathing deriveJSON defaultOptions ''IntroScanType deriveJSON defaultOptions ''CraftType deriveJSON defaultOptions ''ConsumableItemType deriveJSON defaultOptions ''AmmoMagType deriveJSON defaultOptions ''AttachType deriveJSON defaultOptions ''Detector deriveJSON defaultOptions ''EquipItemType --deriveJSON defaultOptions ''LeftItemType deriveJSON defaultOptions ''HeldItemType deriveJSON defaultOptions ''ItemType --instance ToJSONKey ModuleSlot --instance FromJSONKey ModuleSlot