添加任务系统UI

This commit is contained in:
997146918 2025-10-27 18:46:54 +08:00
parent 10d2c7e354
commit 8917abed28
14 changed files with 25 additions and 8 deletions

View File

@ -33,8 +33,8 @@ public:
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Quest|Basic", meta = (MultiLine = true))
FText QuestDescription;
/** 前置任务ID列表完成这些任务后才能触发当前任务 */
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Quest|Trigger")
/** 前置任务ID列表 */
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Quest|Trigger", meta = (ToolTip = "完成这些任务后才能触发当前任务, 不填写默认激活接受"))
TArray<int32> PrerequisiteQuestIDs;
/** 任务触发条件(预留,可在蓝图中实现) */
@ -53,7 +53,4 @@ public:
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Quest|Completion")
FString CompletionCondition;
/** 是否自动触发(游戏开始时自动接取) */
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Quest|Trigger")
bool bAutoTrigger = false;
};

View File

@ -44,6 +44,18 @@ void UQuestManager::LoadAllQuests()
}
void UQuestManager::CheckAcceptableQuests()
{
for (auto QuestAsset : QuestAssets)
{
if (!ActiveQuestsMap.Find(QuestAsset->QuestID) && CompletedQuestIDs.Contains(QuestAsset->QuestID))
{
//任务不在当前已激活的任务 和 已完成的任务列表中
AcceptQuest(QuestAsset);
}
}
}
bool UQuestManager::AcceptQuest(UQuestAsset* QuestAsset)
{
if (!QuestAsset)
@ -70,7 +82,7 @@ bool UQuestManager::AcceptQuest(UQuestAsset* QuestAsset)
// 触发事件
OnQuestStateChanged.Broadcast(QuestAsset->QuestID);
UE_LOG(LogTemp, Warning, TEXT("Quest %s Accepted"), *QuestAsset->QuestName.ToString());
return true;
}
@ -97,10 +109,12 @@ bool UQuestManager::CompleteQuest(int32 QuestID)
// 触发事件
OnQuestStateChanged.Broadcast(QuestID);
UE_LOG(LogTemp, Warning, TEXT("Quest id = %d Complete"), QuestID);
// 从活动任务中移除
ActiveQuestsMap.Remove(QuestID);
//检测是否有其他可接受的任务
CheckAcceptableQuests();
return true;
}
@ -307,6 +321,8 @@ void UQuestManager::LoadFromSaveData(const TArray<FQuestSaveData>& SaveData)
}
}
CheckAcceptableQuests();
}
void UQuestManager::CheckQuestCompletion(int32 QuestID)

View File

@ -51,6 +51,10 @@ public:
/** 加载本地所有任务 */
void LoadAllQuests();
/** 检测所有可接收的任务 */
UFUNCTION(BlueprintCallable, Category = "Quest")
void CheckAcceptableQuests();
/** 接受任务 */
UFUNCTION(BlueprintCallable, Category = "Quest")
bool AcceptQuest(UQuestAsset* QuestAsset);