Add Hud Elements

beginner

In this tutorial, you will learn how to add elements to the hud screen.

Overview

The hud screen, which is shown the majority of the time in the game, displays critical information for the player. There are plenty of times you'll want to add elements onto this screen, such as pop-up text after completing certain events, a stamina bar showing how much energy the player has, a speedometer showing the player's speed, and much more!

To add an element you've created onto the hud screen, you'll need to use the modification parameter to add a new control (element) to the root_panel. The root panel is a panel type element which contains nearly all of the elements displayed on the hud.

Individual Elements

The following code creates an image element that displays a black square at the top of the screen, creates a label element which displays the text "hud text" at the top-right of the screen, and performs a modification to the root_panel which adds the image and label elements to the hud screen.

RP/ui/hud_screen.jsonCopy
json
"hud_square": {
	"type": "image",
	"texture": "textures/ui/Black",   // vanilla texture
	"anchor_from": "top_middle",
	"anchor_to": "top_middle",
	"size": [ 64, 64 ],
	"offset": [ 0, 4 ]
},

"hud_text": {
	"type": "label",
	"text": "hud text",
	"anchor_from": "top_right",
	"anchor_to": "top_right",
	"offset": [ -4, 4 ]
},

"root_panel": {
	"modifications": [
		{
			"array_name": "controls",
			"operation": "insert_front",
			"value": [
				{ "hud_square@hud.hud_square": {} },
				{ "hud_text@hud.hud_text": {} }
			]
		}
	]
},
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

All of the elements added to the hud screen are listed out in the value section of the root panel modifications. The namespace specified in the added elements (e.g. @hud.hud_square) can be changed if adding elements which exist in another namespace. If the hud_square element was created in the scoreboards.json UI page under the scoreboard namespace, for example, you would put @scoreboard.hud_square when adding the element to the root panel.

Combined Elements

It is often helpful for organizational purposes to not add many elements to the root panel individually. The following code wraps the previously defined hud_square and hud_text elements (not shown) in a panel element called hud_elements_panel and then adds that element to the root panel of the hud screen. Effect is the same as the Individual Elements code.

RP/ui/hud_screen.jsonCopy
json
"hud_elements_panel": {
	"type": "panel",
	"controls": [
		{ "hud_square@hud_square": {} },
		{ "hud_text@hud_text": {} }
	]
},

"root_panel": {
	"modifications": [
		{
			"array_name": "controls",
			"operation": "insert_front",
			"value": [
				{ "hud_elements_panel@hud.hud_elements_panel": {} }
			]
		}
	]
},
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

The hud_elements_panel does not have its size parameter directly defined so that it will inherit its parent's (root_panel) size. This allows child anchoring, % size, etc. to work relative to the hud screen.

Contributors