2025-10-27 14:34:45 +08:00

61 lines
1.6 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Copyright Epic Games, Inc. All Rights Reserved.
#include "Factory/QuestAssetFactory.h"
#include "ProjectFish/DataAsset/QuestAsset.h"
#include "AssetRegistry/AssetRegistryModule.h"
#include "AssetRegistry/AssetData.h"
UQuestAssetFactory::UQuestAssetFactory()
{
SupportedClass = UQuestAsset::StaticClass();
bCreateNew = true;
bEditAfterNew = true;
}
UObject* UQuestAssetFactory::FactoryCreateNew(UClass* Class, UObject* InParent, FName Name, EObjectFlags Flags,
UObject* Context, FFeedbackContext* Warn)
{
UQuestAsset* NewQuestAsset = NewObject<UQuestAsset>(InParent, Class, Name, Flags | RF_Transactional);
// 自动生成唯一的 QuestID
if (NewQuestAsset)
{
NewQuestAsset->QuestID = GenerateUniqueQuestID();
}
return NewQuestAsset;
}
int32 UQuestAssetFactory::GenerateUniqueQuestID() const
{
int32 MaxQuestID = 0;
// 获取资产注册表模块
FAssetRegistryModule& AssetRegistryModule = FModuleManager::LoadModuleChecked<FAssetRegistryModule>("AssetRegistry");
IAssetRegistry& AssetRegistry = AssetRegistryModule.Get();
// 查找所有 QuestAsset 资产
TArray<FAssetData> AssetDataList;
AssetRegistry.GetAssetsByClass(UQuestAsset::StaticClass()->GetClassPathName(), AssetDataList, true);
// 遍历所有已存在的任务资产,找到最大的 QuestID
for (const FAssetData& AssetData : AssetDataList)
{
if (UQuestAsset* QuestAsset = Cast<UQuestAsset>(AssetData.GetAsset()))
{
if (QuestAsset->QuestID > MaxQuestID)
{
MaxQuestID = QuestAsset->QuestID;
}
}
}
// 返回最大ID + 1如果没有现有任务则从1开始
return MaxQuestID + 1;
}
bool UQuestAssetFactory::ShouldShowInNewMenu() const
{
return true;
}