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
+1 -1
View File
@@ -31,7 +31,7 @@ data Impulse
| RandomTurn Float
| RandomImpulse RandImpulse -- (State StdGen Impulse)
| TurnToward Point2 Float
| MvTurnToward Point2
| MvTurnToward Int Point2 Point2 Point2 -- the Int is just a label
| MvForward
| TurnTo Point2
| UseItem
+1
View File
@@ -78,6 +78,7 @@ data Intention = Intention
, _mvToPoint :: Maybe Point2
, _viewPoint :: Maybe Point2
}
deriving (Show)
--deriving (Eq, Show, Read) --Generic, Flat)
+1
View File
@@ -153,6 +153,7 @@ drawCrInfo u = foldMap f . IM.elems $ w ^. cWorld . lWorld . creatures
, g "crAction" $ cr ^? crActionPlan . apAction
, g "crImpulse" $ cr ^? crActionPlan . apImpulse
, g "crName" $ cr ^? crName
, g "crIntention" $ cr ^? crIntention
]
setClip :: String -> Universe -> Universe
+1 -1
View File
@@ -209,7 +209,7 @@ drawPathBetween u = concat $ do
let nodepos = (`getNodePos` w)
nodelist = makePathBetween sp ep w
return . setLayer DebugLayer $
color rose (foldMap (arrowPath . mapMaybe nodepos) nodelist)
color rose (foldMap (arrowPath . mapMaybe nodepos) nodelist)
<> drawCrossCol green sp
<> drawCrossCol cyan ep
<> foldMap (color green . arrow sp) (nodepos =<< walkableNodeNear w sp)
+2 -1
View File
@@ -247,7 +247,8 @@ tutHub = do
. (rmInPmnt .:~ (0, a))
. addDoorAtNthLinkToggleTerminal 1 ss j
=<< roomNgon 6 100
bcor <- treeAttachDeep (return door) <$> blockedCorridor
--bcor <- treeAttachDeep (return door) <$> blockedCorridor
bcor <- treeAttachDeep (return door) <$> return (return $ cleatOnward door)
r1 <- r burstRifle <&> rmPmnts .:~ t
r2 <- r (drumMag & itConsumables ?~ 90)
--r2 <- r (tinMag & itConsumables ?~ 500)