98 lines
2.8 KiB
C++
98 lines
2.8 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 "Player/OLSPlayerState.h"
|
|
|
|
#include "AbilitySystem/OLSAbilitySystemComponent.h"
|
|
#include "Components/GameFrameworkComponentManager.h"
|
|
#include "DataAssets/OLSAbilitySetPrimaryDataAsset.h"
|
|
#include "Net/UnrealNetwork.h"
|
|
#include "Player/OLSPlayerController.h"
|
|
|
|
#include UE_INLINE_GENERATED_CPP_BY_NAME(OLSPlayerState)
|
|
|
|
const FName AOLSPlayerState::NAME_OLSAbilityReady("OLSAbilitiesReady");
|
|
|
|
AOLSPlayerState::AOLSPlayerState(const FObjectInitializer& objectInitializer) : Super(objectInitializer)
|
|
{
|
|
// Create attribute sets here.
|
|
}
|
|
|
|
template <class T>
|
|
const T* AOLSPlayerState::GetPawnData() const
|
|
{
|
|
return Cast<T>(PawnData);
|
|
}
|
|
|
|
void AOLSPlayerState::SetPawnData(const UOLSPawnDataAsset* pawnData)
|
|
{
|
|
check(pawnData);
|
|
|
|
if (!HasAuthority())
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (PawnData)
|
|
{
|
|
// @Todo: replace this by our custom log.
|
|
// UE_LOG(LogLyra, Error, TEXT("Trying to set PawnData [%s] on player state [%s] that already has valid PawnData [%s]."), *GetNameSafe(InPawnData), *GetNameSafe(this), *GetNameSafe(PawnData));
|
|
return;
|
|
}
|
|
|
|
MARK_PROPERTY_DIRTY_FROM_NAME(ThisClass, PawnData, this);
|
|
|
|
for (const UOLSAbilitySetPrimaryDataAsset* abilityDataAsset : PawnData->AbilitySets)
|
|
{
|
|
if (abilityDataAsset)
|
|
{
|
|
abilityDataAsset->GiveToAbilitySystem(AbilitySystemComponent, nullptr);
|
|
}
|
|
}
|
|
|
|
UGameFrameworkComponentManager::SendGameFrameworkComponentExtensionEvent(this, NAME_OLSAbilityReady);
|
|
|
|
ForceNetUpdate();
|
|
}
|
|
|
|
void AOLSPlayerState::OnRep_PawnData()
|
|
{
|
|
}
|
|
|
|
void AOLSPlayerState::PostInitializeComponents()
|
|
{
|
|
Super::PostInitializeComponents();
|
|
|
|
check(AbilitySystemComponent);
|
|
AbilitySystemComponent->InitAbilityActorInfo(this, GetPawn());
|
|
|
|
const TObjectPtr<UWorld> world = GetWorld();
|
|
if (world && world->IsGameWorld() && world->GetNetMode() != NM_Client)
|
|
{
|
|
const TObjectPtr<AGameStateBase> gameState = GetWorld()->GetGameState();
|
|
check(gameState);
|
|
// ULyraExperienceManagerComponent* ExperienceComponent = GameState->FindComponentByClass<ULyraExperienceManagerComponent>();
|
|
// check(ExperienceComponent);
|
|
// ExperienceComponent->CallOrRegister_OnExperienceLoaded(FOnLyraExperienceLoaded::FDelegate::CreateUObject(this, &ThisClass::OnExperienceLoaded));
|
|
}
|
|
}
|
|
|
|
void AOLSPlayerState::GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const
|
|
{
|
|
Super::GetLifetimeReplicatedProps(OutLifetimeProps);
|
|
|
|
FDoRepLifetimeParams SharedParams;
|
|
SharedParams.bIsPushBased = true;
|
|
|
|
DOREPLIFETIME_WITH_PARAMS_FAST(ThisClass, PawnData, SharedParams);
|
|
}
|
|
|
|
AOLSPlayerController* AOLSPlayerState::GetOLSPlayerController() const
|
|
{
|
|
return Cast<AOLSPlayerController>(GetOwner());
|
|
}
|
|
|
|
UOLSAbilitySystemComponent* AOLSPlayerState::GetOLSAbilitySystemComponent() const
|
|
{
|
|
return AbilitySystemComponent;
|
|
} |