예제 #1
0
////////////////////////////////////////////////
// PartType
////////////////////////////////////////////////
void PartType::Init(const std::vector<boost::shared_ptr<Effect::EffectsGroup> >& effects) {
    if (m_capacity != 0) {
        switch (m_class) {
        case PC_SHORT_RANGE:
        case PC_POINT_DEFENSE:
        case PC_MISSILES:
        case PC_FIGHTERS:
            m_effects.push_back(IncreaseMeter(METER_DAMAGE,         m_name, m_capacity, false));
            break;
        case PC_SHIELD:
            m_effects.push_back(IncreaseMeter(METER_MAX_SHIELD,     m_capacity));
            break;
        case PC_DETECTION:
            m_effects.push_back(IncreaseMeter(METER_DETECTION,      m_capacity));
            break;
        case PC_STEALTH:
            m_effects.push_back(IncreaseMeter(METER_STEALTH,        m_capacity));
            break;
        case PC_FUEL:
            m_effects.push_back(IncreaseMeter(METER_MAX_FUEL,       m_capacity));
            break;
        case PC_ARMOUR:
            m_effects.push_back(IncreaseMeter(METER_MAX_STRUCTURE,  m_capacity));
            break;
        case PC_SPEED:
            m_effects.push_back(IncreaseMeter(METER_SPEED,          m_capacity));
            break;
        case PC_RESEARCH:
            m_effects.push_back(IncreaseMeter(METER_TARGET_RESEARCH,m_capacity));
            break;
        case PC_INDUSTRY:
            m_effects.push_back(IncreaseMeter(METER_TARGET_INDUSTRY,m_capacity));
            break;
        case PC_TRADE:
            m_effects.push_back(IncreaseMeter(METER_TARGET_TRADE,   m_capacity));
            break;
        default:
            break;
        }
    }

    for (std::vector<boost::shared_ptr<Effect::EffectsGroup> >::const_iterator
         it = effects.begin(); it != effects.end(); ++it)
    {
        (*it)->SetTopLevelContent(m_name);
        m_effects.push_back(*it);
    }
}
예제 #2
0
////////////////////////////////////////////////
// HullType
////////////////////////////////////////////////
void HullType::Init(const std::vector<boost::shared_ptr<const Effect::EffectsGroup> >& effects) {
    if (m_fuel != 0)
        m_effects.push_back(IncreaseMeter(METER_MAX_FUEL,       m_fuel));
    if (m_stealth != 0)
        m_effects.push_back(IncreaseMeter(METER_STEALTH,        m_stealth));
    if (m_structure != 0)
        m_effects.push_back(IncreaseMeter(METER_MAX_STRUCTURE,  m_structure));
    if (m_battle_speed != 0)
        m_effects.push_back(IncreaseMeter(METER_BATTLE_SPEED,   m_battle_speed));
    if (m_starlane_speed != 0)
        m_effects.push_back(IncreaseMeter(METER_STARLANE_SPEED, m_starlane_speed));

    for (std::vector<boost::shared_ptr<const Effect::EffectsGroup> >::const_iterator it = effects.begin();
         it != effects.end(); ++it)
    { m_effects.push_back(*it); }
}
예제 #3
0
////////////////////////////////////////////////
// HullType
////////////////////////////////////////////////
void HullType::Init(const std::vector<boost::shared_ptr<Effect::EffectsGroup> >& effects) {
    if (m_fuel != 0)
        m_effects.push_back(IncreaseMeter(METER_MAX_FUEL,       m_fuel));
    if (m_stealth != 0)
        m_effects.push_back(IncreaseMeter(METER_STEALTH,        m_stealth));
    if (m_structure != 0)
        m_effects.push_back(IncreaseMeter(METER_MAX_STRUCTURE,  m_structure));
    if (m_speed != 0)
        m_effects.push_back(IncreaseMeter(METER_SPEED,          m_speed));

    for (std::vector<boost::shared_ptr<Effect::EffectsGroup> >::const_iterator it = effects.begin();
         it != effects.end(); ++it)
    {
        (*it)->SetTopLevelContent(m_name);
        m_effects.push_back(*it);
    }
}
예제 #4
0
/////////////////////////////////////////////////
// FieldType                                   //
/////////////////////////////////////////////////
FieldType::FieldType(const std::string& name, const std::string& description,
                     float stealth, const std::set<std::string>& tags,
                     const std::vector<std::shared_ptr<Effect::EffectsGroup>>& effects,
                     const std::string& graphic) :
    m_name(name),
    m_description(description),
    m_stealth(stealth),
    m_tags(),
    m_effects(effects),
    m_graphic(graphic)
{
    for (const std::string& tag : tags)
        m_tags.insert(boost::to_upper_copy<std::string>(tag));

    if (m_stealth != 0.0f)
        m_effects.push_back(IncreaseMeter(METER_STEALTH,    m_stealth));

    for (std::shared_ptr<Effect::EffectsGroup> effect : m_effects) {
        effect->SetTopLevelContent(m_name);
    }
}
예제 #5
0
////////////////////////////////////////////////
// PartType
////////////////////////////////////////////////
void PartType::Init(const std::vector<boost::shared_ptr<const Effect::EffectsGroup> >& effects) {
    switch (m_class) {
    case PC_SHORT_RANGE:
    case PC_POINT_DEFENSE:
        if (!boost::get<DirectFireStats>(&m_stats)) {
            std::string type_name = m_class == PC_SHORT_RANGE?
                "PC_SHORT_RANGE" : "PC_POINT_DEFENSE";
            throw std::runtime_error("PartType::PartType() : Wrong kind of stats specified "
                                     "for " + type_name + " part \"" + m_name + "\" -- "
                                     "was " + PartTypeStatsString(m_stats) + "; should have "
                                     "been " + PartTypeStatsString(DirectFireStats()));
        }
        break;
    case PC_MISSILES:
        if (!boost::get<LRStats>(&m_stats)) {
            throw std::runtime_error("PartType::PartType() : Wrong kind of stats specified "
                                     "for PC_MISSILES part \"" + m_name + "\" -- "
                                     "was " + PartTypeStatsString(m_stats) + "; should have "
                                     "been " + PartTypeStatsString(LRStats()));
        }
        break;
    case PC_FIGHTERS:
        if (!boost::get<FighterStats>(&m_stats)) {
            throw std::runtime_error("PartType::PartType() : Wrong kind of stats specified "
                                     "for PC_FIGHTERS part \"" + m_name + "\" -- "
                                     "was " + PartTypeStatsString(m_stats) + "; should have "
                                     "been " + PartTypeStatsString(FighterStats()));
        }
        break;
    default:
        if (!boost::get<float>(&m_stats)) {
            throw std::runtime_error("PartType::PartType() : Wrong kind of stats specified "
                                     "for generic part \"" + m_name + "\" -- "
                                     "was " + PartTypeStatsString(m_stats) + "; should have "
                                     "been " + PartTypeStatsString(float()));
        }
        break;
    }

    switch (m_class) {
    case PC_SHORT_RANGE:
    case PC_POINT_DEFENSE: {
        const DirectFireStats& stats = boost::get<DirectFireStats>(m_stats);
        m_effects.push_back(IncreaseMeter(METER_DAMAGE,                 m_name, stats.m_damage));
        m_effects.push_back(IncreaseMeter(METER_ROF,                    m_name, stats.m_ROF));
        m_effects.push_back(IncreaseMeter(METER_RANGE,                  m_name, stats.m_range));
        break;
    }
    case PC_MISSILES: {
        const LRStats& stats = boost::get<LRStats>(m_stats);
        m_effects.push_back(IncreaseMeter(METER_DAMAGE,                 m_name, stats.m_damage));
        m_effects.push_back(IncreaseMeter(METER_ROF,                    m_name, stats.m_ROF));
        m_effects.push_back(IncreaseMeter(METER_RANGE,                  m_name, stats.m_range));
        m_effects.push_back(IncreaseMeter(METER_SPEED,                  m_name, stats.m_speed));
        m_effects.push_back(IncreaseMeter(METER_STEALTH,                m_name, stats.m_stealth));
        m_effects.push_back(IncreaseMeter(METER_STRUCTURE,              m_name, stats.m_structure));
        m_effects.push_back(IncreaseMeter(METER_CAPACITY,               m_name, stats.m_capacity));
        break;
    }
    case PC_FIGHTERS: {
        const FighterStats& stats = boost::get<FighterStats>(m_stats);
        m_effects.push_back(IncreaseMeter(METER_ANTI_SHIP_DAMAGE,       m_name, stats.m_anti_ship_damage));
        m_effects.push_back(IncreaseMeter(METER_ANTI_FIGHTER_DAMAGE,    m_name, stats.m_anti_fighter_damage));
        m_effects.push_back(IncreaseMeter(METER_LAUNCH_RATE,            m_name, stats.m_launch_rate));
        m_effects.push_back(IncreaseMeter(METER_FIGHTER_WEAPON_RANGE,   m_name, stats.m_fighter_weapon_range));
        m_effects.push_back(IncreaseMeter(METER_SPEED,                  m_name, stats.m_speed));
        m_effects.push_back(IncreaseMeter(METER_STEALTH,                m_name, stats.m_stealth));
        m_effects.push_back(IncreaseMeter(METER_STRUCTURE,              m_name, stats.m_structure));    // not METER_MAX_STRUCTURE because this stat sets the initial/max structure of battle-spawned missiles, but doesn't need to track a separate max and actual value itself
        m_effects.push_back(IncreaseMeter(METER_DETECTION,              m_name, stats.m_detection));
        m_effects.push_back(IncreaseMeter(METER_CAPACITY,               m_name, stats.m_capacity));
        break;
    }
    case PC_SHIELD:
        if (boost::get<float>(m_stats) != 0)
            m_effects.push_back(IncreaseMeter(METER_MAX_SHIELD,     boost::get<float>(m_stats)));
        break;
    case PC_DETECTION:
        if (boost::get<float>(m_stats) != 0)
            m_effects.push_back(IncreaseMeter(METER_DETECTION,      boost::get<float>(m_stats)));
        break;
    case PC_STEALTH:
        if (boost::get<float>(m_stats) != 0)
            m_effects.push_back(IncreaseMeter(METER_STEALTH,        boost::get<float>(m_stats)));
        break;
    case PC_FUEL:
        if (boost::get<float>(m_stats) != 0)
            m_effects.push_back(IncreaseMeter(METER_MAX_FUEL,       boost::get<float>(m_stats)));
        break;
    case PC_ARMOUR:
        if (boost::get<float>(m_stats) != 0)
            m_effects.push_back(IncreaseMeter(METER_MAX_STRUCTURE,  boost::get<float>(m_stats)));
        break;
    case PC_BATTLE_SPEED:
        if (boost::get<float>(m_stats) != 0)
            m_effects.push_back(IncreaseMeter(METER_BATTLE_SPEED,   boost::get<float>(m_stats)));
        break;
    case PC_STARLANE_SPEED:
        if (boost::get<float>(m_stats) != 0)
            m_effects.push_back(IncreaseMeter(METER_STARLANE_SPEED, boost::get<float>(m_stats)));
    default:
        break;
    }

    for (std::vector<boost::shared_ptr<const Effect::EffectsGroup> >::const_iterator it = effects.begin(); it != effects.end(); ++it)
        m_effects.push_back(*it);
}