Energy

Read more about the Energy system in Hiro here.

Get all energies #

Get the energies and their current timers for the player.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
void onEnergyGet(const Hiro::EnergyList& energyList)
{
    for (auto it = energyList.energies.begin(); it != energyList.energies.end(); it++)
    {
        std::cout << "Found energy: " << it->first << " with value: " << it->second.current << '\n';
    }
}

void onError(const Nakama::NError& error)
{
    std::cout << Nakama::toString(error.code) << ": " << error.message << '\n';
}

hiroClient->energyGet(session, onEnergyGet, onError);

Spend one or more energies #

Spend one or more energies for the player.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
void onEnergySpend(const Hiro::EnergySpendReward& energySpendReward)
{
    for (auto it = energySpendReward.energies.energies.begin(); it != energySpendReward.energies.energies.end(); it++)
    {
        std::cout << "Found energy: " << it->first << " with value: " << it->second.current << '\n';
    }
}

void onError(const Nakama::NError& error)
{
    std::cout << Nakama::toString(error.code) << ": " << error.message << '\n';
}

Hiro::EnergySpendRequest request;
request.amounts.insert(std::make_pair<std::string, int32_t>("power", 10));
request.amounts.insert(std::make_pair<std::string, int32_t>("tickets", 1));

hiroClient->energySpend(session, request, onEnergySpend, onError);

Spend energies with custom refill start times #

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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
void onEnergySpendWithRefillStartTime(const Hiro::EnergySpendReward& energySpendReward)
{
    for (auto it = energySpendReward.energies.energies.begin(); it != energySpendReward.energies.energies.end(); it++)
    {
        std::cout << "Found energy: " << it->first << " with value: " << it->second.current << '\n';
    }
}

void onError(const Nakama::NError& error)
{
    std::cout << Nakama::toString(error.code) << ": " << error.message << '\n';
}

Hiro::EnergySpendWithRefillStartTimeRequest request;
Hiro::EnergySpendWithTime powerSpend;
powerSpend.amount = 10;
powerSpend.refillStartTime = std::chrono::duration_cast<std::chrono::seconds>(
    std::chrono::system_clock::now().time_since_epoch()).count();
request.spends.insert(std::make_pair<std::string, Hiro::EnergySpendWithTime>("power", powerSpend));

hiroClient->energySpendWithRefillStartTime(session, request, onEnergySpendWithRefillStartTime, onError);

Granting energy #

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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
void onEnergyGrant(const Hiro::EnergyList& energyList)
{
    for (auto it = energyList.energies.begin(); it != energyList.energies.end(); it++)
    {
        std::cout << "Found energy: " << it->first << " with value: " << it->second.current << '\n';
    }
}

void onError(const Nakama::NError& error)
{
    std::cout << Nakama::toString(error.code) << ": " << error.message << '\n';
}

Hiro::EnergyGrantRequest request;
request.amounts.insert(std::make_pair<std::string, int32_t>("power", 10));
request.amounts.insert(std::make_pair<std::string, int32_t>("tickets", 1));

hiroClient->energyGrant(session, request, onEnergyGrant, onError);