API Reference

Types are in CrimsonUI unless marked (CrimsonCommon). BP = BlueprintCallable, BP (pure) = BlueprintPure, BP event = BlueprintNativeEvent / BlueprintImplementableEvent, C++ only = no Blueprint access.

Boot & policy

TypeKindDescription
UCrimsonUISettingsUDeveloperSettings (Config=Game)Project Settings -> Crimson -> Crimson UI. DefaultUIPolicyClass, ConfirmationDialogClass, ErrorDialogClass, DefaultModalContextMenuClass, DefaultWorldContextMenuClass, DefaultRadialContextMenuClass (all soft class refs, config).
UCrimsonUIManagerSubsystemUGameInstanceSubsystemBoots the policy from settings at init; syncs root-layout visibility to AHUD::bShowHUD. GetRootLayout(LocalPlayer) and inherited GetCurrentUIPolicy() are C++ only. Never subclass.
UCrimsonGameUIPolicy (CrimsonCommon)UObject (Abstract, Blueprintable)LayoutClass (EditAnywhere), LocalMultiplayerInteractionMode (EditAnywhere: PrimaryOnly/SingleToggle/Simultaneous). C++ hooks: OnRootLayoutAddedToViewport/Removed/Released, RequestPrimaryControl, static GetGameUIPolicy.
UCrimsonPrimaryGameLayout (CrimsonCommon)UCommonUserWidgetBP (protected): RegisterLayer(Tag, Container) - call in your own graph. C++ only: static GetPrimaryGameLayout(PC/LP) + GetPrimaryGameLayoutForPrimaryPlayer, PushWidgetToLayerStack<T> (sync + async-load variants), FindAndRemoveWidgetFromLayer, GetLayerWidget.
UCrimsonUIExtensions (CrimsonCommon)UBlueprintFunctionLibraryBP: PushContentToLayer_ForPlayer (returns widget), PushStreamedContentToLayer_ForPlayer (soft class), PopContentFromLayer, GetLocalPlayerFromController, SuspendInputForPlayer (returns token) / ResumeInputForPlayer. BP (pure): GetOwningPlayerInputType, IsOwningPlayerUsingTouch, IsOwningPlayerUsingGamepad.
UCrimsonGameViewportClientUCommonGameViewportClientHardware vs software cursor from the Platform.Trait.Input.HardwareCursor platform trait. Set via GameViewportClientClassName.
ACrimsonHUDAHUD (Config=Game)GameFramework component receiver (GameFeature anchor) + GetDebugActorList listing every ASC avatar for the GAS debugger. No UFUNCTIONs - set as HUDClass and subclass if needed.

Activatable widgets & HUD

TypeKindDescription
UCrimsonActivatableWidgetUCommonActivatableWidget (Abstract)EditDefaultsOnly Input properties: InputConfig (ECrimsonWidgetInputMode), GameMouseCaptureMode, MenuMouseCaptureMode, bIgnoreMoveInput, bIgnoreLookInput, bForceInputModeTagsOnActivate, bRestoreInputTypeOnDeactivate. No UFUNCTIONs - behavior is automatic on activate/deactivate.
ECrimsonWidgetInputModeEnum (BlueprintType)Default, GameAndMenu, Game, Menu.
UCrimsonHUDLayoutUCrimsonActivatableWidget (Abstract)EscapeMenuClass (soft class), EscapeInputAction (UInputAction*, 5.8 Enhanced Input path), ControllerDisconnectedScreenClass, PlatformRequiresControllerDisconnectScreen (default Platform.Trait.Input.PrimarilyController). BP event: DisplayControllerDisconnectedMenu, HideControllerDisconnectedMenu. Escape pushes to UI.Layer.Menu; tag fallback UI.Action.Escape.
UCrimsonTaggedWidgetUCommonUserWidget (Abstract)HiddenByTags, ShownVisibility (Visible), HiddenVisibility (Collapsed). Needs the PlayerState to implement IAbilitySystemInterface; without an ASC it stays shown. SetVisibility records intent and stays tag-gated.
UCrimsonControllerDisconnectedScreenUCommonActivatableWidget (Abstract)Reconnect prompt. BindWidgets HBox_SwitchUser, Button_ChangeUser; PlatformSupportsUserChangeTags gates the user-change button.

