| name | f8-features-procedure-workflow |
| description | Use when implementing or troubleshooting Procedure feature workflows — game flow control, ProcedureNode management in F8Framework. |
Procedure Feature Workflow
⚠️ IMPORTANT: Before using this feature, you MUST formally initialize F8Framework in the launch sequence. Ensure ModuleCenter.Initialize(this); has run first, then create the required module, for example FF8.Procedure = ModuleCenter.CreateModule<ProcedureManager>();.
Use this skill when
- The task is about game flow control, procedure/state management.
- The user asks about ProcedureNode, game phases, or scene-level flow transitions.
Path resolution
- Prefer project source at Assets/F8Framework.
- For usage docs, read: Assets/F8Framework/Tests/Procedure/README.md
Sources of truth
- Runtime module: Assets/F8Framework/Runtime/Procedure
- Test docs: Assets/F8Framework/Tests/Procedure
Key classes and interfaces
| Class | Role |
|---|
ProcedureManager | Core module. Access via FF8.Procedure. |
ProcedureNode | Abstract base class for game flow nodes. |
ProcedureProcessor | Runtime context passed to procedure lifecycle methods. |
API quick reference
FF8.Procedure.AddProcedureNodes(new DemoInitState());
FF8.Procedure.RunProcedureNode<DemoInitState>();
FF8.Procedure.RemoveProcedureNode<DemoInitState>();
FF8.Procedure.HasProcedureNode<DemoInitState>();
FF8.Procedure.PeekProcedureNode(out DemoInitState initState);
ProcedureNode current = FF8.Procedure.CurrentProcedureNode;
int count = FF8.Procedure.ProcedureNodeCount;
ProcedureNode template
public class DemoInitState : ProcedureNode
{
public override void OnInit(ProcedureProcessor processor) { }
public override void OnEnter(ProcedureProcessor processor) { }
public override void OnUpdate(ProcedureProcessor processor) { }
public override void OnExit(ProcedureProcessor processor) { }
public override void OnDestroy(ProcedureProcessor processor) { }
}
Workflow
- Define game phases as
ProcedureNode subclasses (Init, Login, Lobby, Battle, etc.).
- Register nodes via
AddProcedureNodes() or let auto-search find them.
- Start flow with
RunProcedureNode<InitState>().
- Transition between nodes by calling
RunProcedureNode<NextState>() from within a node (automatically exits current).
- Use
OnEnter/OnExit for setup/cleanup, OnUpdate for per-frame logic.
- Query current state with
CurrentProcedureNode.
Common error handling
| Error | Cause | Solution |
|---|
| Procedure not found | Not registered | Add via AddProcedureNodes() or check auto-search |
| Multiple procedures running | Calling Run without exiting current | Each Run auto-exits current node |
Cross-module dependencies
- Module: ProcedureManager is created via ModuleCenter.
- FSM: For finer-grained state control within a procedure, use FSM.
Output checklist
- Procedure nodes defined for all game phases.
- Transition flow documented.
- Files changed and why.
- Validation status and remaining risks.