Start removing Reader monad from internal creature update
This commit is contained in:
@@ -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
|
||||
)
|
||||
|
||||
@@ -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 = []
|
||||
|
||||
@@ -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 =
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user