Remove reified impulses from creature record
This commit is contained in:
+104
-120
@@ -1,34 +1,24 @@
|
||||
module Dodge.Humanoid where
|
||||
module Dodge.Humanoid (chaseCritInternal) where
|
||||
|
||||
import Dodge.Creature.Impulse
|
||||
import Linear
|
||||
import Data.Maybe
|
||||
import Dodge.Creature.Action
|
||||
import Dodge.Creature
|
||||
import Dodge.Data.CreatureEffect
|
||||
import Dodge.Data.World
|
||||
import Geometry
|
||||
import LensHelp
|
||||
import RandomHelp
|
||||
|
||||
updateHumanoid :: Creature -> World -> World
|
||||
updateHumanoid cr = case cr ^?! crType of
|
||||
ChaseCrit {} ->
|
||||
humanoidAIList
|
||||
[ const doStrategyActions
|
||||
, performActions
|
||||
, overrideMeleeCloseTarget
|
||||
, setViewPos
|
||||
, setMvPos
|
||||
, chaseCritMv
|
||||
, chaseCritPerceptionUpdate [0]
|
||||
, targetYouWhenCognizant
|
||||
, const searchIfDamaged
|
||||
, const (crType . meleeCooldown %~ max 0 . subtract 1)
|
||||
, const (crVocalization . vcCoolDown %~ max 0 . subtract 1)
|
||||
]
|
||||
cr
|
||||
_ -> id
|
||||
chaseCritInternal :: World -> Creature -> Creature
|
||||
chaseCritInternal =
|
||||
chainCreatureUpdates
|
||||
[ const doStrategyActions
|
||||
, overrideMeleeCloseTarget
|
||||
, setViewPos
|
||||
, setMvPos
|
||||
, chaseCritMv
|
||||
, chaseCritPerceptionUpdate [0]
|
||||
, targetYouWhenCognizant
|
||||
, const searchIfDamaged
|
||||
, const (crType . meleeCooldown %~ max 0 . subtract 1)
|
||||
, const (crVocalization . vcCoolDown %~ max 0 . subtract 1)
|
||||
]
|
||||
|
||||
-- SpreadGunAI ->
|
||||
-- defaultImpulsive
|
||||
-- [ performActions
|
||||
@@ -180,97 +170,91 @@ updateHumanoid cr = case cr ^?! crType of
|
||||
-- , WaitThen 1 $ (DoImpulses [ChangeStrategy WatchAndWait])
|
||||
-- ]
|
||||
|
||||
humanoidAIList :: [World -> Creature -> Creature] -> Creature -> World -> World
|
||||
humanoidAIList l cr w = followImpulses cid $
|
||||
w & cWorld . lWorld . creatures . ix cid %~ chainCreatureUpdates l w
|
||||
where
|
||||
cid = cr ^. crID
|
||||
|
||||
chooseMovementPistol :: Creature -> World -> Action
|
||||
chooseMovementPistol cr w =
|
||||
chooseMovementPistol' cr w
|
||||
`DoActionThen` DoImpulses [ChangeStrategy WatchAndWait]
|
||||
|
||||
chooseMovementPistol' :: Creature -> World -> Action
|
||||
chooseMovementPistol' cr w =
|
||||
takeOneWeighted
|
||||
[chargeProb, retreatProb, strafeProb, strafeProb]
|
||||
[ chargeActions
|
||||
, retreatActionsPistol ycr cr
|
||||
, strafeLeftActions
|
||||
, strafeRightActions
|
||||
]
|
||||
& evalState
|
||||
$ g
|
||||
where
|
||||
g = _randGen w
|
||||
cpos = cr ^. crPos . _xy
|
||||
ycr = w ^?! cWorld . lWorld . creatures . ix 0
|
||||
ypos = ycr ^. crPos . _xy
|
||||
chargeProb
|
||||
| dist cpos ypos > 300 = 5
|
||||
| dist cpos ypos > 150 = 1
|
||||
| otherwise = 0
|
||||
strafeProb
|
||||
| dist cpos ypos > 150 = 1
|
||||
| otherwise = 0
|
||||
retreatProb
|
||||
| dist cpos ypos < 200 = 1 :: Float
|
||||
| otherwise = 0
|
||||
chargeActions =
|
||||
[TurnToward ypos 0.1]
|
||||
`DoImpulsesAlongside` 3
|
||||
`DoReplicate` ImpulsesList (replicate 9 [Move (V2 3 0)] ++ [[Move (V2 3 0), UseItem]])
|
||||
strafeLeftActions =
|
||||
DoImpulses [TurnToward yposr (2 * pi)]
|
||||
`DoActionThen` 3
|
||||
`DoReplicate` ImpulsesList (replicate 9 [Move (V2 0 3)] ++ [[Move (V2 0 3), UseItem]])
|
||||
strafeRightActions =
|
||||
DoImpulses [TurnToward yposl (2 * pi)]
|
||||
`DoActionThen` 3
|
||||
`DoReplicate` ImpulsesList (replicate 9 [Move (V2 0 (-3))] ++ [[Move (V2 0 (-3)), UseItem]])
|
||||
yposl = ypos -.- 100 *.* vNormal (normalizeV $ ypos -.- cpos)
|
||||
yposr = ypos +.+ 100 *.* vNormal (normalizeV $ ypos -.- cpos)
|
||||
|
||||
retreatActionsPistol :: Creature -> Creature -> Action
|
||||
retreatActionsPistol tcr cr =
|
||||
[TurnToward retreatOffset 0.2]
|
||||
`DoImpulsesAlongside` 3
|
||||
`DoReplicate` ImpulsesList (replicate 9 [Move (V2 (-3) 0)] ++ [[UseItem]])
|
||||
where
|
||||
cpos = cr ^. crPos . _xy
|
||||
tpos = tcr ^. crPos . _xy
|
||||
retreatOffset =
|
||||
let a
|
||||
| dist cpos tpos < 50 = 0
|
||||
| isLeftOfA (_crDir cr) (argV $ tpos -.- cpos) =
|
||||
-0.7
|
||||
| otherwise = 0.7
|
||||
in fromMaybe tpos $
|
||||
intersectLineLine
|
||||
cpos
|
||||
(cpos +.+ rotateV a (tpos -.- cpos))
|
||||
tpos
|
||||
(tpos +.+ vNormal (cpos -.- tpos))
|
||||
|
||||
retreatFireLauncher :: Action
|
||||
retreatFireLauncher =
|
||||
ImpulsesList ([UseItem] : replicate 20 [Turn 0.16])
|
||||
`DoActionThen` holsterWeapon
|
||||
`DoActionThen` ImpulsesList (replicate 30 [MoveForward 3])
|
||||
`DoActionThen` drawWeapon
|
||||
`DoActionThen` ImpulsesList ([UseItem] : replicate 20 [Turn $ negate 0.16])
|
||||
`DoActionThen` holsterWeapon
|
||||
`DoActionThen` ImpulsesList (replicate 15 [MoveForward 3])
|
||||
`DoActionThen` drawWeapon
|
||||
`DoActionThen` ImpulsesList
|
||||
( replicate
|
||||
100
|
||||
[ UseItem
|
||||
, ImpulseUseTarget (TurnTowardCr (pi / 16))
|
||||
]
|
||||
)
|
||||
`DoActionThen` 20
|
||||
`WaitThen` holsterWeapon
|
||||
`DoActionThen` ImpulsesList (replicate 15 [MoveForward 3])
|
||||
`DoActionThen` DoImpulses [ChangeStrategy WatchAndWait]
|
||||
--chooseMovementPistol :: Creature -> World -> Action
|
||||
--chooseMovementPistol cr w =
|
||||
-- chooseMovementPistol' cr w
|
||||
-- `DoActionThen` DoImpulses [ChangeStrategy WatchAndWait]
|
||||
--
|
||||
--chooseMovementPistol' :: Creature -> World -> Action
|
||||
--chooseMovementPistol' cr w =
|
||||
-- takeOneWeighted
|
||||
-- [chargeProb, retreatProb, strafeProb, strafeProb]
|
||||
-- [ chargeActions
|
||||
-- , retreatActionsPistol ycr cr
|
||||
-- , strafeLeftActions
|
||||
-- , strafeRightActions
|
||||
-- ]
|
||||
-- & evalState
|
||||
-- $ g
|
||||
-- where
|
||||
-- g = _randGen w
|
||||
-- cpos = cr ^. crPos . _xy
|
||||
-- ycr = w ^?! cWorld . lWorld . creatures . ix 0
|
||||
-- ypos = ycr ^. crPos . _xy
|
||||
-- chargeProb
|
||||
-- | dist cpos ypos > 300 = 5
|
||||
-- | dist cpos ypos > 150 = 1
|
||||
-- | otherwise = 0
|
||||
-- strafeProb
|
||||
-- | dist cpos ypos > 150 = 1
|
||||
-- | otherwise = 0
|
||||
-- retreatProb
|
||||
-- | dist cpos ypos < 200 = 1 :: Float
|
||||
-- | otherwise = 0
|
||||
-- chargeActions =
|
||||
-- [TurnToward ypos 0.1]
|
||||
-- `DoImpulsesAlongside` 3
|
||||
-- `DoReplicate` ImpulsesList (replicate 9 [Move (V2 3 0)] ++ [[Move (V2 3 0), UseItem]])
|
||||
-- strafeLeftActions =
|
||||
-- DoImpulses [TurnToward yposr (2 * pi)]
|
||||
-- `DoActionThen` 3
|
||||
-- `DoReplicate` ImpulsesList (replicate 9 [Move (V2 0 3)] ++ [[Move (V2 0 3), UseItem]])
|
||||
-- strafeRightActions =
|
||||
-- DoImpulses [TurnToward yposl (2 * pi)]
|
||||
-- `DoActionThen` 3
|
||||
-- `DoReplicate` ImpulsesList (replicate 9 [Move (V2 0 (-3))] ++ [[Move (V2 0 (-3)), UseItem]])
|
||||
-- yposl = ypos -.- 100 *.* vNormal (normalizeV $ ypos -.- cpos)
|
||||
-- yposr = ypos +.+ 100 *.* vNormal (normalizeV $ ypos -.- cpos)
|
||||
--
|
||||
--retreatActionsPistol :: Creature -> Creature -> Action
|
||||
--retreatActionsPistol tcr cr =
|
||||
-- [TurnToward retreatOffset 0.2]
|
||||
-- `DoImpulsesAlongside` 3
|
||||
-- `DoReplicate` ImpulsesList (replicate 9 [Move (V2 (-3) 0)] ++ [[UseItem]])
|
||||
-- where
|
||||
-- cpos = cr ^. crPos . _xy
|
||||
-- tpos = tcr ^. crPos . _xy
|
||||
-- retreatOffset =
|
||||
-- let a
|
||||
-- | dist cpos tpos < 50 = 0
|
||||
-- | isLeftOfA (_crDir cr) (argV $ tpos -.- cpos) =
|
||||
-- -0.7
|
||||
-- | otherwise = 0.7
|
||||
-- in fromMaybe tpos $
|
||||
-- intersectLineLine
|
||||
-- cpos
|
||||
-- (cpos +.+ rotateV a (tpos -.- cpos))
|
||||
-- tpos
|
||||
-- (tpos +.+ vNormal (cpos -.- tpos))
|
||||
--
|
||||
--retreatFireLauncher :: Action
|
||||
--retreatFireLauncher =
|
||||
-- ImpulsesList ([UseItem] : replicate 20 [Turn 0.16])
|
||||
-- `DoActionThen` holsterWeapon
|
||||
-- `DoActionThen` ImpulsesList (replicate 30 [MoveForward 3])
|
||||
-- `DoActionThen` drawWeapon
|
||||
-- `DoActionThen` ImpulsesList ([UseItem] : replicate 20 [Turn $ negate 0.16])
|
||||
-- `DoActionThen` holsterWeapon
|
||||
-- `DoActionThen` ImpulsesList (replicate 15 [MoveForward 3])
|
||||
-- `DoActionThen` drawWeapon
|
||||
-- `DoActionThen` ImpulsesList
|
||||
-- ( replicate
|
||||
-- 100
|
||||
-- [ UseItem
|
||||
-- , ImpulseUseTarget (TurnTowardCr (pi / 16))
|
||||
-- ]
|
||||
-- )
|
||||
-- `DoActionThen` 20
|
||||
-- `WaitThen` holsterWeapon
|
||||
-- `DoActionThen` ImpulsesList (replicate 15 [MoveForward 3])
|
||||
-- `DoActionThen` DoImpulses [ChangeStrategy WatchAndWait]
|
||||
|
||||
Reference in New Issue
Block a user