CrimsonUI
CrimsonUI is the UI foundation for any Crimson project. It builds on Epic's CommonUI plugin: a policy creates one root layout per local player, screens push onto gameplay-tag-keyed layers inside that layout, and every pushed widget declares how it wants input routed (game, menu, or both). Around that core it ships a dialog/messaging subsystem, MVVM base classes, a world-space indicator system, a context-menu system, tab/list/drag-drop widgets, simulated touch input, and performance-stat display widgets. Every class is a base meant to be subclassed in your project - the plugin contains no game-specific widgets.
What's included
| System | Key Types | Purpose |
|---|---|---|
| Policy / layout core | UCrimsonUIManagerSubsystem, UCrimsonGameUIPolicy, UCrimsonPrimaryGameLayout | One root layout per local player; screens push to UI.Layer.* tag-keyed stacks. The policy and layout base classes and the manager that boots them from UCrimsonUISettings all ship in CrimsonUI. |
| Activatable widget base | UCrimsonActivatableWidget, ECrimsonWidgetInputMode | Per-widget input routing (Game / Menu / GameAndMenu), mouse capture, move/look input blocking, and InputMode.* tag baseline on activation |
| HUD layout + escape | UCrimsonHUDLayout, ACrimsonHUD, UCrimsonGameViewportClient | Always-present HUD root that binds the Escape/Pause action and the console controller-disconnect screen; HUD actor for GameFeature component injection; cursor-aware viewport client |
| Dialogs & messaging | UCrimsonMessagingSubsystem, UCrimsonGameDialogDescriptor, UCrimsonConfirmationScreen | Yes/No/OK confirmations pushed to UI.Layer.Modal with a result callback, from C++ or a single Blueprint async node |
| Tag-driven visibility | UCrimsonTaggedWidget | HUD elements that hide while the player's ability system holds any of a set of gameplay tags |
| MVVM bases | UCrimsonViewModelBase, UCrimsonScreenViewModelBase, UCrimsonEntryViewModelBase | ViewModel bases with ULocalPlayer access and FieldNotify list-row index support |
| Indicators | UCrimsonIndicatorManagerComponent, UCrimsonIndicatorDescriptor, UCrimsonIndicatorLayer | Pooled world-space markers projected onto the screen, with clamp-to-edge arrows and five projection modes |
| Context menus | UCrimsonContextMenuSubsystem, FCrimsonContextMenuRequest, UCrimsonContextMenuWidgetBase | Cursor- or world-anchored action popups (Use / Drop / Inspect). The menu gathers its actions from the target via UCrimsonContextActionGatherer (the same path the server re-runs on execution); entries confirm on click natively, with disabled-with-reason states, sections, destructive styling, and dialog / hold-to-confirm friction |
| Common widgets | UCrimsonTabListWidgetBase, UCrimsonListView, UCrimsonTileView, UCrimsonDragDropOperation, UCrimsonButtonBase, UCrimsonEditableTextBox | Tabs with runtime registration, list/tile views that pick a widget class per item type, payload drag-drop, countdown buttons, input-glyph buttons |
| Touch input | UCrimsonJoystickWidget, UCrimsonTouchRegion | On-screen widgets that inject synthetic Enhanced Input values - gameplay code never knows touch exists |
| Perf stats | UCrimsonPerformanceStatSubsystem, UCrimsonPerfStatWidgetBase, UCrimsonPerfStatContainerBase | A per-frame sampler for eighteen stats, a stat block that shows one of them as name + value + graph, and a container that spawns exactly the blocks the player switched on |
| Extension points | UCrimsonUIExtensionPointWidget | Named slots in your HUD that GameFeature actions (or code) fill with widgets at runtime |
| Radial menus | UCrimsonRadialWheel, UCrimsonRadialMenuWidget, UCrimsonRadialAction | Direction-selected wheels for weapons, consumables or emotes. |
| Player-bindable slots | UCrimsonRadialBindingProvider, UCrimsonRadialBindingComponent, UCrimsonRadialMenuWidget_Bindable | Wheels the player fills in themselves and that survive a save. A binding is a provider tag plus an opaque payload, resolved to a slice on open; providers for abilities, items and equipment live in CrimsonCore. |
| Sliders | UCrimsonAnalogSlider, SCrimsonAnalogSlider | Drop-in UAnalogSlider replacement: OS-style held-repeat stepping on a stick or held key, a visible focused state (FSliderStyle has no focused brush), and the shipped material theme applied from UCrimsonUISettings with no per-widget setup |
Plugin dependencies
| Type | Name |
|---|---|
| Crimson | None - fully standalone |
| Engine plugins | CommonUI, EnhancedInput, GameplayAbilities, ModelViewViewModel, GameFeatures, ModularGameplay |
| Engine modules (public) | Core, CoreUObject, Engine, UMG, Slate, SlateCore, CommonUI, CommonInput, GameplayTags, EnhancedInput, DeveloperSettings, ModularGameplay, ModelViewViewModel, FieldNotification, GameFeatures, InputCore, ApplicationCore, GameplayAbilities, NetCore |
Engine modules (editor, CrimsonUIEditor) | Core, CoreUObject, Engine, CommonUI, GameplayTags, SlateCore, Slate, ApplicationCore, ToolMenus, UnrealEd, AssetTools, ContentBrowserData, Kismet |
UCrimsonGameUIPolicy, UCrimsonPrimaryGameLayout, UCrimsonUIExtensions, and the UI extension subsystem are all part of CrimsonUI, which depends on no other Crimson plugin. This wiki documents the full setup including those types - each is labeled with the plugin it lives in.Source/CrimsonCore/{Public,Private}/Integration/UI/: UCrimsonCoreActionWidgetChordBridge (chord glyphs on action widgets), UCrimsonCoreRadialBindingProvider_SlotBinding (abilities, items and equipment on the player-editable wheel) and UCrimsonCoreRadialBindingComponent (a wheel store that saves itself); item and interaction context actions live beside it in Integration/Inventory/ and Integration/InteractionUI/. To wire it yourself, see CrimsonCommon -> Concept: Connecting Crimson Plugins; for what CrimsonCore installs, see CrimsonCore -> Concept: The Integration Layer.DefaultUIPolicyClass) whose LayoutClass is a root layout - clear either and no layout is ever created, with no error. Both ship pre-filled; Quick Start step 6 covers them.Shipped example content
The plugin's Content folder is a working reference implementation, not just default assets. Every widget type below has a complete, shipped Blueprint you can open and study - the How-To pages point at these instead of walking you through rebuilding them node by node. Duplicate one into your project as a starting point, or subclass it to customize.
CrimsonUI Content folder then appears in the source tree, and every /CrimsonUI/... path on this wiki becomes browsable.| Asset | Path | Demonstrates |
|---|---|---|
W_CrimsonOverallUILayout | /CrimsonUI/UI/ | Root layout (UCrimsonPrimaryGameLayout): one activatable stack per UI.Layer.* tag + the Register Layer calls. |
B_CrimsonUIPolicy | /CrimsonUI/UI/ | UI policy (UCrimsonGameUIPolicy) wired to the root layout. |
W_CrimsonHUD_Layout, W_CrimsonDefaultHUDLayout | /CrimsonUI/UI/, /CrimsonUI/UI/Hud/ | HUD layouts (UCrimsonHUDLayout) with escape menu, escape action, and controller-disconnect screen set. |
W_CrimsonGameMenu | /CrimsonUI/UI/Hud/ | A complete activatable screen (UCrimsonActivatableWidget): input config, buttons, back handling. |
W_CrimsonConfirmationDialog / Default / Error, W_CrimsonControllerDisconnected | /CrimsonUI/UI/Foundation/Dialogs/ | Confirmation screens (UCrimsonConfirmationScreen) with the four required BindWidget names; the controller-disconnect screen. |
W_CrimsonButton, W_CrimsonButtonTab; W_CrimsonMenuButton, W_CrimsonMenuButton_Modal, W_CrimsonArrowButton | /CrimsonUI/UI/Foundation/Buttons/; /CrimsonUI/UI/Menu/ | Button bases (UCrimsonButtonBase) implementing UpdateButtonText / UpdateButtonStyle; the tab button (UCrimsonTabButtonBase); styled menu variants. |
W_CrimsonBoundActionButton, W_CrimsonBottomActionBar | /CrimsonUI/UI/Foundation/Widgets/BottomBar/ | Per-input-method button styles and the CommonUI bound-action bar. |
W_CrimsonHorizontalTabList | /CrimsonUI/UI/Foundation/TabbedView/ | Tab list (UCrimsonTabListWidgetBase). |
W_ContextMenu_Modal / World / Radial, W_ContextMenuEntry, W_ContextMenuEntry_Choice | /CrimsonUI/UI/Foundation/ContextMenu/ | All three context-menu presentations plus the entry button, with the required ContentPanel / EntryBox naming. |
W_CrimsonPerfStat | /CrimsonUI/UI/PerfStats/ | The house performance-stat block (UCrimsonPerfStatWidgetBase): stat name, value and graph in one widget, 164 px wide. |
Crimson_CommonUIInputData, Crimson_IA_UI_* | /CrimsonUI/Input/ | CommonUI input data (Click/Back preset) and the five UI input actions. |
CommonInput_KeyboardMouse, CommonInput_Gamepad_* | /CrimsonUI/UI/Foundation/Platform/Input/ | Per-platform controller-brush data for key glyphs. |
Styles: Crimson_ButtonStyle_*, Crimson_TextStyle_*, Crimson_BorderStyle_* | /CrimsonUI/UI/Foundation/Buttons/, .../Text/ | CommonUI button/text/border style assets the shipped widgets use. |
W_CrimsonRadialMenu | /CrimsonUI/UI/Foundation/Radial/ | A complete radial menu screen - duplicate as a starting point. |
W_CrimsonRadialWheel | /CrimsonUI/UI/Foundation/Radial/ | The wheel, with its material and slice class already set. |
W_CrimsonRadialSlice | /CrimsonUI/UI/Foundation/Radial/ | Self-composing slice content - icon, label, count badge. |
MI_RadialSector | /CrimsonUI/UI/Foundation/Materials/Radial/ | Sector material instance driven by the wheel. |
W_CrimsonRadialMenu_Bindable | /CrimsonUI/UI/Foundation/Radial/ | A player-editable wheel with the picker already wired - duplicate as a starting point. |
W_CrimsonRadialBindingPicker | /CrimsonUI/UI/Foundation/Radial/ | Slot picker: searchable list of everything the layout's providers offer. |
W_CrimsonRadialBindingEntry | /CrimsonUI/UI/Foundation/Radial/ | One picker row - icon, label, count badge. Collapses what an entry does not carry. |
MI_CrimsonSlider_Bar / _Bar_Hovered / _Bar_Disabled, MI_CrimsonSlider_Thumb / _Thumb_Hovered / _Thumb_Disabled | /CrimsonUI/UI/Foundation/Materials/Slider/ | The shipped slider theme UCrimsonAnalogSlider applies. All six are instances of M_UI_ChamferBox; point UCrimsonUISettings at them (or your own) - see How-To: Sliders. |
Where to go next
- Quick Start - a working policy, root layout, and HUD, end to end.
- How-To: Get the Building Blocks - the exact nodes/code to reach the layout, subsystems, and settings (read this second).
- How-To: Build the Boot Assets by Hand - build the root layout, policy, and HUD layout yourself instead of assigning the shipped ones.
- Task pages: push screens, HUD layout and escape menu, dialogs, tag-driven visibility, buttons, tabs, lists, drag-drop, MVVM screens, indicators, context menus, radial menus, touch, perf stats, extension points, pool bars.
- Mental model: Concept: Policy & Layout Architecture, Concept: Input Routing & Activatable Widgets, Concept: Full-Stack Integration & Multiplayer.
- Looking up a signature? Jump to API Reference.
- Common widgets: How-To: Buttons & Action Glyphs, How-To: Sliders, How-To: Tabs, How-To: Lists with Mixed Item Types.