Move towards allowing equipable targeting items
This commit is contained in:
+36
-10
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user