diff --git a/src/Dodge/BaseTriggerType.hs b/src/Dodge/BaseTriggerType.hs new file mode 100644 index 000000000..acdca9d04 --- /dev/null +++ b/src/Dodge/BaseTriggerType.hs @@ -0,0 +1,59 @@ +{-# LANGUAGE LambdaCase #-} + +module Dodge.BaseTriggerType ( + baseTriggerType, + module Dodge.Data.TriggerType, +) where + +import Control.Lens +import Dodge.Data.Item +import Dodge.Data.TriggerType + +baseTriggerType :: Item -> TriggerType +baseTriggerType itm = case itm ^. itType of + HELD hit -> heldTriggerType hit + _ -> NoTrigger + +heldTriggerType :: HeldItemType -> TriggerType +heldTriggerType = \case + BANGSTICK{} -> HammerTrigger + REWINDER -> HammerTrigger + TIMESTOPPER -> HammerTrigger + TIMESCROLLER -> HammerTrigger + PISTOL -> HammerTrigger + MACHINEPISTOL -> AutoTrigger + AUTOPISTOL -> AutoTrigger + SMG -> AutoTrigger + BANGCONE -> HammerTrigger + BLUNDERBUSS -> HammerTrigger + GRAPECANNON{} -> HammerTrigger + MINIGUNX{} -> AutoTrigger + VOLLEYGUN i -> BurstTrigger [1 .. i-1] + RIFLE -> HammerTrigger + ALTERIFLE -> HammerTrigger + AUTORIFLE -> AutoTrigger + BURSTRIFLE -> BurstTrigger [3,6] + BANGROD -> HammerTrigger + ELEPHANTGUN -> HammerTrigger + AMR -> HammerTrigger + AUTOAMR -> AutoTrigger + SNIPERRIFLE -> HammerTrigger + FLAMESPITTER -> BurstTrigger [1..9] + FLAMETHROWER -> AutoTrigger + FLAMETORRENT -> AutoTrigger + FLAMEWALL -> AutoTrigger + BLOWTORCH -> AutoTrigger + SPARKGUN -> AutoTrigger + TESLAGUN -> AutoTrigger + LASER -> AutoTrigger + TRACTORGUN -> AutoTrigger + RLAUNCHER -> HammerTrigger + RLAUNCHERX{} -> HammerTrigger + GLAUNCHER -> HammerTrigger + POISONSPRAYER -> AutoTrigger + SHATTERGUN -> HammerTrigger + TORCH -> AutoTrigger + FLATSHIELD -> NoTrigger + KEYCARD{} -> NoTrigger + BLINKER -> AlwaysSingleTrigger + BLINKERUNSAFE -> AlwaysSingleTrigger diff --git a/src/Dodge/Data/TriggerType.hs b/src/Dodge/Data/TriggerType.hs new file mode 100644 index 000000000..23b9c5c02 --- /dev/null +++ b/src/Dodge/Data/TriggerType.hs @@ -0,0 +1,17 @@ +{-# LANGUAGE StrictData #-} +--{-# LANGUAGE TemplateHaskell #-} + +module Dodge.Data.TriggerType where + +--import Data.Aeson +--import Data.Aeson.TH + +data TriggerType + = AutoTrigger + | HammerTrigger + | NoTrigger + | AlwaysSingleTrigger + | BurstTrigger [Int] + deriving (Eq, Show, Read) + +--deriveJSON defaultOptions ''TriggerType diff --git a/src/Dodge/Item/AimStance.hs b/src/Dodge/Item/AimStance.hs new file mode 100644 index 000000000..3ac33e0f7 --- /dev/null +++ b/src/Dodge/Item/AimStance.hs @@ -0,0 +1,59 @@ +{-# LANGUAGE LambdaCase #-} +module Dodge.Item.AimStance (aStance) where + +import Dodge.Data.Item +--import Dodge.Data.ComposedItem +--import Dodge.Data.DoubleTree +import Control.Lens +import Dodge.Data.AimStance + +--aStance :: LocationLDT ItemLink ComposedItem -> AimStance +--aStance loc = case loc ^. locLDT . ldtValue . _1 . itType of +aStance :: Item -> AimStance +aStance itm = case itm ^. itType of + HELD hit -> heldAimStance hit + _ -> OneHand + +heldAimStance :: HeldItemType -> AimStance +heldAimStance = \case + BANGSTICK{} -> OneHand + REWINDER -> OneHand + TIMESTOPPER -> OneHand + TIMESCROLLER -> OneHand + PISTOL -> OneHand + MACHINEPISTOL -> OneHand + AUTOPISTOL -> OneHand + SMG -> TwoHandUnder + BANGCONE -> OneHand + BLUNDERBUSS -> TwoHandUnder + GRAPECANNON{} -> TwoHandUnder + MINIGUNX{} -> TwoHandUnder + VOLLEYGUN{} -> TwoHandFlat + RIFLE -> TwoHandUnder + ALTERIFLE -> TwoHandUnder + AUTORIFLE -> TwoHandUnder + BURSTRIFLE -> TwoHandUnder + BANGROD -> TwoHandUnder + ELEPHANTGUN -> TwoHandUnder + AMR -> TwoHandUnder + AUTOAMR -> TwoHandUnder + SNIPERRIFLE -> TwoHandUnder + FLAMESPITTER -> OneHand + FLAMETHROWER -> TwoHandUnder + FLAMETORRENT -> TwoHandUnder + FLAMEWALL -> TwoHandUnder + BLOWTORCH -> TwoHandUnder + SPARKGUN -> TwoHandFlat + TESLAGUN -> TwoHandFlat + LASER -> TwoHandFlat + TRACTORGUN -> TwoHandUnder + RLAUNCHER -> TwoHandOver + RLAUNCHERX{} -> TwoHandOver + GLAUNCHER -> TwoHandUnder + POISONSPRAYER -> TwoHandUnder + SHATTERGUN -> TwoHandUnder + TORCH -> OneHand + FLATSHIELD -> TwoHandFlat + KEYCARD {} -> OneHand + BLINKER -> OneHand + BLINKERUNSAFE -> OneHand