Table of Contents

Class LoadingPipeline

Namespace
GrindFest.Content
Assembly
GrindFest.dll

The boot sequence, as an explicit list of weighted stages.

Why it exists: the current loading screen derives its progress from SceneManager.LoadSceneAsync, which says nothing about content, assets or the party — so it parks at 0.99 while the real work happens (and the player sees a frozen bar). Here, progress is the actual work: content parsing, boot-scope preloads, scene.

The pipeline only drives stages; it does not own the systems. Scene and Party are intentionally left to the caller until GameManager is rewired onto this sequence (plan §8.1).

See CONTENT_PLATFORM_PLAN.md §7.

public static class LoadingPipeline
Inheritance
object
LoadingPipeline

Properties

BootScopeAddresses

Addresses the active world source declared for the boot scope (filled during the run).

CurrentStage

Stage currently running, for the loading screen's label.

HasRun
IsMainThread

True when the caller runs on Unity's main thread — Unity installs a UnitySynchronizationContext there, and that is what makes await continuations come back to the main thread instead of the thread pool.

IsRunning
LastRunMs
Progress

0..1 across all stages.

WorldSource

The world being started. Defaults to the Ink world; tests and tools can swap it (D16).

Methods

Reset()

Test/tooling helper: forget the last run so the pipeline can be exercised again.

RunAsync(CancellationToken)

Runs the stages that do not belong to scene loading. Stages: content → world scope → boot tier. Safe to call once per boot; repeated calls are ignored while running.

Must be started from Unity's main thread: Addressables operations created on a thread-pool thread never complete, and the failure mode is a silent hang — so it is checked here and reported loudly.

Events

OnProgress

Raised whenever progress or the current stage changes.