//////////////////////////////////////////////// // 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); } }
//////////////////////////////////////////////// // 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); } }
//////////////////////////////////////////////// // 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); } }
///////////////////////////////////////////////// // 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); } }
//////////////////////////////////////////////// // 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); }