OLS/Source/ols/Private/Player/OLSPlayerState.cpp

98 lines
2.8 KiB
C++
Raw Normal View History

2025-01-04 16:41:49 +00:00
// © 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"
2025-01-04 16:41:49 +00:00
#include "Player/OLSPlayerController.h"
#include UE_INLINE_GENERATED_CPP_BY_NAME(OLSPlayerState)
const FName AOLSPlayerState::NAME_OLSAbilityReady("OLSAbilitiesReady");
2025-01-04 16:41:49 +00:00
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 UOLSPawnPrimaryDataAsset* 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()
{
}
2025-01-04 16:41:49 +00:00
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);
}
2025-01-04 16:41:49 +00:00
AOLSPlayerController* AOLSPlayerState::GetOLSPlayerController() const
{
return Cast<AOLSPlayerController>(GetOwner());
}
UOLSAbilitySystemComponent* AOLSPlayerState::GetOLSAbilitySystemComponent() const
{
return AbilitySystemComponent;
}