Bind HUD status to GAS and player state
This commit is contained in:
@@ -10,6 +10,7 @@
|
||||
#include "Class/PHYClassComponent.h"
|
||||
#include "Class/PHYClassSettings.h"
|
||||
#include "GGA_AbilitySystemComponent.h"
|
||||
#include "Net/UnrealNetwork.h"
|
||||
|
||||
APHYPlayerState::APHYPlayerState(const FObjectInitializer& ObjectInitializer)
|
||||
: Super(ObjectInitializer)
|
||||
@@ -28,7 +29,69 @@ APHYPlayerState::APHYPlayerState(const FObjectInitializer& ObjectInitializer)
|
||||
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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user