Dialogs & messaging

TypeKindDescription
UCrimsonMessagingSubsystemULocalPlayerSubsystemC++ only: ShowConfirmation(Descriptor, FCrimsonMessagingResultDelegate), ShowError(...). Pushes the settings-registered dialog class to UI.Layer.Modal. Blueprint uses the async nodes instead.
ECrimsonMessagingResultEnum (BlueprintType)Confirmed, Declined, Cancelled, Killed (torn down unanswered), Unknown (hidden).
UCrimsonGameDialogDescriptorUObject (BlueprintType)Header, Body, ButtonActions (BlueprintReadWrite). BP (static): CreateConfirmationOk, CreateConfirmationOkCancel, CreateConfirmationYesNo, CreateConfirmationYesNoCancel.
FCrimsonConfirmationDialogActionStruct (BlueprintType)Result (which ECrimsonMessagingResult the button reports), OptionalDisplayText, ActivationDelay (seconds the button stays disabled).
UCrimsonGameDialogUCommonActivatableWidget (Abstract)C++ only: SetupDialog(Descriptor, Callback), KillDialog - override for fully custom dialogs.
UCrimsonConfirmationScreenUCrimsonGameDialog (Abstract)Standard implementation. Required BindWidgets: Text_Title (UCommonTextBlock), RichText_Description (UCommonRichTextBlock), EntryBox_Buttons (UDynamicEntryBox), Border_TapToCloseZone (UCommonBorder). CancelAction row handle for the gamepad Back binding.
UCrimsonAsyncAction_ShowConfirmationAsync actionBP nodes: ShowConfirmationYesNo(Title, Message), ShowConfirmationOkCancel(Title, Message), ShowConfirmationCustom(Descriptor). One delegate OnResult(ECrimsonMessagingResult).
UCrimsonAsyncAction_PushToLayerAsync action (cancellable)BP node: PushContentToLayerForPlayer(OwningPlayer, SoftWidgetClass, LayerName, bSuspendInputUntilComplete=true). Delegates BeforePush(Widget) / AfterPush(Widget).
UCrimsonAsyncAction_CreateWidgetAsyncAsync action (cancellable)BP node: CreateWidgetAsync(WorldContext, SoftClass, OwningPlayer, bSuspendInputUntilComplete=true). Delegate OnComplete(UserWidget) - widget is created, not pushed.

Buttons, tabs, lists, drag-drop

TypeKindDescription
UCrimsonButtonBaseUCommonButtonBase (Abstract)BP: SetButtonText, StartActivationCountdown(Delay). BP event: UpdateButtonText(Text), UpdateButtonStyle(). ButtonText override property.
UCrimsonBoundActionButtonUCommonBoundActionButton (Abstract)Style per input method: KeyboardStyle / GamepadStyle / TouchStyle. BP: OverwriteButtonText.
UCrimsonActionWidgetUCommonActionWidgetBP: GetIconForKey(Key) via the Enhanced Input subsystem. Shows CommonUI's built-in progress layer whenever a Progress Material Brush is authored (not just for Enhanced Input hold triggers) - drive it via OnActionProgress/OnActionComplete.
UCrimsonTabListWidgetBaseUCommonTabListWidgetBase (Abstract)PreregisteredTabInfoArray (EditAnywhere). BP: RegisterDynamicTab, SetTabHiddenState, IsFirstTabActive, IsLastTabActive. BP (pure): GetPreregisteredTabInfo, IsTabVisible, GetVisibleTabCount, GetTabContentForId. Delegate OnTabContentCreated(TabId, TabWidget).
FCrimsonTabDescriptorStruct (BlueprintType)TabId, TabText, IconBrush, bHidden, TabButtonType, TabContentType.
ICrimsonTabButtonInterfaceUInterface (BlueprintType)BP event: SetTabLabelInfo(TabDescriptor) - implemented by tab buttons.
UCrimsonTabButtonBaseUCrimsonButtonBase (Abstract)Implements ICrimsonTabButtonInterface; forward the descriptor into your visuals.
UCrimsonListView / UCrimsonTileViewUCommonListView / UCommonTileViewFactoryRules (EditAnywhere, Instanced) select the entry widget class per item; standard list API otherwise.
UCrimsonWidgetFactoryUObject (Abstract, Blueprintable, EditInlineNew)BP event: FindWidgetClassForData(Data) -> widget class or null. Priority (highest evaluated first).
UCrimsonWidgetFactory_ClassUCrimsonWidgetFactoryDataClass (soft, subclasses match) -> WidgetClass.
UCrimsonDragDropOperationUDragDropOperation (Blueprintable)BP: SetPayloadObject, GetPayloadObject (pure). C++ only: GetPayload<T>(), SourceWidget weakref.

MVVM

TypeKindDescription
UCrimsonViewModelBaseUMVVMViewModelBase (Abstract, Blueprintable)BP: Initialize(LocalPlayer). BP (pure): GetLocalPlayer. BP event: NativeOnInitialized(LocalPlayer).
UCrimsonScreenViewModelBaseUCrimsonViewModelBase (Abstract)Semantic base for one-per-screen VMs. No extra members.
UCrimsonEntryViewModelBaseUCrimsonViewModelBase (Abstract)EntryIndex (FieldNotify, BlueprintReadOnly). C++ only: SetEntryIndex / GetEntryIndex.

Indicators

TypeKindDescription
UCrimsonIndicatorManagerComponentUControllerComponent (Blueprintable)BP: AddIndicator, RemoveIndicator. C++ only: static GetComponent(Controller), GetIndicators(), native events OnIndicatorAdded / OnIndicatorRemoved.
UCrimsonIndicatorLibraryUBlueprintFunctionLibraryBP: GetIndicatorManagerComponent(Controller).
UCrimsonIndicatorDescriptorUObject (BlueprintType)One live indicator. BP setters/getters: SetDataObject, SetSceneComponent, SetComponentSocketName, SetIndicatorClass (soft UUserWidget class), SetDesiredVisibility, SetProjectionMode, SetHAlign/SetVAlign, SetClampToScreen, SetShowClampToScreenArrow, SetWorldPositionOffset, SetScreenSpaceOffset, SetBoundingBoxAnchor, SetPriority, SetAutoRemoveWhenIndicatorComponentIsNull, UnregisterIndicator. Property bParticipateInScreenStacking.
ECrimsonActorCanvasProjectionModeEnum (BlueprintType)ComponentPoint, ComponentBoundingBox, ComponentScreenBoundingBox, ActorBoundingBox, ActorScreenBoundingBox.
ICrimsonIndicatorWidgetInterfaceUInterface (BlueprintType)BP event: BindIndicator(Descriptor), UnbindIndicator(Descriptor). Header: IndicatorSystem/ICrimsonActorIndicatorWidget.h.
UCrimsonIndicatorLayerUWidgetThe projection canvas placed in the HUD. ArrowBrush (clamp arrow).

Context menu

