// Copyright 2025 https://yuewu.dev/en All Rights Reserved. #include "GIS_InventoryFunctionLibrary.h" #include "GIS_ItemCollection.h" #include "Items/GIS_ItemInstance.h" #include UE_INLINE_GENERATED_CPP_BY_NAME(GIS_InventoryFunctionLibrary) TArray UGIS_InventoryFunctionLibrary::MultiplyItemAmounts(const TArray& ItemAmounts, int32 Multiplier) { TArray Results; for (int32 i = 0; i < ItemAmounts.Num(); i++) { Results.Add(FGIS_ItemDefinitionAmount(ItemAmounts[i].Definition, ItemAmounts[i].Amount * Multiplier)); } return Results; } TArray UGIS_InventoryFunctionLibrary::MultiplyCurrencies(const TArray& Currencies, float Multiplier) { TArray Results; for (int32 i = 0; i < Currencies.Num(); i++) { Results.Add(FGIS_CurrencyEntry(Currencies[i].Definition, Currencies[i].Amount * Multiplier)); } return Results; } TArray UGIS_InventoryFunctionLibrary::FilterItemInfosByTagQuery(const TArray& ItemInfos, const FGameplayTagQuery& Query) { return ItemInfos.FilterByPredicate([&](const FGIS_ItemInfo& ItemInfo) { return ItemInfo.Item != nullptr && ItemInfo.Item->GetItemTags().MatchesQuery(Query); }); } TArray UGIS_InventoryFunctionLibrary::FilterItemStacksByTagQuery(const TArray& ItemStacks, const FGameplayTagQuery& TagQuery) { return ItemStacks.FilterByPredicate([TagQuery](const FGIS_ItemStack& Stack) { return TagQuery.Matches(Stack.Item->GetItemTags()); }); } TArray UGIS_InventoryFunctionLibrary::FilterItemStacksByDefinition(const TArray& ItemStacks, const UGIS_ItemDefinition* Definition) { return ItemStacks.FilterByPredicate([Definition](const FGIS_ItemStack& Stack) { return Stack.Item->GetDefinition() == Definition; }); } TArray UGIS_InventoryFunctionLibrary::FilterItemStacksByCollectionTags(const TArray& ItemStacks, const FGameplayTagContainer& CollectionTags) { return ItemStacks.FilterByPredicate([CollectionTags](const FGIS_ItemStack& Stack) { return Stack.Collection->GetCollectionTag().MatchesAnyExact(CollectionTags); }); }