{-# LANGUAGE LambdaCase #-} module Dodge.BaseTriggerType ( itemTriggerType, baseItemTriggerType, module Dodge.Data.TriggerType, ) where import Dodge.IsPulseLaser import Dodge.Data.ComposedItem import Dodge.Data.DoubleTree import Control.Lens import Dodge.Data.Item import Dodge.Data.TriggerType itemTriggerType :: LocationDT OItem -> TriggerType itemTriggerType loc | isPulseLaser loc = AutoTrigger 9 | otherwise = baseItemTriggerType $ loc ^. locDT . dtValue . _1 baseItemTriggerType :: Item -> TriggerType baseItemTriggerType itm = case itm ^. itType of HELD hit -> heldTriggerType hit ATTACH CAPACITOR -> AutoTrigger 10 _ -> NoTrigger heldTriggerType :: HeldItemType -> TriggerType heldTriggerType = \case BANGSTICK{} -> SemiAutoTrigger 8 REWINDER -> SemiAutoTrigger 20 TIMESTOPPER -> SemiAutoTrigger 20 TIMESCROLLER -> SemiAutoTrigger 20 PISTOL -> SemiAutoTrigger 6 MACHINEPISTOL -> WarmUpCoolDown 50 100 200 AUTOPISTOL -> AutoTrigger 8 SMG -> AutoTrigger 8 BANGCONE -> SemiAutoTrigger 20 BLUNDERBUSS -> SemiAutoTrigger 20 GRAPECANNON{} -> SemiAutoTrigger 20 MINIGUNX{} -> WarmUpNoDelay 100 --VOLLEYGUN i -> BurstTrigger $ fmap (3*) [1 .. i-1] VOLLEYGUN i -> VolleyGunTrigger i 15 RIFLE -> SemiAutoTrigger 6 ALTERIFLE -> SemiAutoTrigger 6 AUTORIFLE -> AutoTrigger 6 BURSTRIFLE -> BurstTrigger [3,6] 8 -- time last used gets updated after last burst fire BANGROD -> SemiAutoTrigger 12 ELEPHANTGUN -> SemiAutoTrigger 12 AMR -> SemiAutoTrigger 12 AUTOAMR -> AutoTrigger 12 SNIPERRIFLE -> SemiAutoTrigger 12 FLAMESPITTER -> BurstTrigger [1..9] 6 FLAMETHROWER -> NoTrigger FLAMETORRENT -> NoTrigger FLAMEWALL -> NoTrigger BLOWTORCH -> NoTrigger SPARKGUN -> NoTrigger TESLAGUN -> NoTrigger TRACTORGUN -> NoTrigger RLAUNCHER -> SemiAutoTrigger 20 RLAUNCHERX{} -> SemiAutoTrigger 20 GLAUNCHER -> SemiAutoTrigger 20 POISONSPRAYER -> NoTrigger SHATTERGUN -> SemiAutoTrigger 20 LED -> NoTrigger FLATSHIELD -> NoTrigger KEYCARD{} -> NoTrigger BLINKER -> SemiAutoTrigger 20 BLINKERUNSAFE -> SemiAutoTrigger 20