81 lines
2.5 KiB
C++
81 lines
2.5 KiB
C++
// © 2024 Long Ly. All rights reserved. Any unauthorized use, reproduction, or distribution of this trademark is strictly prohibited and may result in legal action.
|
|
|
|
|
|
#include "ModularGameplayActors/OLSModularPlayerState.h"
|
|
|
|
#include "AbilitySystem/OLSAbilitySystemComponent.h"
|
|
#include "Components/GameFrameworkComponentManager.h"
|
|
#include "Components/PlayerStateComponent.h"
|
|
|
|
AOLSModularPlayerState::AOLSModularPlayerState(const FObjectInitializer& objectInitializer) : Super(objectInitializer)
|
|
{
|
|
// Create ability system component, and set it to be explicitly replicated
|
|
AbilitySystemComponent = CreateDefaultSubobject<UOLSAbilitySystemComponent>(TEXT("AbilitySystemComponent"));
|
|
AbilitySystemComponent->SetIsReplicated(true);
|
|
|
|
SetNetUpdateFrequency(100.f);
|
|
}
|
|
|
|
void AOLSModularPlayerState::PreInitializeComponents()
|
|
{
|
|
Super::PreInitializeComponents();
|
|
|
|
UGameFrameworkComponentManager::AddGameFrameworkComponentReceiver(this);
|
|
}
|
|
|
|
void AOLSModularPlayerState::BeginPlay()
|
|
{
|
|
UGameFrameworkComponentManager::SendGameFrameworkComponentExtensionEvent(this, UGameFrameworkComponentManager::NAME_GameActorReady);
|
|
Super::BeginPlay();
|
|
}
|
|
|
|
void AOLSModularPlayerState::EndPlay(const EEndPlayReason::Type EndPlayReason)
|
|
{
|
|
UGameFrameworkComponentManager::RemoveGameFrameworkComponentReceiver(this);
|
|
Super::EndPlay(EndPlayReason);
|
|
}
|
|
|
|
void AOLSModularPlayerState::PostInitProperties()
|
|
{
|
|
Super::PostInitProperties();
|
|
|
|
if (AbilitySystemComponent)
|
|
{
|
|
//@Todo replace this log by our custom log.
|
|
UE_LOG(LogTemp, Verbose, TEXT("PostInitProperties for %s - Setting up ASC Replication Mode to: %d"), *GetName(), ReplicationMode);
|
|
AbilitySystemComponent->SetReplicationMode(ReplicationMode);
|
|
}
|
|
}
|
|
|
|
void AOLSModularPlayerState::Reset()
|
|
{
|
|
Super::Reset();
|
|
|
|
TArray<UPlayerStateComponent*> modularComponents;
|
|
GetComponents(modularComponents);
|
|
for (UPlayerStateComponent* component : modularComponents)
|
|
{
|
|
component->Reset();
|
|
}
|
|
}
|
|
|
|
UAbilitySystemComponent* AOLSModularPlayerState::GetAbilitySystemComponent() const
|
|
{
|
|
return AbilitySystemComponent;
|
|
}
|
|
|
|
void AOLSModularPlayerState::CopyProperties(APlayerState* playerState)
|
|
{
|
|
Super::CopyProperties(playerState);
|
|
|
|
TInlineComponentArray<UPlayerStateComponent*> playerStateComponents;
|
|
GetComponents(playerStateComponents);
|
|
for (UPlayerStateComponent* sourceComponent : playerStateComponents)
|
|
{
|
|
if (UPlayerStateComponent* targetComp = Cast<UPlayerStateComponent>(static_cast<UObject*>(FindObjectWithOuter(playerState, sourceComponent->GetClass(), sourceComponent->GetFName()))))
|
|
{
|
|
sourceComponent->CopyProperties(targetComp);
|
|
}
|
|
}
|
|
}
|