Cleanup
This commit is contained in:
@@ -149,7 +149,7 @@ startCr = defaultCreature
|
|||||||
, _crMvDir = pi/2
|
, _crMvDir = pi/2
|
||||||
, _crID = 0
|
, _crID = 0
|
||||||
, _crPict = basicCrPict black
|
, _crPict = basicCrPict black
|
||||||
, _crUpdate = stateUpdate' yourControl
|
, _crUpdate = stateUpdate yourControl
|
||||||
, _crRad = 10
|
, _crRad = 10
|
||||||
, _crMass = 10
|
, _crMass = 10
|
||||||
, _crHP = 1000
|
, _crHP = 1000
|
||||||
|
|||||||
@@ -5,12 +5,10 @@ module Dodge.Creature.ChaseCrit
|
|||||||
import Dodge.Data
|
import Dodge.Data
|
||||||
import Dodge.Default
|
import Dodge.Default
|
||||||
import Dodge.Creature.Picture
|
import Dodge.Creature.Picture
|
||||||
import Dodge.Creature.ChainUpdates
|
import Dodge.Creature.Update
|
||||||
import Dodge.Creature.ReaderUpdate
|
import Dodge.Creature.ReaderUpdate
|
||||||
import Dodge.Creature.Impulse
|
|
||||||
import Dodge.Creature.Action
|
import Dodge.Creature.Action
|
||||||
import Dodge.Creature.Perception
|
import Dodge.Creature.Perception
|
||||||
import Dodge.Creature.State
|
|
||||||
import Dodge.Item.Consumable
|
import Dodge.Item.Consumable
|
||||||
import Dodge.Picture.Layer
|
import Dodge.Picture.Layer
|
||||||
import Dodge.SoundLogic
|
import Dodge.SoundLogic
|
||||||
@@ -33,7 +31,7 @@ smallChaseCrit = chaseCrit
|
|||||||
}
|
}
|
||||||
chaseCrit :: Creature
|
chaseCrit :: Creature
|
||||||
chaseCrit = defaultCreature
|
chaseCrit = defaultCreature
|
||||||
{ _crUpdate = stateUpdate' $ impulsiveAI' $ chainCreatureUpdates
|
{ _crUpdate = defaultImpulsive
|
||||||
[ const doStrategyActions
|
[ const doStrategyActions
|
||||||
, performActions
|
, performActions
|
||||||
, const overrideMeleeCloseTarget
|
, const overrideMeleeCloseTarget
|
||||||
|
|||||||
@@ -1,10 +1,7 @@
|
|||||||
{-# LANGUAGE TupleSections #-}
|
{-# LANGUAGE TupleSections #-}
|
||||||
module Dodge.Creature.Impulse
|
module Dodge.Creature.Impulse
|
||||||
( impulsiveAI
|
( impulsiveAI'
|
||||||
, impulsiveAI'
|
|
||||||
, followImpulses
|
|
||||||
, followThenClearImpulses
|
, followThenClearImpulses
|
||||||
, followThenClearImpulses'
|
|
||||||
) where
|
) where
|
||||||
import Dodge.Data
|
import Dodge.Data
|
||||||
import Dodge.Creature.Vocalization
|
import Dodge.Creature.Vocalization
|
||||||
@@ -18,6 +15,15 @@ import qualified Data.IntMap.Strict as IM
|
|||||||
import System.Random
|
import System.Random
|
||||||
import Data.Bifunctor
|
import Data.Bifunctor
|
||||||
--import Data.Maybe
|
--import Data.Maybe
|
||||||
|
--
|
||||||
|
impulsiveAIBeforeAfter
|
||||||
|
:: (World -> Creature -> Creature)
|
||||||
|
-> (World -> Creature -> Creature)
|
||||||
|
-> Creature -> World -> World
|
||||||
|
impulsiveAIBeforeAfter startup endup cr w = w' & creatures . ix (_crID cr) .~ endup w' cr'
|
||||||
|
where
|
||||||
|
w' = g w
|
||||||
|
(g,cr') = impulsiveAI startup cr w
|
||||||
|
|
||||||
impulsiveAI' :: (World -> Creature -> Creature)
|
impulsiveAI' :: (World -> Creature -> Creature)
|
||||||
-> Creature -> World -> World
|
-> Creature -> World -> World
|
||||||
@@ -32,15 +38,9 @@ impulsiveAI
|
|||||||
-> (World -> World , Creature)
|
-> (World -> World , Creature)
|
||||||
impulsiveAI f cr w = followImpulses w $ f w cr
|
impulsiveAI f cr w = followImpulses w $ f w cr
|
||||||
|
|
||||||
followThenClearImpulses' :: Creature -> World -> World
|
|
||||||
followThenClearImpulses' cr w = f w & creatures . ix (_crID cr) .~ cr'
|
|
||||||
where
|
|
||||||
(f,cr') = followThenClearImpulses w cr
|
|
||||||
|
|
||||||
followThenClearImpulses :: World -> Creature -> (World -> World, Creature)
|
followThenClearImpulses :: Creature -> World -> World
|
||||||
followThenClearImpulses w = second f . followImpulses w
|
followThenClearImpulses = impulsiveAIBeforeAfter (const id) (const $ crActionPlan . crImpulse .~ [])
|
||||||
where
|
|
||||||
f = crActionPlan . crImpulse .~ []
|
|
||||||
|
|
||||||
followImpulses :: World -> Creature -> (World -> World, Creature)
|
followImpulses :: World -> Creature -> (World -> World, Creature)
|
||||||
followImpulses w cr = foldr f (id, cr) (_crImpulse $ _crActionPlan cr)
|
followImpulses w cr = foldr f (id, cr) (_crImpulse $ _crActionPlan cr)
|
||||||
|
|||||||
@@ -4,8 +4,7 @@ module Dodge.Creature.LtAutoCrit
|
|||||||
import Dodge.Data
|
import Dodge.Data
|
||||||
import Dodge.Default
|
import Dodge.Default
|
||||||
import Dodge.Creature.Picture
|
import Dodge.Creature.Picture
|
||||||
import Dodge.Creature.ChainUpdates
|
import Dodge.Creature.Update
|
||||||
import Dodge.Creature.Impulse
|
|
||||||
import Dodge.Creature.Action
|
import Dodge.Creature.Action
|
||||||
import Dodge.Creature.Test
|
import Dodge.Creature.Test
|
||||||
import Dodge.Creature.Volition
|
import Dodge.Creature.Volition
|
||||||
@@ -13,8 +12,6 @@ import Dodge.Creature.Strategy
|
|||||||
--import Dodge.Creature.ChooseTarget
|
--import Dodge.Creature.ChooseTarget
|
||||||
import Dodge.Creature.ReaderUpdate
|
import Dodge.Creature.ReaderUpdate
|
||||||
import Dodge.Creature.Perception
|
import Dodge.Creature.Perception
|
||||||
import Dodge.Creature.State
|
|
||||||
--import Dodge.Creature.State.Data
|
|
||||||
import Dodge.Item.Weapon.BulletGuns
|
import Dodge.Item.Weapon.BulletGuns
|
||||||
import Dodge.Item.Consumable
|
import Dodge.Item.Consumable
|
||||||
import Geometry
|
import Geometry
|
||||||
@@ -26,7 +23,7 @@ import Control.Lens
|
|||||||
ltAutoCrit :: Creature
|
ltAutoCrit :: Creature
|
||||||
ltAutoCrit = defaultCreature
|
ltAutoCrit = defaultCreature
|
||||||
{ _crPict = basicCrPict red
|
{ _crPict = basicCrPict red
|
||||||
, _crUpdate = stateUpdate' $ impulsiveAI' $ chainCreatureUpdates
|
, _crUpdate = defaultImpulsive
|
||||||
[ performActions
|
[ performActions
|
||||||
, watchUpdateStrat
|
, watchUpdateStrat
|
||||||
[ (crHasTargetLOS, \_ _ -> StrategyActions (ShootAt 0)
|
[ (crHasTargetLOS, \_ _ -> StrategyActions (ShootAt 0)
|
||||||
|
|||||||
@@ -4,15 +4,13 @@ module Dodge.Creature.PistolCrit
|
|||||||
import Dodge.Data
|
import Dodge.Data
|
||||||
import Dodge.Default
|
import Dodge.Default
|
||||||
import Dodge.Creature.Picture
|
import Dodge.Creature.Picture
|
||||||
|
import Dodge.Creature.Update
|
||||||
import Dodge.Creature.Test
|
import Dodge.Creature.Test
|
||||||
import Dodge.Creature.Impulse
|
|
||||||
import Dodge.Creature.Action
|
import Dodge.Creature.Action
|
||||||
import Dodge.Creature.Volition
|
import Dodge.Creature.Volition
|
||||||
import Dodge.Creature.Strategy
|
import Dodge.Creature.Strategy
|
||||||
import Dodge.Creature.ReaderUpdate
|
import Dodge.Creature.ReaderUpdate
|
||||||
import Dodge.Creature.ChainUpdates
|
|
||||||
import Dodge.Creature.Perception
|
import Dodge.Creature.Perception
|
||||||
import Dodge.Creature.State
|
|
||||||
--import Dodge.Creature.State.Data
|
--import Dodge.Creature.State.Data
|
||||||
import Dodge.Item.Weapon.BulletGuns
|
import Dodge.Item.Weapon.BulletGuns
|
||||||
import Dodge.Item.Consumable
|
import Dodge.Item.Consumable
|
||||||
@@ -29,7 +27,7 @@ import Control.Monad.State
|
|||||||
pistolCrit :: Creature
|
pistolCrit :: Creature
|
||||||
pistolCrit = defaultCreature
|
pistolCrit = defaultCreature
|
||||||
{ _crPict = basicCrPict red
|
{ _crPict = basicCrPict red
|
||||||
, _crUpdate = stateUpdate' $ impulsiveAI' $ chainCreatureUpdates
|
, _crUpdate = defaultImpulsive
|
||||||
[ performActions
|
[ performActions
|
||||||
, watchUpdateStrat
|
, watchUpdateStrat
|
||||||
[ (crHasTargetLOS, \w cr -> StrategyActions (ShootAt 0)
|
[ (crHasTargetLOS, \w cr -> StrategyActions (ShootAt 0)
|
||||||
|
|||||||
@@ -4,15 +4,13 @@ module Dodge.Creature.SpreadGunCrit
|
|||||||
import Dodge.Data
|
import Dodge.Data
|
||||||
import Dodge.Default
|
import Dodge.Default
|
||||||
import Dodge.Creature.Picture
|
import Dodge.Creature.Picture
|
||||||
|
import Dodge.Creature.Update
|
||||||
import Dodge.Creature.Test
|
import Dodge.Creature.Test
|
||||||
import Dodge.Creature.Impulse
|
|
||||||
import Dodge.Creature.Action
|
import Dodge.Creature.Action
|
||||||
import Dodge.Creature.Volition
|
import Dodge.Creature.Volition
|
||||||
import Dodge.Creature.Strategy
|
import Dodge.Creature.Strategy
|
||||||
import Dodge.Creature.ReaderUpdate
|
import Dodge.Creature.ReaderUpdate
|
||||||
import Dodge.Creature.ChainUpdates
|
|
||||||
import Dodge.Creature.Perception
|
import Dodge.Creature.Perception
|
||||||
import Dodge.Creature.State
|
|
||||||
--import Dodge.Creature.State.Data
|
--import Dodge.Creature.State.Data
|
||||||
import Dodge.Item.Weapon.BulletGuns
|
import Dodge.Item.Weapon.BulletGuns
|
||||||
import Dodge.Item.Consumable
|
import Dodge.Item.Consumable
|
||||||
@@ -27,7 +25,7 @@ import Control.Lens
|
|||||||
spreadGunCrit :: Creature
|
spreadGunCrit :: Creature
|
||||||
spreadGunCrit = defaultCreature
|
spreadGunCrit = defaultCreature
|
||||||
{ _crPict = basicCrPict red
|
{ _crPict = basicCrPict red
|
||||||
, _crUpdate = stateUpdate' $ impulsiveAI' $ chainCreatureUpdates
|
, _crUpdate = defaultImpulsive
|
||||||
[performActions
|
[performActions
|
||||||
,watchUpdateStrat
|
,watchUpdateStrat
|
||||||
[ (crHasTargetLOS, \_ _ -> StrategyActions (ShootAt 0)
|
[ (crHasTargetLOS, \_ _ -> StrategyActions (ShootAt 0)
|
||||||
|
|||||||
+20
-61
@@ -1,9 +1,6 @@
|
|||||||
module Dodge.Creature.State
|
module Dodge.Creature.State
|
||||||
( stateUpdate'
|
( stateUpdate
|
||||||
, stateUpdateDamage
|
|
||||||
, doDamage
|
, doDamage
|
||||||
, clearDamage
|
|
||||||
, invSideEff
|
|
||||||
) where
|
) where
|
||||||
import Dodge.Data
|
import Dodge.Data
|
||||||
import Dodge.Hammer
|
import Dodge.Hammer
|
||||||
@@ -49,54 +46,39 @@ foldCr xs cr w = foldr ($ cr) w xs
|
|||||||
-- the creature before or after it has moved?
|
-- the creature before or after it has moved?
|
||||||
-- at what point invSideEffects is applied wrt to when the creature moves
|
-- at what point invSideEffects is applied wrt to when the creature moves
|
||||||
-- may effect whether the shield moves correctly
|
-- may effect whether the shield moves correctly
|
||||||
stateUpdate' :: (Creature -> World -> World) -> Creature -> World -> World
|
stateUpdate :: (Creature -> World -> World) -> Creature -> World -> World
|
||||||
stateUpdate' f = foldCr
|
stateUpdate f = foldCr
|
||||||
[ checkDeath
|
[ checkDeath
|
||||||
, doDamage
|
, doDamage
|
||||||
, invSideEff
|
, invSideEff
|
||||||
, movementSideEff
|
, movementSideEff
|
||||||
, moveCrHammerUp
|
, internalUpdate
|
||||||
, stepReloading'
|
|
||||||
, updateMovement'
|
|
||||||
, f
|
, f
|
||||||
]
|
]
|
||||||
|
|
||||||
checkDeath :: Creature -> World -> World
|
checkDeath :: Creature -> World -> World
|
||||||
checkDeath cr
|
checkDeath cr w
|
||||||
| _crHP cr < 1 = creatures . at (_crID cr) .~ Nothing -- TODO add corpse
|
| _crHP cr > 0 = w
|
||||||
| otherwise = id
|
| otherwise = w
|
||||||
moveCrHammerUp :: Creature -> World -> World
|
& creatures . at (_crID cr) .~ Nothing
|
||||||
moveCrHammerUp cr = creatures . ix (_crID cr) . crHammerPosition %~ moveHammerUp
|
& stopSoundFrom (CrWeaponSound (_crID cr) 0)
|
||||||
|
& over decorations addCorpse
|
||||||
stepReloading' :: Creature -> World -> World
|
& dropByState cr
|
||||||
stepReloading' cr = creatures . ix (_crID cr) %~ stepReloading
|
|
||||||
|
|
||||||
updateMovement' :: Creature -> World -> World
|
|
||||||
updateMovement' cr = creatures . ix (_crID cr) %~ updateMovement
|
|
||||||
|
|
||||||
stateUpdateDamage :: (Creature -> World -> World)
|
|
||||||
-> (Creature -> World -> (World -> World, Creature))
|
|
||||||
-> Creature -> World -> World
|
|
||||||
stateUpdateDamage damageupdate u cr w = damageupdate cr
|
|
||||||
$ invSideEff upcr . movementSideEff cr . deathEff . f
|
|
||||||
$ w
|
|
||||||
& creatures . at (_crID cr) .~ (mvcrhammerup . stepReloading <$> crOrCorpse upcr)
|
|
||||||
where
|
where
|
||||||
(f,upcr) = u (updateMovement cr) w
|
|
||||||
mvcrhammerup = crHammerPosition %~ moveHammerUp
|
|
||||||
crOrCorpse cr'
|
|
||||||
| cr' ^. crHP > 0 = Just cr'
|
|
||||||
| otherwise = Nothing
|
|
||||||
deathEff
|
|
||||||
| cr ^.crHP > 0 = id
|
|
||||||
| otherwise = stopSoundFrom (CrWeaponSound (_crID cr) 0)
|
|
||||||
. over decorations addCorpse
|
|
||||||
. dropByState cr
|
|
||||||
addCorpse = IM.insertNewKey
|
addCorpse = IM.insertNewKey
|
||||||
$ uncurryV translate (_crOldPos cr)
|
$ uncurryV translate (_crOldPos cr)
|
||||||
$ rotate (_crDir cr)
|
$ rotate (_crDir cr)
|
||||||
(_crCorpse cr)
|
(_crCorpse cr)
|
||||||
|
|
||||||
|
internalUpdate :: Creature -> World -> World
|
||||||
|
internalUpdate cr = creatures . ix (_crID cr) %~
|
||||||
|
( (crHammerPosition %~ moveHammerUp)
|
||||||
|
. stepReloading
|
||||||
|
. updateMovement
|
||||||
|
)
|
||||||
|
|
||||||
-- | Drop items according to the creature state.
|
-- | Drop items according to the creature state.
|
||||||
|
-- TODO make sure this doesn't mess up any ItemPosition
|
||||||
dropByState :: Creature -> World -> World
|
dropByState :: Creature -> World -> World
|
||||||
dropByState cr w = foldr (copyInvItemToFloor cr) w $ case cr ^. crState . crDropsOnDeath of
|
dropByState cr w = foldr (copyInvItemToFloor cr) w $ case cr ^. crState . crDropsOnDeath of
|
||||||
DropAll -> IM.keys $ _crInv cr
|
DropAll -> IM.keys $ _crInv cr
|
||||||
@@ -108,25 +90,13 @@ setOldPos cr = cr
|
|||||||
& crOldPos .~ _crPos cr
|
& crOldPos .~ _crPos cr
|
||||||
& crOldDir .~ _crDir cr
|
& crOldDir .~ _crDir cr
|
||||||
|
|
||||||
clearDamage :: Creature -> World -> World
|
|
||||||
clearDamage cr = creatures . ix (_crID cr) . crState . crDamage .~ []
|
|
||||||
|
|
||||||
doDamage :: Creature -> World -> World
|
doDamage :: Creature -> World -> World
|
||||||
doDamage cr w = w
|
doDamage cr w = w
|
||||||
& creatures . ix (_crID cr) . crState . crDamage .~ []
|
& creatures . ix (_crID cr) . crState . crDamage .~ []
|
||||||
-- & creatures . ix (_crID cr) . crState . crPastDamage %~ advancePastDamages dams
|
|
||||||
& _crApplyDamage cr dams cr
|
& _crApplyDamage cr dams cr
|
||||||
where
|
where
|
||||||
dams = _crDamage $ _crState cr
|
dams = _crDamage $ _crState cr
|
||||||
|
|
||||||
--advancePastDamages :: [Damage] -> V.Vector [Damage] -> V.Vector [Damage]
|
|
||||||
--advancePastDamages newDs v = f $ V.backpermute v bpVector
|
|
||||||
-- where
|
|
||||||
-- f = V.modify $ \v' -> MV.write v' 0 newDs
|
|
||||||
|
|
||||||
--bpVector :: V.Vector Int
|
|
||||||
--bpVector = V.fromList $ 0 : [0 .. 18]
|
|
||||||
|
|
||||||
movementSideEff :: Creature -> World -> World
|
movementSideEff :: Creature -> World -> World
|
||||||
movementSideEff cr w
|
movementSideEff cr w
|
||||||
| hasJetPack = case cr ^? crStance . carriage of
|
| hasJetPack = case cr ^? crStance . carriage of
|
||||||
@@ -206,17 +176,6 @@ weaponReloadSounds cr w = case cr ^? crInv . ix (_crInvSel cr) . itConsumption o
|
|||||||
where
|
where
|
||||||
cid = _crID cr
|
cid = _crID cr
|
||||||
|
|
||||||
--weaponReloadSounds cr w = case _crInv cr IM.!? _crInvSel cr of
|
|
||||||
-- Just Weapon{_wpAmmo=LoadableAmmo{_wpReloadType = PassiveReload stype,_wpReloadTime=rt,_wpReloadState=rs} }
|
|
||||||
-- | rt == rs -> soundContinue (CrReloadSound 0) (_crPos cr) stype Nothing w
|
|
||||||
-- | otherwise -> w
|
|
||||||
-- Just Weapon{_wpAmmo=LoadableAmmo{_wpReloadState = 0}} -> w
|
|
||||||
-- Just Weapon{_wpAmmo=LoadableAmmo{_wpReloadState = 1}} -> stopSoundFrom (CrReloadSound cid) w
|
|
||||||
-- Just Weapon{} -> soundContinue (CrReloadSound cid) (_crPos cr) reloadS (Just 1) w
|
|
||||||
-- _ -> w
|
|
||||||
-- where
|
|
||||||
-- cid = _crID cr
|
|
||||||
|
|
||||||
updateMovement :: Creature -> Creature
|
updateMovement :: Creature -> Creature
|
||||||
updateMovement cr
|
updateMovement cr
|
||||||
| isFrictionless cr = over crPos (+.+ momentum) $ setOldPos cr
|
| isFrictionless cr = over crPos (+.+ momentum) $ setOldPos cr
|
||||||
|
|||||||
@@ -30,7 +30,6 @@ footstepSideEffect cr w = case cr ^? crStance . carriage of
|
|||||||
where
|
where
|
||||||
maxStride = _strideLength (_crStance cr)
|
maxStride = _strideLength (_crStance cr)
|
||||||
|
|
||||||
|
|
||||||
makeFootstepSound :: Int -> Int -> FootForward -> Point2 -> World -> World
|
makeFootstepSound :: Int -> Int -> FootForward -> Point2 -> World -> World
|
||||||
makeFootstepSound currentStride maxStride ff p
|
makeFootstepSound currentStride maxStride ff p
|
||||||
| currentStride > maxStride = soundMultiFrom footor p (chooseFootSound ff) Nothing
|
| currentStride > maxStride = soundMultiFrom footor p (chooseFootSound ff) Nothing
|
||||||
|
|||||||
@@ -6,4 +6,4 @@ import Dodge.Creature.ChainUpdates
|
|||||||
|
|
||||||
defaultImpulsive :: [World -> Creature -> Creature]
|
defaultImpulsive :: [World -> Creature -> Creature]
|
||||||
-> Creature -> World -> World
|
-> Creature -> World -> World
|
||||||
defaultImpulsive = stateUpdate' . impulsiveAI' . chainCreatureUpdates
|
defaultImpulsive = stateUpdate . impulsiveAI' . chainCreatureUpdates
|
||||||
|
|||||||
@@ -16,9 +16,8 @@ import Data.Maybe
|
|||||||
yourControl :: Creature -> World -> World
|
yourControl :: Creature -> World -> World
|
||||||
yourControl cr w = w
|
yourControl cr w = w
|
||||||
& updateUsingInput
|
& updateUsingInput
|
||||||
& creatures . ix (_crID cr) %~ (mouseActionsCr (_mouseButtons w) . wasdWithAiming w speed)
|
& creatures . ix (_crID cr) %~
|
||||||
where
|
(mouseActionsCr (_mouseButtons w) . wasdWithAiming w (_mvSpeed $ _crMvType cr))
|
||||||
speed = _mvSpeed $ _crMvType cr
|
|
||||||
|
|
||||||
{- | Turn key presses into creature movement. -}
|
{- | Turn key presses into creature movement. -}
|
||||||
wasdWithAiming
|
wasdWithAiming
|
||||||
@@ -51,8 +50,7 @@ wasdWithAiming w speed cr
|
|||||||
isReloading = _posture (_crStance cr) == Reloading
|
isReloading = _posture (_crStance cr) == Reloading
|
||||||
mouseDir = case cr ^? crInv . ix (_crInvSel cr) . itScope . scopePos of
|
mouseDir = case cr ^? crInv . ix (_crInvSel cr) . itScope . scopePos of
|
||||||
Just p -> normalizeAngle $ argV
|
Just p -> normalizeAngle $ argV
|
||||||
$ p +.+ 2 / _cameraZoom w
|
$ p +.+ 2 / _cameraZoom w *.* rotateV (_cameraRot w) (_mousePos w)
|
||||||
*.* rotateV (_cameraRot w) (_mousePos w)
|
|
||||||
_ -> normalizeAngle $ argV (_mousePos w) + _cameraRot w
|
_ -> normalizeAngle $ argV (_mousePos w) + _cameraRot w
|
||||||
|
|
||||||
wasdM :: SDL.Scancode -> Point2
|
wasdM :: SDL.Scancode -> Point2
|
||||||
|
|||||||
@@ -77,7 +77,7 @@ updateTurret rotSpeed mc w
|
|||||||
& crRad .~ 1
|
& crRad .~ 1
|
||||||
& crDir .~ mcdir
|
& crDir .~ mcdir
|
||||||
& crPict .~ (\cr _ _ -> drawCrEquipment cr)
|
& crPict .~ (\cr _ _ -> drawCrEquipment cr)
|
||||||
& crUpdate .~ stateUpdate' followThenClearImpulses'
|
& crUpdate .~ stateUpdate followThenClearImpulses
|
||||||
& crStance . posture .~ Aiming
|
& crStance . posture .~ Aiming
|
||||||
& crApplyDamage .~ applyNoDamage
|
& crApplyDamage .~ applyNoDamage
|
||||||
Just cid -> w'
|
Just cid -> w'
|
||||||
|
|||||||
Reference in New Issue
Block a user