RealtimeStyleTransferRuntime/Source/LyraGame/AbilitySystem/Phases/LyraGamePhaseAbility.cpp

57 lines
2.2 KiB
C++
Raw Normal View History

2022-05-23 18:41:30 +00:00
// Copyright Epic Games, Inc. All Rights Reserved.
#include "LyraGamePhaseAbility.h"
#include "AbilitySystemComponent.h"
#include "LyraGamePhaseSubsystem.h"
#define LOCTEXT_NAMESPACE "ULyraGamePhaseAbility"
ULyraGamePhaseAbility::ULyraGamePhaseAbility(const FObjectInitializer& ObjectInitializer)
: Super(ObjectInitializer)
{
ReplicationPolicy = EGameplayAbilityReplicationPolicy::ReplicateNo;
InstancingPolicy = EGameplayAbilityInstancingPolicy::InstancedPerActor;
NetExecutionPolicy = EGameplayAbilityNetExecutionPolicy::ServerInitiated;
NetSecurityPolicy = EGameplayAbilityNetSecurityPolicy::ServerOnly;
}
void ULyraGamePhaseAbility::ActivateAbility(const FGameplayAbilitySpecHandle Handle, const FGameplayAbilityActorInfo* ActorInfo, const FGameplayAbilityActivationInfo ActivationInfo, const FGameplayEventData* TriggerEventData)
{
if (ActorInfo->IsNetAuthority())
{
UWorld* World = ActorInfo->AbilitySystemComponent->GetWorld();
ULyraGamePhaseSubsystem* PhaseSubsystem = UWorld::GetSubsystem<ULyraGamePhaseSubsystem>(World);
PhaseSubsystem->OnBeginPhase(this, Handle);
}
Super::ActivateAbility(Handle, ActorInfo, ActivationInfo, TriggerEventData);
}
void ULyraGamePhaseAbility::EndAbility(const FGameplayAbilitySpecHandle Handle, const FGameplayAbilityActorInfo* ActorInfo, const FGameplayAbilityActivationInfo ActivationInfo, bool bReplicateEndAbility, bool bWasCancelled)
{
if (ActorInfo->IsNetAuthority())
{
UWorld* World = ActorInfo->AbilitySystemComponent->GetWorld();
ULyraGamePhaseSubsystem* PhaseSubsystem = UWorld::GetSubsystem<ULyraGamePhaseSubsystem>(World);
PhaseSubsystem->OnEndPhase(this, Handle);
}
Super::EndAbility(Handle, ActorInfo, ActivationInfo, bReplicateEndAbility, bWasCancelled);
}
#if WITH_EDITOR
EDataValidationResult ULyraGamePhaseAbility::IsDataValid(TArray<FText>& ValidationErrors)
{
EDataValidationResult Result = CombineDataValidationResults(Super::IsDataValid(ValidationErrors), EDataValidationResult::Valid);
if (!GamePhaseTag.IsValid())
{
Result = EDataValidationResult::Invalid;
ValidationErrors.Add(LOCTEXT("GamePhaseTagNotSet", "GamePhaseTag must be set to a tag representing the current phase."));
}
return Result;
}
#endif
#undef LOCTEXT_NAMESPACE