Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function SyncVisualizer(optional XComGameState GameState = none)
- {
- local XGUnit UnitVisualizer;
- local name EffectName;
- local XComGameState_Effect EffectState;
- local int x, y, t;
- local array<XComPerkContent> Perks;
- local XComGameState_Unit TargetState;
- local X2AbilityTemplate AbilityTemplate;
- local WorldInfo WInfo;
- local XComPerkContentInst PerkInstance;
- local XComUnitPawn SourcePawn;
- WInfo = class'WorldInfo'.static.GetWorldInfo();
- if(GameState == none)
- {
- GameState = GetParentGameState();
- }
- UnitVisualizer = XGUnit(FindOrCreateVisualizer(GameState));
- if(UnitVisualizer == none)
- {
- return; // units that have been removed from play will not have a visualizer
- }
- UnitVisualizer.m_kPlayer = XGPlayer(`XCOMHISTORY.GetVisualizer(ControllingPlayer.ObjectID));
- UnitVisualizer.m_kPlayerNativeBase = UnitVisualizer.m_kPlayer;
- UnitVisualizer.SetTeamType(GetTeam());
- if( UnitVisualizer.m_kPlayer == none )
- {
- `RedScreen("[@gameplay] SyncVisualizer: No unit visualizer for " $ GetFullName());
- }
- // Spawning system is meant to do this but since our sync created the visualizer we want it right away
- UnitVisualizer.m_bForceHidden = bRemovedFromPlay;
- SourcePawn = UnitVisualizer.GetPawn();
- SourcePawn.GameStateResetVisualizer(self);
- //Units also set up visualizers for their items, since the items are dependent on the unit visualizer
- UnitVisualizer.ApplyLoadoutFromGameState(self, GameState);
- for (x = 0; x < AppliedEffectNames.Length; ++x)
- {
- EffectName = AppliedEffectNames[x];
- EffectState = XComGameState_Effect( `XCOMHISTORY.GetGameStateForObjectID( AppliedEffects[ x ].ObjectID ) );
- AbilityTemplate = class'XComGameState_Ability'.static.GetMyTemplateManager( ).FindAbilityTemplate( EffectState.ApplyEffectParameters.AbilityInputContext.AbilityTemplateName );
- if (AbilityTemplate.bSkipPerkActivationActions && AbilityTemplate.bSkipPerkActivationActionsSync)
- {
- continue;
- }
- Perks.Length = 0;
- class'XComPerkContent'.static.GetAssociatedPerkDefinitions( Perks, SourcePawn, EffectState.ApplyEffectParameters.AbilityInputContext.AbilityTemplateName );
- for (y = 0; y < Perks.Length; ++y)
- {
- if (Perks[y].AssociatedEffect == EffectName)
- {
- PerkInstance = class'XComPerkContent'.static.GetMatchingInstanceForPerk(SourcePawn, Perks[y] );
- if (PerkInstance == None)
- {
- PerkInstance = WInfo.Spawn( class'XComPerkContentInst' );
- PerkInstance.Init( Perks[y], SourcePawn);
- }
- if (!PerkInstance.IsInState('DurationActive'))
- {
- ReloadPerkContentInst(PerkInstance, EffectState, AbilityTemplate, Perks[y].AssociatedEffect, EffectName);
- }
- else
- {
- TargetState = XComGameState_Unit( `XCOMHISTORY.GetGameStateForObjectID( EffectState.ApplyEffectParameters.AbilityInputContext.PrimaryTarget.ObjectID ) );
- if ((TargetState != none) && (TargetState.AffectedByEffectNames.Find(EffectName) != INDEX_NONE))
- {
- PerkInstance.AddPerkTarget(XGUnit( TargetState.GetVisualizer( ) ), EffectState, true);
- }
- for (t = 0; t < EffectState.ApplyEffectParameters.AbilityInputContext.MultiTargets.Length; ++t)
- {
- TargetState = XComGameState_Unit( `XCOMHISTORY.GetGameStateForObjectID( EffectState.ApplyEffectParameters.AbilityInputContext.MultiTargets[t].ObjectID ) );
- if ((TargetState != none) && (TargetState.AffectedByEffectNames.Find(EffectName) != INDEX_NONE))
- {
- PerkInstance.AddPerkTarget(XGUnit( TargetState.GetVisualizer( ) ), EffectState, true);
- }
- }
- }
- if(!Perks[ y ].CasterDurationFXOnly && !Perks[ y ].TargetDurationFXOnly)
- {
- // It is possible this perk is for only the target or source.
- // Only break if that is not the case.
- break;
- }
- }
- }
- }
- if( bRemovedFromPlay )
- {
- // Force invisible and clear blocking tile.
- RemoveUnitFromPlay();
- }
- else
- {
- if(IsAlive() && !IsIncapacitated())
- {
- SourcePawn.UpdateAnimations();
- }
- if( UnitVisualizer.m_kBehavior == None )
- {
- UnitVisualizer.InitBehavior();
- }
- }
- if( IsTurret() && IsAlive() )
- {
- UpdateTurretState(true);
- }
- // Don't Ragdoll cocoons
- if (m_SpawnedCocoonRef.ObjectID != 0)
- {
- SourcePawn.RagdollFlag = eRagdoll_Never;
- }
- UnitVisualizer.VisualizedAlertLevel = UnitVisualizer.GetAlertLevel(self);
- UnitVisualizer.IdleStateMachine.bStartedPanick = bPanicked;
- if( GetMyTemplate().bLockdownPodIdleUntilReveal && UnitVisualizer.VisualizedAlertLevel != eAL_Green )
- {
- SourcePawn.GetAnimTreeController().SetAllowNewAnimations(true);
- }
- if ((RescueRingRadius > 0) && (GetTeam() == eTeam_Neutral))
- {
- SourcePawn.AttachRangeIndicator( RescueRingRadius, SourcePawn.CivilianRescueRing );
- }
- if (bGeneratesCover)
- {
- class'X2Effect_GenerateCover'.static.UpdateWorldCoverDataOnSync( self );
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement