Skip to content

Commit

Permalink
Implemented ForceAbortSelectedInfil. Closes #511
Browse files Browse the repository at this point in the history
  • Loading branch information
Xymanek committed Apr 23, 2020
1 parent 0eee19e commit 8277c92
Show file tree
Hide file tree
Showing 2 changed files with 62 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -1168,6 +1168,60 @@ exec function SetRiskOccurance (name RiskName, bool bOccurs)
`SubmitGameState(NewGameState);
}

exec function ForceAbortSelectedInfil ()
{
local XComGameState_MissionSiteInfiltration InfiltrationState;
local XComGameState_Activity_Infiltration ActivityState;
local UIMission_Infiltrated MissionScreen;
local XComGameState NewGameState;

MissionScreen = UIMission_Infiltrated(`SCREENSTACK.GetCurrentScreen());
if (MissionScreen == none)
{
`CI_Log("ForceAbortSelectedInfil failed - not looking at infiltration mission blades");
return;
}

NewGameState = class'XComGameStateContext_ChangeContainer'.static.CreateChangeState("CHEAT: ForceAbortSelectedInfil");

InfiltrationState = XComGameState_MissionSiteInfiltration(NewGameState.ModifyStateObject(class'XComGameState_MissionSiteInfiltration', MissionScreen.MissionRef.ObjectID));
ActivityState = XComGameState_Activity_Infiltration(class'XComGameState_Activity'.static.GetActivityFromObject(InfiltrationState));
ActivityState = XComGameState_Activity_Infiltration(NewGameState.ModifyStateObject(class'XComGameState_Activity_Infiltration', ActivityState.ObjectID));

ClearUnitsFromInfil(NewGameState, InfiltrationState);
ActivityState.OnInfilExpired(NewGameState); // Giant hack. Fix together with #513

`SubmitGameState(NewGameState);

MissionScreen.CloseScreenOnly();
}

simulated function ClearUnitsFromInfil (XComGameState NewGameState, XComGameState_MissionSiteInfiltration InfiltrationState)
{
local XComGameState_StaffSlot SlotState;
local XComGameState_Unit UnitState;
local XComGameStateHistory History;
local StateObjectReference UnitRef;

History = `XCOMHISTORY;

foreach InfiltrationState.SoldiersOnMission(UnitRef)
{
UnitState = XComGameState_Unit(History.GetGameStateForObjectID(UnitRef.ObjectID));
if (UnitState == none) continue;

SlotState = UnitState.GetStaffSlot();
SlotState.EmptySlot(NewGameState);

// Refresh the will recovery project
if (UnitState.IsSoldier() && UnitState.UsesWillSystem())
{
class'X2Helper_Infiltration'.static.DestroyWillRecoveryProject(NewGameState, UnitRef);
class'X2Helper_Infiltration'.static.CreateWillRecoveryProject(NewGameState, UnitState);
}
}
}

exec function ForceNextEnviromentalSitrep(name SitRep)
{
ForcedNextEnviromentalSitrep = SitRep;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,13 @@
class XComGameState_Activity_Infiltration extends XComGameState_Activity;

protected function EventListenerReturn OnActionExpired (Object EventData, Object EventSource, XComGameState GameState, Name Event, Object CallbackData)
{
OnInfilExpired(GameState);

return ELR_NoInterrupt;
}

function OnInfilExpired (XComGameState NewGameState)
{
local XComGameState_MissionSiteInfiltration MissionState;

Expand All @@ -18,11 +25,9 @@ protected function EventListenerReturn OnActionExpired (Object EventData, Object
{
if (MissionState.GetMissionSource().OnExpireFn != none)
{
MissionState.GetMissionSource().OnExpireFn(GameState, MissionState);
MissionState.GetMissionSource().OnExpireFn(NewGameState, MissionState);
}
}

return ELR_NoInterrupt;
}

protected function PostMarkCompleted (XComGameState NewGameState)
Expand Down

0 comments on commit 8277c92

Please sign in to comment.