Appearance
Remap-aware controller glyphs
InterfaceForge uses Unreal's CommonInput controller-data assets. It does not keep a second key-to-icon manager. The original BP_IFGenericController is a normal Blueprint derived from CommonInputBaseControllerData, with four neutral face-position symbols. No controller-brand artwork or reference-game packages are included. Physical controller tests are explicitly deferred because the user has no controller available.
Opt in through CommonInput
- Enable CommonUI/CommonInput/EnhancedInput as described in installation.
- In Project Settings → Game → Common Input Settings → Platform Input → Windows, set Default Gamepad Name = Generic and add BP_IFGenericController to Controller Data. Configure other target platforms separately.
- Register your player-mappable Enhanced Input context/user settings, then place an IFActionPrompt in your Widget Blueprint. Set Mapping Name to your registered row and Action Label to the player-facing action, such as Interact.
The sample opts in only in its own DefaultGame.ini:
ini
[CommonInputPlatformSettings_Windows CommonInputPlatformSettings]
DefaultGamepadName=Generic
+ControllerData=/InterfaceForge/UIForge/Input/BP_IFGenericController.BP_IFGenericController_CThe selected gamepad name must match the controller-data class. Installed5.6 otherwise selected Windows; a class named Generic alone did not resolve its brushes. This is project configuration, not a core plugin override. Hardware identification/other controller names need your own CommonInput data and target-device validation. See Epic's CommonUI controller-data setup and controller-data API.
Original default art and customization
| Engine key | Material instance | ActivePosition |
|---|---|---|
| Gamepad Face Button Top | MI_IFControllerNorth | 0 |
| Gamepad Face Button Right | MI_IFControllerEast | 1 |
| Gamepad Face Button Bottom | MI_IFControllerSouth | 2 |
| Gamepad Face Button Left | MI_IFControllerWest | 3 |
M_IFControllerFace is a translucent UI material drawing a four-circle cluster, with the relevant position filled. ActivePosition is its scalar parameter; the supplied instances choose0–3. Brush Image Size is28×28. Other circles are subdued outlines. These are neutral positions, not claims about a particular brand's printed button labels. Native prompt glyphs retain their desired aspect beside enlarged text.
Duplicate BP_IFGenericController into your project. In Class Defaults, change Input Brush Data Map keys/brushes, image sizes or tint, and select your copied class in the platform settings. Brushes can use your own UI materials or licensed textures. Choose Input Type/Gamepad Name appropriate to your project. You can use additional CommonInput classes for keyboard/mouse and other controller families. The default set supplies only the four face positions; unsupported keys retain readable text fallback.
Applied mappings and minimal cues
The prompt resolves the current applied key from the registered mapping row. Begin Edit → Stage Registered Key does not change that key or glyph. Cancel discards the draft; successful Apply refreshes the existing prompt through EnhancedInput's On Settings Applied event. Family/key-profile changes also refresh it. No per-widget mapping polling is needed. Controls recipe gives actual stage/apply/cancel nodes and validation.
Leave Action Label empty when the surrounding UI already identifies the action. The native body then shows only the glyph, or only the readable key when a glyph is unavailable. It does not leave an empty separator or reserve a hidden text column. The original RPG example uses this minimal cue beside its context reading region; its Interact/Pause controls retain their original height. Prose remains separately scrollable. The RTS footer keeps the label Select next scout beside its glyph/key.
Make a custom prompt body entirely in Blueprint
Create a Widget Blueprint with parent IFActionPrompt, add your own Image/Text widgets, and implement On Prompt Updated:
flowchart TD
E[On Prompt Updated] --> B{Has Resolved Glyph}
B -->|True| I[Resolved Glyph → Set Brush on your Image]
I --> L[Action Label → Set Text; show Image]
B -->|False| T[Prompt Text → Set Text; collapse Image]
Resolved Key, Resolved Glyph, Has Resolved Glyph, Prompt Text and Action Label are public Blueprint properties. A Designer root replaces the native body; the base keeps resolution/subscription lifecycle and calls your event. Style your own Image with Set Color and Opacity or normal theme tokens. Refresh Prompt is available after an intentional live change to Mapping Name/Action Label. Do not manually set the applied key or glyph in response to staging; let the engine's applied mapping supply it.
The saved WBP_ForgeAppliedPrompt proves this custom-body workflow in the RTS footer. Its PromptBody Horizontal Box contains CueGlyph (Image) and a bounded reading region for CueCaption (IFText). On Prompt Updated uses the branches above, then Get Owning Player → IFLocalPlayerSubsystem → Get Theme → Accent → Set Color and Opacity on CueGlyph. IFActionPrompt refreshes this event when the local-player theme changes, as well as when input or an applied mapping changes. Replace the body in Blueprint while keeping the public resolution lifecycle. RPG uses the minimal native prompt, so the custom-body proof applies to RTS.
For longer action/key text, the saved RTS body uses CueReadingBounds (Size Box, Max Desired Height =84) → CueReading (InterfaceForge Scroll Box) → CueCaption. The bounded reading region has a Fill Horizontal Box slot; CueGlyph retains its own Auto slot. CueReading is focusable, clips to bounds and uses Instant Scroll on focus changes. PromptBody is Not Hit-Testable (Self Only) so its reading child can receive wheel input. The whole Action Label/Prompt Text is retained; the region scrolls instead of growing until it removes the adjacent resource reading area. Adjust the ordinary Size Box limit and slot alignment in Blueprint for your typography/layout. The native prompt has no global height restriction; custom bodies choose their own layout policy.
The expanded Latin-text fixture found and repaired a zero-height resource viewport at maximum recorded scale. Actual wheel input now reveals the caption while preserving its applied-key text. This tests wrapping/overflow, not a shipped German translation or a culture switch. Responsive text evidence records the exact revision and remaining gates.
For CommonUI navigation-action icons, use CommonActionWidget with your configured CommonUI row. The saved main/pause identity bands now demonstrate icons and actual-key fallback through the menu cue recipe. IFActionPrompt continues to resolve registered Enhanced Input gameplay rows.
Expected: controller intent selects the configured face-position glyph; applying a supported remap changes that glyph in place; meaningful mouse/keyboard input restores the appropriate applied key/brush or readable fallback while modal focus remains valid. Runtime and packaged scope, actual failed shader/config/remap/culling runs and remaining device/layout gates are recorded in controller glyph evidence.