Concept: Duration Interactions & Progress UI

A duration (channel) interaction runs an action-phase ability on the avatar - the one you author in How-To: Add Holds, Channels & a Progress Prompt, step 2. Here is how a timer keeps a widget's remaining-duration display current, using this plugin's duration context.

  1. On activate, the channel ability reads the payload (target, success ASC/class), optionally creates a UCrimsonInteractionDurationContext and hands it to the HUD to spawn its progress widget, and starts a short repeating tick (0.05s).
  2. Each tick it advances CurrentProgress (scale the step by an attribute for stat-based speed) and pushes (CurrentProgress, Duration) to the widget via the context's OnProgressChanged.
  3. Each tick it calls UpdateProgress(Elapsed, Duration) on the context, which fires OnProgressChanged. A hold phase reports through the target's NotifyInteractionProgress.
  4. On completion it notifies the target (NotifyInteractionSuccess - or fires a success ability on the target's ASC for Method-2 targets), reports full progress, and ends - the HUD removes the widget.
Two ways to consume progress
The context (UCrimsonInteractionDurationContext.OnProgressChanged) is the per-instance channel for the spawned widget. Remaining time = Duration - CurrentProgress; bar fill = CurrentProgress / Duration. (CrimsonCore - requires all Crimson plugins) adds a UI-extension payload subclass (UCrimsonCoreInteractionDurationPayload) so the widget spawns at an extension point, and re-publishes progress as FCrimsonInteractionProgressMessage for any HUD.