Move towards allowing equipable targeting items

This commit is contained in:
2023-01-06 11:01:32 +00:00
parent bf479ca080
commit 612ee85579
23 changed files with 152 additions and 145 deletions
+36 -10
View File
@@ -3,18 +3,19 @@ module Dodge.Creature.State (
doDamage,
) where
import Data.Maybe
import Dodge.Creature.Test
import Data.Foldable
import Data.Maybe
import Dodge.Base
import Dodge.Corpse.Make
import Dodge.Creature.Action
import Dodge.Creature.Damage
import Dodge.Creature.Impulse.Movement
import Dodge.Creature.State.WalkCycle
import Dodge.Creature.Test
import Dodge.Damage
import Dodge.Data.World
import Dodge.EnergyBall
import Dodge.Equipment
import Dodge.Euse
import Dodge.Hammer
import Dodge.ItEffect
@@ -233,11 +234,16 @@ equipmentEffects cr = flip (foldl' $ flip $ useEquipment cr) (IM.keys $ _crInvEq
-- a loop going over all inventory items
invSideEff :: Creature -> World -> World
invSideEff cr w = weaponReloadSounds cr $ IM.foldlWithKey' f w (_crInv cr)
invSideEff cr w =
crDoTargeting cr $
weaponReloadSounds cr $
over (cWorld . lWorld . creatures . ix (_crID cr)) crSetTargeting $
IM.foldl' f w (_crInv cr)
where
f w' i it =
f w' it =
itemInvSideEffect cr it $
doItemTargeting i cr w' & maybe id (\g -> doInvEffect g it cr) (it ^? itEffect . ieInv)
--doItemTargeting i cr w' & maybe id (\g -> doInvEffect g it cr) (it ^? itEffect . ieInv)
w' & maybe id (\g -> doInvEffect g it cr) (it ^? itEffect . ieInv)
itemInvSideEffect :: Creature -> Item -> World -> World
itemInvSideEffect cr it
@@ -269,13 +275,33 @@ updateAutoRecharge it = case it ^? itUse . leftConsumption of
| l < m -> it & itUse . leftConsumption . arProgress -~ 1
_ -> it
crSetTargeting :: Creature -> Creature
crSetTargeting cr = fromMaybe cr $ do
itm <- find hastargeting $ helditem ++ IM.elems (getCrEquipment cr)
tt <- itm ^? itUse . useTargeting . _Just
return $ cr & crTargeting . ctType ?~ tt
where
hastargeting itm = isJust (itm ^? itUse . useTargeting . _Just)
helditem = fromMaybe [] $ do
i <- cr ^? crInvSel . iselPos
itm <- cr ^? crInv . ix i
return [itm]
crDoTargeting :: Creature -> World -> World
crDoTargeting cr = fromMaybe id $ do
itm <- find hastargeting $ helditem ++ IM.elems (getCrEquipment cr)
invid <- itm ^? itLocation . ipInvID
return $ doItemTargeting invid cr
where
helditem = maybeToList $ cr ^? crInv . ix (crSel cr)
hastargeting itm = case itm ^? itUse . useTargeting of
Just _ -> True
_ -> False
doItemTargeting :: Int -> Creature -> World -> World
doItemTargeting invid cr w = case cr ^? crInv . ix invid . itUse . heldTargeting of
doItemTargeting invid cr w = case cr ^? crInv . ix invid . itUse . useTargeting . _Just of
Nothing -> w
Just NoTargeting -> w
Just t ->
let (w', t') = updateTargeting (_tgType t) (_crInv cr IM.! invid) cr w t
in w' & cWorld . lWorld . creatures . ix (_crID cr) . crInv . ix invid . itUse . heldTargeting .~ t'
Just t -> updateTargeting t cr w
weaponReloadSounds :: Creature -> World -> World
weaponReloadSounds cr w = case cr ^? crInvSel . iselAction of