Skip to content

Commit

Permalink
Issue X2CommunityCore#1408 - Add validation of targets for ArcWave ta…
Browse files Browse the repository at this point in the history
…rgeting method
  • Loading branch information
furudee committed Nov 14, 2024
1 parent bd7e566 commit 3096a43
Showing 1 changed file with 26 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,7 @@ function bool GetAdditionalTargets(out AvailableTarget AdditionalTargets)
local name AvailableCode;
local XComGameStateHistory History;
local XComGameState_BaseObject StateObject;
local array<StateObjectReference> ValidationTargets;

TargetedActor = GetTargetedActor();
TargetedPawn = XGUnit(TargetedActor);
Expand All @@ -136,23 +137,48 @@ function bool GetAdditionalTargets(out AvailableTarget AdditionalTargets)
History = `XCOMHISTORY;
for (i = 0; i < CurrentlyMarkedTargets.Length; ++i)
{

CurrentTargetUnit = XGUnit(CurrentlyMarkedTargets[i]);
if (CurrentTargetUnit != none)
{
StateObject = History.GetGameStateForObjectID(CurrentTargetUnit.ObjectID);
AvailableCode = ArcWaveTemplate.CheckMultiTargetConditions(Ability, UnitState, StateObject);

if (AvailableCode == 'AA_Success' && StateObject.ObjectID != AdditionalTargets.PrimaryTarget.ObjectID)
{
if (AdditionalTargets.AdditionalTargets.Find('ObjectID', StateObject.ObjectID) == INDEX_NONE)
{
AdditionalTargets.AdditionalTargets.AddItem(StateObject.GetReference());
}

ValidationTargets.AddItem(StateObject.GetReference());
}
}
}
// Start Issue #1408
/// HL-Docs ref:Bugfixes; issue:1408
/// Validates targets that were given as function parameter
for (i = AdditionalTargets.AdditionalTargets.Length - 1; i >= 0; --i)
{
// not a target that the ability actually hits
if( ValidationTargets.Find('ObjectID', AdditionalTargets.AdditionalTargets[i].ObjectID) == INDEX_NONE )
{
AdditionalTargets.AdditionalTargets.Remove(i, 1);
}
}
// End Issue #1408

return true;
}
}

// Start Issue #1408
/// HL-Docs ref:Bugfixes; issue:1408
/// Empty the AdditionalTargets array if the ability didn't hit any other tiles than primary target
/// or ability has no target
AdditionalTargets.AdditionalTargets.Length = 0;
// End Issue #1408

return false;
}

Expand Down

0 comments on commit 3096a43

Please sign in to comment.