Interaction Engine Documentation

UI and feedback

UI, prompt, and notification behavior.

This chapter covers the presentation layer exposed by the plugin: focus prompt widgets, per-slot interaction rows, progress updates, notification widgets, distant indicators, and focused-target visual feedback.

Presentation layers

Recommended widget architecture

For custom prompt UI, the recommended path is to derive the main prompt widget from InteractionFocusWidgetBase and each repeatable slot row from InteractionRowWidgetBase. This keeps Blueprint presentation flexible while letting the plugin handle stable interactor binding, focus payload delivery, slot refresh, and progress routing by SlotID.

Why rows matter: modern Interaction Engine targets can expose multiple display slots at once. A single prompt widget should usually rebuild a list of slot rows instead of assuming one fixed action text or one fixed progress bar.

InteractionFocusWidgetBase

InteractionFocusWidgetBase is the base class for the shared interaction prompt shown by the local interactor. It implements Interaction Focus Receiver, receives FInteractionFocusData, optionally resolves the owning pawn's InteractorComponent, refreshes the focused slots, and updates registered row widgets when interaction progress changes.

Function or propertyPurpose
ApplyFocusDataApplies the focus payload pushed by the interactor and fires the Blueprint focus events.
GetCurrentFocusDataReturns the latest FInteractionFocusData received by the widget.
HasValidFocusDataReturns whether the current focus payload represents a valid actor or foliage target.
InitializeForInteractorExplicitly assigns the interactor. Use this for custom-created widgets or world-space widget workflows.
ResolveInteractorReferenceResolves the interactor from the owning player pawn. It does not rely on GetPlayerPawn(0).
BindInteractorEvents / UnbindInteractorEventsBinds or removes the progress and lifecycle delegates used by the base widget.
RefreshCurrentSlotsPulls display slots from the currently focused target through the interactor.
GetCurrentSlotsReturns the latest slot list used by the UI.
FindCurrentSlotByIDFinds a refreshed slot by gameplay SlotID.
GetInitialProgressFromSlotCalculates normalized starting progress for Hold, Multi-Hit, Toggle, and Button Mash rows.
DiscoverInteractionRowsScans the widget tree for child widgets derived from InteractionRowWidgetBase.
RegisterInteractionRow / UnregisterInteractionRowManually manages row widgets when your UI creates or recycles rows at runtime.
SetInteractionRows / ClearInteractionRowsReplaces or clears the complete registered row list.
UpdateProgressForSlotFinds the row with a matching SlotID and updates its normalized progress.

Automation flags

The base widget is designed to work automatically for common Blueprint widgets, but the behavior can be disabled for advanced custom UI.

FlagDefault behavior
bAutoDiscoverRowsScans the widget tree for InteractionRowWidgetBase children during initialization.
bAutoResolveAndBindInteractorAutomatically resolves the local interactor and binds progress/lifecycle events.
bAutoRefreshSlotsOnFocusDataRefreshes CurrentSlots before On Focus Data Applied.
bAutoUpdateRegisteredRowsAutomatically routes progress updates into registered rows by SlotID.
bResetProgressOnInteractionCompletedResets the completed slot's row progress to zero when a confirmed completion arrives.
bRefreshSlotsOnHitConfirmedRefreshes slots after confirmed hits, then recalculates Multi-Hit/Damage progress from the latest slot state.

Blueprint events on the focus widget

EventUse it for
On Focus Data AppliedRebuild or update the visible prompt after valid focus data is received.
On Focus Data ClearedHide the prompt, clear rows, or play an unfocus animation.
On Display Slots RefreshedCreate/update row widgets from the refreshed slot list.
On Slot Progress UpdatedReact when progress changes, even if no registered row matched the SlotID.
On Widget Interaction CompletedPlay completion animation/sound after server-confirmed completion.
On Widget Hit ConfirmedReact to confirmed Multi-Hit/Damage hits and update visual damage progress.
On Widget Button Mash FailedReset mash visuals or play a failure state.

InteractionRowWidgetBase

InteractionRowWidgetBase is an optional base class for individual slot rows. Use it for reusable row Blueprints so the focus widget can update the correct progress bar without knowing your project-specific widget class.

Function or eventPurpose
SetInteractionSlotIDAssigns the gameplay slot represented by this row. Call this when building the row from an FInteractionSlot.
GetInteractionSlotIDReturns the represented slot id.
ClearInteractionSlotIDClears the row's represented slot. Useful when recycling rows.
SetInteractionRowProgressSets normalized progress, clamped to 0..1, and fires the row Blueprint event.
GetInteractionRowProgressReturns the latest clamped progress value.
On Interaction Row Progress UpdatedImplement this in Blueprint to set the ProgressBar percent or update custom row visuals.

Widget helper library

