Skip to content

Commit

Permalink
Refactor merc backpack checking in FindBestPath (#162)
Browse files Browse the repository at this point in the history
* remove unused fNonFenceJumper from AstarPathfinder::GetPath

* Extract backpack check into function and flip logic

Avoiding double negatives is nice
  • Loading branch information
majcosta authored Jul 28, 2023
1 parent a0ac81a commit c8c7066
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 5 deletions.
1 change: 0 additions & 1 deletion Tactical/PATHAI.H
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
10 changes: 6 additions & 4 deletions Tactical/PATHAI.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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 ) );
Expand Down Expand Up @@ -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;
}
Expand Down

0 comments on commit c8c7066

Please sign in to comment.