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
| Type | Kind | Description |
|---|---|---|
UCrimsonUISettings | UDeveloperSettings (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. |
UCrimsonUIManagerSubsystem | UGameInstanceSubsystem | Boots the policy from settings at init; syncs root-layout visibility to AHUD::bShowHUD. GetRootLayout(LocalPlayer) and inherited GetCurrentUIPolicy() are C++ only. Never subclass. |
UCrimsonGameUIPolicy | UObject (Abstract, Blueprintable) | LayoutClass (EditAnywhere), LocalMultiplayerInteractionMode (EditAnywhere: PrimaryOnly/SingleToggle/Simultaneous). C++ hooks: OnRootLayoutAddedToViewport/Removed/Released, RequestPrimaryControl, static GetGameUIPolicy. |
UCrimsonPrimaryGameLayout | UCommonUserWidget | BP (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 | UBlueprintFunctionLibrary | BP: PushContentToLayer_ForPlayer (returns widget), PushStreamedContentToLayer_ForPlayer (soft class), PopContentFromLayer, GetLocalPlayerFromController, SuspendInputForPlayer (returns token) / ResumeInputForPlayer. BP (pure): GetOwningPlayerInputType, IsOwningPlayerUsingTouch, IsOwningPlayerUsingGamepad. |
UCrimsonGameViewportClient | UCommonGameViewportClient | Hardware vs software cursor from the Platform.Trait.Input.HardwareCursor platform trait. Set via GameViewportClientClassName. |
ACrimsonHUD | AHUD (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
| Type | Kind | Description |
|---|---|---|
UCrimsonActivatableWidget | UCommonActivatableWidget (Abstract) | EditDefaultsOnly Input properties: InputConfig (ECrimsonWidgetInputMode), GameMouseCaptureMode, MenuMouseCaptureMode, bIgnoreMoveInput, bIgnoreLookInput, bForceInputModeTagsOnActivate, bRestoreInputTypeOnDeactivate. No UFUNCTIONs - behavior is automatic on activate/deactivate. |
ECrimsonWidgetInputMode | Enum (BlueprintType) | Default, GameAndMenu, Game, Menu. |
UCrimsonHUDLayout | UCrimsonActivatableWidget (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. |
UCrimsonTaggedWidget | UCommonUserWidget (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. |
UCrimsonControllerDisconnectedScreen | UCommonActivatableWidget (Abstract) | Reconnect prompt. BindWidgets HBox_SwitchUser, Button_ChangeUser; PlatformSupportsUserChangeTags gates the user-change button. |
Dialogs & messaging
| Type | Kind | Description |
|---|---|---|
UCrimsonMessagingSubsystem | ULocalPlayerSubsystem | C++ 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. |
ECrimsonMessagingResult | Enum (BlueprintType) | Confirmed, Declined, Cancelled, Killed (torn down unanswered), Unknown (hidden). |
UCrimsonGameDialogDescriptor | UObject (BlueprintType) | Header, Body, ButtonActions (BlueprintReadWrite - Blueprint builds a descriptor via Construct Object). C++ (static): CreateConfirmationOk, CreateConfirmationOkCancel, CreateConfirmationYesNo, CreateConfirmationYesNoCancel. |
FCrimsonConfirmationDialogAction | Struct (BlueprintType) | Result (which ECrimsonMessagingResult the button reports), OptionalDisplayText, ActivationDelay (seconds the button stays disabled). |
UCrimsonGameDialog | UCommonActivatableWidget (Abstract) | C++ only: SetupDialog(Descriptor, Callback), KillDialog - override for fully custom dialogs. |
UCrimsonConfirmationScreen | UCrimsonGameDialog (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_ShowConfirmation | Async action | BP nodes: ShowConfirmationYesNo(Title, Message), ShowConfirmationOkCancel(Title, Message), ShowConfirmationCustom(Descriptor). One delegate OnResult(ECrimsonMessagingResult). |
UCrimsonAsyncAction_PushToLayer | Async action (cancellable) | BP node: PushContentToLayerForPlayer(OwningPlayer, SoftWidgetClass, LayerName, bSuspendInputUntilComplete=true). Delegates BeforePush(Widget) / AfterPush(Widget). |
UCrimsonAsyncAction_CreateWidgetAsync | Async action (cancellable) | BP node: CreateWidgetAsync(WorldContext, SoftClass, OwningPlayer, bSuspendInputUntilComplete=true). Delegate OnComplete(UserWidget) - widget is created, not pushed. |
Buttons, tabs, lists, drag-drop
| Type | Kind | Description |
|---|---|---|
UCrimsonButtonBase | UCommonButtonBase (Abstract) | BP: SetButtonText, StartActivationCountdown(Delay). BP event: UpdateButtonText(Text), UpdateButtonStyle(). ButtonText override property. |
UCrimsonBoundActionButton | UCommonBoundActionButton (Abstract) | Style per input method: KeyboardStyle / GamepadStyle / TouchStyle. BP: OverwriteButtonText. |
UCrimsonActionWidget | UCommonActionWidget | BP: 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. |
UCrimsonTabListWidgetBase | UCommonTabListWidgetBase (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. |
UCrimsonEditableTextBox | UCommonUserWidget (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. |
UCrimsonSearchBox | UCrimsonEditableTextBox (Abstract) | Debounced (DebounceSeconds). OnSearchTextChanged fires after the pause, on Enter, and on Clear. BP: SetSearchText (silent), GetSearchText, Clear, FocusSearchField. |
FCrimsonTabDescriptor | Struct (BlueprintType) | TabId, TabText, IconBrush, bHidden, TabButtonType, TabContentType. |
ICrimsonTabButtonInterface | UInterface (BlueprintType) | BP event: SetTabLabelInfo(TabDescriptor) - implemented by tab buttons. |
UCrimsonTabButtonBase | UCrimsonButtonBase (Abstract) | Implements ICrimsonTabButtonInterface; forward the descriptor into your visuals. |
UCrimsonListView / UCrimsonTileView | UCommonListView / UCommonTileView | FactoryRules (EditAnywhere, Instanced) select the entry widget class per item; standard list API otherwise. |
UCrimsonWidgetFactory | UObject (Abstract, Blueprintable, EditInlineNew) | BP event: FindWidgetClassForData(Data) -> widget class or null. Priority (highest evaluated first). |
UCrimsonWidgetFactory_Class | UCrimsonWidgetFactory | DataClass (soft, subclasses match) -> WidgetClass. |
UCrimsonDragDropOperation | UDragDropOperation (Blueprintable) | BP: SetPayloadObject, GetPayloadObject (pure). C++ only: GetPayload<T>(), SourceWidget weakref. |
UCrimsonAnalogSlider | UAnalogSlider | Drop-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. |
SCrimsonAnalogSlider | SAnalogSlider (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
| Type | Kind | Description |
|---|---|---|
UCrimsonViewModelBase | UMVVMViewModelBase (Abstract, Blueprintable) | BP: Initialize(LocalPlayer). BP (pure): GetLocalPlayer. BP event: NativeOnInitialized(LocalPlayer). |
UCrimsonScreenViewModelBase | UCrimsonViewModelBase (Abstract) | Semantic base for one-per-screen VMs. No extra members. |
UCrimsonEntryViewModelBase | UCrimsonViewModelBase (Abstract) | EntryIndex (FieldNotify, BlueprintReadOnly). C++ only: SetEntryIndex / GetEntryIndex. |
Indicators
| Type | Kind | Description |
|---|---|---|
UCrimsonIndicatorManagerComponent | UControllerComponent (Blueprintable) | BP: AddIndicator, RemoveIndicator. C++ only: static GetComponent(Controller), GetIndicators(), native events OnIndicatorAdded / OnIndicatorRemoved. |
UCrimsonIndicatorLibrary | UBlueprintFunctionLibrary | BP: GetIndicatorManagerComponent(Controller). |
UCrimsonIndicatorDescriptor | UObject (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. |
ECrimsonActorCanvasProjectionMode | Enum (BlueprintType) | ComponentPoint, ComponentBoundingBox, ComponentScreenBoundingBox, ActorBoundingBox, ActorScreenBoundingBox. |
ICrimsonIndicatorWidgetInterface | UInterface (BlueprintType) | BP event: BindIndicator(Descriptor), UnbindIndicator(Descriptor). Header: IndicatorSystem/ICrimsonActorIndicatorWidget.h. |
UCrimsonIndicatorLayer | UWidget | The projection canvas placed in the HUD. ArrowBrush (clamp arrow). |
Context menu
| Type | Kind | Description |
|---|---|---|
UCrimsonContextMenuSubsystem | ULocalPlayerSubsystem | BP: 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. |
FCrimsonContextMenuRequest | Struct (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). |
UCrimsonContextMenuWidgetBase | UCrimsonActivatableWidget (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 / _World | Widget 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_Radial | Widget 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. |
UCrimsonContextMenuViewModel | UCrimsonScreenViewModelBase | FieldNotify Entries, FocusedIndex, Header. BP: SetFocusedIndex, CycleNext / CyclePrevious (wrap around, skip disabled). |
UCrimsonContextMenuEntryViewModel | UCrimsonEntryViewModelBase | FieldNotify 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. |
UCrimsonContextMenuEntryWidget | UCommonButtonBase + IUserObjectListEntry (Abstract) | BP (pure): GetEntryViewModel. BP event: OnEntryViewModelSet. Hover-to-focus and click-to-confirm are wired natively. |
FCrimsonContextMenuConfirmInterceptor | Delegate (C++) | RetVal bool(UCrimsonContextMenuWidgetBase* Menu, int32 EntryIndex). Installed with SetConfirmInterceptor. true = handled, do not dispatch yet. |
Radial menus
| Type | Kind | Purpose |
|---|---|---|
UCrimsonRadialWheel | UCommonUserWidget | The wheel. Geometry, selection and material driving. |
UCrimsonRadialMenuWidget | UCrimsonActivatableWidget | Standalone wheel screen. |
UCrimsonRadialSliceWidget | UCommonUserWidget | Slice content, composed from the slice data. |
UCrimsonRadialAction | UObject | What an option does. Instanced, Blueprintable. |
UCrimsonRadialMenuDefinition | UPrimaryDataAsset | A fixed option list authored as an asset. |
FCrimsonRadialSlice | USTRUCT | One option: identity, presentation, live state, action. |
FCrimsonRadialWheelStyle | USTRUCT | Geometry, the four state styles, overlays, transitions. |
FCrimsonRadialSliceStateStyle | USTRUCT | Colors and scalars for one state. |
FCrimsonRadialMaterialBinding | USTRUCT | Material parameter names, as data. |
ECrimsonRadialContentSource | UENUM | Authored or Action - where a slice's presentation comes from. |
| Wheel function | Purpose |
|---|---|
SetSlices | Replace the contents and rebuild. Resets focus. |
RefreshSlices | Update mutable fields without rebuilding widgets. |
GetFocusedSlice / SetFocusedSlice | Read or set focus. INDEX_NONE clears. |
SetSelectionDirection | Focus the slice containing a direction (UMG space, +Y down). |
ConfirmFocusedSlice | Confirm. No-op when nothing is focused or the slice is disabled. |
FocusNextSlice / FocusPreviousSlice | Step focus, wrapping, skipping disabled slices. |
GetSliceDirection / GetSliceAtDirection | Geometry queries. Slice 0 at 12 o'clock, clockwise. |
SetHoldProgress | Drive the hold-to-confirm wipe, 0..1. |
OnSliceFocused / OnSliceConfirmed | Delegates carrying the slice index. |
| Menu function | Purpose |
|---|---|
SetOptions | Set the options from an array. |
SetOptionsFromDefinition | Set them from a UCrimsonRadialMenuDefinition. |
RefreshOptions | Replace the options and repaint. |
RefreshActionStates | Re-ask every action for its live state and repaint. |
Confirm / Cancel | Confirm the focused option, or close without choosing. |
GetWheel | The embedded wheel. |
OnOptionChosen / OnMenuCanceled | Delegates. OnOptionChosen carries index, Id and Payload. |
| Action override | Purpose |
|---|---|
Execute | Run the option. Owning client; makes no authority claims. |
QueryState | Write live fields before each render. One-way - cannot re-enable. |
GetDisplayContent | Supply icon, name and description when ContentSource is Action. |
Slot bindings
The player-editable layer. See Concept: Slot Bindings for the model.
| Type | Kind | Purpose |
|---|---|---|
FCrimsonRadialBinding | struct | ProviderId tag + FInstancedStruct Data. What the player chose, in the form that survives a save. IsSet(), Reset(). |
FCrimsonRadialSlotDefinition | struct | One authored slot: SlotId, bLocked, DefaultBinding, AcceptedEntries (FGameplayTagQuery), EmptyLabel, EmptyIcon. |
FCrimsonRadialBindableEntry | struct | One pickable thing: Binding, Display (name/icon/count), FilterTags. |
FCrimsonSlotLayoutEntry | struct | FastArray item - LayoutId plus one binding per slot position. |
FCrimsonSlotLayoutContainer | struct | FFastArraySerializer over the above. Notifies once per batch from PostReplicatedReceive. |
FCrimsonRadialBindingPreset | struct | A named snapshot of several layouts at once. |
FCrimsonRadialBindingSaveData | struct | The whole store as plain data - Layouts + Presets. |
ECrimsonStaleBindingPolicy | enum | KeepDisabled (default), Clear, Hide. |
UCrimsonRadialBindingProvider | class | Abstract. Gather / Resolve / Query / Execute. EditInlineNew, authored inline on a layout asset. |
UCrimsonRadialBindingProvider_Tag | class | Ships here. An authored tag list broadcast on the message subsystem - needs no other Crimson plugin. |
UCrimsonRadialBindingComponent | class | The store. Server-authoritative, COND_OwnerOnly. Add to controller, player state or pawn. |
UCrimsonRadialBindingLibrary | class | ResolveLayout, GatherEntriesForSlot, EntryPassesSlotFilter, BuildProviderMap, MakeBindingDragOperation. |
UCrimsonRadialBindingDragDropOperation | class | Carries a FCrimsonRadialBinding + preview across a drag. |
UCrimsonRadialLayoutDefinition | class | UPrimaryDataAsset. Title, Pages, instanced Providers, StalePolicy. |
FCrimsonRadialPageDefinition | struct | One page: LayoutId, DisplayName, Slots. |
UCrimsonRadialMenuWidget_Bindable | class | The editable wheel. Requires the inherited Wheel BindWidget. |
UCrimsonRadialBindingPickerWidget | class | Slot picker. Optional binds: List_Entries, Text_Search, Text_Title. |
UCrimsonRadialBindableEntryObject | class | UObject wrapper so an entry can be a UListView item. Entry, bIsClearEntry. |
UCrimsonRadialAction_Binding | class | One shared forwarding action per wheel; reads its binding from Slice.Payload. |
| Provider override | Purpose |
|---|---|
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 function | Purpose |
|---|---|
Find(PlayerController) | Static. Searches controller, then player state, then pawn. |
GetLayout(LayoutId) / GetBinding(LayoutId, Slot) | Reads. |
SetBinding / ClearBinding / SwapBindings | Writes. 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 / GetPresetDisplayName | Named 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 function | Purpose |
|---|---|
SetLayoutDefinition(Definition) | Swaps layouts at runtime and rebuilds from page 0. |
RebuildFromBindings() | Re-resolves every slot from the store. |
EnterEditMode / ExitEditMode / ToggleEditMode / IsEditing | Edit mode. Rebuilds, because slot confirmability differs between modes. |
ToggleCarryAtFocus() / CancelCarry() / GetCarriedSlot() | Lift-and-place rearranging. |
AssignBindingToSlot / ClearSlot / MoveSlotTo | Slot 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 / GetPageIndex | Paging. 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
| Type | Kind | Description |
|---|---|---|
UCrimsonSimulatedInputWidget | UCommonUserWidget (base) | AssociatedAction (const UInputAction*), FallbackBindingKey, CommonVisibilityBorder BindWidget. BP: InputKeyValue, InputKeyValue2D, FlushSimulatedInput, GetEnhancedInputSubsystem, GetAssociatedAction, GetSimulatedKey. |
UCrimsonJoystickWidget | UCrimsonSimulatedInputWidget | StickRange (50), bNegateYAxis; BindWidgets JoystickBackground, JoystickForeground (UImage). |
UCrimsonTouchRegion | UCrimsonSimulatedInputWidget | Injects while touched. BP: ShouldSimulateInput. |
UCrimsonPerformanceStatSubsystem | UGameInstanceSubsystem | Samples 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. |
ICrimsonServerFPSProvider | UINTERFACE (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. |
UCrimsonPerfStatWidgetBase | UCommonUserWidget (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. |
UCrimsonPerfStatGraph | UUserWidget | C++ only: SetLineColor, SetMaxYValue, SetBackgroundColor, UpdateGraphData. Wraps the SCrimsonLatencyGraph Slate widget. |
UCrimsonPerfStatContainerBase | UCommonUserWidget (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). |
ECrimsonStatDisplayMode | Enum (BlueprintType) | Hidden, TextOnly, GraphOnly, TextAndGraph. |
UCrimsonUIExtensionPointWidget | UDynamicEntryBoxBase | ExtensionPointTag, 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
| Type | Purpose |
|---|---|
UCrimsonPoolBarWidget | UCommonUserWidget. One layered resource bar drawn into a single material. Knows nothing about the ability system. |
FCrimsonPoolSnapshot | Raw pool values: Health, MaxHealth, Reserved, Shield, MaxShield, Overhealth. |
FCrimsonPoolBarFractions | Normalized 0..1 output: MainFrac, HealthFrac, GhostFrac, ShieldFrac, ReservedStart, HealthPercent. |
FCrimsonPoolBarStyle | Colors, motion timings, compression curve, segment count, and the material binding. |
FCrimsonPoolBarMaterialBinding | FName per material parameter, so a restyle never means recompiling. |
| Function | Purpose |
|---|---|
SetPoolState | Push new values. A drop snaps and trails; a gain eases in. |
SetPoolStateImmediate | Snap to new values with no trail and no flash. Use on bind and respawn. |
SetPoolBarStyle | Restyle at runtime. Rebuilds the dynamic material if the base material changed. |
SetHealthColor | Retint just the health fill, leaving the rest of the style alone. |
SetShieldRecharging | Runs the material's recharge shimmer. |
GetPoolFractions | The SETTLED target fractions - where the bar is heading. |
GetDisplayHealthFrac / GetDisplayShieldFrac | What is actually drawn this frame. |
ComputeFractions | Static. The normalization specification; nothing else may re-derive these. |
OnPoolVisual | BlueprintImplementableEvent, fired on every change. Drives readouts. |
| Asset | Path |
|---|---|
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
| Tag | Defined in | Used for |
|---|---|---|
UI.Layer.Game / .GameMenu / .Menu / .Modal | CrimsonUI (native, CrimsonUILayerTags.h) | The base layer set: HUD pushes, in-game screens, escape-menu pushes from UCrimsonHUDLayout, dialog pushes from UCrimsonMessagingSubsystem. |
UI.Action.Escape | CrimsonUI (native) | Legacy tag-based escape binding. |
UI.Layer.ContextMenu | CrimsonUI (native, CrimsonContextMenuTags.h) | Context-menu pushes. |
UI.Action.ContextMenu.Confirm / .Cancel / .Navigate.Up / .Navigate.Down / .Cycle.Next / .Cycle.Previous | CrimsonUI (native) | Context-menu UI action bindings. |
UI.ContextMenu.Section.Primary / .Manage / .Destructive | CrimsonUI (native) | Section grouping for UCrimsonContextAction::SectionTag; entries group by section with dividers, destructive last. |
Platform.Trait.Input.HardwareCursor | CrimsonUI (native) | Viewport client cursor decision. |
Platform.Trait.Input.PrimarilyController | CrimsonUI (native) | Default controller-disconnect-screen gate. |
Platform.Trait.Input.HasStrictControllerPairing | CrimsonUI (native) | Disconnect-screen pairing evaluation. |
HUD.Slot.*, InputMode.Game, InputMode.Menu | Your 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).