From 154abf0bad375d1332d26c69c6986212bd2d3a24 Mon Sep 17 00:00:00 2001 From: justin Date: Sat, 11 Dec 2021 18:24:53 +0000 Subject: [PATCH] Start removing Reader monad from internal creature update --- src/Dodge/Creature.hs | 4 +- src/Dodge/Creature/AutoCrit.hs | 2 +- src/Dodge/Creature/SentinelAI.hs | 68 +++++++------------------- src/Dodge/Placement/Instance/Turret.hs | 7 +-- 4 files changed, 25 insertions(+), 56 deletions(-) diff --git a/src/Dodge/Creature.hs b/src/Dodge/Creature.hs index 0c8f5f94e..a85d0a1cf 100644 --- a/src/Dodge/Creature.hs +++ b/src/Dodge/Creature.hs @@ -89,7 +89,7 @@ longCrit :: Creature longCrit = defaultCreature { _crPict = basicCrPict red -- , _crUpdate = stateUpdate sniperAI - , _crUpdate = stateUpdate $ impulsiveAIR $ sentinelFireTypeR $ const shootTillEmpty + , _crUpdate = stateUpdate' $ impulsiveAI $ sentinelFireType $ const shootTillEmpty , _crActionPlan = ActionPlan { _crImpulse = [] , _crAction = [] @@ -109,7 +109,7 @@ multGunCrit = defaultCreature , _crInvSel = 0 , _crRad = 10 , _crHP = 300 - , _crUpdate = stateUpdate $ impulsiveAIR $ sentinelExtraWatchUpdate + , _crUpdate = stateUpdate' $ impulsiveAI $ sentinelExtraWatchUpdate [ ( not . crHasAmmo , \_ _ -> StrategyActions Reload reloadActions ) diff --git a/src/Dodge/Creature/AutoCrit.hs b/src/Dodge/Creature/AutoCrit.hs index a6168ec36..f72b7ec9b 100644 --- a/src/Dodge/Creature/AutoCrit.hs +++ b/src/Dodge/Creature/AutoCrit.hs @@ -21,7 +21,7 @@ import qualified Data.IntMap.Strict as IM autoCrit :: Creature autoCrit = defaultCreature { _crPict = basicCrPict red - , _crUpdate = stateUpdate $ impulsiveAIR sentinelAI + , _crUpdate = stateUpdate' $ impulsiveAI sentinelAI , _crActionPlan = ActionPlan { _crImpulse = [] , _crAction = [] diff --git a/src/Dodge/Creature/SentinelAI.hs b/src/Dodge/Creature/SentinelAI.hs index 3fb553aef..8ec0b6b5e 100644 --- a/src/Dodge/Creature/SentinelAI.hs +++ b/src/Dodge/Creature/SentinelAI.hs @@ -1,10 +1,10 @@ module Dodge.Creature.SentinelAI ( sentinelAI , sentinelFireType - , sentinelFireTypeR , sentinelExtraWatchUpdate ) where import Dodge.Data +import Dodge.Creature.ChainUpdates import Dodge.Base.Collide import Dodge.Creature.Test import Dodge.Creature.Volition @@ -16,11 +16,10 @@ import Geometry.Data import Data.Maybe import Control.Lens -import Control.Monad -import Control.Monad.Reader -sentinelAI :: Creature -> Reader World Creature -sentinelAI = sentinelExtraWatchUpdate +sentinelAI :: World -> Creature -> Creature +sentinelAI w = reloadOverride . + sentinelExtraWatchUpdate [ (crHasTargetLOS , \ _ cr -> StrategyActions (ShootAt (fromJust $ tcid cr)) [ DoActionIf @@ -35,22 +34,15 @@ sentinelAI = sentinelExtraWatchUpdate ] ) ] - >=> reloadOverrideR + w where advanceShoot = DoImpulses [UseItem, MoveForward 3] tcid cr = _crID <$> _targetCr (_crIntention cr) - lostest (w,cr) = maybe False (\cid -> canSee (_crID cr) cid w) (tcid cr) + lostest (w',cr) = maybe False (\cid -> canSee (_crID cr) cid w') (tcid cr) --chainCreatureUpdates :: [World -> Creature -> Creature] -> World -> Creature -> Creature --chainCreatureUpdates ls w cr = foldr (\f -> f w) cr ls -chainCreatureUpdatesLR - :: [Either (World -> Creature -> Creature) (Creature -> Creature)] - -> World -> Creature -> Creature -chainCreatureUpdatesLR ls w cr = foldr unf cr ls - where - unf (Left g) = g w - unf (Right g) = g sentinelFireType :: (Int -> Action) -> World -> Creature -> Creature sentinelFireType f = chainCreatureUpdatesLR @@ -79,46 +71,22 @@ sentinelFireType f = chainCreatureUpdatesLR , _targetSeenAt = V2 0 0 -- hack } -sentinelFireTypeR - :: (Int -> Action) - -> Creature - -> Reader World Creature -sentinelFireTypeR f = performActionsR - >=> watchUpdateStratR - [ (crHasTargetLOS, \_ _ -> StrategyActions (ShootAt 0) - [ drawwp `DoActionThen` f 0 `DoActionThen` DoImpulses [ChangeStrategy WatchAndWait] - , aiming - ] - ) - , (crAwayFromPost, goToPostStrat) - ] - >=> perceptionUpdate [0] - >=> doStrategyActionsR - >=> reloadOverrideR - >=> targetYouWhenCognizantR - >=> overrideInternalRRR - (\cr -> (&&) <$> crHasTargetR cr <*> crStratConMatchesR (GetTo (V2 0 0)) cr) - (pure . (crActionPlan . crStrategy .~ WatchAndWait)) - where - drawwp = DoActionIfElse NoAction crIsAiming (DoActionThen drawWeapon (WaitThen 50 NoAction)) - aiming = AimAt - { _targetID = 0 - , _targetSeenAt = V2 0 0 -- hack - } - sentinelExtraWatchUpdate :: [((World, Creature) -> Bool , World -> Creature -> Strategy)] + -> World -> Creature - -> Reader World Creature -sentinelExtraWatchUpdate xs = performActionsR - >=> watchUpdateStratR + -> Creature +sentinelExtraWatchUpdate xs = chainCreatureUpdatesLR + [ Left performActions + , Left $ watchUpdateStrat ( xs ++ [(crAwayFromPost, goToPostStrat)] ) - >=> perceptionUpdate [0] - >=> doStrategyActionsR - >=> targetYouWhenCognizantR - >=> overrideInternalRRR - (\cr -> (&&) <$> crHasTargetR cr <*> crStratConMatchesR (GetTo (V2 0 0)) cr) - (pure . (crActionPlan . crStrategy .~ WatchAndWait)) + , Left $ perceptionUpdate' [0] + , Right doStrategyActions + , Left targetYouWhenCognizant + , Right $ overrideInternal + (\cr -> crHasTarget' cr && crStratConMatches' (GetTo (V2 0 0)) cr) + (crActionPlan . crStrategy .~ WatchAndWait) + ] --shootAtAdvance :: Int -> [Action] --shootAtAdvance tcid = diff --git a/src/Dodge/Placement/Instance/Turret.hs b/src/Dodge/Placement/Instance/Turret.hs index ab16bf30c..b308fee44 100644 --- a/src/Dodge/Placement/Instance/Turret.hs +++ b/src/Dodge/Placement/Instance/Turret.hs @@ -1,13 +1,13 @@ module Dodge.Placement.Instance.Turret where import Color import Dodge.Data -import Dodge.Reloading +--import Dodge.Reloading import Dodge.Creature.State import Dodge.Creature.Impulse import Dodge.Creature.Picture import Dodge.LevelGen.Data import Dodge.Default -import Dodge.Creature.Impulse.UseItem +--import Dodge.Creature.Impulse.UseItem import Dodge.FloorItem import Dodge.Wall.Delete import Dodge.WorldEvent.Explosion @@ -43,6 +43,7 @@ lasTurret = Turret , _tuMCrID = Nothing } +-- this needs a major cleanup updateTurret :: Float -> Machine -> World -> World updateTurret rotSpeed mc w | _mcHP mc < 1 = w & machines %~ IM.delete mcid @@ -72,7 +73,7 @@ updateTurret rotSpeed mc w & crPict .~ (\cr _ _ -> drawCrEquipment cr) -- & crPict .~ basicCrPict red -- & crUpdate .~ (\cr -> crUpCrUp stepReloading cr . invSideEff cr) - & crUpdate .~ stateUpdate' (\cr w -> followImpulses w cr) + & crUpdate .~ stateUpdate' (\cr w'' -> followImpulses w'' cr) & crStance . posture .~ Aiming Just cid -> w' & creatures . ix cid . crPos .~ mcpos