Advertisement
Guest User

Untitled

a guest
Dec 8th, 2018
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. simulated function CallReinforcements_BuildVisualization(XComGameState VisualizeGameState)
  2. {
  3.     local XComGameStateHistory          History;
  4.     local XComGameStateContext_Ability  Context;
  5.     local StateObjectReference          SourceUnitRef;
  6.     local array<StateObjectReference>   ExcludedRefs;
  7.     local VisualizationActionMetadata   EmptyMetadata;
  8.     local VisualizationActionMetadata   SourceUnitMetadata, SpawnedUnitMetadata, CosmeticUnitMetadata;
  9.     local XComGameState_Unit            SourceUnitState, SpawnedUnit, CosmeticUnit;
  10.     local UnitValue                     SpawnedUnitValue;
  11.     local X2Effect_IRI_SpawnSoldier     SpawnSoldierEffect;
  12.     local X2Action_TimedWait            WaitAction;
  13.     local X2Action_Fire                 FireAction;
  14.     //local X2Action_EnterCover         EnterCoverAction;
  15.     local X2Action_CameraLookAt         LookAtAction;
  16.     local X2Action_WaitForAbilityEffect WaitForEffectAction;
  17.     local int i;
  18.     local bool bCheck;
  19.  
  20.     `LOG("Calling Dynamic Deployment Build Viz function", bLog, 'IRIDAR');
  21.  
  22.     History = `XCOMHISTORY;
  23.  
  24.     Context = XComGameStateContext_Ability(VisualizeGameState.GetContext());
  25.     SourceUnitRef = Context.InputContext.SourceObject;
  26.  
  27.     //Configure the visualization tree for the ability caster
  28.     //****************************************************************************************
  29.     SourceUnitMetadata = EmptyMetadata;
  30.     SourceUnitMetadata.StateObject_OldState = History.GetGameStateForObjectID(SourceUnitRef.ObjectID, eReturnType_Reference, VisualizeGameState.HistoryIndex - 1);
  31.     SourceUnitMetadata.StateObject_NewState = VisualizeGameState.GetGameStateForObjectID(SourceUnitRef.ObjectID);
  32.     SourceUnitMetadata.VisualizeActor = History.GetVisualizer(SourceUnitRef.ObjectID);
  33.  
  34.     //class'X2Action_ExitCover'.static.AddToVisualizationTree(SourceUnitMetadata, Context);
  35.     FireAction = X2Action_Fire(class'X2Action_Fire'.static.AddToVisualizationTree(SourceUnitMetadata, Context));
  36.     //EnterCoverAction = X2Action_EnterCover(class'X2Action_EnterCover'.static.AddToVisualizationTree(SourceUnitMetadata, Context));
  37.  
  38.     LookAtAction = X2Action_CameraLookAt(class'X2Action_CameraLookAt'.static.AddToVisualizationTree(SourceUnitMetadata, Context, false, FireAction));
  39.     LookAtAction.LookAtLocation = Context.InputContext.TargetLocations[0];
  40.  
  41.     // Configure the visualization tree for the spawned soldier
  42.     //******************************************************************************************
  43.     SourceUnitState = XComGameState_Unit(VisualizeGameState.GetGameStateForObjectID(SourceUnitRef.ObjectID));
  44.     // Only one target effect and it is X2Effect_SpawnRiftBeacon
  45.     SpawnSoldierEffect = X2Effect_IRI_SpawnSoldier(Context.ResultContext.ShooterEffectResults.Effects[0]);
  46.     if( SpawnSoldierEffect == none )
  47.     {
  48.         `RedScreenOnce("CallReinforcements_BuildVisualization: Missing X2Effect_IRI_SpawnSoldier");
  49.         return;
  50.     }
  51.  
  52.     //  in this cycle we go through non-zero Unit Values on the ability caster
  53.     //  these unit values contain the References to the units we need to visualize spawn for
  54.     i = 0;
  55.     SourceUnitState.GetUnitValue(name(class'X2Effect_IRI_SpawnSoldier'.default.SpawnedUnitValueName $ i), SpawnedUnitValue);
  56.  
  57.     while (SpawnedUnitValue.fValue != 0)
  58.     {
  59.         `LOG("Visualizing spawn for unit #: " @ i, bLog, 'IRIDAR');
  60.  
  61.         SpawnedUnitMetadata = EmptyMetadata;
  62.         SpawnedUnitMetadata.StateObject_OldState = History.GetGameStateForObjectID(SpawnedUnitValue.fValue, eReturnType_Reference, VisualizeGameState.HistoryIndex);
  63.         SpawnedUnitMetadata.StateObject_NewState = SpawnedUnitMetadata.StateObject_OldState;
  64.         SpawnedUnit = XComGameState_Unit(SpawnedUnitMetadata.StateObject_NewState);
  65.         SpawnedUnitMetadata.VisualizeActor = History.GetVisualizer(SpawnedUnit.ObjectID);
  66.  
  67.         `LOG("Step 1: " @ SpawnedUnit.GetFullName(), bLog, 'IRIDAR');
  68.         WaitForEffectAction = X2Action_WaitForAbilityEffect(class'X2Action_WaitForAbilityEffect'.static.AddToVisualizationTree(SpawnedUnitMetadata, Context));
  69.  
  70.         `LOG("Step 2", bLog, 'IRIDAR');
  71.         //  insert a random time delay for each unit spawn so they don't all drop down at exactly the same time
  72.         WaitAction = X2Action_TimedWait(class'X2Action_TimedWait'.static.AddToVisualizationTree(SpawnedUnitMetadata, Context, false, WaitForEffectAction));
  73.         WaitAction.DelayTimeSec = i + FRand() + 0.1f;
  74.  
  75.         `LOG("Step 3", bLog, 'IRIDAR');
  76.         SpawnSoldierEffect.AddSpawnVisualizationsToTracks(Context, SpawnedUnit, SpawnedUnitMetadata, SourceUnitState, SourceUnitMetadata);
  77.        
  78.         `LOG("Step 4", bLog, 'IRIDAR');
  79.         ExcludedRefs.AddItem(SpawnedUnit.GetReference());
  80.         //  after the unit's spawn was visualized, we zero out the Unit Value on the ability caster
  81.         //  to make sure this unit will not be spawned again if the ability is reactivated in the same turn
  82.         `LOG("Step 5", bLog, 'IRIDAR');
  83.         SourceUnitState.SetUnitFloatValue(name(class'X2Effect_IRI_SpawnSoldier'.default.SpawnedUnitValueName $ i), 0, eCleanup_BeginTurn);
  84.  
  85.         i++;
  86.         SpawnedUnitValue.fValue = 0;    //  zero out the local Unit Value because if we try to get a unit value that does not exist on the target, the previous value is not overwritten by zero
  87.                                         //  basically, without this step this cycle ALWAYS goes into infinite loop
  88.         `LOG("Step 6", bLog, 'IRIDAR');
  89.         SourceUnitState.GetUnitValue(name(class'X2Effect_IRI_SpawnSoldier'.default.SpawnedUnitValueName $ i), SpawnedUnitValue);
  90.         `LOG("Unit done", bLog, 'IRIDAR');
  91.     }
  92.  
  93.     `LOG("DD Visualization finished.", bLog, 'IRIDAR');
  94. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement