From c8c7066969686a08318a8b9d63b091925ec3af34 Mon Sep 17 00:00:00 2001 From: majcosta <34732933+majcosta@users.noreply.github.com> Date: Fri, 28 Jul 2023 12:07:25 -0300 Subject: [PATCH] Refactor merc backpack checking in `FindBestPath` (#162) * remove unused fNonFenceJumper from AstarPathfinder::GetPath * Extract backpack check into function and flip logic Avoiding double negatives is nice --- Tactical/PATHAI.H | 1 - Tactical/PATHAI.cpp | 10 ++++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/Tactical/PATHAI.H b/Tactical/PATHAI.H index c48a06a3..cf80a125 100644 --- a/Tactical/PATHAI.H +++ b/Tactical/PATHAI.H @@ -76,7 +76,6 @@ private: SOLDIERTYPE* pSoldier; INT8 onRooftop;//aka ubLevel, not sure if this bool is logically reversed yet - bool fNonFenceJumper; bool fNonSwimmer; bool fPathingForPlayer; bool fPathAroundPeople; diff --git a/Tactical/PATHAI.cpp b/Tactical/PATHAI.cpp index 45c76ca8..c8543b59 100644 --- a/Tactical/PATHAI.cpp +++ b/Tactical/PATHAI.cpp @@ -454,6 +454,11 @@ UINT32 guiFailedPathChecks = 0; UINT32 guiUnsuccessfulPathChecks = 0; #endif + +static auto canJumpFences(SOLDIERTYPE* pSoldier) -> bool { + return IS_MERC_BODY_TYPE(pSoldier) && pSoldier->CanClimbWithCurrentBackpack(); +} + //ADB the extra cover feature is supposed to pick a path of the same distance as one calculated with the feature off, //but a safer path, usually farther away from an enemy or following behind some cover. //however it has not been tested and it may need some work, I haven't touched it in a while @@ -638,7 +643,6 @@ int AStarPathfinder::GetPath(SOLDIERTYPE *s , fTurnBased = ( (gTacticalStatus.uiFlags & TURNBASED) && (gTacticalStatus.uiFlags & INCOMBAT) ); fPathingForPlayer = ( (pSoldier->bTeam == gbPlayerNum) && (!gTacticalStatus.fAutoBandageMode) && !(pSoldier->flags.uiStatusFlags & SOLDIER_PCUNDERAICONTROL) ); - fNonFenceJumper = !( IS_MERC_BODY_TYPE( pSoldier ) ); fNonSwimmer = !( IS_MERC_BODY_TYPE( pSoldier ) ); fPathAroundPeople = ( (fFlags & PATH_THROUGH_PEOPLE) == 0 ); fCloseGoodEnough = ( (fFlags & PATH_CLOSE_GOOD_ENOUGH) != 0); @@ -2244,7 +2248,6 @@ INT32 FindBestPath(SOLDIERTYPE *s , INT32 sDestination, INT8 bLevel, INT16 usMov DOOR * pDoor; STRUCTURE * pDoorStructure; BOOLEAN fDoorIsOpen = FALSE; - BOOLEAN fNonFenceJumper; BOOLEAN fNonSwimmer; BOOLEAN fPathAroundPeople; BOOLEAN fConsiderPersonAtDestAsObstacle; @@ -2316,7 +2319,6 @@ if(!GridNoOnVisibleWorldTile(iDestination)) fTurnBased = ( (gTacticalStatus.uiFlags & TURNBASED) && (gTacticalStatus.uiFlags & INCOMBAT) ); fPathingForPlayer = ( (s->bTeam == gbPlayerNum) && (!gTacticalStatus.fAutoBandageMode) && !(s->flags.uiStatusFlags & SOLDIER_PCUNDERAICONTROL) ); - fNonFenceJumper = !( IS_MERC_BODY_TYPE( s ) ) || (!s->CanClimbWithCurrentBackpack());//Moa: added backpack check // Flugente: nonswimmers are those who are not mercs and not boats fNonSwimmer = !(IS_MERC_BODY_TYPE( s ) ); @@ -2930,7 +2932,7 @@ if(!GridNoOnVisibleWorldTile(iDestination)) nextCost = gTileTypeMovementCost[ gpWorldLevelData[ newLoc ].ubTerrainID ]; } } - else if ( nextCost == TRAVELCOST_FENCE && fNonFenceJumper ) + else if ( nextCost == TRAVELCOST_FENCE && !canJumpFences(s)) { goto NEXTDIR; }