{-# LANGUAGE TemplateHaskell #-} module Dodge.Combine.Data where import Dodge.Equipment.Data import Dodge.Data.ItemAmount import Control.Lens import qualified Data.Map.Strict as M -- this should probably store loaded ammo data ItemType = ItemType {_iyBase :: ItemBaseType ,_iyModules :: M.Map ModuleSlot ItemModuleType ,_iyStack :: Stack } deriving (Eq,Ord,Show,Read) data Stack = NoStack | Stack IcAmount deriving (Eq,Ord,Show,Read) data CraftType = PIPE | TUBE | HARDWARE | SPRING | DUCTTAPE | CAN | TIN | DRUM | PLANK | SHARDGLASS | PUMP | MOTOR | TRANSFORMER | PRISM | THERMOMETER | LIGHTER | MAGNET | ANTIMATTER | PLATE | TRANSMITTER | MICROCHIP | AIUNIT | CAMERA | MINIDISPLAY -- visual display unit | LED | NAILBOX | IRONBAR | LIGHTSENSOR | SOUNDSENSOR | HEATSENSOR | CREATURESENSOR | WIRE | BATTERY | FUELCELL | PORTABLEFUSION -- Modules -- bullet | INCENDIARYMODULE | STATICMODULE | CONCUSSMODULE | FRAGMODULE | FLASHMODULE | BOUNCEMODULE | PENMODULE -- | TELEPORTMODULE | TIMEMODULE | SIZEMODULE | GRAVITYMODULE deriving (Eq,Ord,Show,Enum,Read) -- TODO make this an enum somehow...? data ItemBaseType = NOTDEFINED | EFFGUN String | AUTOEFFGUN String -- Weapons | HELD {_ibtHeld :: HeldItemType} | LEFT {_ibtLeft :: LeftItemType} | EQUIP {_ibtEquip :: EquipItemType} -- | GRENADE -- | REMOTEBOMB -- Utility items -- Equipment -- | KEYCARD Int -- | MEDKIT Int | CRAFT CraftType -- deriving (Eq,Ord,Show,Read) data EquipItemType = MAGSHIELD | FLAMESHIELD | FRONTARMOUR | WRISTARMOUR | INVISIBILITYEQUIPMENT EquipSite | BRAINHAT | HAT | HEADLAMP | HEADLAMP1 | POWERLEGS | SPEEDLEGS | JUMPLEGS | JETPACK | AUTODETECTOR Detector deriving (Eq,Ord,Show,Read) data LeftItemType = BOOSTER | REWINDER | BLINKER | BLINKERUNSAFE | SHRINKER | SPAWNER deriving (Eq,Ord,Show,Read) data HeldItemType = BANGSTICK {_xNum :: Int} | PISTOL | REVOLVER | REVOLVERX {_xNum :: Int} | MACHINEPISTOL | AUTOPISTOL | SMG | BANGCONE | BLUNDERBUSS | GRAPECANNON {_xNum :: Int} -- | GRENADELAUNCHER Int -- number of chambers that can be reloaded -- | MORTARCONE / HANDMORTAR -- | MINIGUN | MINIGUNX {_xNum :: Int} | VOLLEYGUN {_xNum :: Int} | RIFLE | REPEATER | AUTORIFLE | BURSTRIFLE -- | FASTBURSTRIFLE -- | COMPLETEBURSTRIFLE | BANGROD | ELEPHANTGUN | AMR | AUTOAMR | SNIPERRIFLE | MACHINEGUN | FLAMESPITTER | FLAMETHROWER | FLAMETORRENT | FLAMEWALL | BLOWTORCH | SPARKGUN | TESLAGUN | LASGUN | LASCIRCLE -- | LASPULSE | DUALBEAM -- | LASGUNSWING -- | LASGUNSWAY -- | LASGUNWIDEPULSE | LASWIDE {_xNum :: Int} -- | LASGUNFOCUS Int -- | SONICGUN | TRACTORGUN | LAUNCHER | LAUNCHERX {_xNum :: Int} -- | TRACKINGLAUNCHER | REMOTELAUNCHER | POISONSPRAYER | DRONELAUNCHER | SHATTERGUN | FORCEFIELDGUN | HELDDETECTOR Detector | TORCH | FLATSHIELD deriving (Eq,Ord,Show,Read) data ItemModuleType = EMPTYMODULE | DRUMMAG | BELTMAG | MAGNETMAG | INCENDBUL | BOUNCEBUL | PENBUL | STATICBUL | CONCUSBUL | TARGCR | TARGLAS | TARGPOS | MAGNETTRAJ | FLECHETRAJ | BEZIERTRAJ | INCENDLAS | SPLITLAS | STATICLAS | WEPTELE | LAUNCHHOME | EXTRABATTERY | ATTACHTORCH deriving (Eq,Ord,Show,Read) data Detector = ITEMDETECTOR | CREATUREDETECTOR | WALLDETECTOR deriving (Eq,Ord,Show,Read) data ModuleSlot = ModBullet | ModBulletSpawn | ModRifleMag | ModAutoMag | ModTarget | ModBulletTrajectory | ModLauncherHoming | ModBattery | ModTeleport | ModDualBeam | ModHeldAttach deriving (Eq,Ord,Show,Read) makeLenses ''ItemType makeLenses ''ItemBaseType makeLenses ''HeldItemType