From 055fcf4cce6724d89ce834f6359ac4e4199bf548 Mon Sep 17 00:00:00 2001 From: justin Date: Tue, 22 Feb 2022 11:07:19 +0000 Subject: [PATCH] Add new targeting datatypes --- src/Dodge/Creature/State.hs | 7 +++++++ src/Dodge/Data.hs | 9 +++++---- src/Dodge/Default.hs | 2 ++ src/Dodge/Default/Weapon.hs | 2 ++ 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/Dodge/Creature/State.hs b/src/Dodge/Creature/State.hs index e57f6552d..e1b519474 100644 --- a/src/Dodge/Creature/State.hs +++ b/src/Dodge/Creature/State.hs @@ -136,6 +136,7 @@ invItemUpdate = itUse %~ useupdate invSideEff :: Creature -> World -> World invSideEff cr w = weaponReloadSounds cr . flip (IS.foldr useeq) (_crInvEquipped cr) + . doHeldItemTargeting cr $ IM.foldrWithKey f w (_crInv cr) where useeq i = _eqUse (_itUse $ _crInv cr IM.! i) cr i @@ -148,6 +149,12 @@ invSideEff cr w = weaponReloadSounds cr | otherwise = itpointer %~ invItemUpdate itpointer = creatures . ix (_crID cr) . crInv . ix i +doHeldItemTargeting :: Creature -> World -> World +doHeldItemTargeting cr w = case cr ^? crInv . ix (_crInvSel cr) . itTargeting' . tgHeldUpdate of + Nothing -> w + Just f -> w & creatures . ix (_crID cr) . crInv . ix (_crInvSel cr) . itTargeting' + %~ f (_crInv cr IM.! _crInvSel cr) cr w + weaponReloadSounds :: Creature -> World -> World weaponReloadSounds cr w = case cr ^? crInv . ix (_crInvSel cr) . itConsumption of Just am@LoadableAmmo{} -> case _reloadType am of diff --git a/src/Dodge/Data.hs b/src/Dodge/Data.hs index 019b24712..03d7b9458 100644 --- a/src/Dodge/Data.hs +++ b/src/Dodge/Data.hs @@ -370,6 +370,7 @@ data Item = Item , _itInvDisplay :: Item -> [String] , _itInvColor :: Color , _itTargeting :: Maybe (World -> Maybe Point2, Int -> Item -> Creature -> World -> Picture) + , _itTargeting' :: Targeting , _itDimension :: ItemDimension , _itCurseStatus :: CurseStatus , _itParams :: ItemParams @@ -379,10 +380,10 @@ data Item = Item } data Targeting = NoTargeting - | Targeting - { _tgPos :: Maybe Point2 - , _tgUpdate :: Item -> Creature -> World -> Maybe Point2 - , _tgDraw :: Item -> Creature -> World -> Picture + | TargetingOnHeld + { _tgPos :: Maybe Point2 + , _tgHeldUpdate :: Item -> Creature -> World -> Targeting -> Targeting + , _tgDraw :: Item -> Creature -> World -> Picture } data ModuleSlot = ModBullet diff --git a/src/Dodge/Default.hs b/src/Dodge/Default.hs index cfeb54cd0..090f01f9b 100644 --- a/src/Dodge/Default.hs +++ b/src/Dodge/Default.hs @@ -157,6 +157,7 @@ defaultEquipment = Item , _itTargeting = Nothing , _itModules = M.empty , _itScope = NoScope + , _itTargeting' = NoTargeting } defaultItZoom :: ItZoom defaultItZoom = ItZoom 20 0.2 1 @@ -182,6 +183,7 @@ defaultConsumable = Item , _itTweaks = NoTweaks , _itModules = M.empty , _itScope = NoScope + , _itTargeting' = NoTargeting } defaultApplyDamage :: [DamageType] -> Creature -> (World -> World, Creature) defaultApplyDamage ds cr = (id, doPoisonDam $ foldl' (flip $ \d c -> snd $ applyIndividualDamage d c) cr ds') diff --git a/src/Dodge/Default/Weapon.hs b/src/Dodge/Default/Weapon.hs index 241b063da..3151f8854 100644 --- a/src/Dodge/Default/Weapon.hs +++ b/src/Dodge/Default/Weapon.hs @@ -104,6 +104,7 @@ defaultGun = Item ,(ModBulletTarget,DefaultModule) ] , _itScope = NoScope + , _itTargeting' = NoTargeting } defaultCraftable :: Item defaultCraftable = Item @@ -126,6 +127,7 @@ defaultCraftable = Item , _itTweaks = NoTweaks , _itModules = M.empty , _itScope = NoScope + , _itTargeting' = NoTargeting } defItDim :: ItemDimension defItDim = ItemDimension