{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE DeriveAnyClass #-} {-# LANGUAGE StrictData #-} {-# LANGUAGE TemplateHaskell #-} module Dodge.Data.Item.Combine where import Dodge.Data.Item.Targeting 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.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 = NoItemType | HELD {_ibtHeld :: HeldItemType} | LEFT {_ibtLeft :: LeftItemType} | EQUIP {_ibtEquip :: EquipItemType} | Consumable {_ibtConsumable :: ConsumableItemType} | CRAFT CraftType deriving (Eq,Ord,Show,Read) --deriving (Eq, Ord, Show, Read) --Generic, Flat) 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 | DRUMMAG | BELTMAG | 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 ''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