Skip to content

Commit 680ac78

Browse files
WhakomaticWhakomatic
authored andcommitted
use UnitState.aTraversals
1 parent 7680448 commit 680ac78

2 files changed

Lines changed: 27 additions & 24 deletions

File tree

X2WOTCCommunityHighlander/Src/XComGame/Classes/XComGameState_Unit.uc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -291,7 +291,8 @@ var() TAppearance kAppearance;
291291
/**
292292
* THESE VARS HAVE BEEN COPIED FROM TCharacter AND ARE NOT REFACTORED YET
293293
*/
294-
var() protected int aTraversals[ETraversalType.EnumCount]<FGDEIgnore=true>;
294+
// HL-Docs: ref:AIHazardEscape; issue:1559
295+
var() /* protected */ int aTraversals[ETraversalType.EnumCount]<FGDEIgnore=true>;
295296

296297
/**
297298
* END TCharacter VARS

X2WOTCCommunityHighlander/Src/XComGame/Classes/XGAIBehavior.uc

Lines changed: 25 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -8631,9 +8631,9 @@ simulated function bool MoveToPoint(vector vDestination, optional out string Fai
86318631
local TTile kTileDest;
86328632
local array<PathPoint> PathPoints;
86338633
local array<ETraversalType> AllowedTraversals;
8634+
local bool bNeedsHazardEscape;
86348635
86358636
bPathFailed=false;
8636-
86378637
kTileDest = `XWORLD.GetTileCoordinatesFromPosition(vDestination);
86388638
86398639
if (kTileDest.X == UnitState.TileLocation.X && kTileDest.Y == UnitState.TileLocation.Y && abs(UnitState.TileLocation.Z-kTileDest.Z) <= 3)
@@ -8651,8 +8651,9 @@ simulated function bool MoveToPoint(vector vDestination, optional out string Fai
86518651
}
86528652
86538653
// HL-Docs: ref:AIHazardEscape; issue:1559
8654-
// IsTileReachable will always return false if surrounded by hazards
8655-
if (!bPathFailed && !NeedsHazardEscape())
8654+
// IsTileReachable will always return false if surrounded by hazards, so skip this check
8655+
bNeedsHazardEscape = NeedsHazardEscape();
8656+
if (!bPathFailed && !bNeedsHazardEscape)
86568657
{
86578658
bPathFailed = !m_kUnit.m_kReachableTilesCache.IsTileReachable(kTileDest);
86588659
if (bPathFailed)
@@ -8661,33 +8662,34 @@ simulated function bool MoveToPoint(vector vDestination, optional out string Fai
86618662
}
86628663
}
86638664
8664-
if( !bPathFailed || bForcePathIfUnreachable || NeedsHazardEscape() )
8665+
if( !bPathFailed || bForcePathIfUnreachable || bNeedsHazardEscape )
86658666
{
86668667
if (XGAIBehavior_Civilian(self) != none)
86678668
{
86688669
XGAIBehavior_Civilian(self).m_iMoveTimeStart = WorldInfo.TimeSeconds;
86698670
}
86708671
86718672
// HL-Docs: ref:AIHazardEscape; issue:1559
8672-
// Use BuildNonUnitPath for hazard escape to ensure the unit can path out of hazards
8673-
if (NeedsHazardEscape())
8674-
{
8675-
// Build allowed traversals from unit's character template
8676-
if (UnitState.GetMyTemplate().bCanUse_eTraversal_Normal) AllowedTraversals.AddItem(eTraversal_Normal);
8677-
if (UnitState.GetMyTemplate().bCanUse_eTraversal_ClimbOver) AllowedTraversals.AddItem(eTraversal_ClimbOver);
8678-
if (UnitState.GetMyTemplate().bCanUse_eTraversal_ClimbOnto) AllowedTraversals.AddItem(eTraversal_ClimbOnto);
8679-
if (UnitState.GetMyTemplate().bCanUse_eTraversal_ClimbLadder) AllowedTraversals.AddItem(eTraversal_ClimbLadder);
8680-
if (UnitState.GetMyTemplate().bCanUse_eTraversal_DropDown) AllowedTraversals.AddItem(eTraversal_DropDown);
8681-
if (UnitState.GetMyTemplate().bCanUse_eTraversal_Grapple) AllowedTraversals.AddItem(eTraversal_Grapple);
8682-
if (UnitState.GetMyTemplate().bCanUse_eTraversal_Landing) AllowedTraversals.AddItem(eTraversal_Landing);
8683-
if (UnitState.GetMyTemplate().bCanUse_eTraversal_BreakWindow) AllowedTraversals.AddItem(eTraversal_BreakWindow);
8684-
if (UnitState.GetMyTemplate().bCanUse_eTraversal_KickDoor) AllowedTraversals.AddItem(eTraversal_KickDoor);
8685-
if (UnitState.GetMyTemplate().bCanUse_eTraversal_JumpUp) AllowedTraversals.AddItem(eTraversal_JumpUp);
8686-
if (UnitState.GetMyTemplate().bCanUse_eTraversal_WallClimb) AllowedTraversals.AddItem(eTraversal_WallClimb);
8687-
if (UnitState.GetMyTemplate().bCanUse_eTraversal_BreakWall) AllowedTraversals.AddItem(eTraversal_BreakWall);
8688-
if (UnitState.GetMyTemplate().bCanUse_eTraversal_Launch) AllowedTraversals.AddItem(eTraversal_Launch);
8689-
if (UnitState.GetMyTemplate().bCanUse_eTraversal_Flying) AllowedTraversals.AddItem(eTraversal_Flying);
8690-
if (UnitState.GetMyTemplate().bCanUse_eTraversal_Land) AllowedTraversals.AddItem(eTraversal_Land);
8673+
// Use BuildNonUnitPath to path through hazards with runtime traversal capabilities
8674+
if (bNeedsHazardEscape)
8675+
{
8676+
// Build allowed traversals from unit's runtime traversal capabilities
8677+
if (UnitState.aTraversals[eTraversal_Normal] > 0) AllowedTraversals.AddItem(eTraversal_Normal);
8678+
if (UnitState.aTraversals[eTraversal_ClimbOver] > 0) AllowedTraversals.AddItem(eTraversal_ClimbOver);
8679+
if (UnitState.aTraversals[eTraversal_ClimbOnto] > 0) AllowedTraversals.AddItem(eTraversal_ClimbOnto);
8680+
if (UnitState.aTraversals[eTraversal_ClimbLadder] > 0) AllowedTraversals.AddItem(eTraversal_ClimbLadder);
8681+
if (UnitState.aTraversals[eTraversal_DropDown] > 0) AllowedTraversals.AddItem(eTraversal_DropDown);
8682+
if (UnitState.aTraversals[eTraversal_Grapple] > 0) AllowedTraversals.AddItem(eTraversal_Grapple);
8683+
if (UnitState.aTraversals[eTraversal_Landing] > 0) AllowedTraversals.AddItem(eTraversal_Landing);
8684+
if (UnitState.aTraversals[eTraversal_BreakWindow] > 0) AllowedTraversals.AddItem(eTraversal_BreakWindow);
8685+
if (UnitState.aTraversals[eTraversal_KickDoor] > 0) AllowedTraversals.AddItem(eTraversal_KickDoor);
8686+
if (UnitState.aTraversals[eTraversal_JumpUp] > 0) AllowedTraversals.AddItem(eTraversal_JumpUp);
8687+
if (UnitState.aTraversals[eTraversal_WallClimb] > 0) AllowedTraversals.AddItem(eTraversal_WallClimb);
8688+
if (UnitState.aTraversals[eTraversal_Phasing] > 0) AllowedTraversals.AddItem(eTraversal_Phasing);
8689+
if (UnitState.aTraversals[eTraversal_BreakWall] > 0) AllowedTraversals.AddItem(eTraversal_BreakWall);
8690+
if (UnitState.aTraversals[eTraversal_Launch] > 0) AllowedTraversals.AddItem(eTraversal_Launch);
8691+
if (UnitState.aTraversals[eTraversal_Flying] > 0) AllowedTraversals.AddItem(eTraversal_Flying);
8692+
if (UnitState.aTraversals[eTraversal_Land] > 0) AllowedTraversals.AddItem(eTraversal_Land);
86918693
class'X2PathSolver'.static.BuildNonUnitPath(UnitState.TileLocation, kTileDest, AllowedTraversals, Path);
86928694
}
86938695
else

0 commit comments

Comments
 (0)