{-# LANGUAGE DeriveAnyClass #-} --{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE StrictData #-} {-# LANGUAGE TemplateHaskell #-} module Dodge.Data.Item.Combine where 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} | LEFT {_ibtLeft :: LeftItemType} | EQUIP {_ibtEquip :: EquipItemType} | CONSUMABLE {_ibtConsumable :: ConsumableItemType} | CRAFT {_ibtCraft :: CraftType} | ATTACH {_ibtAttach :: AttachType} | AMMOMAG {_ibtAmmoMag :: AmmoMagType} | TARGETING {_ibtTargeting :: TargetingType} | BULLETMOD {_ibtBulletMod :: BulletMod} deriving (Eq, Ord, Show, Read) 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 | FRAGMODULE | FLASHMODULE | GASINJECTOR | FLAKCRAFT | FRAGCRAFT | TELEPORTMODULE | TIMEMODULE | SIZEMODULE | GRAVITYMODULE deriving (Eq, Ord, Show, Read) data AttachType = ZOOMSCOPE | BULLETSYNTH | REMOTESCREEN | HOMINGMODULE | AUGMENTEDHUD 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 EquipSite | BRAINHAT | HAT | HEADLAMP | POWERLEGS | SPEEDLEGS | JUMPLEGS | FUELPACK | BULLETBELTPACK | BULLETBELTBRACER | BATTERYPACK | WRIST_ECG deriving (Eq, Ord, Show, Read) data LeftItemType = BOOSTER | STOPWATCH | REWINDWATCH | SCROLLWATCH | BLINKER | BLINKERUNSAFE | SPAWNER deriving (Eq, Ord, Show, Read) --Generic, Flat) data HeldItemType = BANGSTICK {_xNum :: Int} | PISTOL | MACHINEPISTOL | AUTOPISTOL | SMG | BANGCONE | BLUNDERBUSS | GRAPECANNON {_xNum :: Int} | MINIGUNX {_xNum :: Int} | VOLLEYGUN {_xNum :: Int} | RIFLE | AUTORIFLE | BURSTRIFLE | BANGROD | ELEPHANTGUN | AMR | AUTOAMR | SNIPERRIFLE | FLAMESPITTER | FLAMETHROWER | FLAMETORRENT | FLAMEWALL | BLOWTORCH | SPARKGUN | TESLAGUN | LASER | TRACTORGUN | LAUNCHER | LAUNCHERX {_xNum :: Int} | POISONSPRAYER | DRONELAUNCHER | SHATTERGUN | TORCH | FLATSHIELD | KEYCARD Int | DETECTOR Detector 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 ''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