{-# 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 | -- | ENERGYBALLCRAFT EnergyBallType -- | BULBODYCRAFT BulletEffect TELEPORTMODULE | TIMEMODULE | SIZEMODULE | GRAVITYMODULE -- | TARGETMODULE TargetingType deriving (Eq, Ord, Show, Read) data AttachType = ZOOMSCOPE | BULLETSYNTHESIZER | 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 | JETPACK | FUELPACK | BULLETBELTPACK | BULLETBELTBRACER | BATTERYPACK | AUTODETECTOR Detector deriving (Eq, Ord, Show, Read) data LeftItemType = BOOSTER | STOPWATCH | REWINDWATCH | SCROLLWATCH | BLINKER | BLINKERUNSAFE | SHRINKER | 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 | LASGUN | TRACTORGUN | LAUNCHER | LAUNCHERX {_xNum :: Int} | POISONSPRAYER | DRONELAUNCHER | SHATTERGUN | FORCEFIELDGUN | HELDDETECTOR Detector | TORCH | FLATSHIELD | KEYCARD Int deriving (Eq, Ord, Show, Read) --Generic, Flat) data Detector = ITEMDETECTOR | CREATUREDETECTOR | WALLDETECTOR deriving (Eq, Ord, Show, Read) --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