This commit is contained in:
2025-06-05 13:52:59 +01:00
parent c8d44fea79
commit cf7a5b2362
4 changed files with 139 additions and 0 deletions
+20
View File
@@ -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
+30
View File
@@ -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
+63
View File
@@ -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
+26
View File
@@ -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