Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- simulated function CallReinforcements_BuildVisualization(XComGameState VisualizeGameState)
- {
- local XComGameStateHistory History;
- local XComGameStateContext_Ability Context;
- local StateObjectReference SourceUnitRef;
- local array<StateObjectReference> ExcludedRefs;
- local VisualizationActionMetadata EmptyMetadata;
- local VisualizationActionMetadata SourceUnitMetadata, SpawnedUnitMetadata, CosmeticUnitMetadata;
- local XComGameState_Unit SourceUnitState, SpawnedUnit, CosmeticUnit;
- local UnitValue SpawnedUnitValue;
- local X2Effect_IRI_SpawnSoldier SpawnSoldierEffect;
- local X2Action_TimedWait WaitAction;
- local X2Action_Fire FireAction;
- //local X2Action_EnterCover EnterCoverAction;
- local X2Action_CameraLookAt LookAtAction;
- local X2Action_WaitForAbilityEffect WaitForEffectAction;
- local int i;
- local bool bCheck;
- `LOG("Calling Dynamic Deployment Build Viz function", bLog, 'IRIDAR');
- History = `XCOMHISTORY;
- Context = XComGameStateContext_Ability(VisualizeGameState.GetContext());
- SourceUnitRef = Context.InputContext.SourceObject;
- //Configure the visualization tree for the ability caster
- //****************************************************************************************
- SourceUnitMetadata = EmptyMetadata;
- SourceUnitMetadata.StateObject_OldState = History.GetGameStateForObjectID(SourceUnitRef.ObjectID, eReturnType_Reference, VisualizeGameState.HistoryIndex - 1);
- SourceUnitMetadata.StateObject_NewState = VisualizeGameState.GetGameStateForObjectID(SourceUnitRef.ObjectID);
- SourceUnitMetadata.VisualizeActor = History.GetVisualizer(SourceUnitRef.ObjectID);
- //class'X2Action_ExitCover'.static.AddToVisualizationTree(SourceUnitMetadata, Context);
- FireAction = X2Action_Fire(class'X2Action_Fire'.static.AddToVisualizationTree(SourceUnitMetadata, Context));
- //EnterCoverAction = X2Action_EnterCover(class'X2Action_EnterCover'.static.AddToVisualizationTree(SourceUnitMetadata, Context));
- LookAtAction = X2Action_CameraLookAt(class'X2Action_CameraLookAt'.static.AddToVisualizationTree(SourceUnitMetadata, Context, false, FireAction));
- LookAtAction.LookAtLocation = Context.InputContext.TargetLocations[0];
- // Configure the visualization tree for the spawned soldier
- //******************************************************************************************
- SourceUnitState = XComGameState_Unit(VisualizeGameState.GetGameStateForObjectID(SourceUnitRef.ObjectID));
- // Only one target effect and it is X2Effect_SpawnRiftBeacon
- SpawnSoldierEffect = X2Effect_IRI_SpawnSoldier(Context.ResultContext.ShooterEffectResults.Effects[0]);
- if( SpawnSoldierEffect == none )
- {
- `RedScreenOnce("CallReinforcements_BuildVisualization: Missing X2Effect_IRI_SpawnSoldier");
- return;
- }
- // in this cycle we go through non-zero Unit Values on the ability caster
- // these unit values contain the References to the units we need to visualize spawn for
- i = 0;
- SourceUnitState.GetUnitValue(name(class'X2Effect_IRI_SpawnSoldier'.default.SpawnedUnitValueName $ i), SpawnedUnitValue);
- while (SpawnedUnitValue.fValue != 0)
- {
- `LOG("Visualizing spawn for unit #: " @ i, bLog, 'IRIDAR');
- SpawnedUnitMetadata = EmptyMetadata;
- SpawnedUnitMetadata.StateObject_OldState = History.GetGameStateForObjectID(SpawnedUnitValue.fValue, eReturnType_Reference, VisualizeGameState.HistoryIndex);
- SpawnedUnitMetadata.StateObject_NewState = SpawnedUnitMetadata.StateObject_OldState;
- SpawnedUnit = XComGameState_Unit(SpawnedUnitMetadata.StateObject_NewState);
- SpawnedUnitMetadata.VisualizeActor = History.GetVisualizer(SpawnedUnit.ObjectID);
- `LOG("Step 1: " @ SpawnedUnit.GetFullName(), bLog, 'IRIDAR');
- WaitForEffectAction = X2Action_WaitForAbilityEffect(class'X2Action_WaitForAbilityEffect'.static.AddToVisualizationTree(SpawnedUnitMetadata, Context));
- `LOG("Step 2", bLog, 'IRIDAR');
- // insert a random time delay for each unit spawn so they don't all drop down at exactly the same time
- WaitAction = X2Action_TimedWait(class'X2Action_TimedWait'.static.AddToVisualizationTree(SpawnedUnitMetadata, Context, false, WaitForEffectAction));
- WaitAction.DelayTimeSec = i + FRand() + 0.1f;
- `LOG("Step 3", bLog, 'IRIDAR');
- SpawnSoldierEffect.AddSpawnVisualizationsToTracks(Context, SpawnedUnit, SpawnedUnitMetadata, SourceUnitState, SourceUnitMetadata);
- `LOG("Step 4", bLog, 'IRIDAR');
- ExcludedRefs.AddItem(SpawnedUnit.GetReference());
- // after the unit's spawn was visualized, we zero out the Unit Value on the ability caster
- // to make sure this unit will not be spawned again if the ability is reactivated in the same turn
- `LOG("Step 5", bLog, 'IRIDAR');
- SourceUnitState.SetUnitFloatValue(name(class'X2Effect_IRI_SpawnSoldier'.default.SpawnedUnitValueName $ i), 0, eCleanup_BeginTurn);
- i++;
- 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
- // basically, without this step this cycle ALWAYS goes into infinite loop
- `LOG("Step 6", bLog, 'IRIDAR');
- SourceUnitState.GetUnitValue(name(class'X2Effect_IRI_SpawnSoldier'.default.SpawnedUnitValueName $ i), SpawnedUnitValue);
- `LOG("Unit done", bLog, 'IRIDAR');
- }
- `LOG("DD Visualization finished.", bLog, 'IRIDAR');
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement