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.

New here? Read in this order
Do Quick Start first (one working UI stack), then How-To: Get the Building Blocks - it shows the exact Blueprint nodes and C++ for reaching the subsystems and layout that every other page assumes you have. Use the Blueprint / C++ / Both switch at the top to see the path for your project type.

What's included

SystemKey TypesPurpose
Policy / layout coreUCrimsonUIManagerSubsystem, UCrimsonGameUIPolicy, UCrimsonPrimaryGameLayoutOne 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 baseUCrimsonActivatableWidget, ECrimsonWidgetInputModePer-widget input routing (Game / Menu / GameAndMenu), mouse capture, move/look input blocking, and InputMode.* tag baseline on activation
HUD layout + escapeUCrimsonHUDLayout, ACrimsonHUD, UCrimsonGameViewportClientAlways-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 & messagingUCrimsonMessagingSubsystem, UCrimsonGameDialogDescriptor, UCrimsonConfirmationScreenYes/No/OK confirmations pushed to UI.Layer.Modal with a result callback, from C++ or a single Blueprint async node
Tag-driven visibilityUCrimsonTaggedWidgetHUD elements that hide while the player's ability system holds any of a set of gameplay tags
MVVM basesUCrimsonViewModelBase, UCrimsonScreenViewModelBase, UCrimsonEntryViewModelBaseViewModel bases with ULocalPlayer access and FieldNotify list-row index support
IndicatorsUCrimsonIndicatorManagerComponent, UCrimsonIndicatorDescriptor, UCrimsonIndicatorLayerPooled world-space markers projected onto the screen, with clamp-to-edge arrows and five projection modes
Context menusUCrimsonContextMenuSubsystem, FCrimsonContextMenuRequest, UCrimsonContextMenuWidgetBaseCursor- 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 widgetsUCrimsonTabListWidgetBase, UCrimsonListView, UCrimsonTileView, UCrimsonDragDropOperation, UCrimsonButtonBase, UCrimsonEditableTextBoxTabs with runtime registration, list/tile views that pick a widget class per item type, payload drag-drop, countdown buttons, input-glyph buttons
Touch inputUCrimsonJoystickWidget, UCrimsonTouchRegionOn-screen widgets that inject synthetic Enhanced Input values - gameplay code never knows touch exists
Perf statsUCrimsonPerformanceStatSubsystem, UCrimsonPerfStatWidgetBase, UCrimsonPerfStatContainerBaseA 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 pointsUCrimsonUIExtensionPointWidgetNamed slots in your HUD that GameFeature actions (or code) fill with widgets at runtime
Radial menusUCrimsonRadialWheel, UCrimsonRadialMenuWidget, UCrimsonRadialActionDirection-selected wheels for weapons, consumables or emotes.
Player-bindable slotsUCrimsonRadialBindingProvider, UCrimsonRadialBindingComponent, UCrimsonRadialMenuWidget_BindableWheels 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.
SlidersUCrimsonAnalogSlider, SCrimsonAnalogSliderDrop-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

TypeName
CrimsonNone - fully standalone
Engine pluginsCommonUI, 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
Everything is in this plugin
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.
Using with other Crimson plugins
CrimsonUI works alone. When you own other Crimson plugins, CrimsonCore (CrimsonCore - requires all Crimson plugins) contains the full-suite wiring for this plugin, mainly 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.
One hard boot requirement
The UI stack boots with any Game Instance and Local Player class: it listens to the engine's local-player events. What it does need is a UI policy class in Project Settings -> Crimson -> Crimson UI (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.

Show Plugin Content
Plugin assets are hidden by default. In the Content Browser open Settings (top-right of the panel) and tick Show Plugin Content - the CrimsonUI Content folder then appears in the source tree, and every /CrimsonUI/... path on this wiki becomes browsable.
AssetPathDemonstrates
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.