View difference between Paste ID: RghtsQqv and Vj74EaiU
SHOW: | | - or go back to the newest paste.
1
class X2AmbientNarrativeCriteria_SVF_TemplateModificator extends X2AmbientNarrativeCriteria;
2
3
static function array<X2DataTemplate> CreateTemplates()
4
{
5
	// This turns out to be a good hook for doing global template modification because subclasses of X2AmbientNarrativeCriteria
6
	// are the last ones loaded when the game is setting up. We'll just return an empty list of templates for template creation
7
	// (because we're not actually using this to create any templates) and put our template modifications in-between
8
	local array<X2DataTemplate> Templates;
9
	Templates.Length = 0;
10
11
	// Update the Suppression visualization function
12
	UpdateSuppressionVisualizationFunction();
13
14
	return Templates;
15
}
16
17
static function UpdateSuppressionVisualizationFunction()
18
{
19
	local X2AbilityTemplate AbilityTemplate;
20
	
21
	// Find the Suppression ability template
22
	AbilityTemplate = class'X2AbilityTemplateManager'.static.GetAbilityTemplateManager().FindAbilityTemplate('Suppression');
23
	if (AbilityTemplate != none)
24
	{
25
		AbilityTemplate.BuildVisualizationFn = SuppressionBuildVisualization;
26
27
		`LOG("Suppression Visualization Fix: Updated " @ AbilityTemplate.DataName @ " template visualization function.");
28
	}
29
}
30
31
//---------------------------------------------------------------------------------------------------
32
// Suppression Visualization
33
//---------------------------------------------------------------------------------------------------
34
35
static simulated function SuppressionBuildVisualization(XComGameState VisualizeGameState)
36
{
37
	local XComGameStateHistory History;
38
	local XComGameStateContext_Ability  Context;
39
	local StateObjectReference          InteractingUnitRef;
40
41
	local VisualizationActionMetadata        EmptyTrack;
42
	local VisualizationActionMetadata        ActionMetadata;
43
44
	local XComGameState_Ability         Ability;
45
	local X2Action_PlaySoundAndFlyOver SoundAndFlyOver;
46
47
	local XComUnitPawn					UnitPawn;
48
	local XComWeapon					Weapon;
49
50
	History = `XCOMHISTORY;
51
52
	Context = XComGameStateContext_Ability(VisualizeGameState.GetContext());
53
	InteractingUnitRef = Context.InputContext.SourceObject;
54
55
	//Configure the visualization track for the shooter
56
	//****************************************************************************************
57
	ActionMetadata = EmptyTrack;
58
	ActionMetadata.StateObject_OldState = History.GetGameStateForObjectID(InteractingUnitRef.ObjectID, eReturnType_Reference, VisualizeGameState.HistoryIndex - 1);
59
	ActionMetadata.StateObject_NewState = VisualizeGameState.GetGameStateForObjectID(InteractingUnitRef.ObjectID);
60
	ActionMetadata.VisualizeActor = History.GetVisualizer(InteractingUnitRef.ObjectID);
61
62
	// Check the actor's pawn and weapon, see if they can play the suppression effect
63-
(63)	UnitPawn = XGUnit(BuildTrack.TrackActor).GetPawn();
63+
	UnitPawn = XGUnit(ActionMetadata.VisualizeActor).GetPawn();
64
	Weapon = XComWeapon(UnitPawn.Weapon);
65
	if (Weapon != None &&
66
		!UnitPawn.GetAnimTreeController().CanPlayAnimation(Weapon.WeaponSuppressionFireAnimSequenceName) &&
67
		!UnitPawn.GetAnimTreeController().CanPlayAnimation(class'XComWeapon'.default.WeaponSuppressionFireAnimSequenceName))
68
	{
69
		// The unit can't play their weapon's suppression effect. Replace it with the normal fire effect so at least they'll look like they're shooting
70
		Weapon.WeaponSuppressionFireAnimSequenceName = Weapon.WeaponFireAnimSequenceName;
71
	}
72
	
73
	class'X2Action_ExitCover'.static.AddToVisualizationTree(ActionMetadata, Context, false, ActionMetadata.LastActionAdded);
74
	class'X2Action_StartSuppression'.static.AddToVisualizationTree(ActionMetadata, Context, false, ActionMetadata.LastActionAdded);
75
		//****************************************************************************************
76
	//Configure the visualization track for the target
77
	InteractingUnitRef = Context.InputContext.PrimaryTarget;
78
	Ability = XComGameState_Ability(History.GetGameStateForObjectID(Context.InputContext.AbilityRef.ObjectID, eReturnType_Reference, VisualizeGameState.HistoryIndex - 1));
79
	ActionMetadata = EmptyTrack;
80
	ActionMetadata.StateObject_OldState = History.GetGameStateForObjectID(InteractingUnitRef.ObjectID, eReturnType_Reference, VisualizeGameState.HistoryIndex - 1);
81
	ActionMetadata.StateObject_NewState = VisualizeGameState.GetGameStateForObjectID(InteractingUnitRef.ObjectID);
82
	ActionMetadata.VisualizeActor = History.GetVisualizer(InteractingUnitRef.ObjectID);
83
	SoundAndFlyOver = X2Action_PlaySoundAndFlyOver(class'X2Action_PlaySoundAndFlyOver'.static.AddToVisualizationTree(ActionMetadata, Context, false, ActionMetadata.LastActionAdded));
84
	SoundAndFlyOver.SetSoundAndFlyOverParameters(None, Ability.GetMyTemplate().LocFlyOverText, '', eColor_Good);
85
	if (XComGameState_Unit(ActionMetadata.StateObject_OldState).ReserveActionPoints.Length != 0 && XComGameState_Unit(ActionMetadata.StateObject_NewState).ReserveActionPoints.Length == 0)
86
	{
87
		SoundAndFlyOver = X2Action_PlaySoundAndFlyOver(class'X2Action_PlaySoundAndFlyOver'.static.AddToVisualizationTree(ActionMetadata, Context, false, ActionMetadata.LastActionAdded));
88
		SoundAndFlyOver.SetSoundAndFlyOverParameters(none, class'XLocalizedData'.default.OverwatchRemovedMsg, '', eColor_Good);
89
	}
90
}
91
92
Warning/Error Summary
93
---------------------
94
D:\SteamLibrary\SteamApps\common\XCOM 2 War of the Chosen SDK\Development\Src\WOTCSuppressionVisualizationFix\Classes\X2AmbientNarrativeCriteria_SVF_TemplateModificator.uc(63):
95
Error, Bad or missing expression for token: XGUnit, in '='