API Reference

All types are in CrimsonUI unless marked (CrimsonCore). 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). ContextMenuMappingContext (soft object ref), ContextMenuMappingPriority (int32, default 200), ContextMenuEntryActions (array of soft Input Action refs; row N fires on element N): the direct row keys the context menu subsystem applies around each menu, shipped as /CrimsonUI/Input/ContextMenu/*. bHideCursorInGameMode (bool, default true): in Game input mode with a capturing mouse mode, hide the OS cursor while the viewport holds capture - set false for cursor-driven games (ARPG, twin-stick, RTS) so the cursor stays visible during play. PerfStatSampleCount (int32, default 125): frames of history kept per performance stat, which is also the graph's width in samples. PerfStatUpdateInterval (float seconds, default 0.25): how often a perf-stat block re-formats its text and re-pushes its graph data; 0 = every frame. Sampling is unaffected either way. Slider (Category = "Slider"): six TSoftObjectPtr<UMaterialInterface> refs - SliderBarMaterial, SliderBarHoveredMaterial, SliderBarDisabledMaterial, SliderThumbMaterial, SliderThumbHoveredMaterial, SliderThumbDisabledMaterial - which UCrimsonAnalogSlider writes into WidgetStyle when its own bUseProjectSliderStyle is on. They have no C++ defaults; point them at the six shipped instances under /CrimsonUI/UI/Foundation/Materials/Slider/ (MI_CrimsonSlider_Bar, MI_CrimsonSlider_Bar_Hovered, MI_CrimsonSlider_Bar_Disabled, MI_CrimsonSlider_Thumb, MI_CrimsonSlider_Thumb_Hovered, MI_CrimsonSlider_Thumb_Disabled), or your own, in config. Plus SliderThumbSize (FVector2D, default (8, 16)) and SliderBarThickness (float, default 4.0). See How-To: Sliders. The class is Config = CrimsonUI, so every value here lives in Config/DefaultCrimsonUI.ini.
UCrimsonUIManagerSubsystemUGameInstanceSubsystemBoots the policy from settings at init; syncs root-layout visibility to AHUD::bShowHUD. GetRootLayout(LocalPlayer) and inherited GetCurrentUIPolicy() are C++ only. Never subclass.
UCrimsonGameUIPolicyUObject (Abstract, Blueprintable)LayoutClass (EditAnywhere), LocalMultiplayerInteractionMode (EditAnywhere: PrimaryOnly/SingleToggle/Simultaneous). C++ hooks: OnRootLayoutAddedToViewport/Removed/Released, RequestPrimaryControl, static GetGameUIPolicy.
UCrimsonPrimaryGameLayoutUCommonUserWidgetBP (protected): RegisterLayer(Tag, Container) - call in your own graph. C++ only: static GetPrimaryGameLayout(PC/LP) + GetPrimaryGameLayoutForPrimaryPlayer, PushWidgetToLayerStack<T> (sync + async-load variants), FindAndRemoveWidgetFromLayer, GetLayerWidget.
UCrimsonUIExtensionsUBlueprintFunctionLibraryBP: 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. The callback always fires exactly once - Unknown if the dialog can't be shown. Blueprint uses the async nodes instead.
ECrimsonMessagingResultEnum (BlueprintType)Confirmed, Declined, Cancelled, Killed (torn down unanswered), Unknown (hidden).
UCrimsonGameDialogDescriptorUObject (BlueprintType)Header, Body, ButtonActions (BlueprintReadWrite - Blueprint builds a descriptor via Construct Object). C++ (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. NativeGetDesiredFocusTarget returns the safe button rather than the first: SetupDialog scans the descriptor's ButtonActions for the first Declined or Cancelled result and falls back to index 0 when the shape offers neither. The buttons are built into EntryBox_Buttons at setup time, so without this the action router has no leaf focus target and the dialog is unreachable on a gamepad.
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, RemoveDynamicTab, SetTabHiddenState, SetTabBadgeCount, IsFirstTabActive, IsLastTabActive. BP (pure): GetTabDescriptor, GetTabBadgeCount, IsTabVisible, GetVisibleTabCount, GetTabContentForId. Delegates OnTabContentCreated(TabId, TabWidget) and OnCrimsonTabSelected(TabId, Descriptor). Authored and dynamic tabs share one live list, so content creation, removal, hidden state and badges behave identically however a tab arrived.
UCrimsonEditableTextBoxUCommonUserWidget (Abstract)House text field. Widgets: TextBox (required), Image_Frame, Image_Icon, Text_Error, ClearButton. Style (per-state rim colors pushed to Image_Frame's RimColor parameter), HintText, MaxLength, bSelectAllOnFocus, bCommitOnFocusLost, bReadOnly; numeric: bNumericOnly, bAllowDecimal, bAllowNegative, MinValue, MaxValue. BP: SetText (silent), GetText, SetHintText, Clear, FocusTextField, Commit, Cancel, IsEditing, SetError, SetReadOnly, GetState, GetNumericValue, SetNumericValue, SetNumericRange. Delegates OnTextChanged, OnTextCommitted(Text, Method), OnEditingStarted, OnEditingEnded (+ native). Event On State Changed. Binds in NativeConstruct, so pooled screens keep working.
UCrimsonSearchBoxUCrimsonEditableTextBox (Abstract)Debounced (DebounceSeconds). OnSearchTextChanged fires after the pause, on Enter, and on Clear. BP: SetSearchText (silent), GetSearchText, Clear, FocusSearchField.
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.
UCrimsonAnalogSliderUAnalogSliderDrop-in slider replacement; a UAnalogSlider (and so USlider) BindWidget still resolves. No UFUNCTIONs and no delegates of its own - everything is property-driven, and anything you call is inherited. Stepping: bUseHeldRepeat (true), RepeatInterval (0.15 s), AccelerationDelay (0.35 s), AccelerationRampTime (1.5 s), MaxStepMultiplier (3.0) - one step immediately, then a constant-cadence repeat whose step scales, off Gamepad_LeftX / LeftY past a 0.5 threshold. Focus: bTintHandleOnFocus (true), FocusedHandleColor; the resting color is captured from the widget's own SliderHandleColor, because FSliderStyle has no focused brush. Theme: bUseProjectSliderStyle (true) writes the six UCrimsonUISettings materials into WidgetStyle. See How-To: Sliders.
SCrimsonAnalogSliderSAnalogSlider (Slate)The Slate widget behind it. C++ only. Arguments mirror the UMG properties (UseHeldRepeat, RepeatInterval, AccelerationDelay, AccelerationRampTime, MaxStepMultiplier); SetHeldRepeatSettings(...) and SetFocusTint(bTintOnFocus, RestingColor, FocusedColor) push them at runtime. Use it directly only in a hand-built Slate tree - in UMG, place UCrimsonAnalogSlider.

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. C++: SetConfirmInterceptor(FCrimsonContextMenuConfirmInterceptor) - first refusal on an entry confirm for a system that needs to collect an argument first; return true to take over the flow and re-dispatch later through ConfirmEntryWithPayload. Consulted in both ConfirmEntry and DispatchEntry, so no confirm path can bypass it, and skipped when the payload is already populated. 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, and for a UCrimsonContextAction_Choice: Choices, SelectedChoiceIndex, bHasChoices. BP: RequestFocus, RequestConfirm (route to the owning menu), SelectChoice / SelectNextChoice / SelectPreviousChoice (show the pick at once and dispatch it with a choice payload). BP (pure): GetAction.
UCrimsonContextMenuEntryWidgetUCommonButtonBase + IUserObjectListEntry (Abstract)BP (pure): GetEntryViewModel. BP event: OnEntryViewModelSet. Hover-to-focus and click-to-confirm are wired natively.
FCrimsonContextMenuConfirmInterceptorDelegate (C++)RetVal bool(UCrimsonContextMenuWidgetBase* Menu, int32 EntryIndex). Installed with SetConfirmInterceptor. true = handled, do not dispatch yet.

Radial menus

TypeKindPurpose
UCrimsonRadialWheelUCommonUserWidgetThe wheel. Geometry, selection and material driving.
UCrimsonRadialMenuWidgetUCrimsonActivatableWidgetStandalone wheel screen.
UCrimsonRadialSliceWidgetUCommonUserWidgetSlice content, composed from the slice data.
UCrimsonRadialActionUObjectWhat an option does. Instanced, Blueprintable.
UCrimsonRadialMenuDefinitionUPrimaryDataAssetA fixed option list authored as an asset.
FCrimsonRadialSliceUSTRUCTOne option: identity, presentation, live state, action.
FCrimsonRadialWheelStyleUSTRUCTGeometry, the four state styles, overlays, transitions.
FCrimsonRadialSliceStateStyleUSTRUCTColors and scalars for one state.
FCrimsonRadialMaterialBindingUSTRUCTMaterial parameter names, as data.
ECrimsonRadialContentSourceUENUMAuthored or Action - where a slice's presentation comes from.
Wheel functionPurpose
SetSlicesReplace the contents and rebuild. Resets focus.
RefreshSlicesUpdate mutable fields without rebuilding widgets.
GetFocusedSlice / SetFocusedSliceRead or set focus. INDEX_NONE clears.
SetSelectionDirectionFocus the slice containing a direction (UMG space, +Y down).
ConfirmFocusedSliceConfirm. No-op when nothing is focused or the slice is disabled.
FocusNextSlice / FocusPreviousSliceStep focus, wrapping, skipping disabled slices.
GetSliceDirection / GetSliceAtDirectionGeometry queries. Slice 0 at 12 o'clock, clockwise.
SetHoldProgressDrive the hold-to-confirm wipe, 0..1.
OnSliceFocused / OnSliceConfirmedDelegates carrying the slice index.
Menu functionPurpose
SetOptionsSet the options from an array.
SetOptionsFromDefinitionSet them from a UCrimsonRadialMenuDefinition.
RefreshOptionsReplace the options and repaint.
RefreshActionStatesRe-ask every action for its live state and repaint.
Confirm / CancelConfirm the focused option, or close without choosing.
GetWheelThe embedded wheel.
OnOptionChosen / OnMenuCanceledDelegates. OnOptionChosen carries index, Id and Payload.
Action overridePurpose
ExecuteRun the option. Owning client; makes no authority claims.
QueryStateWrite live fields before each render. One-way - cannot re-enable.
GetDisplayContentSupply icon, name and description when ContentSource is Action.

Slot bindings

The player-editable layer. See Concept: Slot Bindings for the model.

TypeKindPurpose
FCrimsonRadialBindingstructProviderId tag + FInstancedStruct Data. What the player chose, in the form that survives a save. IsSet(), Reset().
FCrimsonRadialSlotDefinitionstructOne authored slot: SlotId, bLocked, DefaultBinding, AcceptedEntries (FGameplayTagQuery), EmptyLabel, EmptyIcon.
FCrimsonRadialBindableEntrystructOne pickable thing: Binding, Display (name/icon/count), FilterTags.
FCrimsonSlotLayoutEntrystructFastArray item - LayoutId plus one binding per slot position.
FCrimsonSlotLayoutContainerstructFFastArraySerializer over the above. Notifies once per batch from PostReplicatedReceive.
FCrimsonRadialBindingPresetstructA named snapshot of several layouts at once.
FCrimsonRadialBindingSaveDatastructThe whole store as plain data - Layouts + Presets.
ECrimsonStaleBindingPolicyenumKeepDisabled (default), Clear, Hide.
UCrimsonRadialBindingProviderclassAbstract. Gather / Resolve / Query / Execute. EditInlineNew, authored inline on a layout asset.
UCrimsonRadialBindingProvider_TagclassShips here. An authored tag list broadcast on the message subsystem - needs no other Crimson plugin.
UCrimsonRadialBindingComponentclassThe store. Server-authoritative, COND_OwnerOnly. Add to controller, player state or pawn.
UCrimsonRadialBindingLibraryclassResolveLayout, GatherEntriesForSlot, EntryPassesSlotFilter, BuildProviderMap, MakeBindingDragOperation.
UCrimsonRadialBindingDragDropOperationclassCarries a FCrimsonRadialBinding + preview across a drag.
UCrimsonRadialLayoutDefinitionclassUPrimaryDataAsset. Title, Pages, instanced Providers, StalePolicy.
FCrimsonRadialPageDefinitionstructOne page: LayoutId, DisplayName, Slots.
UCrimsonRadialMenuWidget_BindableclassThe editable wheel. Requires the inherited Wheel BindWidget.
UCrimsonRadialBindingPickerWidgetclassSlot picker. Optional binds: List_Entries, Text_Search, Text_Title.
UCrimsonRadialBindableEntryObjectclassUObject wrapper so an entry can be a UListView item. Entry, bIsClearEntry.
UCrimsonRadialAction_BindingclassOne shared forwarding action per wheel; reads its binding from Slice.Payload.
Provider overridePurpose
GatherBindableEntries(PC, OutEntries)What the player may choose right now. Called when the picker opens.
ResolveBinding(PC, Binding, OutSlice)Saved binding to live slice. false means stale. Defaults to gather-and-find.
QueryBindingState(PC, Binding, Slice)Count, cooldown, availability. Called at the menu's refresh interval.
ExecuteBinding(PC, Binding, Slice)Run it. Owning client only - send your own RPC for anything authoritative.
Store functionPurpose
Find(PlayerController)Static. Searches controller, then player state, then pawn.
GetLayout(LayoutId) / GetBinding(LayoutId, Slot)Reads.
SetBinding / ClearBinding / SwapBindingsWrites. Route through Server_ RPCs when called on a client.
ResetLayout(LayoutId, SlotDefs)Restores every slot's DefaultBinding.
EnsureLayoutSize(LayoutId, Count)Sizes a stored layout to an asset whose slot count changed. Server only; no-op on clients.
SavePreset / ApplyPreset / DeletePreset / GetPresetNames / GetPresetDisplayNameNamed layout snapshots.
GetSaveData() / ApplySaveData(Data)The whole store as plain data. ApplySaveData is server only.
OnLayoutChanged(LayoutId)Delegate. Fires locally and from replication; rebuild views from here.
Bindable menu functionPurpose
SetLayoutDefinition(Definition)Swaps layouts at runtime and rebuilds from page 0.
RebuildFromBindings()Re-resolves every slot from the store.
EnterEditMode / ExitEditMode / ToggleEditMode / IsEditingEdit mode. Rebuilds, because slot confirmability differs between modes.
ToggleCarryAtFocus() / CancelCarry() / GetCarriedSlot()Lift-and-place rearranging.
AssignBindingToSlot / ClearSlot / MoveSlotToSlot mutation. All refuse locked slots.
ResetCurrentPageToDefaults()Restores this page's authored defaults.
CanEditSlot(Index) / GetBinding(Index)Queries against the current page.
SetPage / NextPage / PreviousPage / GetPageCount / GetPageIndexPaging. Cancels any carry.
SaveCurrentAsPreset(Name, DisplayName) / ApplyPreset(Name)Snapshots every page of this wheel.
OpenPickerForSlot(Index)Pushes the picker. No-op when the slot is not editable.
TranslateDropToBinding(Op, OutBinding)BlueprintNativeEvent. Override to accept your own drag type.
OnPageChanged(Index, Name)Delegate.

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.
UCrimsonPerformanceStatSubsystemUGameInstanceSubsystemSamples all eighteen stats every frame through the engine frame chart (IPerformanceDataConsumer) and keeps a ring buffer of each. BP: GetCachedStat(Stat) -> double. C++ only: GetCachedStatData(Stat) -> const FCrimsonSampledStatCache* (what the graph draws). Not created on a dedicated server. Buffer length is UCrimsonUISettings::PerfStatSampleCount (125). Sampling stays per frame, but the widgets redraw on UCrimsonUISettings::PerfStatUpdateInterval (0.25 s; 0 = every frame), so slowing the readout never gaps the graph. Every FrameTime_* stat is cached in SECONDS and PacketLoss_* as a 0..1 fraction; the per-stat table in CrimsonPerfStatWidgetBase.cpp converts them for display.
ICrimsonServerFPSProviderUINTERFACE (C++ only)GetServerFPS(). Implement it on your game state and replicate the value - it is how the subsystem records ServerFPS without including a game state class. Unimplemented, that one stat reads 0.
UCrimsonPerfStatWidgetBaseUCommonUserWidget (Abstract)One stat block: optional Text_Label / Text_Value (UTextBlock) and Graph_Value (UCrimsonPerfStatGraph) BindWidgets, ticked only while visible. BP: SetStatToDisplay(Stat), UpdateGraphData(). BP event: SetDisplayMode(Mode) - the native impl collapses the halves, and Hidden collapses the block. BP event (pure): FetchStatValue -> double (defaults to that stat from UCrimsonPerformanceStatSubsystem; override only for another source). BP (pure): GetStatToDisplay, GetDisplayMode, GetStatDisplayName(Stat) (static), GetFormattedValue. GraphLineColor / GraphBackgroundColor in Class Defaults.
UCrimsonPerfStatGraphUUserWidgetC++ only: SetLineColor, SetMaxYValue, SetBackgroundColor, UpdateGraphData. Wraps the SCrimsonLatencyGraph Slate widget.
UCrimsonPerfStatContainerBaseUCommonUserWidget (Abstract)BP: RefreshStats - spawns one StatWidgetClass block per non-hidden stat into the Panel_Stats UWrapBox bind, in enum order, and drops the rest. Runs on construct. BP event: GetStatDisplaySetting(Stat) -> ECrimsonStatDisplayMode (default TextAndGraph). StatWidgetClass (EditDefaultsOnly) + Panel_Stats (BindWidget).
ECrimsonStatDisplayModeEnum (BlueprintType)Hidden, TextOnly, GraphOnly, TextAndGraph.
UCrimsonUIExtensionPointWidgetUDynamicEntryBoxBaseExtensionPointTag, ExtensionPointTagMatch, DataClasses, bindable GetWidgetClassForData / ConfigureWidgetForData. Registry: UCrimsonUIExtensionSubsystem, a UWorldSubsystem with BP nodes Register Extension (Widget) / (Widget For Context) / (Data) / (Data For Context), Register Extension Point, Unregister Extension, and handle Unregister / IsValid.

Layered pool bars

TypePurpose
UCrimsonPoolBarWidgetUCommonUserWidget. One layered resource bar drawn into a single material. Knows nothing about the ability system.
FCrimsonPoolSnapshotRaw pool values: Health, MaxHealth, Reserved, Shield, MaxShield, Overhealth.
FCrimsonPoolBarFractionsNormalized 0..1 output: MainFrac, HealthFrac, GhostFrac, ShieldFrac, ReservedStart, HealthPercent.
FCrimsonPoolBarStyleColors, motion timings, compression curve, segment count, and the material binding.
FCrimsonPoolBarMaterialBindingFName per material parameter, so a restyle never means recompiling.
FunctionPurpose
SetPoolStatePush new values. A drop snaps and trails; a gain eases in.
SetPoolStateImmediateSnap to new values with no trail and no flash. Use on bind and respawn.
SetPoolBarStyleRestyle at runtime. Rebuilds the dynamic material if the base material changed.
SetHealthColorRetint just the health fill, leaving the rest of the style alone.
SetShieldRechargingRuns the material's recharge shimmer.
GetPoolFractionsThe SETTLED target fractions - where the bar is heading.
GetDisplayHealthFrac / GetDisplayShieldFracWhat is actually drawn this frame.
ComputeFractionsStatic. The normalization specification; nothing else may re-derive these.
OnPoolVisualBlueprintImplementableEvent, fired on every change. Drives readouts.
AssetPath
W_CrimsonPoolBar/CrimsonUI/UI/Foundation/Widgets/
M_UI_CrimsonPoolBar/CrimsonUI/UI/Foundation/Materials/
MI_UI_CrimsonPoolBar_Player / _Nameplate / _Boss/CrimsonUI/UI/Foundation/Materials/
MF_UI_ChamferBoxSDF/CrimsonUI/UI/Foundation/Materials/Functions/

Gameplay tags

TagDefined inUsed for
UI.Layer.Game / .GameMenu / .Menu / .ModalCrimsonUI (native, CrimsonUILayerTags.h)The base layer set: HUD pushes, in-game screens, escape-menu pushes from UCrimsonHUDLayout, dialog pushes from UCrimsonMessagingSubsystem.
UI.Action.EscapeCrimsonUI (native)Legacy tag-based escape binding.
UI.Layer.ContextMenuCrimsonUI (native, CrimsonContextMenuTags.h)Context-menu pushes.
UI.Action.ContextMenu.Confirm / .Cancel / .Navigate.Up / .Navigate.Down / .Cycle.Next / .Cycle.PreviousCrimsonUI (native)Context-menu UI action bindings.
UI.ContextMenu.Section.Primary / .Manage / .DestructiveCrimsonUI (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.
HUD.Slot.*, InputMode.Game, InputMode.MenuYour project (or CrimsonCore's tag ini)Extension slots and input-mode baseline tags (requested at runtime, not defined by the plugin).

Logging

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