{-# 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 AttachType deriving (Eq, Ord, Show, Read) --deriving (Eq, Ord, Show, Read) --Generic, Flat) data AttachType = SCROLLATTACH ScrollAttachType | AMMOATTACH AmmoAttachType deriving (Eq, Ord, Show, Read) data ScrollAttachType = ZOOMSCOPE deriving (Eq, Ord, Show, Read) data AmmoAttachType = TINMAG | DRUMMAG | BULLETBELT 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 | REVOLVER | REVOLVERX {_xNum :: Int} | MACHINEPISTOL | AUTOPISTOL | SMG | BANGCONE | BLUNDERBUSS | GRAPECANNON {_xNum :: Int} | MINIGUNX {_xNum :: Int} | VOLLEYGUN {_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 | BINOCULARS | 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 | EXTRABATTERY | 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 deriveJSON defaultOptions ''Stack deriveJSON defaultOptions ''CraftType deriveJSON defaultOptions ''ConsumableItemType deriveJSON defaultOptions ''AmmoAttachType 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