Required true row is skipped
The key is missing/false, spelled differently, or the write returned an error.
Practical Guides
Persist a custom boolean condition and connect an inventory or interaction system through stable public calls.
Call ChapterManager.SetProgressState("generator_unlocked", true) after the project accepts the unlock. Require ProgressOperationResult.Success. Use the same exact ID in an Ordered Objective's Required True State or query it through GetProgressState.
Setting false deletes the exact key. Public reads return false both for a missing key and for false; this boolean contract does not expose existence. Call FlushProgress at the project's durability boundary when the backend requires it.
Obtain the reactor key.reactor_key_obtained. Do not serialize the full inventory through IProgressStore.| Pattern | Configuration | Result |
|---|---|---|
| Only after unlock | Required True State = generator_unlocked | Skipped until the fact is true when evaluated |
| Only on first visit | Required False State = tutorial_seen | Skipped after the fact becomes true |
| Mutually exclusive rows | One requires true; adjacent alternative requires false | Exactly the matching row participates |
| Project UI flag | GetProgressState after Manager readiness | Renders current cached value |
The key is missing/false, spelled differently, or the write returned an error.
Persistence states do not poll inventory. The bridge must forward the authoritative callback.
Inspect SetProgressState and FlushProgress results and the custom backend contract.
Store them in the inventory/save system. Use progression boolean state only for the simple condition.
using System;
using System.Collections;
using System.Collections.Generic;
using OverFuture.ChapterObjectiveSystem.Chapters;
using OverFuture.ChapterObjectiveSystem.Events;
using OverFuture.ChapterObjectiveSystem.Objectives;
using OverFuture.ChapterObjectiveSystem.Persistence;
using OverFuture.ChapterObjectiveSystem.Progression;
using UnityEngine;
public sealed class ProgressStateWriterExample : MonoBehaviour
{
public bool UnlockGenerator()
{
ChapterManager manager = ChapterManager.Instance;
return manager != null &&
manager.SetProgressState("generator_unlocked", true) ==
ProgressOperationResult.Success;
}
}
using System;
using System.Collections;
using System.Collections.Generic;
using OverFuture.ChapterObjectiveSystem.Chapters;
using OverFuture.ChapterObjectiveSystem.Events;
using OverFuture.ChapterObjectiveSystem.Objectives;
using OverFuture.ChapterObjectiveSystem.Persistence;
using OverFuture.ChapterObjectiveSystem.Progression;
using UnityEngine;
public sealed class ProgressStateReaderExample : MonoBehaviour
{
public bool TryReadGeneratorState(out bool isUnlocked)
{
isUnlocked = false;
ChapterManager manager = ChapterManager.Instance;
if (manager == null)
{
return false;
}
isUnlocked = manager.GetProgressState("generator_unlocked");
return true;
}
}