RealtimeStyleTransferRuntime/Source/LyraGame/Inventory/LyraInventoryItemInstance.cpp

78 lines
2.2 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "LyraInventoryItemInstance.h"
#include "Containers/Array.h"
#include "GameplayTagContainer.h"
#include "Inventory/LyraInventoryItemDefinition.h"
#include "Misc/AssertionMacros.h"
#include "Net/UnrealNetwork.h"
#include "UObject/Class.h"
#if UE_WITH_IRIS
#include "Iris/ReplicationSystem/ReplicationFragmentUtil.h"
#endif // UE_WITH_IRIS
class FLifetimeProperty;
ULyraInventoryItemInstance::ULyraInventoryItemInstance(const FObjectInitializer& ObjectInitializer)
: Super(ObjectInitializer)
{
}
void ULyraInventoryItemInstance::GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const
{
Super::GetLifetimeReplicatedProps(OutLifetimeProps);
DOREPLIFETIME(ThisClass, StatTags);
DOREPLIFETIME(ThisClass, ItemDef);
}
#if UE_WITH_IRIS
void ULyraInventoryItemInstance::RegisterReplicationFragments(UE::Net::FFragmentRegistrationContext& Context, UE::Net::EFragmentRegistrationFlags RegistrationFlags)
{
using namespace UE::Net;
Super::RegisterReplicationFragments(Context, RegistrationFlags);
// Build descriptors and allocate PropertyReplicationFragments for this object
FReplicationFragmentUtil::CreateAndRegisterFragmentsForObject(this, Context, RegistrationFlags);
}
#endif // UE_WITH_IRIS
void ULyraInventoryItemInstance::AddStatTagStack(FGameplayTag Tag, int32 StackCount)
{
StatTags.AddStack(Tag, StackCount);
}
void ULyraInventoryItemInstance::RemoveStatTagStack(FGameplayTag Tag, int32 StackCount)
{
StatTags.RemoveStack(Tag, StackCount);
}
int32 ULyraInventoryItemInstance::GetStatTagStackCount(FGameplayTag Tag) const
{
return StatTags.GetStackCount(Tag);
}
bool ULyraInventoryItemInstance::HasStatTag(FGameplayTag Tag) const
{
return StatTags.ContainsTag(Tag);
}
void ULyraInventoryItemInstance::SetItemDef(TSubclassOf<ULyraInventoryItemDefinition> InDef)
{
ItemDef = InDef;
}
const ULyraInventoryItemFragment* ULyraInventoryItemInstance::FindFragmentByClass(TSubclassOf<ULyraInventoryItemFragment> FragmentClass) const
{
if ((ItemDef != nullptr) && (FragmentClass != nullptr))
{
return GetDefault<ULyraInventoryItemDefinition>(ItemDef)->FindFragmentByClass(FragmentClass);
}
return nullptr;
}