Advertisement
shiremct

Break Squad Concealment

Jul 11th, 2019
1,636
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // ------------------------------------------------------------------------------
  2. // --------------------  ABILITY  EFFECT  HELPER  FUNCTIONS  --------------------
  3. // ------------------------------------------------------------------------------
  4.  
  5.  
  6. // Breaks squad concealment for abilities/effects that retain individual concealment
  7. static function BreakSquadConcealment(XComGameState_Player PlayerState, XComGameState NewGameState)
  8. {
  9.     local XComGameState_Unit NewUnitState, UnitState;
  10.     local XComGameState_Effect EffectState;
  11.     local StateObjectReference EffectRef;
  12.     local bool bRetainConcealment;
  13.  
  14.     // break squad concealment
  15.     if (PlayerState.bSquadIsConcealed)
  16.     {
  17.         if (NewGameState.GetContext().PostBuildVisualizationFn.Find(BuildVisualizationForConcealment_Broken_Individual) == INDEX_NONE) // we only need to visualize this once
  18.         {
  19.             NewGameState.GetContext().PostBuildVisualizationFn.AddItem(BuildVisualizationForConcealment_Broken_Individual);
  20.         }
  21.  
  22.         PlayerState = XComGameState_Player(NewGameState.ModifyStateObject(class'XComGameState_Player', PlayerState.ObjectID));
  23.         PlayerState.bSquadIsConcealed = false;
  24.  
  25.         `XEVENTMGR.TriggerEvent('SquadConcealmentBroken', PlayerState, PlayerState, NewGameState);
  26.  
  27.         // break concealment on each other squad member
  28.         foreach `XCOMHISTORY.IterateByClassType(class'XComGameState_Unit', UnitState)
  29.         {
  30.             if (UnitState.ControllingPlayer.ObjectID == PlayerState.ObjectID)
  31.             {
  32.                 bRetainConcealment = false;
  33.  
  34.                 if (UnitState.IsIndividuallyConcealed())
  35.                 {
  36.                     foreach UnitState.AffectedByEffects(EffectRef)
  37.                     {
  38.                         EffectState = XComGameState_Effect(`XCOMHISTORY.GetGameStateForObjectID(EffectRef.ObjectID));
  39.                         if (EffectState != none)
  40.                         {
  41.                             if (EffectState.GetX2Effect().RetainIndividualConcealment(EffectState, UnitState))
  42.                             {
  43.                                 bRetainConcealment = true;
  44.                                 break;
  45.                             }
  46.                         }
  47.                     }
  48.                 }
  49.  
  50.                 if (!bRetainConcealment)
  51.                 {
  52.                     NewUnitState = XComGameState_Unit(NewGameState.ModifyStateObject(class'XComGameState_Unit', UnitState.ObjectID));
  53.                     NewUnitState.SetIndividualConcealment(false, NewGameState);
  54.     }   }   }   }
  55. }
  56.  
  57. private function BuildVisualizationForConcealment_Broken_Individual(XComGameState VisualizeGameState)
  58. { class'XComGameState_Unit'.static.BuildVisualizationForConcealmentChanged(VisualizeGameState, false); }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement