From: <geo...@us...> - 2014-12-19 18:50:04
|
Revision: 7791 http://sourceforge.net/p/freeorion/code/7791 Author: geoffthemedio Date: 2014-12-19 18:49:55 +0000 (Fri, 19 Dec 2014) Log Message: ----------- Ripping out more of the old ship part definitions and parsers code after removing the 3D engine code. Modified Paths: -------------- branches/SDL_Migration_And_Dependencies_Updates/UI/DesignWnd.cpp branches/SDL_Migration_And_Dependencies_Updates/UI/EncyclopediaDetailPanel.cpp branches/SDL_Migration_And_Dependencies_Updates/parse/ShipPartStatsParser.cpp branches/SDL_Migration_And_Dependencies_Updates/parse/ShipPartStatsParser.h branches/SDL_Migration_And_Dependencies_Updates/parse/ShipPartsParser.cpp branches/SDL_Migration_And_Dependencies_Updates/python/PythonUniverseWrapper.cpp branches/SDL_Migration_And_Dependencies_Updates/universe/Effect.cpp branches/SDL_Migration_And_Dependencies_Updates/universe/Ship.cpp branches/SDL_Migration_And_Dependencies_Updates/universe/Ship.h branches/SDL_Migration_And_Dependencies_Updates/universe/ShipDesign.cpp branches/SDL_Migration_And_Dependencies_Updates/universe/ShipDesign.h branches/SDL_Migration_And_Dependencies_Updates/util/SerializeUniverse.cpp Modified: branches/SDL_Migration_And_Dependencies_Updates/UI/DesignWnd.cpp =================================================================== --- branches/SDL_Migration_And_Dependencies_Updates/UI/DesignWnd.cpp 2014-12-19 18:29:53 UTC (rev 7790) +++ branches/SDL_Migration_And_Dependencies_Updates/UI/DesignWnd.cpp 2014-12-19 18:49:55 UTC (rev 7791) @@ -76,24 +76,14 @@ return ClientUI::GetTexture(ClientUI::ArtDir() / "misc" / "missing.png", true); } - float GetMainStat(ShipPartClass part_class, PartTypeStats part_stats) { - switch (part_class) { + float GetMainStat(const PartType* part_type) { + if (!part_type) + return 0.0f; + switch (part_type->Class()) { case PC_SHORT_RANGE: - case PC_POINT_DEFENSE: { - const DirectFireStats& stats = boost::get<DirectFireStats>(part_stats); - return stats.m_damage; //stats.m_ROF stats.m_range - break; - } - case PC_MISSILES: { - const LRStats& stats = boost::get<LRStats>(part_stats); - return stats.m_damage; //stats.m_ROF stats.m_range stats.m_speed stats.m_stealth stats.m_structure stats.m_capacity - break; - } - case PC_FIGHTERS: { - const FighterStats& stats = boost::get<FighterStats>(part_stats); - return stats.m_anti_ship_damage; //stats.m_anti_fighter_damage stats.m_launch_rate stats.m_fighter_weapon_range stats.m_speed stats.m_stealth stats.m_structure stats.m_detection stats.m_capacity - break; - } + case PC_POINT_DEFENSE: + case PC_MISSILES: + case PC_FIGHTERS: case PC_SHIELD: case PC_DETECTION: case PC_STEALTH: @@ -105,7 +95,7 @@ case PC_RESEARCH: case PC_INDUSTRY: case PC_TRADE: - return boost::get<float>(part_stats); + return static_cast<float>(part_type->Capacity()); break; case PC_GENERAL: case PC_BOMBARD: @@ -528,7 +518,7 @@ check_it != this_group.end(); ++check_it ) { const PartType* ref_part = *check_it; - if ((GetMainStat(pclass, checkPart->Stats()) < GetMainStat(pclass, ref_part->Stats())) && + if ((GetMainStat(checkPart) < GetMainStat(ref_part)) && (checkPart->ProductionCost(empire_id, loc_id) >= ref_part->ProductionCost(empire_id, loc_id)) && (checkPart->ProductionTime(empire_id, loc_id) >= ref_part->ProductionTime(empire_id, loc_id))) { @@ -613,7 +603,7 @@ if (already_added.find(part) != already_added.end()) continue; already_added.insert(part); - sorted_group.insert(std::make_pair(GetMainStat(pclass, part->Stats()), part)); + sorted_group.insert(std::make_pair(GetMainStat(part), part)); } // take the sorted parts and make UI elements (technically rows) for the PartsListBox Modified: branches/SDL_Migration_And_Dependencies_Updates/UI/EncyclopediaDetailPanel.cpp =================================================================== --- branches/SDL_Migration_And_Dependencies_Updates/UI/EncyclopediaDetailPanel.cpp 2014-12-19 18:29:53 UTC (rev 7790) +++ branches/SDL_Migration_And_Dependencies_Updates/UI/EncyclopediaDetailPanel.cpp 2014-12-19 18:49:55 UTC (rev 7791) @@ -370,70 +370,33 @@ } namespace { - struct DescriptionVisitor : public boost::static_visitor<> - { - DescriptionVisitor(ShipPartClass part_class, std::string& description) : - m_class(part_class), - m_description(description) - {} - void operator()(const float& d) const { - std::string desc_string; + void GetPartDescription(const PartType* part, std::string& description) { + if (!part) + return; + ShipPartClass part_class = part->Class(); + std::string desc_string; + float d = part->Capacity(); - switch(m_class){ - case PC_FUEL: - case PC_TROOPS: - case PC_COLONY: - desc_string += UserString("PART_DESC_CAPACITY"); - break; - case PC_SHIELD: - desc_string = UserString("PART_DESC_SHIELD_STRENGTH"); - break; - case PC_DETECTION: - desc_string = UserString("PART_DESC_DETECTION"); - break; - default: - desc_string = UserString("PART_DESC_STRENGTH"); - break; - } - m_description += - str(FlexibleFormat(desc_string) % d); + switch (part_class) { + case PC_FUEL: + case PC_TROOPS: + case PC_COLONY: + desc_string += UserString("PART_DESC_CAPACITY"); + break; + case PC_SHIELD: + desc_string = UserString("PART_DESC_SHIELD_STRENGTH"); + break; + case PC_DETECTION: + desc_string = UserString("PART_DESC_DETECTION"); + break; + default: + desc_string = UserString("PART_DESC_STRENGTH"); + break; } - void operator()(const DirectFireStats& stats) const { - m_description += - str(FlexibleFormat(UserString("PART_DESC_DIRECT_FIRE_STATS")) - % stats.m_damage - % stats.m_ROF - % stats.m_range); - } - void operator()(const LRStats& stats) const { - m_description += - str(FlexibleFormat(UserString("PART_DESC_LR_STATS")) - % stats.m_damage - % stats.m_ROF - % stats.m_range - % stats.m_speed - % stats.m_structure - % stats.m_stealth - % stats.m_capacity); - } - void operator()(const FighterStats& stats) const { - m_description += - str(FlexibleFormat(UserString("PART_DESC_FIGHTER_STATS")) - % (stats.m_type == BOMBER ? UserString("BOMBER") : UserString("INTERCEPTOR")) - % stats.m_anti_ship_damage - % stats.m_anti_fighter_damage - % stats.m_launch_rate - % stats.m_speed - % stats.m_stealth - % stats.m_structure - % stats.m_detection - % stats.m_capacity); - } + description += + str(FlexibleFormat(desc_string) % d); + } - const ShipPartClass m_class; - std::string& m_description; - }; - class ColorByOwner: public LinkDecorator { public: virtual std::string Decorate(const std::string& object_id_str, const std::string& content) const { @@ -1042,7 +1005,7 @@ specific_type = UserString(boost::lexical_cast<std::string>(part->Class())); std::string stat_description; - boost::apply_visitor(DescriptionVisitor(part->Class(), stat_description), part->Stats()); + GetPartDescription(part, stat_description); detailed_description += UserString(part->Description()) + "\n\n" + stat_description; std::string slot_types_list; @@ -1796,19 +1759,19 @@ } return str(FlexibleFormat(UserString("ENC_SHIP_DESIGN_DESCRIPTION_STR")) - % design->Description() - % hull_link - % parts_list - % static_cast<int>(design->SRWeapons().size()) - % static_cast<int>(design->LRWeapons().size()) - % static_cast<int>(design->FWeapons().size()) - % static_cast<int>(design->PDWeapons().size()) - % ship->CurrentMeterValue(METER_MAX_STRUCTURE) - % ship->CurrentMeterValue(METER_MAX_SHIELD) - % ship->CurrentMeterValue(METER_DETECTION) - % ship->CurrentMeterValue(METER_STEALTH) - % ship->CurrentMeterValue(METER_BATTLE_SPEED) - % ship->CurrentMeterValue(METER_STARLANE_SPEED) + % design->Description() + % hull_link + % parts_list + % static_cast<int>(design->Weapons().size()) + % 0 + % 0 + % 0 + % ship->CurrentMeterValue(METER_MAX_STRUCTURE) + % ship->CurrentMeterValue(METER_MAX_SHIELD) + % ship->CurrentMeterValue(METER_DETECTION) + % ship->CurrentMeterValue(METER_STEALTH) + % ship->CurrentMeterValue(METER_BATTLE_SPEED) + % ship->CurrentMeterValue(METER_STARLANE_SPEED) % ship->CurrentMeterValue(METER_MAX_FUEL) % design->ColonyCapacity() % design->TroopCapacity() Modified: branches/SDL_Migration_And_Dependencies_Updates/parse/ShipPartStatsParser.cpp =================================================================== --- branches/SDL_Migration_And_Dependencies_Updates/parse/ShipPartStatsParser.cpp 2014-12-19 18:29:53 UTC (rev 7790) +++ branches/SDL_Migration_And_Dependencies_Updates/parse/ShipPartStatsParser.cpp 2014-12-19 18:49:55 UTC (rev 7791) @@ -1,53 +0,0 @@ -#include "ShipPartStatsParser.h" - -#include "Double.h" -#include "EnumParser.h" -#include "Int.h" -#include "Label.h" -#include "ParseImpl.h" - -#include <boost/spirit/include/phoenix.hpp> - -#define DEBUG_PARSERS 0 - -#if DEBUG_PARSERS -namespace std { - inline ostream& operator<<(ostream& os, const PartTypeStats&) { return os; } -} -#endif - -namespace { - struct part_stats_parser_rules { - part_stats_parser_rules() { - qi::_1_type _1; - qi::_2_type _2; - qi::_3_type _3; - qi::_4_type _4; - qi::_val_type _val; - qi::eps_type eps; - using phoenix::construct; - - start - = (parse::label(Capacity_token) >> parse::double_ [ _val = _1 ]) - | eps [ _val = 0.0 ] - ; - - start.name("Part Stats"); - -#if DEBUG_PARSERS - debug(start); -#endif - - qi::on_error<qi::fail>(start, parse::report_error(_1, _2, _3, _4)); - } - - parse::detail::part_stats_parser_rule start; - }; -} - -namespace parse { namespace detail { - part_stats_parser_rule& part_stats_parser() { - static part_stats_parser_rules rules; - return rules.start; - } -} } Modified: branches/SDL_Migration_And_Dependencies_Updates/parse/ShipPartStatsParser.h =================================================================== --- branches/SDL_Migration_And_Dependencies_Updates/parse/ShipPartStatsParser.h 2014-12-19 18:29:53 UTC (rev 7790) +++ branches/SDL_Migration_And_Dependencies_Updates/parse/ShipPartStatsParser.h 2014-12-19 18:49:55 UTC (rev 7791) @@ -1,21 +0,0 @@ -// -*- C++ -*- -#ifndef _ShipPartStatsParser_h_ -#define _ShipPartStatsParser_h_ - -#include "../universe/ShipDesign.h" -#include "Lexer.h" - -#include <boost/spirit/include/qi.hpp> - -namespace parse { namespace detail { - typedef boost::spirit::qi::rule< - parse::token_iterator, - PartTypeStats (), - parse::skipper_type - > part_stats_parser_rule; - - part_stats_parser_rule& part_stats_parser(); -} } - - -#endif \ No newline at end of file Modified: branches/SDL_Migration_And_Dependencies_Updates/parse/ShipPartsParser.cpp =================================================================== --- branches/SDL_Migration_And_Dependencies_Updates/parse/ShipPartsParser.cpp 2014-12-19 18:29:53 UTC (rev 7790) +++ branches/SDL_Migration_And_Dependencies_Updates/parse/ShipPartsParser.cpp 2014-12-19 18:49:55 UTC (rev 7791) @@ -3,11 +3,13 @@ #include "ConditionParserImpl.h" #include "EnumParser.h" +#include "Double.h" #include "Label.h" #include "Parse.h" #include "ParseImpl.h" #include "ShipPartStatsParser.h" #include "ValueRefParser.h" +#include "../universe/ShipDesign.h" #include "../universe/Condition.h" @@ -112,7 +114,9 @@ part_type = part_type_prefix(_a, _b, _c) - > parse::detail::part_stats_parser() [ _d = _1 ] + > (( parse::label(Capacity_token) >> parse::double_ [ _d = _1 ]) + | eps [ _d = 0.0 ] + ) > slots(_f) > common_params [ _e = _1 ] [ insert(_r1, new_<PartType>(_a, _b, _c, _d, _e, _f)) ] @@ -186,7 +190,7 @@ std::string, std::string, ShipPartClass, - PartTypeStats, + double, PartHullCommonParams, std::vector<ShipSlotType> >, Modified: branches/SDL_Migration_And_Dependencies_Updates/python/PythonUniverseWrapper.cpp =================================================================== --- branches/SDL_Migration_And_Dependencies_Updates/python/PythonUniverseWrapper.cpp 2014-12-19 18:29:53 UTC (rev 7790) +++ branches/SDL_Migration_And_Dependencies_Updates/python/PythonUniverseWrapper.cpp 2014-12-19 18:49:55 UTC (rev 7791) @@ -203,20 +203,6 @@ const std::vector<std::string>& parts) = &ShipDesign::ValidDesign; bool (*ValidDesignDesign)(const ShipDesign&) = &ShipDesign::ValidDesign; - std::vector<int> DirectFireStatsP(const ShipDesign& ship_design) { - const std::vector<std::string>& partslist = ship_design.Parts(); - std::vector<int> results; - for (std::vector<std::string>::const_iterator part_it = partslist.begin(); part_it!=partslist.end(); part_it++){ - const PartType* part = GetPartType(*part_it); - if (part && part->Class() == PC_SHORT_RANGE) { // TODO: handle other weapon classes when they are implemented - const DirectFireStats& stats = boost::get<DirectFireStats>(part->Stats()); - results.push_back(stats.m_damage); - } - } - return results; - } - boost::function<std::vector<int> (const ShipDesign&)> DirectFireStatsFunc = &DirectFireStatsP; - const std::vector<std::string>& (ShipDesign::*PartsVoid)(void) const = &ShipDesign::Parts; std::vector<std::string> (ShipDesign::*PartsSlotType)(ShipSlotType) const = &ShipDesign::Parts; @@ -468,12 +454,6 @@ .def("perTurnCost", &ShipDesign::PerTurnCost) .add_property("hull", make_function(&ShipDesign::Hull, return_value_policy<return_by_value>())) .add_property("parts", make_function(PartsVoid, return_internal_reference<>())) - .add_property("directFireStats", make_function( - DirectFireStatsFunc, - return_value_policy<return_by_value>(), - boost::mpl::vector<std::vector<int>, const ShipDesign&>() - )) - .def("partsInSlotType", PartsSlotType, return_value_policy<return_by_value>()) .def("productionLocationForEmpire", &ShipDesign::ProductionLocation) ; Modified: branches/SDL_Migration_And_Dependencies_Updates/universe/Effect.cpp =================================================================== --- branches/SDL_Migration_And_Dependencies_Updates/universe/Effect.cpp 2014-12-19 18:29:53 UTC (rev 7790) +++ branches/SDL_Migration_And_Dependencies_Updates/universe/Effect.cpp 2014-12-19 18:49:55 UTC (rev 7791) @@ -186,9 +186,8 @@ case PC_SHORT_RANGE: case PC_MISSILES: case PC_POINT_DEFENSE: + case PC_FIGHTERS: return part.Class() == part_class; - case PC_FIGHTERS: - return boost::get<FighterStats>(part.Stats()).m_type == fighter_type; default: break; } Modified: branches/SDL_Migration_And_Dependencies_Updates/universe/Ship.cpp =================================================================== --- branches/SDL_Migration_And_Dependencies_Updates/universe/Ship.cpp 2014-12-19 18:29:53 UTC (rev 7790) +++ branches/SDL_Migration_And_Dependencies_Updates/universe/Ship.cpp 2014-12-19 18:49:55 UTC (rev 7791) @@ -75,42 +75,14 @@ switch (part->Class()) { case PC_SHORT_RANGE: + case PC_MISSILES: + case PC_FIGHTERS: case PC_POINT_DEFENSE: { m_part_meters[std::make_pair(METER_DAMAGE, part->Name())]; m_part_meters[std::make_pair(METER_ROF, part->Name())]; m_part_meters[std::make_pair(METER_RANGE, part->Name())]; break; } - case PC_MISSILES: { - std::pair<std::size_t, std::size_t>& part_missiles = - m_missiles[part_names[i]]; - ++part_missiles.first; - part_missiles.second += boost::get<LRStats>(part->Stats()).m_capacity; - m_part_meters[std::make_pair(METER_DAMAGE, part->Name())]; - m_part_meters[std::make_pair(METER_ROF, part->Name())]; - m_part_meters[std::make_pair(METER_RANGE, part->Name())]; - m_part_meters[std::make_pair(METER_SPEED, part->Name())]; - m_part_meters[std::make_pair(METER_STEALTH, part->Name())]; - m_part_meters[std::make_pair(METER_STRUCTURE, part->Name())]; - m_part_meters[std::make_pair(METER_CAPACITY, part->Name())]; - break; - } - case PC_FIGHTERS: { - std::pair<std::size_t, std::size_t>& part_fighters = - m_fighters[part_names[i]]; - ++part_fighters.first; - part_fighters.second += boost::get<FighterStats>(part->Stats()).m_capacity; - m_part_meters[std::make_pair(METER_ANTI_SHIP_DAMAGE, part->Name())]; - m_part_meters[std::make_pair(METER_ANTI_FIGHTER_DAMAGE, part->Name())]; - m_part_meters[std::make_pair(METER_LAUNCH_RATE, part->Name())]; - m_part_meters[std::make_pair(METER_FIGHTER_WEAPON_RANGE,part->Name())]; - m_part_meters[std::make_pair(METER_SPEED, part->Name())]; - m_part_meters[std::make_pair(METER_STEALTH, part->Name())]; - m_part_meters[std::make_pair(METER_STRUCTURE, part->Name())]; - m_part_meters[std::make_pair(METER_DETECTION, part->Name())]; - m_part_meters[std::make_pair(METER_CAPACITY, part->Name())]; - break; - } default: break; } @@ -157,8 +129,6 @@ this->m_name = copied_ship->m_name; this->m_design_id = copied_ship->m_design_id; - this->m_fighters = copied_ship->m_fighters; - this->m_missiles = copied_ship->m_missiles; for (PartMeterMap::const_iterator it = copied_ship->m_part_meters.begin(); it != copied_ship->m_part_meters.end(); ++it) { this->m_part_meters[it->first]; } @@ -243,20 +213,6 @@ << " species name: " << m_species_name << " produced by empire id: " << m_produced_by_empire_id << " fighters: "; - //typedef std::map<std::string, std::pair<std::size_t, std::size_t> > ConsumablesMap; - for (ConsumablesMap::const_iterator it = m_fighters.begin(); it != m_fighters.end();) { - const std::string& part_name = it->first; - int num_consumables_available = it->second.second; - ++it; - os << part_name << ": " << num_consumables_available << (it == m_fighters.end() ? "" : ", "); - } - os << " missiles: "; - for (ConsumablesMap::const_iterator it = m_missiles.begin(); it != m_missiles.end();) { - const std::string& part_name = it->first; - int num_consumables_available = it->second.second; - ++it; - os << part_name << ": " << num_consumables_available << (it == m_missiles.end() ? "" : ", "); - } //typedef std::map<std::pair<MeterType, std::string>, Meter> PartMeters; os << " part meters: "; for (PartMeterMap::const_iterator it = m_part_meters.begin(); it != m_part_meters.end();) { @@ -475,45 +431,8 @@ } fuel_meter->SetCurrent(max_fuel_meter->Current()); - - for (ConsumablesMap::iterator it = m_fighters.begin(); - it != m_fighters.end(); ++it) - { - const PartType* part_type = GetPartType(it->first); - if (part_type) - it->second.second = it->second.first * - boost::get<FighterStats>(part_type->Stats()).m_capacity; - } - - for (ConsumablesMap::iterator it = m_missiles.begin(); - it != m_missiles.end(); ++it) - { - const PartType* part_type = GetPartType(it->first); - if (part_type) - it->second.second = it->second.first * - boost::get<LRStats>(part_type->Stats()).m_capacity; - } } -void Ship::AddFighters(const std::string& part_name, std::size_t n) { - const PartType* part_type = GetPartType(part_name); - if (!part_type) return; - assert(m_fighters[part_name].second + n <= - m_fighters[part_name].first * - boost::get<FighterStats>(part_type->Stats()).m_capacity); - m_fighters[part_name].second += n; -} - -void Ship::RemoveFighters(const std::string& part_name, std::size_t n) { - assert(m_fighters[part_name].second < n); - m_fighters[part_name].second -= n; -} - -void Ship::RemoveMissiles(const std::string& part_name, std::size_t n) { - assert(m_missiles[part_name].second < n); - m_missiles[part_name].second -= n; -} - void Ship::SetSpecies(const std::string& species_name) { if (!GetSpecies(species_name)) Logger().errorStream() << "Ship::SetSpecies couldn't get species with name " << species_name; Modified: branches/SDL_Migration_And_Dependencies_Updates/universe/Ship.h =================================================================== --- branches/SDL_Migration_And_Dependencies_Updates/universe/Ship.h 2014-12-19 18:29:53 UTC (rev 7790) +++ branches/SDL_Migration_And_Dependencies_Updates/universe/Ship.h 2014-12-19 18:49:55 UTC (rev 7791) @@ -12,10 +12,6 @@ /** a class representing a single FreeOrion ship */ class FO_COMMON_API Ship : public UniverseObject { public: - // map from part type name to (number of parts in the design of that type, - // number of fighters (or missiles) available of that type) pairs - typedef std::map<std::string, std::pair<std::size_t, std::size_t> > ConsumablesMap; - typedef std::map<std::pair<MeterType, std::string>, Meter> PartMeterMap; /** \name Accessors */ //@{ @@ -45,9 +41,6 @@ const std::string& SpeciesName() const { return m_species_name; } float Speed() const; - const ConsumablesMap& Fighters() const { return m_fighters; } - const ConsumablesMap& Missiles() const { return m_missiles; } - virtual TemporaryPtr<UniverseObject> Accept(const UniverseObjectVisitor& visitor) const; @@ -75,10 +68,6 @@ void Resupply(); - void AddFighters(const std::string& part_name, std::size_t n); - void RemoveFighters(const std::string& part_name, std::size_t n); - void RemoveMissiles(const std::string& part_name, std::size_t n); - void SetSpecies(const std::string& species_name); void SetOrderedScrapped(bool b = true); ///< flags ship for scrapping @@ -122,8 +111,6 @@ int m_ordered_invade_planet_id; int m_ordered_bombard_planet_id; int m_last_turn_active_in_combat; - ConsumablesMap m_fighters; - ConsumablesMap m_missiles; PartMeterMap m_part_meters; std::string m_species_name; int m_produced_by_empire_id; Modified: branches/SDL_Migration_And_Dependencies_Updates/universe/ShipDesign.cpp =================================================================== --- branches/SDL_Migration_And_Dependencies_Updates/universe/ShipDesign.cpp 2014-12-19 18:29:53 UTC (rev 7790) +++ branches/SDL_Migration_And_Dependencies_Updates/universe/ShipDesign.cpp 2014-12-19 18:49:55 UTC (rev 7791) @@ -23,29 +23,6 @@ } namespace { - struct PartTypeStringVisitor : - public boost::static_visitor<> - { - PartTypeStringVisitor(std::string& str) : - m_str(str) - {} - void operator()(const float& d) const - { m_str = "capacity stat"; } - void operator()(const DirectFireStats& stats) const - { m_str = "direct-fire weapon stats"; } - void operator()(const LRStats& stats) const - { m_str = "long-range weapon stats"; } - void operator()(const FighterStats& stats) const - { m_str = "fighter bay stats"; } - std::string& m_str; - }; - - std::string PartTypeStatsString(const PartTypeStats& stats) { - std::string retval; - boost::apply_visitor(PartTypeStringVisitor(retval), stats); - return retval; - } - boost::shared_ptr<const Effect::EffectsGroup> IncreaseMeter(MeterType meter_type, float increase) { typedef boost::shared_ptr<const Effect::EffectsGroup> EffectsGroupPtr; @@ -166,99 +143,6 @@ { return m_parts.end(); } -//////////////////////////////////////////////// -// PartType stat variant types // -//////////////////////////////////////////////// -const float DirectFireStats::PD_SELF_DEFENSE_FACTOR = 2.0f / 3.0f; - -DirectFireStats::DirectFireStats() : - m_damage(), - m_ROF(), - m_range() -{} - -DirectFireStats::DirectFireStats(float damage, - float ROF, - float range) : - m_damage(damage), - m_ROF(ROF), - m_range(range) -{} - -LRStats::LRStats() : - m_damage(), - m_ROF(), - m_range(), - m_speed(), - m_stealth(), - m_structure() -{} - -LRStats::LRStats(float damage, - float ROF, - float range, - float speed, - float stealth, - float structure, - int capacity) : - m_damage(damage), - m_ROF(ROF), - m_range(range), - m_speed(speed), - m_stealth(stealth), - m_structure(structure), - m_capacity(capacity) -{ - if (m_capacity < 0) - throw std::runtime_error("Attempted to create a LRStats with a " - "nonpositive capacity."); -} - -FighterStats::FighterStats() : - m_type(), - m_anti_ship_damage(), - m_anti_fighter_damage(), - m_launch_rate(), - m_fighter_weapon_range(), - m_speed(), - m_stealth(), - m_structure(), - m_detection(), - m_capacity() -{} - -FighterStats::FighterStats(CombatFighterType type, - float anti_ship_damage, - float anti_fighter_damage, - float launch_rate, - float fighter_weapon_range, - float speed, - float stealth, - float structure, - float detection, - int capacity) : - m_type(type), - m_anti_ship_damage(anti_ship_damage), - m_anti_fighter_damage(anti_fighter_damage), - m_launch_rate(launch_rate), - m_fighter_weapon_range(fighter_weapon_range), - m_speed(speed), - m_stealth(stealth), - m_structure(structure), - m_detection(detection), - m_capacity(capacity) -{ - if (type == INTERCEPTOR && m_anti_fighter_damage < m_anti_ship_damage) - Logger().debugStream() << "Creating an INTERCEPTOR FighterStats with weaker anti-fighter stat than anti-ship stat."; - if (type == BOMBER && m_anti_ship_damage < m_anti_fighter_damage) - Logger().debugStream() << "Creating a BOMBER FighterStats with weaker anti-ship stat than anti-fighter stat."; - if (m_capacity < 0) { - m_capacity = 0; - Logger().debugStream() << "Creating a FighterStats with a nonpositive capacity."; - } -} - - namespace { // Looks like there are at least 3 SourceForEmpire functions lying around - one in ShipDesign, one in Tech, and one in Building // TODO: Eliminate duplication @@ -290,121 +174,49 @@ // 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())); + 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_BATTLE_SPEED: + m_effects.push_back(IncreaseMeter(METER_BATTLE_SPEED, m_capacity)); + break; + case PC_STARLANE_SPEED: + m_effects.push_back(IncreaseMeter(METER_STARLANE_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; } - 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, false)); - m_effects.push_back(IncreaseMeter(METER_ROF, m_name, stats.m_ROF, false)); - m_effects.push_back(IncreaseMeter(METER_RANGE, m_name, stats.m_range, false)); - break; - } - case PC_MISSILES: { - const LRStats& stats = boost::get<LRStats>(m_stats); - m_effects.push_back(IncreaseMeter(METER_DAMAGE, m_name, stats.m_damage, false)); - m_effects.push_back(IncreaseMeter(METER_ROF, m_name, stats.m_ROF, false)); - m_effects.push_back(IncreaseMeter(METER_RANGE, m_name, stats.m_range, false)); - m_effects.push_back(IncreaseMeter(METER_SPEED, m_name, stats.m_speed, false)); - m_effects.push_back(IncreaseMeter(METER_STEALTH, m_name, stats.m_stealth, false)); - m_effects.push_back(IncreaseMeter(METER_STRUCTURE, m_name, stats.m_structure, false)); - m_effects.push_back(IncreaseMeter(METER_CAPACITY, m_name, stats.m_capacity, false)); - 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, false)); - m_effects.push_back(IncreaseMeter(METER_ANTI_FIGHTER_DAMAGE, m_name, stats.m_anti_fighter_damage, false)); - m_effects.push_back(IncreaseMeter(METER_LAUNCH_RATE, m_name, stats.m_launch_rate, false)); - m_effects.push_back(IncreaseMeter(METER_FIGHTER_WEAPON_RANGE, m_name, stats.m_fighter_weapon_range, false)); - m_effects.push_back(IncreaseMeter(METER_SPEED, m_name, stats.m_speed, false)); - m_effects.push_back(IncreaseMeter(METER_STEALTH, m_name, stats.m_stealth, false)); - m_effects.push_back(IncreaseMeter(METER_STRUCTURE, m_name, stats.m_structure, false)); // 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, false)); - m_effects.push_back(IncreaseMeter(METER_CAPACITY, m_name, stats.m_capacity, false)); - 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))); - break; - case PC_RESEARCH: - if (boost::get<float>(m_stats) != 0) - m_effects.push_back(IncreaseMeter(METER_TARGET_RESEARCH,boost::get<float>(m_stats))); - break; - case PC_INDUSTRY: - if (boost::get<float>(m_stats) != 0) - m_effects.push_back(IncreaseMeter(METER_TARGET_INDUSTRY,boost::get<float>(m_stats))); - break; - case PC_TRADE: - if (boost::get<float>(m_stats) != 0) - m_effects.push_back(IncreaseMeter(METER_TARGET_TRADE, boost::get<float>(m_stats))); - break; - 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); } @@ -640,17 +452,7 @@ m_research_generation(0.0), m_industry_generation(0.0), m_trade_generation(0.0), - m_is_production_location(false), - m_min_SR_range(FLT_MAX), - m_max_SR_range(0.0), - m_min_LR_range(FLT_MAX), - m_max_LR_range(0.0), - m_min_PD_range(FLT_MAX), - m_max_PD_range(0.0), - m_min_weapon_range(FLT_MAX), - m_max_weapon_range(0.0f), - m_min_non_PD_weapon_range(FLT_MAX), - m_max_non_PD_weapon_range(0.0f) + m_is_production_location(false) {} ShipDesign::ShipDesign(const std::string& name, const std::string& description, @@ -683,17 +485,7 @@ m_research_generation(0.0), m_industry_generation(0.0), m_trade_generation(0.0), - m_is_production_location(false), - m_min_SR_range(FLT_MAX), - m_max_SR_range(0.0), - m_min_LR_range(FLT_MAX), - m_max_LR_range(0.0), - m_min_PD_range(FLT_MAX), - m_max_PD_range(0.0), - m_min_weapon_range(FLT_MAX), - m_max_weapon_range(0.0), - m_min_non_PD_weapon_range(FLT_MAX), - m_max_non_PD_weapon_range(0.0) + m_is_production_location(false) { // expand parts list to have empty values if fewer parts are given than hull has slots if (const HullType* hull_type = GetHullType(m_hull)) { @@ -807,7 +599,7 @@ for (std::vector<std::string>::const_iterator it = all_parts.begin(); it != all_parts.end(); ++it) { const PartType* part = part_manager.GetPartType(*it); if (part && (part->Class() == PC_SHIELD || part->Class() == PC_ARMOUR)) - total_defense += boost::get<float>(part->Stats()); + total_defense += part->Capacity(); } return total_defense; } @@ -820,14 +612,9 @@ std::vector<std::string> all_parts = Parts(); for (std::vector<std::string>::const_iterator it = all_parts.begin(); it != all_parts.end(); ++it) { const PartType* part = manager.GetPartType(*it); - if (part) { - if (part->Class() == PC_SHORT_RANGE || part->Class() == PC_POINT_DEFENSE) - total_attack += boost::get<DirectFireStats>(part->Stats()).m_damage; - else if (part->Class() == PC_MISSILES) - total_attack += boost::get<LRStats>(part->Stats()).m_damage; - else if (part->Class() == PC_FIGHTERS) - total_attack += boost::get<FighterStats>(part->Stats()).m_anti_ship_damage; - } + if (part && (part->Class() == PC_SHORT_RANGE || part->Class() == PC_POINT_DEFENSE || + part->Class() == PC_MISSILES || part->Class() == PC_FIGHTERS)) + { total_attack += part->Capacity(); } } return total_attack; } @@ -851,6 +638,22 @@ return retval; } +std::vector<std::string> ShipDesign::Weapons() const { + std::vector<std::string> retval; + retval.reserve(m_parts.size()); + for (int i = 0; i < m_parts.size(); ++i) { + const std::string& part_name = m_parts[i]; + const PartType* part = GetPartType(part_name); + if (!part) + continue; + ShipPartClass part_class = part->Class(); + if (part_class == PC_SHORT_RANGE || part_class == PC_MISSILES || + part_class == PC_FIGHTERS || part_class == PC_POINT_DEFENSE) + { retval.push_back(part_name); } + } + return retval; +} + bool ShipDesign::ProductionLocation(int empire_id, int location_id) const { TemporaryPtr<const UniverseObject> location = GetUniverseObject(location_id); if (!location) @@ -990,82 +793,51 @@ m_producible = false; switch (part->Class()) { - case PC_SHORT_RANGE: { - const DirectFireStats& stats = boost::get<DirectFireStats>(part->Stats()); - m_SR_weapons.insert(std::make_pair(stats.m_range, part)); - m_is_armed = true; - m_min_SR_range = std::min(m_min_SR_range, stats.m_range); - m_max_SR_range = std::max(m_max_SR_range, stats.m_range); - m_min_weapon_range = std::min(m_min_weapon_range, stats.m_range); - m_max_weapon_range = std::max(m_max_weapon_range, stats.m_range); - m_min_non_PD_weapon_range = std::min(m_min_non_PD_weapon_range, stats.m_range); - m_max_non_PD_weapon_range = std::max(m_max_non_PD_weapon_range, stats.m_range); - break; - } - case PC_MISSILES: { - const LRStats& stats = boost::get<LRStats>(part->Stats()); - m_LR_weapons.insert(std::make_pair(stats.m_range, part)); - m_is_armed = true; - m_min_LR_range = std::min(m_min_LR_range, stats.m_range); - m_max_LR_range = std::max(m_max_LR_range, stats.m_range); - m_min_weapon_range = std::min(m_min_weapon_range, stats.m_range); - m_max_weapon_range = std::max(m_max_weapon_range, stats.m_range); - m_min_non_PD_weapon_range = std::min(m_min_non_PD_weapon_range, stats.m_range); - m_max_non_PD_weapon_range = std::max(m_max_non_PD_weapon_range, stats.m_range); - break; - } + case PC_SHORT_RANGE: + case PC_MISSILES: case PC_FIGHTERS: - m_F_weapons.push_back(part); - m_is_armed = true; - break; case PC_POINT_DEFENSE: { - const DirectFireStats& stats = boost::get<DirectFireStats>(part->Stats()); - m_PD_weapons.insert(std::make_pair(stats.m_range, part)); m_is_armed = true; - m_min_PD_range = std::min(m_min_PD_range, stats.m_range); - m_max_PD_range = std::max(m_max_PD_range, stats.m_range); - m_min_weapon_range = std::min(m_min_weapon_range, stats.m_range); - m_max_weapon_range = std::max(m_max_weapon_range, stats.m_range); break; } case PC_COLONY: - m_colony_capacity += boost::get<float>(part->Stats()); + m_colony_capacity += part->Capacity(); break; case PC_TROOPS: - m_troop_capacity += boost::get<float>(part->Stats()); + m_troop_capacity += part->Capacity(); break; case PC_STEALTH: - m_stealth += boost::get<float>(part->Stats()); + m_stealth += part->Capacity(); break; case PC_BATTLE_SPEED: - m_battle_speed += boost::get<float>(part->Stats()); + m_battle_speed += part->Capacity(); break; case PC_STARLANE_SPEED: - m_starlane_speed += boost::get<float>(part->Stats()); + m_starlane_speed += part->Capacity(); break; case PC_SHIELD: - m_shields += boost::get<float>(part->Stats()); + m_shields += part->Capacity(); break; case PC_FUEL: - m_fuel += boost::get<float>(part->Stats()); + m_fuel += part->Capacity(); break; case PC_ARMOUR: - m_structure += boost::get<float>(part->Stats()); + m_structure += part->Capacity(); break; case PC_DETECTION: - m_detection += boost::get<float>(part->Stats()); + m_detection += part->Capacity(); break; case PC_BOMBARD: m_can_bombard = true; break; case PC_RESEARCH: - m_research_generation += boost::get<float>(part->Stats()); + m_research_generation += part->Capacity(); break; case PC_INDUSTRY: - m_industry_generation += boost::get<float>(part->Stats()); + m_industry_generation += part->Capacity(); break; case PC_TRADE: - m_trade_generation += boost::get<float>(part->Stats()); + m_trade_generation += part->Capacity(); break; case PC_PRODICTION_LOCATION: m_is_production_location = true; @@ -1074,17 +846,6 @@ break; } } - - if (m_SR_weapons.empty()) - m_min_SR_range = 0.0; - if (m_LR_weapons.empty()) - m_min_LR_range = 0.0; - if (m_PD_weapons.empty()) - m_min_PD_range = 0.0; - if (!m_min_SR_range && !m_min_LR_range && !m_min_PD_range) - m_min_weapon_range = 0.0; - if (!m_min_LR_range && !m_min_PD_range) - m_min_non_PD_weapon_range = 0.0; } std::string ShipDesign::Dump() const { Modified: branches/SDL_Migration_And_Dependencies_Updates/universe/ShipDesign.h =================================================================== --- branches/SDL_Migration_And_Dependencies_Updates/universe/ShipDesign.h 2014-12-19 18:29:53 UTC (rev 7790) +++ branches/SDL_Migration_And_Dependencies_Updates/universe/ShipDesign.h 2014-12-19 18:49:55 UTC (rev 7791) @@ -26,105 +26,6 @@ } class Empire; -/** Part stats for the PC_SHORT_RANGE and PC_POINT_DEFENSE part classes. */ -struct FO_COMMON_API DirectFireStats { - DirectFireStats(); - DirectFireStats(float damage, - float ROF, - float range); - - float m_damage; - float m_ROF; - float m_range; - - /** The factor by which PD damage should be multiplied when used in - defense of the ship firing it. */ - static const float PD_SELF_DEFENSE_FACTOR; - - template <class Archive> - void serialize(Archive& ar, const unsigned int) { - ar & BOOST_SERIALIZATION_NVP(m_damage) - & BOOST_SERIALIZATION_NVP(m_ROF) - & BOOST_SERIALIZATION_NVP(m_range); - } -}; - -/** Part stats for the PC_MISSILES part class. */ -struct FO_COMMON_API LRStats { - LRStats(); - LRStats(float damage, - float ROF, - float range, - float speed, - float stealth, - float structure, - int capacity); - - float m_damage; - float m_ROF; - float m_range; - float m_speed; - float m_stealth; - float m_structure; - int m_capacity; - - template <class Archive> - void serialize(Archive& ar, const unsigned int) { - ar & BOOST_SERIALIZATION_NVP(m_damage) - & BOOST_SERIALIZATION_NVP(m_ROF) - & BOOST_SERIALIZATION_NVP(m_range) - & BOOST_SERIALIZATION_NVP(m_speed) - & BOOST_SERIALIZATION_NVP(m_stealth) - & BOOST_SERIALIZATION_NVP(m_structure) - & BOOST_SERIALIZATION_NVP(m_capacity); - } -}; - -/** Part stats for the PC_FIGHTERS part class. */ -struct FO_COMMON_API FighterStats { - FighterStats(); - FighterStats(CombatFighterType type, - float anti_ship_damage, - float anti_fighter_damage, - float launch_rate, - float fighter_weapon_range, - float speed, - float stealth, - float structure, - float detection, - int capacity); - - CombatFighterType m_type; - float m_anti_ship_damage; - float m_anti_fighter_damage; - float m_launch_rate; - float m_fighter_weapon_range; - float m_speed; - float m_stealth; - float m_structure; - float m_detection; - int m_capacity; - - template <class Archive> - void serialize(Archive& ar, const unsigned int) { - ar & BOOST_SERIALIZATION_NVP(m_type) - & BOOST_SERIALIZATION_NVP(m_anti_ship_damage) - & BOOST_SERIALIZATION_NVP(m_anti_fighter_damage) - & BOOST_SERIALIZATION_NVP(m_launch_rate) - & BOOST_SERIALIZATION_NVP(m_fighter_weapon_range) - & BOOST_SERIALIZATION_NVP(m_speed) - & BOOST_SERIALIZATION_NVP(m_stealth) - & BOOST_SERIALIZATION_NVP(m_structure) - & BOOST_SERIALIZATION_NVP(m_detection) - & BOOST_SERIALIZATION_NVP(m_capacity); - } -}; - -/** A variant type containing all ShipPartClass-specific stats for a PartType. - * Note that most parts need only a single value to represent their - * capabilities. This is represented by the float variant. */ -typedef boost::variant<float, DirectFireStats, LRStats, FighterStats> PartTypeStats; - /** Common parameters for PartType and HullType constructors. Used as temporary * storage for parsing to reduce number of sub-items parsed per item. */ struct PartHullCommonParams { @@ -170,7 +71,7 @@ m_name("invalid part type"), m_description("indescribable"), m_class(INVALID_SHIP_PART_CLASS), - m_stats(1.0), + m_capacity(0.0), m_production_cost(0), m_production_time(0), m_mountable_slot_types(), @@ -180,13 +81,13 @@ m_icon() {} PartType(const std::string& name, const std::string& description, - ShipPartClass part_class, const PartTypeStats& stats, + ShipPartClass part_class, double capacity, const PartHullCommonParams& common_params, std::vector<ShipSlotType> mountable_slot_types) : m_name(name), m_description(description), m_class(part_class), - m_stats(stats), + m_capacity(capacity), m_production_cost(common_params.production_cost), m_production_time(common_params.production_time), m_producible(common_params.producible), @@ -204,7 +105,7 @@ const std::string& Name() const { return m_name; }; ///< returns name of part const std::string& Description() const { return m_description; } ///< returns description, including a description of the stats and effects of this part ShipPartClass Class() const { return m_class; } ///< returns that class of part that this is. - const PartTypeStats& Stats() const { return m_stats; } ///< returns how good the part is at its function. might be weapon or shield strength, or cargo hold capacity + double Capacity() const { return m_capacity; } ///< returns how good the part is at its function. might be weapon or shield strength, or cargo hold capacity bool CanMountInSlotType(ShipSlotType slot_type) const; ///< returns true if this part can be placed in a slot of the indicated type const std::vector<ShipSlotType>& MountableSlotTypes() const { return m_mountable_slot_types; } @@ -227,7 +128,7 @@ std::string m_name; std::string m_description; ShipPartClass m_class; - PartTypeStats m_stats; + double m_capacity; const ValueRef::ValueRefBase<double>* m_production_cost; const ValueRef::ValueRefBase<int>* m_production_time; bool m_producible; @@ -555,24 +456,6 @@ bool IsArmed() const { return m_is_armed; } bool IsMonster() const { return m_is_monster; } - /** Return maps from ranges to stats for various types of weapons in design */ - const std::multimap<float, const PartType*>& SRWeapons() const { return m_SR_weapons; } - const std::multimap<float, const PartType*>& LRWeapons() const { return m_LR_weapons; } - const std::multimap<float, const PartType*>& PDWeapons() const { return m_PD_weapons; } - /** Returns the set of Fighter weapons in this design. */ - const std::vector<const PartType*>& FWeapons() const { return m_F_weapons; } - - float MinSRRange() const { return m_min_SR_range; } - float MaxSRRange() const { return m_max_SR_range; } - float MinLRRange() const { return m_min_LR_range; } - float MaxLRRange() const { return m_max_LR_range; } - float MinPDRange() const { return m_min_PD_range; } - float MaxPDRange() const { return m_max_PD_range; } - float MinWeaponRange() const { return m_min_weapon_range; } - float MaxWeaponRange() const { return m_max_weapon_range; } - float MinNonPDWeaponRange() const { return m_min_non_PD_weapon_range; } - float MaxNonPDWeaponRange() const { return m_max_non_PD_weapon_range; } - /////// TEMPORARY /////// float Defense() const; float Attack() const; @@ -585,6 +468,7 @@ const std::vector<std::string>& Parts() const { return m_parts; } ///< returns vector of names of all parts in design std::vector<std::string> Parts(ShipSlotType slot_type) const; ///< returns vector of names of parts in slots of indicated type + std::vector<std::string> Weapons() const; std::vector<std::string> Tags() const; @@ -654,20 +538,6 @@ bool m_is_production_location; bool m_producible; - std::multimap<float, const PartType*> m_SR_weapons; - std::multimap<float, const PartType*> m_LR_weapons; - std::multimap<float, const PartType*> m_PD_weapons; - std::vector<const PartType*> m_F_weapons; - float m_min_SR_range; - float m_max_SR_range; - float m_min_LR_range; - float m_max_LR_range; - float m_min_PD_range; - float m_max_PD_range; - float m_min_weapon_range; - float m_max_weapon_range; - float m_min_non_PD_weapon_range; - float m_max_non_PD_weapon_range; friend class boost::serialization::access; template <class Archive> @@ -753,7 +623,7 @@ ar & BOOST_SERIALIZATION_NVP(m_name) & BOOST_SERIALIZATION_NVP(m_description) & BOOST_SERIALIZATION_NVP(m_class) - & BOOST_SERIALIZATION_NVP(m_stats) + & BOOST_SERIALIZATION_NVP(m_capacity) & BOOST_SERIALIZATION_NVP(m_production_cost) & BOOST_SERIALIZATION_NVP(m_production_time) & BOOST_SERIALIZATION_NVP(m_mountable_slot_types) Modified: branches/SDL_Migration_And_Dependencies_Updates/util/SerializeUniverse.cpp =================================================================== --- branches/SDL_Migration_And_Dependencies_Updates/util/SerializeUniverse.cpp 2014-12-19 18:29:53 UTC (rev 7790) +++ branches/SDL_Migration_And_Dependencies_Updates/util/SerializeUniverse.cpp 2014-12-19 18:49:55 UTC (rev 7791) @@ -213,8 +213,6 @@ & BOOST_SERIALIZATION_NVP(m_ordered_colonize_planet_id) & BOOST_SERIALIZATION_NVP(m_ordered_invade_planet_id) & BOOST_SERIALIZATION_NVP(m_ordered_bombard_planet_id) - & BOOST_SERIALIZATION_NVP(m_fighters) - & BOOST_SERIALIZATION_NVP(m_missiles) & BOOST_SERIALIZATION_NVP(m_part_meters) & BOOST_SERIALIZATION_NVP(m_species_name) & BOOST_SERIALIZATION_NVP(m_produced_by_empire_id); |