TypeKindDescription
UCrimsonContextMenuSubsystemULocalPlayerSubsystemBP: ShowContextMenu(Request) -> widget (null while the widget class async-streams; the menu appears when loaded), CloseAll(). BP (pure): GetActiveWidget(). Widget classes fall back to UCrimsonUISettings defaults. Pushes to UI.Layer.ContextMenu.
FCrimsonContextMenuRequestStruct (BlueprintType)Context (instigator + target; leave Actions empty to auto-gather from Context.Target via UCrimsonContextActionGatherer - recommended), Actions (optional explicit list), PresentationMode (Modal/World/Radial), Header, InputModeOverride, modal: bAnchorToCursor/ScreenAnchor/bCloseOnClickOutside/ModalWidgetClass (optional), world: TargetAnchor/WorldScreenOffset/WorldWidgetClass (optional), radial: RadialWidgetClass (optional).
UCrimsonContextMenuWidgetBaseUCrimsonActivatableWidget (Abstract)Required BindWidget: ContentPanel (top-left anchored, auto size). Entry host (one of): EntryBox (UDynamicEntryBox, preferred - C++ creates every entry, sizes to content) or EntryList (UListView, for long menus - needs a bounded height). Auto-populated on activate/refresh; missing both logs a warning (except on radial). While-open gameplay state: EffectWhileOpen (TSubclassOf<UGameplayEffect>, applied to the owning pawn's ASC on open, removed on close - e.g. grant Camera.Blocked to suppress camera-turn abilities) and LooseTagsWhileOpen (loose-tag alternative); both local to the owning client. BP: ConfirmFocusedEntry, ConfirmEntry(Index), ConfirmEntryBypassingConfirmation(Index), ConfirmEntryWithPayload(Index, Payload), RefreshEntries, RequestClose, CycleNext, CyclePrevious. BP (pure): GetViewModel, GetRequest. Gathers at activation; honors each action's ConfirmationMode and CloseBehavior; closes itself when the target dies. Default InputConfig = GameAndMenu.
UCrimsonContextMenuWidget_Modal / _WorldWidget bases (Abstract)Modal: positions ContentPanel at the cursor / fixed anchor on the first valid-geometry tick, flips + clamps against the viewport edges, closes on the first click outside the panel (bCloseOnClickOutside on the request). World: per-tick projection via ProjectWorldLocationToWidgetPosition; closes when the anchor dies; per-asset options: AutoCloseDistance (close when the pawn walks away; 0 = never), bCloseOnClickOutside (dialog-border pattern; consumes outside clicks), bScaleWithDistance (camera-distance scale, clamped) and bFadeWhenOccluded (visibility trace camera->anchor, fades to OccludedOpacity). ContentPanel is a required base-class binding.
UCrimsonContextMenuWidget_RadialWidget base (Abstract)Gamepad wheel; derives from _Modal (click-outside + clamping inherited). BP: SelectEntryByDirection(Stick) (dead-zone + angular hysteresis). BP (pure): GetEntryDirectionByIndex(Index) (entry 0 at 12 o'clock, clockwise; layout = direction * radius). SelectionDeadZone / SelectionHysteresis / MaxRadialEntries (default 8, warn above) are EditDefaultsOnly.
UCrimsonContextMenuViewModelUCrimsonScreenViewModelBaseFieldNotify Entries, FocusedIndex, Header. BP: SetFocusedIndex, CycleNext / CyclePrevious (wrap around, skip disabled).
UCrimsonContextMenuEntryViewModelUCrimsonEntryViewModelBaseFieldNotify DisplayName, Tooltip, DisabledReason, Icon, SectionTag, bIsEnabled, bIsDestructive, ConfirmationMode, bIsFocused. BP: RequestFocus, RequestConfirm (route to the owning menu). BP (pure): GetAction.
UCrimsonContextMenuEntryWidgetUCommonButtonBase + IUserObjectListEntry (Abstract)BP (pure): GetEntryViewModel. BP event: OnEntryViewModelSet. Hover-to-focus and click-to-confirm are wired natively.

Touch, perf stats, loading, extension points

TypeKindDescription
UCrimsonSimulatedInputWidgetUCommonUserWidget (base)AssociatedAction (const UInputAction*), FallbackBindingKey, CommonVisibilityBorder BindWidget. BP: InputKeyValue, InputKeyValue2D, FlushSimulatedInput, GetEnhancedInputSubsystem, GetAssociatedAction, GetSimulatedKey.
UCrimsonJoystickWidgetUCrimsonSimulatedInputWidgetStickRange (50), bNegateYAxis; BindWidgets JoystickBackground, JoystickForeground (UImage).
UCrimsonTouchRegionUCrimsonSimulatedInputWidgetInjects while touched. BP: ShouldSimulateInput.
UCrimsonPerfStatWidgetBaseUCommonUserWidget (Abstract)StatToDisplay (ECrimsonDisplayablePerformanceStat, CrimsonCommon). BP event (pure): FetchStatValue -> double (default 0.0 - you must override). BP: UpdateGraphData(ScaleFactor). BP (pure): GetStatToDisplay. Optional PerfStatGraph BindWidget + GraphLineColor/GraphBackgroundColor/GraphMaxYValue.
UCrimsonPerfStatGraphUUserWidgetC++ only: SetLineColor, SetMaxYValue, SetBackgroundColor, UpdateGraphData. Wraps the SCrimsonLatencyGraph Slate widget.
UCrimsonPerfStatContainerBaseUCommonUserWidget (Abstract)BP: UpdateVisibilityOfChildren. BP event: GetStatDisplaySetting(Stat) -> ECrimsonStatDisplayMode (default TextAndGraph). StatDisplayModeFilter property.
ECrimsonStatDisplayMode (CrimsonCommon)Enum (BlueprintType)Hidden, TextOnly, GraphOnly, TextAndGraph.
UCrimsonLoadingScreenSubsystemUGameInstanceSubsystemBP: SetLoadingScreenContentWidget(Class). BP (pure): GetLoadingScreenContentWidget. Delegate OnLoadingScreenWidgetChanged(NewWidgetClass).
UCrimsonUIExtensionPointWidgetUDynamicEntryBoxBaseExtensionPointTag, ExtensionPointTagMatch, DataClasses, bindable GetWidgetClassForData / ConfigureWidgetForData. Registry: UCrimsonUIExtensionSubsystem (CrimsonCommon), a UWorldSubsystem with BP nodes Register Extension (Widget) / (Widget For Context) / (Data) / (Data For Context), Register Extension Point, Unregister Extension, and handle Unregister / IsValid.

Gameplay tags

TagDefined inUsed for
UI.Layer.MenuCrimsonUI (native)Escape-menu pushes from UCrimsonHUDLayout.
UI.Layer.ModalCrimsonUI (native)Dialog pushes from UCrimsonMessagingSubsystem.
UI.Action.EscapeCrimsonUI (native)Legacy tag-based escape binding.
UI.Layer.ContextMenuCrimsonCommon (native)Context-menu pushes.
UI.Action.ContextMenu.Confirm / .Cancel / .Navigate.Up / .Navigate.Down / .Cycle.Next / .Cycle.PreviousCrimsonCommon (native)Context-menu UI action bindings.
UI.ContextMenu.Section.Primary / .Manage / .DestructiveCrimsonCommon (native)Section grouping for UCrimsonContextAction::SectionTag; entries group by section with dividers, destructive last.
Platform.Trait.Input.HardwareCursorCrimsonUI (native)Viewport client cursor decision.
Platform.Trait.Input.PrimarilyControllerCrimsonUI (native)Default controller-disconnect-screen gate.
Platform.Trait.Input.HasStrictControllerPairingCrimsonUI (native)Disconnect-screen pairing evaluation.
UI.Layer.Game, UI.Layer.GameMenu, HUD.Slot.*, InputMode.Game, InputMode.MenuYour project (or CrimsonCore's tag ini)Game/GameMenu layers, extension slots, input-mode baseline tags (requested at runtime, not defined by the plugin).

Logging

Log category: LogCrimsonUI (filter with Log LogCrimsonUI Verbose in the console).