Energy #

Read more about the Energy system in Hiro here.

Initializing the energy system #

The energy system relies on the Nakama System and the Economy System, both must be passed in as dependencies via the constructor.

1
2
var energiesSystem = new EnergiesSystem(nakamaSystem, economySystem)
systems.Add(energiesSystem);

Subscribing to changes in the energy system #

You can listen for changes in the energy system so that you can respond appropriately, such as updating the UI, by implementing the appropriate interface.

1
2
3
4
5
var disposer = SystemObserver<EnergiesSystem>.Create(energiesSystem, system => {
  Instance.Logger.Info($"System updated.");

  // Update UI elements etc as necessary here...
});

Refreshing the energy system #

To ensure the energy system has the latest information from Nakama you can refresh it.

1
await energiesSystem.RefreshAsync();

Listing available energy #

You can list the available energies for a user.

1
2
3
4
5
6
7
8
foreach (var energyKvp in energiesSystem.Energies)
{
  var name = energyKvp.Key;
  var energy = energyKvp.Value;

  Debug.Log($"Energy {name} ({energy.Current}/{energy.Max})");
  Debug.Log($"Next refill in {(energy.NextRefillTime - energy.CurrentTime) / 1000}s");
}

Spending energy #

You can spend energy as a user, either as a single energy at a time or as multiple at once.

1
2
3
4
5
6
7
8
9
// Spend a single energy
await energiesSystem.SpendEnergyAsync("lives", 1);

// Spend multiple energies
await energiesSystem.SpendEnergyAsync(new Dictionary<string, int>
{
  { "lives", 1 },
  { "hearts", 5 }
});