#include "hero.h"

Hero::Hero(coordinate position_x, coordinate position_y, int initial_charges) :
    hero_charges(initial_charges),
    pos_x(position_x),
    pos_y(position_y)
{}

void Hero::refillCharges(int append_charges)
{
    hero_charges += append_charges;
}

int Hero::charges() const noexcept
{
    return hero_charges;
}

bool Hero::useCharge()
{
    if (hero_charges > 0)
    {
        --hero_charges;
        return true;
    }

    return false;
}

void Hero::position(coordinate &x, coordinate &y) const noexcept
{
    x = pos_x;
    y = pos_y;
}

void Hero::move(const Direction &direction)
{
    switch (direction)
    {
    case Direction::Up:
        --pos_y; break;
    case Direction::Down:
        ++pos_y; break;
    case Direction::Left:
        --pos_x; break;
    case Direction::Right:
        ++pos_x; break;
    case Direction::None:
        break;
    }
}

void Hero::setPosition(coordinate x, coordinate y)
{
    pos_x = x;
    pos_y = y;
}