Skip to content
Snippets Groups Projects
UnitData.cpp 2.03 KiB
Newer Older
#include "UnitData.h"
#include "Util.h"

UnitData::UnitData()
    : m_mineralsLost(0)
    , m_gasLost(0)
{

}

void UnitData::updateUnit(const Unit & unit)
{
    bool firstSeen = false;
    const auto & it = m_unitMap.find(unit);
    if (it == m_unitMap.end())
    {
        firstSeen = true;
        m_unitMap[unit] = UnitInfo();
    }

    UnitInfo & ui   = m_unitMap[unit];
    ui.unit         = unit;
    ui.player       = unit.getPlayer();
    ui.lastPosition = unit.getPosition();
    ui.lastHealth   = unit.getHitPoints();
    ui.lastShields  = unit.getShields();
    ui.type         = unit.getType();
    ui.progress     = unit.getBuildPercentage();
    ui.id           = unit.getID();

    if (firstSeen)
    {
        if (m_numUnits.find(ui.type) == m_numUnits.end())
        {
            m_numUnits[ui.type] = 0;
        }

        m_numUnits[ui.type]++;
    }
}

void UnitData::killUnit(const Unit & unit)
{
    //_mineralsLost += unit->getType().mineralPrice();
    //_gasLost += unit->getType().gasPrice();
    m_numUnits[unit.getType()]--;
    m_numDeadUnits[unit.getType()]++;

    m_unitMap.erase(unit);
}

void UnitData::removeBadUnits()
{
    for (auto iter = m_unitMap.begin(); iter != m_unitMap.end();)
    {
        if (badUnitInfo(iter->second))
        {
            m_numUnits[iter->second.type]--;
            iter = m_unitMap.erase(iter);
        }
        else
        {
            iter++;
        }
    }
}

bool UnitData::badUnitInfo(const UnitInfo & ui) const
{
    return false;
}

int UnitData::getGasLost() const
{
    return m_gasLost;
}

int UnitData::getMineralsLost() const
{
    return m_mineralsLost;
}

int UnitData::getNumUnits(const UnitType & t) const
{
    if (m_numUnits.find(t) == m_numUnits.end())
    {
        return 0;
    }

    return m_numUnits.at(t);
}

int UnitData::getNumDeadUnits(const UnitType & t) const
{
    if (m_numDeadUnits.find(t) == m_numDeadUnits.end())
    {
        return 0;
    }

    return m_numDeadUnits.at(t);
}

const std::map<Unit, UnitInfo> & UnitData::getUnitInfoMap() const
{
    return m_unitMap;
}