InteractionWidgetLibrary provides generic Blueprint helpers for row-based UI. Use Find Interaction Row By Slot ID to locate a row, or Update Interaction Row Progress By Slot ID to locate and update a row in one call.

Typical multi-slot prompt workflow

  • 1. Create a main prompt widget Make the widget inherit from InteractionFocusWidgetBase. Use this widget class on your interactable or foliage widget settings.
  • 2. Create a row widget Make each row inherit from InteractionRowWidgetBase. The row should expose your text, glyph, hint, and progress bar visuals.
  • 3. Rebuild rows from refreshed slots In On Display Slots Refreshed, loop through the received slots, create or reuse one row per slot, then call SetInteractionSlotID on each row using the slot's SlotID.
  • 4. Initialize row values Set prompt text from Display.Prompt, hint text from Display.Hint, and glyph/icon from the slot's InputAction or the focus data's InputAction.
  • 5. Set initial progress Call GetInitialProgressFromSlot for Hold, Mash, Toggle, Multi-Hit, or Damage rows, then call SetInteractionRowProgress on the row.
  • 6. Let the base widget update progress During gameplay, the base widget receives hold/mash/hit/completion events from the interactor and calls UpdateProgressForSlot automatically.
  • Prompt data sources

    Field areaSourceNotes
    Target metadataInteractionTitle and InteractionDescription on the interactable, or foliage entry widget dataUse for actor-level or foliage-instance identity/context.
    Action promptDisplay.Prompt inside the slotRepresents the actionable operation for the current slot.
    Secondary hintDisplay.Hint inside the slotOptional supplemental text such as requirements or outcome notes.
    Input actionDisplay.InputAction inside the slot, or InputAction on FInteractionFocusDataPreferred source for glyph resolution through the input glyph system.
    Fallback input labelDisplay.KeyLabel inside the slotUse as explicit text fallback when no input action or glyph is available.

    Focus data payload

    FInteractionFocusData is the unified payload pushed into widgets for both actor and foliage focus. It includes display text, InputAction, slot identity, interaction type, focus location, distance, and target-specific references.

    Input glyph integration

    Widgets should prefer the input glyph system over hard-coded key names. Use the slot or focus InputAction to resolve a visual through the glyph subsystem, then fall back to KeyLabel or text when no glyph exists. See Input Device Glyphs for the complete glyph workflow.

    Main prompt widget placement

    The interactable controls prompt widget behavior through WidgetDisplayMode, WidgetClass, WidgetDrawSize, WidgetRelativeOffset, and the placement fields for the selected display mode.

    Anchor resolution: if the actor contains an Interaction Widget Anchor Component, projected widgets and distant indicators resolve from that component instead of the actor origin.

    On-focus widget placement

  • Projected near target The prompt is positioned in world space relative to the interactable anchor and uses WidgetRelativeOffset.
  • Fixed on screen The prompt is locked to a normalized viewport position using FixedScreenPosition plus the pixel offset stored in FixedScreenWidgetOffset.
  • Placement note: FixedScreenPosition defines the normalized screen anchor and FixedScreenWidgetOffset applies the final pixel-space adjustment.

    Interaction notifications

    Notifications are runtime payloads sent from the interaction flow to the player's UI when the result needs a dedicated explanation, such as access denial, missing requirements, inventory errors, or other custom outcomes.

    Widget class requirement: notification widgets should inherit from InteractionNotificationWidgetBase so the payload can be applied through the plugin's base notification path.
  • 1. Emit from the interaction source Configure NotificationWidgetClass on the interactable when needed, then call NotifyInteractor or NotifyInteractorMessage.
  • 2. Receive on the interactor side Bind the player UI to OnInteractionNotificationReceived on the interactor component.
  • 3. Handle target-side denial events if required Use OnInteractionDenied on the interactable when the target actor should react locally to a denied attempt.
  • 4. Present inside the widget layer The widget Blueprint controls animation, stacking, auto-close, and any other project-specific notification behavior.
  • World indicators and outlines

    Debug checklist

  • Rows do not update progress Confirm that each row inherits from InteractionRowWidgetBase, has a valid SlotID, and is registered or discoverable by the focus widget.
  • Progress updates fire but no row changes Check the bUpdatedRow value from On Slot Progress Updated. If it is false, the registered row list does not contain the matching slot id.
  • Widget cannot find the interactor Make sure the widget has the correct owning player or call InitializeForInteractor manually.
  • Glyph is missing Prefer InputAction glyph resolution and keep KeyLabel as a fallback text path.
  • Related configuration points

  • Interactable reference Use Interactable Reference for prompt widget, notification widget, outline, and distant indicator fields.
  • Interactor reference Use Interactor Reference for focus data, icon gathering, line-of-sight, and debug settings.
  • Slot reference Use Slot and Settings Reference for prompt, hint, input action, key label, feedback, and progress-related fields stored inside each slot.