57 lines
2.2 KiB
C++
57 lines
2.2 KiB
C++
// 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 |