Menu Item Widget
Introduction
A widget used to display a title, text and value in the form of a menu item
Dependencies
The MenuItem relies on other components of this plugin to work:
- Logger: Used to log useful information to help you debug any issues you might experience
- Game Instance: Used to monitor for input device changes and handle saving/loading game data
- Audio: Used to play sound effects either 2D or at a specified location
Optional Widgets
You can add the following widgets to enable extra functionality:
| Name | Description | Type |
|---|---|---|
| Title | The TextBlock used to display the title of the menu item | UTextBlock* |
| NormalText | The TextBlock used to display the text of the menu item while not highlighted | UTextBlock* |
| HighlightedText | The TextBlock used to display the text of the menu item while highlighted | UTextBlock* |
| ValueText | The TextBlock used to display the current value of the menu item | UTextBlock* |
| HighlightedValueText | The TextBlock used to display the current value of the menu item while highlighted | UTextBlock* |
| SelectButton | The button used to select the menu item | UButton* |
| ValueSlider | The slider used to display and update the current value of the menu item | USlider* |
| IncreaseValueButton | The button used to increase the value of the menu item | UButton* |
| DecreaseValueButton | The button used to decrease the value of the menu item | UButton* |
| BorderLeft | The border displayed on the left of the menu item | UImage* |
| BorderRight | The border displayed on the right of the menu item | UImage* |
| BorderBackground | The background border display in the menu item | UImage* |
| ButtonLeft | The button displayed on the left of the menu item | UImage* |
| ButtonRight | The button displayed on the right of the menu item | UImage* |
| ButtonBackground | The background button display in the menu item | UImage* |
| InputIndicator | The background button display in the menu item | UImage* |
Optional Animations
You can add the following widgets to enable extra functionality:
| Name | Description |
|---|---|
| HighlightedAnimation | The animation played when the menu item is highlighted |
API Reference
Properties
| Property | Description | Type | Default Value |
|---|---|---|---|
| HighlightedAnimation | The animation played when the menu item is highlighted | UWidgetAnimation* | nullptr |
| FocusByDefault | Should the menu item be focused by default? | bool | false |
| HideOnConsoles | Should the menu item be hidden on consoles? | bool | false |
| TitleText | The title text displayed in the menu item | FText | |
| MenuItemText | The text displayed in the menu item | FText | |
| HighlightedSFX | The sound effect played when the menu item is highlighted | USoundBase* | nullptr |
| BorderNormalColor | The color of the border when not highlighted | FLinearColor | |
| BorderHighlightedColor | The color of the border when highlighted | FLinearColor | |
| BorderNormalImage | The image of the border when not highlighted | UTexture2D* | nullptr |
| BorderHighlightedImage | The image of the border when highlighted | UTexture2D* | nullptr |
| BorderLeftNormalImage | The image of the left border when not highlighted | UTexture2D* | nullptr |
| BorderLeftHighlightedImage | The image of the left border when highlighted | UTexture2D* | nullptr |
| BorderRightNormalImage | The image of the right border when not highlighted | UTexture2D* | nullptr |
| BorderRightHighlightedImage | The image of the right border when highlighted | UTexture2D* | nullptr |
| BackgroundNormalColor | The color of the button when not highlighted | FLinearColor | |
| BackgroundHighlightedColor | The color of the button when highlighted | FLinearColor | |
| BackgroundNormalImage | The image of the button when not highlighted | UTexture2D* | nullptr |
| BackgroundHighlightedImage | The image of the button when highlighted | UTexture2D* | nullptr |
| BackgroundLeftNormalImage | The image of the left button when not highlighted | UTexture2D* | nullptr |
| BackgroundLeftHighlightedImage | The image of the left button when highlighted | UTexture2D* | nullptr |
| BackgroundRightNormalImage | The image of the right button when not highlighted | UTexture2D* | nullptr |
| BackgroundRightHighlightedImage | The image of the right button when highlighted | UTexture2D* | nullptr |
| ValueUpdateMethod | The method used to update the value of the menu item | EMenuItemValueUpdateMethod | EMenuItemValueUpdateMethod::SinglePress |
| IncrementSinglePress | The increment used when updating the value when the key is pressed | float | 1.0f |
| IncrementHold | The increment used when updating the value when the key is held down | float | 0.15f |
| SettingsItemType | The type of setting item managed by this menu item (changing this will overwrite other settings) | ESettingsItemType | ESettingsItemType::None |
| AutoSaveSettingsOnValueChanged | Should the settings managed by this menu item automatically be saved when the value is changed? | bool | true |
| AutoSaveSettingsOnHighlightRemoved | Should the settings managed by this menu item automatically be saved when the highlight state is removed? | bool | true |
| AutoSaveSettingsOnSelected | Should the settings managed by this menu item automatically be saved when the menu item is selected? | bool | true |
| InputDevice | The input device associated with the action to rebind | EInputDevice | EInputDevice::Unknown |
| InputMappingContext | The input mapping context containing the action to rebind | UInputMappingContext* | nullptr |
| InputAction | The input action to rebind | UInputAction* | nullptr |
| MappableName | The player mappable name for the action to rebind | FName | |
| ShowValueSlider | Should the value slider be shown for this menu item? | bool | false |
| ShowValueButtons | Should the increase/decrease value buttons be shown for this menu item? | bool | false |
| ValueMapping | A mapping of possible values to text | TMap<int, FText> | |
| DefaultValue | The default value of the menu item | int | 100 |
| MinValue | The minimum value of the menu item | int | 0 |
| MaxValue | The maximum value of the menu item | int | 100 |
| AllowSelection | Can the menu item be selected? | bool | true |
| VerticalNavigation | The type of navigation used by the menu item when pressing the up or down key | EMenuNavigation | EMenuNavigation::HighlightItem |
| MenuItemUp | The menu item highlighted when the up key is pressed | UMenuItem* | nullptr |
| MenuItemDown | The menu item highlighted when the down key is pressed | UMenuItem* | nullptr |
| HorizontalNavigation | The type of navigation used by the menu item when pressing the left or right key | EMenuNavigation | EMenuNavigation::HighlightItem |
| MenuItemLeft | The menu item highlighted when the left key is pressed | UMenuItem* | nullptr |
| MenuItemRight | The menu item highlighted when the right key is pressed | UMenuItem* | nullptr |
| Menu | A reference to the menu that contains this menu item | UMenu* | nullptr |
Events
| Name | Description | Params |
|---|---|---|
| OnSelected | Event used to notify other classes that the menu item was selected | |
| OnSelectedInContainer | Event used to notify other classes that a specific menu item in the container was selected | Index (int) The index of the menu item that was selected |
| OnHighlighted | Event used to notify other classes that the menu item was highlighted | |
| OnHighlightRemoved | Event used to notify other classes that the menu item's highlighted state was removed | |
| OnValueChanged | Event used to notify other classes that the menu item's value was updated | Value (int) The new value of the menu item |
Functions
| Name | Description | Params | Return |
|---|---|---|---|
| SetText | Set the text displayed in the menu item | Text (FText&) The new text displayed in the menu item |
|
| SetTitle | Set the title displayed in the menu item | Text (FText&) The new title displayed in the menu item |
|
| SetHighlightedState | Set the highlighted state of the menu item | IsHighlighted (bool) Is the menu item highlighted? PlayHighlightedAnimation (bool) Should the highlighted animation be played? PlayHighlightedSound (bool) Should the highlighted sound effect be played? |
|
| IsHighlighted | Check if the menu item is highlighted | bool A boolean value indicating if the menu item is highlighted |
|
| GetValue | Get the current value of the menu item | int The current value of the menu item |
|
| UpdateValue | Update the value of the menu item | Increment (float) The amount added to the current value of the menu item |
|
| SelectItem | Select the menu item | ||
| SaveSettings | Save the settings managed by this menu item | ||
| ApplySettings | Apply the settings managed by this menu item | ||
| GetInputActionKey | Get the key used by the specified input action | FKey The key used by the specified input action |
|
| OnMenuBack | Called when trying to go back in the menu | bool A boolean value indicating if the back event was handled |
|
| AnyKeyPressed | Called after any key is pressed by the player (used to remap controls) | Key (FKey) The key pressed by the player |
|
| ApplyKeyBinding | Apply the key binding for the input action | ||
| IsWaitingForKeyPress | Is the menu item waiting for a key press? | bool A boolean value indicating if the menu item is waiting for a key press |
Blueprint Usage
You can use the MenuItem using Blueprints by adding one of the following nodes:
- Ultimate Starter Kit > UI > Set Text
- Ultimate Starter Kit > UI > Set Title
- Ultimate Starter Kit > UI > Set Highlighted State
- Ultimate Starter Kit > UI > Is Highlighted
- Ultimate Starter Kit > UI > Get Value
- Ultimate Starter Kit > UI > Update Value
- Ultimate Starter Kit > UI > Select Item
- Ultimate Starter Kit > UI > Save Settings
- Ultimate Starter Kit > UI > Apply Settings
- Ultimate Starter Kit > UI > Get Input Action Key
- Ultimate Starter Kit > UI > On Menu Back
- Ultimate Starter Kit > UI > Any Key Pressed
- Ultimate Starter Kit > UI > Apply Key Binding
- Ultimate Starter Kit > UI > Is Waiting For Key Press
C++ Usage
Before you can use the plugin, you first need to enable the plugin in your Build.cs file:
PublicDependencyModuleNames.Add("USK");
The MenuItem can now be used in any of your C++ files:
#include "USK/Widgets/MenuItem.h"
void ATestActor::Test()
{
// MenuItem is a pointer to the UMenuItem
MenuItem->SetText(Text);
MenuItem->SetTitle(Text);
MenuItem->SetHighlightedState(IsHighlighted, PlayHighlightedAnimation, PlayHighlightedSound);
bool IsHighlightedValue = MenuItem->IsHighlighted();
int Value = MenuItem->GetValue();
MenuItem->UpdateValue(Increment);
MenuItem->SelectItem();
MenuItem->SaveSettings();
MenuItem->ApplySettings();
FKey InputActionKey = MenuItem->GetInputActionKey();
bool OnMenuBackValue = MenuItem->OnMenuBack();
MenuItem->AnyKeyPressed(Key);
MenuItem->ApplyKeyBinding();
bool IsWaitingForKeyPressValue = MenuItem->IsWaitingForKeyPress();
}