98 lines
3.1 KiB
C++
98 lines
3.1 KiB
C++
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
#include "Player/PHYPlayerState.h"
|
|
|
|
#include UE_INLINE_GENERATED_CPP_BY_NAME(PHYPlayerState)
|
|
|
|
#include "AbilitySystem/Attributes/PHYCombatAttributeSet.h"
|
|
#include "AbilitySystem/Attributes/PHYCoreAttributeSet.h"
|
|
#include "AbilitySystem/Attributes/PHYElementAttributeSet.h"
|
|
#include "Class/PHYClassComponent.h"
|
|
#include "Class/PHYClassSettings.h"
|
|
#include "GGA_AbilitySystemComponent.h"
|
|
#include "Net/UnrealNetwork.h"
|
|
|
|
APHYPlayerState::APHYPlayerState(const FObjectInitializer& ObjectInitializer)
|
|
: Super(ObjectInitializer)
|
|
{
|
|
SetNetUpdateFrequency(100.0f);
|
|
|
|
AbilitySystemComponent = CreateDefaultSubobject<UGGA_AbilitySystemComponent>(TEXT("AbilitySystemComponent"));
|
|
AbilitySystemComponent->SetIsReplicated(true);
|
|
AbilitySystemComponent->SetReplicationMode(EGameplayEffectReplicationMode::Mixed);
|
|
|
|
CoreAttributeSet = CreateDefaultSubobject<UPHYCoreAttributeSet>(TEXT("CoreAttributeSet"));
|
|
CombatAttributeSet = CreateDefaultSubobject<UPHYCombatAttributeSet>(TEXT("CombatAttributeSet"));
|
|
ElementAttributeSet = CreateDefaultSubobject<UPHYElementAttributeSet>(TEXT("ElementAttributeSet"));
|
|
|
|
ClassComponent = CreateDefaultSubobject<UPHYClassComponent>(TEXT("ClassComponent"));
|
|
ClassComponent->SetClassTag(GetDefault<UPHYClassSettings>()->DefaultPlayerClassTag);
|
|
}
|
|
|
|
void APHYPlayerState::GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const
|
|
{
|
|
Super::GetLifetimeReplicatedProps(OutLifetimeProps);
|
|
|
|
DOREPLIFETIME(ThisClass, PlayerLevel);
|
|
DOREPLIFETIME(ThisClass, Experience);
|
|
DOREPLIFETIME(ThisClass, ExperienceForNextLevel);
|
|
}
|
|
|
|
UAbilitySystemComponent* APHYPlayerState::GetAbilitySystemComponent() const
|
|
{
|
|
return AbilitySystemComponent;
|
|
}
|
|
|
|
void APHYPlayerState::SetPlayerLevel(const int32 NewLevel)
|
|
{
|
|
SetProgression(NewLevel, Experience, ExperienceForNextLevel);
|
|
}
|
|
|
|
void APHYPlayerState::SetExperience(const int32 NewExperience)
|
|
{
|
|
SetProgression(PlayerLevel, NewExperience, ExperienceForNextLevel);
|
|
}
|
|
|
|
void APHYPlayerState::AddExperience(const int32 DeltaExperience)
|
|
{
|
|
SetExperience(Experience + DeltaExperience);
|
|
}
|
|
|
|
void APHYPlayerState::SetExperienceForNextLevel(const int32 NewExperienceForNextLevel)
|
|
{
|
|
SetProgression(PlayerLevel, Experience, NewExperienceForNextLevel);
|
|
}
|
|
|
|
void APHYPlayerState::SetProgression(const int32 NewLevel, const int32 NewExperience, const int32 NewExperienceForNextLevel)
|
|
{
|
|
if (!HasAuthority())
|
|
{
|
|
return;
|
|
}
|
|
|
|
const int32 ClampedLevel = FMath::Max(1, NewLevel);
|
|
const int32 ClampedExperience = FMath::Max(0, NewExperience);
|
|
const int32 ClampedExperienceForNextLevel = FMath::Max(1, NewExperienceForNextLevel);
|
|
|
|
if (PlayerLevel == ClampedLevel && Experience == ClampedExperience && ExperienceForNextLevel == ClampedExperienceForNextLevel)
|
|
{
|
|
return;
|
|
}
|
|
|
|
PlayerLevel = ClampedLevel;
|
|
Experience = ClampedExperience;
|
|
ExperienceForNextLevel = ClampedExperienceForNextLevel;
|
|
|
|
BroadcastProgressionChanged();
|
|
}
|
|
|
|
void APHYPlayerState::OnRep_Progression()
|
|
{
|
|
BroadcastProgressionChanged();
|
|
}
|
|
|
|
void APHYPlayerState::BroadcastProgressionChanged()
|
|
{
|
|
OnProgressionChanged.Broadcast(PlayerLevel, Experience, ExperienceForNextLevel);
|
|
}
|