// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "CoreMinimal.h" #include "System/GameplayTagStack.h" #include "LyraInventoryItemDefinition.h" #include "LyraInventoryItemInstance.generated.h" /** * ULyraInventoryItemInstance */ UCLASS(BlueprintType) class ULyraInventoryItemInstance : public UObject { GENERATED_BODY() public: ULyraInventoryItemInstance(const FObjectInitializer& ObjectInitializer = FObjectInitializer::Get()); //~UObject interface virtual bool IsSupportedForNetworking() const override { return true; } //~End of UObject interface // Adds a specified number of stacks to the tag (does nothing if StackCount is below 1) UFUNCTION(BlueprintCallable, BlueprintAuthorityOnly, Category=Inventory) void AddStatTagStack(FGameplayTag Tag, int32 StackCount); // Removes a specified number of stacks from the tag (does nothing if StackCount is below 1) UFUNCTION(BlueprintCallable, BlueprintAuthorityOnly, Category= Inventory) void RemoveStatTagStack(FGameplayTag Tag, int32 StackCount); // Returns the stack count of the specified tag (or 0 if the tag is not present) UFUNCTION(BlueprintCallable, Category=Inventory) int32 GetStatTagStackCount(FGameplayTag Tag) const; // Returns true if there is at least one stack of the specified tag UFUNCTION(BlueprintCallable, Category=Inventory) bool HasStatTag(FGameplayTag Tag) const; TSubclassOf GetItemDef() const { return ItemDef; } UFUNCTION(BlueprintCallable, BlueprintPure=false, meta=(DeterminesOutputType=FragmentClass)) const ULyraInventoryItemFragment* FindFragmentByClass(TSubclassOf FragmentClass) const; template const ResultClass* FindFragmentByClass() const { return (ResultClass*)FindFragmentByClass(ResultClass::StaticClass()); } private: void SetItemDef(TSubclassOf InDef); friend struct FLyraInventoryList; private: UPROPERTY(Replicated) FGameplayTagStackContainer StatTags; // The item definition UPROPERTY(Replicated) TSubclassOf ItemDef; };