Files
PHY/Plugins/GIS/Source/GenericInventorySystem/Private/GIS_InventorySystemSettings.cpp
2026-03-03 01:23:02 +08:00

56 lines
1.7 KiB
C++

// Copyright 2025 https://yuewu.dev/en All Rights Reserved.
#include "GIS_InventorySystemSettings.h"
#include "GIS_InventoryFactory.h"
#include "Items/GIS_ItemDefinitionSchema.h"
#include "Misc/DataValidation.h"
#include UE_INLINE_GENERATED_CPP_BY_NAME(GIS_InventorySystemSettings)
UGIS_InventorySystemSettings::UGIS_InventorySystemSettings()
{
InventoryFactoryClass = UGIS_InventoryFactory::StaticClass();
}
FName UGIS_InventorySystemSettings::GetCategoryName() const
{
return TEXT("Game");
}
const UGIS_InventorySystemSettings* UGIS_InventorySystemSettings::Get()
{
return GetDefault<UGIS_InventorySystemSettings>();
}
const UGIS_ItemDefinitionSchema* UGIS_InventorySystemSettings::GetItemDefinitionSchemaForAsset(const FString& AssetPath) const
{
// Check path-specific schemas first
for (const FGIS_ItemDefinitionSchemaEntry& Entry : ItemDefinitionSchemaMap)
{
if (!Entry.PathPrefix.IsEmpty() && AssetPath.StartsWith(Entry.PathPrefix))
{
if (Entry.Schema.IsValid())
{
if (UGIS_ItemDefinitionSchema* Schema = Cast<UGIS_ItemDefinitionSchema>(Entry.Schema.TryLoad()))
{
UE_LOG(LogTemp, Log, TEXT("Using path-specific schema %s for asset %s"), *Entry.Schema.ToString(), *AssetPath);
return Schema;
}
}
}
}
// Fall back to default schema
if (DefaultItemDefinitionSchema.IsValid())
{
if (UGIS_ItemDefinitionSchema* Schema = Cast<UGIS_ItemDefinitionSchema>(DefaultItemDefinitionSchema.TryLoad()))
{
UE_LOG(LogTemp, Log, TEXT("Using default schema %s for asset %s"), *DefaultItemDefinitionSchema.ToString(), *AssetPath);
return Schema;
}
}
UE_LOG(LogTemp, Warning, TEXT("No valid schema found for asset %s"), *AssetPath);
return nullptr;
}