Fix reversed impulse pathfinding bug

This commit is contained in:
2025-10-16 12:07:10 +01:00
parent df85624a49
commit 3bfe6f5dfd
9 changed files with 169 additions and 166 deletions
+5 -5
View File
@@ -62,17 +62,17 @@ performAimAt cr w tcid p = ([TurnToward tpos aimSp], Just $ AimAt tcid tpos)
performPathTo :: Creature -> World -> Point2 -> OutAction
performPathTo cr w p
| dist cpos p <= crRad (cr ^. crType) = ([], Nothing)
| isWalkable cpos p w = ([MvTurnToward p, MvForward, RandomTurn jit], Just (PathTo p))
| otherwise = case pointTowardsImpulse p cpos w of
| isWalkable cpos p w = ([MvTurnToward 0 cpos p p, MvForward, RandomTurn jit], Just (PathTo p))
| otherwise = case pointTowardsImpulse cpos p w of
Just q ->
(
[ MvTurnToward q
[ MvTurnToward 1 cpos p q
, MvForward
, RandomTurn jit
]
, Just (PathTo p)
)
_ -> ([], Nothing)
_ -> ([ChangeStrategy Flee], Nothing)
where
cpos = cr ^. crPos . _xy
jit = _mvTurnJit $ crMvType cr
@@ -80,7 +80,7 @@ performPathTo cr w p
performTurnToA :: Creature -> Point2 -> OutAction
performTurnToA cr p
| angleVV cdirv dirv < 0.1 = ([], Nothing)
| otherwise = ([MvTurnToward p, RandomTurn jit], Just (TurnToPoint p))
| otherwise = ([MvTurnToward 2 p p p, RandomTurn jit], Just (TurnToPoint p))
where
cpos = cr ^. crPos . _xy
cdirv = unitVectorAtAngle (_crDir cr)
+1 -1
View File
@@ -67,7 +67,7 @@ followImpulse cr w imp = case imp of
tcr <- w ^? cWorld . lWorld . creatures . ix i
return $ followImpulse cr w (doCrImp f tcr)
MvForward -> crup $ crMvForward speed (w ^. cWorld . lWorld) cr
MvTurnToward p ->
MvTurnToward _ _ _ p ->
crup $
creatureTurnToward p (turnRad $ safeAngleVV (p -.- cpos) (unitVectorAtAngle cdir)) cr
where
-1
View File
@@ -119,7 +119,6 @@ flockACC w cr = fromMaybe cr $ do
chaseCritMv :: World -> Creature -> Creature
chaseCritMv w cr = case _apStrategy (_crActionPlan cr) of
StrategyActions _ _ -> cr
WarningCry -> cr
MeleeStrike -> cr
CloseToMelee cid