# Energy

**URL:** https://heroiclabs.com/docs/hiro/unreal/energy/
**Keywords:** energy, hiro
**Categories:** hiro, unreal, energy

---


# Energy

Read more about the Energy system in Hiro [here](../../concepts/energy/).

## Get all energies

Get the energies and their current timers for the player.

```cpp
FHiroOnEnergyGet OnEnergyGet;
OnEnergyGet.AddDynamic(this, &AMyActor::OnEnergyGet);
FOnError OnError;

HiroClient->EnergyGet(Session, OnEnergyGet, OnError);

void AMyActor::OnEnergyGet(const FHiroEnergyList& EnergyList)
{
    UE_LOG(LogTemp, Log, TEXT("%s"), *EnergyList.ToJson());
}
```

## Spend one or more energies

Spend one or more energies for the player.

```cpp
FHiroEnergySpendRequest Request;
Request.Amounts.Add(TEXT("power"), 10);
Request.Amounts.Add(TEXT("tickets"), 1);

FHiroOnEnergySpend OnEnergySpend;
OnEnergySpend.AddDynamic(this, &AMyActor::OnEnergySpend);
FOnError OnError;

HiroClient->EnergySpend(Session, Request, OnEnergySpend, OnError);

void AMyActor::OnEnergySpend(const FHiroEnergySpendReward& EnergySpendReward)
{
    UE_LOG(LogTemp, Log, TEXT("%s"), *EnergySpendReward.ToJson());
}
```

## Spend energies with custom refill start times

Spend one or more energies and set a custom refill start time for each.

```cpp
FHiroEnergySpendWithRefillStartTimeRequest Request;
FHiroEnergySpendWithTime PowerSpend;
PowerSpend.Amount = 10;
PowerSpend.RefillStartTime = FDateTime::UtcNow().ToUnixTimestamp();
Request.Spends.Add(TEXT("power"), PowerSpend);

FHiroOnEnergySpendWithRefillStartTime OnEnergySpendWithRefillStartTime;
OnEnergySpendWithRefillStartTime.AddDynamic(this, &AMyActor::OnEnergySpendWithRefillStartTime);
FOnError OnError;

HiroClient->EnergySpendWithRefillStartTime(Session, Request, OnEnergySpendWithRefillStartTime, OnError);

void AMyActor::OnEnergySpendWithRefillStartTime(const FHiroEnergySpendReward& EnergySpendReward)
{
    UE_LOG(LogTemp, Log, TEXT("%s"), *EnergySpendReward.ToJson());
}
```

## Granting energy

While energy can be granted as part of a reward, you can also grant it directly.

```cpp
FHiroEnergyGrantRequest Request;
Request.Amounts.Add(TEXT("power"), 10);
Request.Amounts.Add(TEXT("tickets"), 1);

FHiroOnEnergyGrant OnEnergyGrant;
OnEnergySpend.AddDynamic(this, &AMyActor::OnEnergyGrant);
FOnError OnError;

HiroClient->EnergyGrant(Session, Request, OnEnergyGrant, OnError);

void AMyActor::OnEnergyGrant(const FHiroEnergyList& EnergyList)
{
    UE_LOG(LogTemp, Log, TEXT("%s"), *EnergyList.ToJson());
}
```