{-# 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 qualified Data.Map.Strict as M import Dodge.Data.Equipment.Misc import Dodge.Data.Item.Targeting import Dodge.Data.Item.Use.Consumption data ItemType = ItemType { _iyBase :: ItemBaseType , _iyModules :: M.Map ModuleSlot ItemModuleType } deriving (Eq, Ord, Show, Read) --deriving (Eq, Ord, Show, Read) --Generic, Flat) data Stack = NoStack | Stack ItAmount deriving (Eq, Ord, Show, Read) --deriving (Eq, Ord, Show, Read) --Generic, Flat) 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 | BATTERY | FUELCELL | PORTABLEFUSION | FRAGMODULE | FLASHMODULE | GASINJECTOR | FLAKCRAFT | FRAGCRAFT | ENERGYBALLCRAFT EnergyBallType | BULBODYCRAFT BulletEffect | TELEPORTMODULE | TIMEMODULE | SIZEMODULE | GRAVITYMODULE | TARGETMODULE TargetType deriving (Eq, Ord, Show, Read) --deriving (Eq, Ord, Show, Enum, Read) --Generic, Flat) data ItemBaseType = HELD {_ibtHeld :: HeldItemType} | LEFT {_ibtLeft :: LeftItemType} | EQUIP {_ibtEquip :: EquipItemType} | CONSUMABLE {_ibtConsumable :: ConsumableItemType} | CRAFT CraftType | ATTACH {_ibtAttach :: AttachType} | AMMOMAG {_ibtAmmoMag :: AmmoMagType} deriving (Eq, Ord, Show, Read) --deriving (Eq, Ord, Show, Read) --Generic, Flat) data AttachType = SCROLLATTACH ScrollAttachType | TARGETATTACH {_ibtAttachTarget :: TargetType} -- | BULPAYLOADATTACH -- | BULTRAJECTORYATTACH deriving (Eq, Ord, Show, Read) data ScrollAttachType = ZOOMSCOPE deriving (Eq, Ord, Show, Read) data AmmoMagType = REVOLVEMAG | TINMAG | DRUMMAG | BELTMAG | SHELLMAG deriving (Eq, Ord, Show, Read) data ConsumableItemType = MEDKIT Int | EXPLOSIVES deriving (Eq, Ord, Show, Read) --deriving (Eq, Ord, Show, Read) --Generic, Flat) data EquipItemType = MAGSHIELD | FLAMESHIELD | FRONTARMOUR | WRISTARMOUR | INVISIBILITYEQUIPMENT EquipSite | BRAINHAT | HAT | TARGETINGHAT TargetType | HEADLAMP | POWERLEGS | SPEEDLEGS | JUMPLEGS | JETPACK | FUELPACK | BULLETBELTPACK | BULLETBELTBRACER | BATTERYPACK | AUTODETECTOR Detector deriving (Eq, Ord, Show, Read) --deriving (Eq, Ord, Show, Read) --Generic, Flat) 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} | MULTIGUN {_xNum :: Int} | RIFLE | REPEATER | AUTORIFLE | BURSTRIFLE | BANGROD | ELEPHANTGUN | AMR | AUTOAMR | SNIPERRIFLE | MACHINEGUN | FLAMESPITTER | FLAMETHROWER | FLAMETORRENT | FLAMEWALL | BLOWTORCH | SPARKGUN | TESLAGUN | LASGUN | LASCIRCLE | DUALBEAM | LASWIDE {_xNum :: Int} | TRACTORGUN | LAUNCHER | LAUNCHERX {_xNum :: Int} | REMOTELAUNCHER | POISONSPRAYER | DRONELAUNCHER | SHATTERGUN | FORCEFIELDGUN | HELDDETECTOR Detector | TORCH | FLATSHIELD | KEYCARD Int deriving (Eq, Ord, Show, Read) --Generic, Flat) data ItemModuleType = EMPTYMODULE | MAGNETMAG | BULPAY BulletSpawn | BULBODY BulletEffect | BULTRAJ {_imtBulletTrajectoryType :: BulletTrajectoryType} | TARGET {_imtTargetType :: TargetType} | INCENDLAS | SPLITLAS | STATICLAS | WEPTELE | LAUNCHHOME | ATTACHTORCH deriving (Eq, Ord, Show, Read) --Generic, Flat) data Detector = ITEMDETECTOR | CREATUREDETECTOR | WALLDETECTOR deriving (Eq, Ord, Show, Read) --Generic, Flat) data ModuleSlot = ModBulletCollision | ModBulletPayload | ModRifleMag | ModAutoMag | ModTarget | ModBulletTrajectory | ModLauncherHoming | ModBattery | ModTeleport | ModDualBeam | ModHeldAttach deriving (Eq, Ord, Show, Read) --Generic, Flat) makeLenses ''ItemType makeLenses ''ItemBaseType makeLenses ''HeldItemType makeLenses ''ItemModuleType makeLenses ''AttachType deriveJSON defaultOptions ''Stack deriveJSON defaultOptions ''CraftType deriveJSON defaultOptions ''ConsumableItemType deriveJSON defaultOptions ''AmmoMagType deriveJSON defaultOptions ''ScrollAttachType deriveJSON defaultOptions ''AttachType deriveJSON defaultOptions ''Detector deriveJSON defaultOptions ''EquipItemType deriveJSON defaultOptions ''LeftItemType deriveJSON defaultOptions ''HeldItemType deriveJSON defaultOptions ''ItemModuleType deriveJSON defaultOptions ''ModuleSlot deriveJSON defaultOptions ''ItemBaseType deriveJSON defaultOptions ''ItemType instance ToJSONKey ModuleSlot instance FromJSONKey ModuleSlot