HUD Menus#
Before working on HUD, it’s recommended to extract the englishclient_frontend.bsp.pak000_dir.vpk
vpk. This file contains all vanilla menus and UI logic and will be a very helpful reference!
Registering a menu#
In your mod.json
, add a Before
UI callback like this:
{
"Path": "ui/profiles_menu.nut",
"RunOn": "UI",
"UICallback": {
"Before": "InitProfilesMenu",
}
}
In the script you referenced, create a global in which you register your menu with the AddMenu
like this:
global InitProfilesMenu
void InitProfilesMenu()
{
AddMenu( "MenuName", $"path/to/menu.menu" )
}
If you want to, you can add a init to AddMenu
like this: AddMenu( "MenuName", $"path/to/menu.menu", func )
The returns void
and takes no parameters. It gets called once the menu is initialized.
It’s recommended to create a file struct in which you store menu states:
struct {
var menu
} file
void MenuInitCallback()
{
file.menu = GetMenu( "MenuName" )
}
Registering a Submenu#
Menu Functions#
Useless functions have been left out. From _menus.nut
- UICodeCallback_ActivateMenus
Register Menus#
- var AddMenu( string blockName, asset resourceFile, void functionref() initFunc = null, string displayName = "" )
Register a normal HUD menu. The init function will be called once all menus are registered and created.
- var AddMenu_WithCreateFunc( string blockName, asset resourceFile, void functionref() initFunc, var functionref( ... ) createMenuFunc )
Registers a normal HUD menu with a custom function to create the menu. The create function needs to be native since scripts can’t create HUD elements.
- var AddPanel( var menu, string panelName, void functionref() initFunc = null )
- var AddSubmenu( blockName, asset resourceFile, void functionref() initFunc = null )
Open Menus#
-
void AdvanceMenu(string name)#
Push a menu to the stack / open a menu
-
void OpenSubmenu(var menu, bool updateMenuPos = true)#
if
updateMenuPos
is notnull
, the menu is required to have aButtonFrame
element that is the main content reference.
Retrieve Menus#
-
var GetMenu(string name)#
Get the menu reference
-
var GetPanel(string name)#
-
var GetActiveMenu()#
-
array<var> GetAllMenuPanels(var menu)#
Close Menus#
-
void CloseActiveMenu(bool cancelled = false, bool openStackMenu = true)#
-
void CloseAllMenus()#
-
void CloseAllDialogs()#
-
void CloseAllToTargetMenu(var menu)#
Close until the menu is the most recent opened.
-
void CloseSubmenu(bool openStackMenu = true)#
-
void CleanupInGameMenus()#
Callbacks#
- void AddMenuEventHandler( var menu, int event, void functionref() func )
Accepted events:
eUIEvent.MENU_OPEN
eUIEvent.MENU_CLOSE
eUIEvent.MENU_SHOW
eUIEvent.MENU_HIDE
eUIEvent.MENU_NAVIGATE_BACK
eUIEvent.MENU_TAB_CHANGED
eUIEvent.MENU_ENTITLEMENTS_CHANGED
eUIEvent.MENU_INPUT_MODE_CHANGED
- void AddPanelEventHandler( var panel, int event, void functionref() func )
Accepted events:
eUIEvent.PANEL_SHOW
eUIEvent.PANEL_HIDE
- void AddButtonEventHandler( var button, int event, void functionref( var ) func )
- void AddEventHandlerToButton( var menu, string buttonName, int event, void functionref( var ) func )
Add an event handler to an element.
If you have a reference to the element, use
Hud_AddEventHandler
- void AddEventHandlerToButtonClass( var menu, string classname, int event, void functionref( var ) func )
Add a event handler for every element of a class
-
var GetTopNonDialogMenu()#
Get the last openend menu that isn’t a dialog
-
bool IsDialog(var menu)#
Returns
true
if the menu is a dialog.
Submenus#
Not recommended to use.
-
CloseAllInGameMenus()#
-
OpenSubmenu(var menu, bool updateMenuPos = true)
-
CloseSubmenu(bool openStackMenu = true)
Other#
-
void PrintMenuStack()#
Debugging
-
void AddMenuElementsByClassname(var menu, string classname)#
-
void FocusDefaultMenuItem(var menu)#
Set the default focus element to be focused
-
void FocusDefault(var menu)#
Like
FocusDefaultMenuItem
but excludes some menus.
Footers#
To use footers, add this element to your menu:
FooterButtons
{
ControlName CNestedPanel
InheritProperties FooterButtons
}
- void AddMenuFooterOption( var menu, int input, string gamepadLabel, string mouseLabel = "", void functionref( var ) activateFunc = null, bool functionref() conditionCheckFunc = null, void functionref( InputDef ) updateFunc = null )
Adds a footer to a menu.
- void AddPanelFooterOption( var panel, int input, string gamepadLabel, string mouseLabel = "", void functionref( var ) activateFunc = null, bool functionref() conditionCheckFunc = null, void functionref( InputDef ) updateFunc = null )
Adds a footer to a panel
-
void UpdateFooterOptions()#
Update the footers of the active menu.
-
void SetFooterText(var menu, int index, string text)#
Change the text of a specific footer.