diff --git a/src/Dodge/Data/AmmoType.hs b/src/Dodge/Data/AmmoType.hs new file mode 100644 index 000000000..1a890d818 --- /dev/null +++ b/src/Dodge/Data/AmmoType.hs @@ -0,0 +1,20 @@ +{-# LANGUAGE StrictData #-} +{-# LANGUAGE TemplateHaskell #-} + +module Dodge.Data.AmmoType where + +--import Data.Aeson +--import Data.Aeson.TH + +data AmmoType + = LauncherAmmo + | BulletAmmo + | BeltBulletAmmo + | ElectricalAmmo + | DroneAmmo + | GasAmmo + | PrintMaterial + | ExplosivePutty + deriving (Eq, Ord, Show, Read) --Generic, Flat) + +--deriveJSON defaultOptions ''AmmoType diff --git a/src/Dodge/Data/EquipType.hs b/src/Dodge/Data/EquipType.hs new file mode 100644 index 000000000..25b32e082 --- /dev/null +++ b/src/Dodge/Data/EquipType.hs @@ -0,0 +1,30 @@ +{-# LANGUAGE LambdaCase #-} + +module Dodge.Data.EquipType (equipType) where + +import Control.Lens +import Dodge.Data.Item + +equipType :: Item -> Maybe EquipType +equipType itm = case itm ^. itType of + EQUIP eit -> Just $ eitType eit + _ -> Nothing + +eitType :: EquipItemType -> EquipType +eitType = \case + MAGSHIELD -> GoesOnWrist + FLAMESHIELD -> GoesOnWrist + FRONTARMOUR -> GoesOnChest + WRISTARMOUR -> GoesOnWrist + INVISIBILITYEQUIPMENT x -> x + BRAINHAT -> GoesOnHead + HAT -> GoesOnHead + HEADLAMP -> GoesOnHead + POWERLEGS -> GoesOnLegs + SPEEDLEGS -> GoesOnLegs + JUMPLEGS -> GoesOnLegs + FUELPACK -> GoesOnBack + BULLETBELTPACK -> GoesOnBack + BULLETBELTBRACER -> GoesOnWrist + BATTERYPACK -> GoesOnBack + WRIST_ECG -> GoesOnWrist diff --git a/src/Dodge/Item/AmmoSlots.hs b/src/Dodge/Item/AmmoSlots.hs new file mode 100644 index 000000000..45640decf --- /dev/null +++ b/src/Dodge/Item/AmmoSlots.hs @@ -0,0 +1,63 @@ +{-# LANGUAGE LambdaCase #-} + +module Dodge.Item.AmmoSlots ( + itemAmmoSlots, +) where + +import Dodge.Data.AmmoType +import Dodge.Data.Item +import qualified Data.IntMap.Strict as IM +import Control.Lens + +itemAmmoSlots :: Item -> IM.IntMap AmmoType +itemAmmoSlots itm = case itm ^. itType of + HELD hit -> heldItemAmmoSlots hit + DETECTOR _ -> singleAmmo ElectricalAmmo + _ -> mempty + +heldItemAmmoSlots :: HeldItemType -> IM.IntMap AmmoType +heldItemAmmoSlots = \case + BANGSTICK _ -> singleAmmo BulletAmmo + PISTOL -> singleAmmo BulletAmmo + AUTOPISTOL -> singleAmmo BulletAmmo + MACHINEPISTOL -> singleAmmo BulletAmmo + SMG -> singleAmmo BulletAmmo + BANGCONE -> singleAmmo BulletAmmo + BLUNDERBUSS -> singleAmmo BulletAmmo + GRAPECANNON {} -> singleAmmo BulletAmmo + RIFLE -> singleAmmo BulletAmmo + AUTORIFLE -> singleAmmo BulletAmmo + BURSTRIFLE -> singleAmmo BulletAmmo + ALTERIFLE -> IM.fromList (zip [0..1] $ repeat BulletAmmo) + BANGROD -> singleAmmo BulletAmmo + ELEPHANTGUN -> singleAmmo BulletAmmo + AMR -> singleAmmo BulletAmmo + AUTOAMR -> singleAmmo BulletAmmo + SNIPERRIFLE -> singleAmmo BulletAmmo + MINIGUNX _ -> singleAmmo BeltBulletAmmo + VOLLEYGUN i -> IM.fromList (zip [0..i-1] $ repeat BulletAmmo) + POISONSPRAYER -> singleAmmo GasAmmo + FLAMETHROWER -> singleAmmo GasAmmo + FLAMETORRENT -> singleAmmo GasAmmo + FLAMESPITTER -> singleAmmo GasAmmo + FLAMEWALL -> singleAmmo GasAmmo + BLOWTORCH -> singleAmmo GasAmmo + LASER -> singleAmmo ElectricalAmmo + TESLAGUN -> singleAmmo ElectricalAmmo + SPARKGUN -> singleAmmo ElectricalAmmo + TRACTORGUN -> singleAmmo ElectricalAmmo + SHATTERGUN -> singleAmmo ElectricalAmmo + TORCH -> singleAmmo ElectricalAmmo + BLINKERUNSAFE -> singleAmmo ElectricalAmmo + BLINKER -> singleAmmo ElectricalAmmo + RLAUNCHER -> singleAmmo LauncherAmmo + GLAUNCHER -> singleAmmo LauncherAmmo + RLAUNCHERX i -> IM.fromList [(j, LauncherAmmo) | j <- [0 .. i -1]] + REWINDER -> singleAmmo ElectricalAmmo + TIMESTOPPER -> singleAmmo ElectricalAmmo + TIMESCROLLER -> singleAmmo ElectricalAmmo + FLATSHIELD -> mempty + KEYCARD _ -> mempty + +singleAmmo :: a -> IM.IntMap a +singleAmmo x = IM.insert 0 x mempty diff --git a/src/Dodge/Item/MagAmmoType.hs b/src/Dodge/Item/MagAmmoType.hs new file mode 100644 index 000000000..8ff453fe9 --- /dev/null +++ b/src/Dodge/Item/MagAmmoType.hs @@ -0,0 +1,26 @@ +{-# LANGUAGE LambdaCase #-} + +module Dodge.Item.MagAmmoType ( + magAmmoType, +) where + +import Control.Lens +import Dodge.Data.AmmoType +import Dodge.Data.Item + +magAmmoType :: Item -> Maybe AmmoType +magAmmoType itm = case itm ^. itType of + AMMOMAG amt -> Just $ mAT amt + EQUIP FUELPACK -> Just GasAmmo + EQUIP BULLETBELTPACK -> Just BeltBulletAmmo + EQUIP BULLETBELTBRACER -> Just BeltBulletAmmo + _ -> Nothing + +mAT :: AmmoMagType -> AmmoType +mAT = \case + TINMAG -> BulletAmmo + DRUMMAG -> BulletAmmo + BELTMAG -> BeltBulletAmmo + SHELLMAG -> LauncherAmmo + BATTERY -> ElectricalAmmo + CHEMFUELPOUCH -> GasAmmo