57 lines
1.5 KiB
C++
57 lines
1.5 KiB
C++
// ChildHood Project - 跨关卡持久数据持有者
|
|
// 对应技术方案: docs/technical/交互系统-技术方案.md 第12节(跨场景持久化设计)
|
|
|
|
#pragma once
|
|
|
|
#include "CoreMinimal.h"
|
|
#include "Engine/GameInstance.h"
|
|
#include "ChildHoodGameInstance.generated.h"
|
|
|
|
/**
|
|
* UChildHoodGameInstance
|
|
*
|
|
* 跨关卡持久数据持有者。UE5 的 OpenLevel() 会销毁整个旧 World(包括
|
|
* Character 及其所有 UActorComponent),因此需要将持久数据与运行时行为分离。
|
|
*
|
|
* v0.1 为单场景原型,此 GameInstance 以空数据初始化。
|
|
* 后续多场景版本只需在 Project Settings 中将 GameInstance Class 设为此类即可。
|
|
*/
|
|
UCLASS()
|
|
class UChildHoodGameInstance : public UGameInstance
|
|
{
|
|
GENERATED_BODY()
|
|
|
|
public:
|
|
|
|
// === 物品消耗状态 ===
|
|
|
|
/** 查询指定物品是否已被收集(跨场景持久) */
|
|
bool IsItemCollected(FName ItemId) const;
|
|
|
|
/** 标记指定物品为已收集(写入持久层) */
|
|
void MarkItemCollected(FName ItemId);
|
|
|
|
// === 门状态 ===
|
|
|
|
/** 查询指定门的开关状态(跨场景持久),未记录的门默认为关闭 */
|
|
bool IsDoorOpen(FName DoorId) const;
|
|
|
|
/** 设置指定门的开关状态(写入持久层) */
|
|
void SetDoorOpen(FName DoorId, bool bIsOpen);
|
|
|
|
// === 重置 ===
|
|
|
|
/** 重置所有持久数据(新游戏时调用) */
|
|
void ResetAll();
|
|
|
|
private:
|
|
|
|
/** 已收集物品ID集合 */
|
|
UPROPERTY()
|
|
TSet<FName> CollectedItemIDs;
|
|
|
|
/** 门开关状态映射(true=打开,false=关闭) */
|
|
UPROPERTY()
|
|
TMap<FName, bool> DoorStates;
|
|
};
|