Data Bindings
The game exposes values to the HUD using Bindings. The HUD elements can register to a binding and receive a callback when the value changes. Bindings are indexed using a name and a type. The type is currently one of: int, string, float or bool.
Registering to a Bind
You can register a function to get called when a value gets changed. This is an example from the ammo hud panel:
bind.register("player_ammo_total", "int", function(value) { ammoTotalLabel.text = value; });
Existing Binds
This is an overview of the bindings available in Empires. You can get an up to date list by typing emp_binding_list
in your console.
Int
- player_mines_deployed - The amount of mines currently placed by the player
- player_ammo_current - The amount of ammo in the clip of the current weapon
- player_ammo_total - The amount of ammo in total
- player_mines_max - The maximum amount of mines the player can place
- player_ammo_clipsize - The maximum amount of ammo in a clip
- player_stamina - The stamina of the player from 0 to 100
- player_health_max - The maximum health of the player, normally 100.
- player_ammo_type - The type of ammo currently held.
- player_health - The current health of the player
- player_wages - The amount of wages the current player has.
- team_tickets - The amount of tickets the team of the player has
- team_res_total - The amount of resources the team of the player has
- team_res_income - The resource income per second for the team of the player
- team_tanks - The amount of vehicles the current team has on the field.
- team_tanks_max - The amount of vehicles the current team can place on the field.
- game_seconds_left - The amount of seconds left in the game.
- enemy_tickets - The amount of tickets of the enemy team (if applicable)
Adding a bind in C++ code
Binds usually live in either the C_EmpPlayer class, the C_EmpTeam class or the GameRules class. To create a new bind in the Player class, perform the following steps:
- Add a new bind member variable to the emp_player.h file:
std::shared_ptr< EmpDataBinding<int> > _healthBinding; std::shared_ptr< EmpDataBinding<int> > _staminaBinding; + std::shared_ptr< EmpDataBinding<int> > _yourNewBinding;
- In the constructor implementation of the player class, create the actual binding:
_healthBinding = EmpDataBindingManager<int>::GetBinding("player_health"); _staminaBinding = EmpDataBindingManager<int>::GetBinding("player_stamina"); + _yourNewBinding = EmpDataBindingManager<int>::GetBinding("your_new_binding");
- In the UpdateDataBindings function, set the actual value the bind is supposed to have:
_healthMaxBinding->Set(GetMaxHealth()); _staminaBinding->Set(GetStamina()); + _yourNewBinding->Set(42);
- Your new binding should now show up in the
emp_bindings_list
command in the Empires console.