From: <geo...@us...> - 2011-09-25 12:25:44
|
Revision: 4289 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=4289&view=rev Author: geoffthemedio Date: 2011-09-25 12:25:38 +0000 (Sun, 25 Sep 2011) Log Message: ----------- -Added ShipDesign unlockable item type, to allow effect-based granting of access to generic predefined ship designs to empires. This mechanism is separate from predefined ship designs that empires get at the start of the game, which are considered to be designed by that empire, unlike the generic designs used for monsters or effects that create ships by design name. -Modified Empire::AddShipDesign to only emit a state change signal if the added design wasn't already present (ie. when something actually changed). Modified Paths: -------------- trunk/FreeOrion/Empire/Empire.cpp trunk/FreeOrion/UI/EncyclopediaDetailPanel.cpp trunk/FreeOrion/universe/Enums.h trunk/FreeOrion/universe/ParserUtil.cpp Modified: trunk/FreeOrion/Empire/Empire.cpp =================================================================== --- trunk/FreeOrion/Empire/Empire.cpp 2011-09-25 05:25:26 UTC (rev 4288) +++ trunk/FreeOrion/Empire/Empire.cpp 2011-09-25 12:25:38 UTC (rev 4289) @@ -2299,6 +2299,9 @@ case UIT_SHIP_HULL: AddHullType(item.name); break; + case UIT_SHIP_DESIGN: + AddShipDesign(GetPredefinedShipDesignManager().GenericDesignID(item.name)); // this adds the generic version of the design, not created by any empire, to this empire's remembered designs. + break; case UIT_TECH: AddTech(item.name); break; @@ -2365,12 +2368,14 @@ const ShipDesign* ship_design = GetUniverse().GetShipDesign(ship_design_id); if (ship_design) { // design is valid, so just add the id to empire's set of ids that it knows about - m_ship_designs.insert(ship_design_id); + if (m_ship_designs.find(ship_design_id) != m_ship_designs.end()) { + m_ship_designs.insert(ship_design_id); + ShipDesignsChangedSignal(); + } } else { // design in not valid Logger().errorStream() << "Empire::AddShipDesign(int ship_design_id) was passed a design id that this empire doesn't know about, or that doesn't exist"; } - ShipDesignsChangedSignal(); } int Empire::AddShipDesign(ShipDesign* ship_design) @@ -2442,6 +2447,9 @@ case UIT_SHIP_HULL: RemoveHullType(item.name); break; + case UIT_SHIP_DESIGN: + RemoveShipDesign(GetPredefinedShipDesignManager().GenericDesignID(item.name)); + break; case UIT_TECH: RemoveTech(item.name); break; Modified: trunk/FreeOrion/UI/EncyclopediaDetailPanel.cpp =================================================================== --- trunk/FreeOrion/UI/EncyclopediaDetailPanel.cpp 2011-09-25 05:25:26 UTC (rev 4288) +++ trunk/FreeOrion/UI/EncyclopediaDetailPanel.cpp 2011-09-25 12:25:38 UTC (rev 4289) @@ -584,10 +584,11 @@ std::string TAG; switch (item.type) { - case UIT_BUILDING: TAG = VarText::BUILDING_TYPE_TAG; break; - case UIT_SHIP_PART: TAG = VarText::SHIP_PART_TAG; break; - case UIT_SHIP_HULL: TAG = VarText::SHIP_HULL_TAG; break; - case UIT_TECH: TAG = VarText::TECH_TAG; break; + case UIT_BUILDING: TAG = VarText::BUILDING_TYPE_TAG; break; + case UIT_SHIP_PART: TAG = VarText::SHIP_PART_TAG; break; + case UIT_SHIP_HULL: TAG = VarText::SHIP_HULL_TAG; break; + case UIT_SHIP_DESIGN: TAG = VarText::PREDEFINED_DESIGN_TAG; break; + case UIT_TECH: TAG = VarText::TECH_TAG; break; } std::string link_text; Modified: trunk/FreeOrion/universe/Enums.h =================================================================== --- trunk/FreeOrion/universe/Enums.h 2011-09-25 05:25:26 UTC (rev 4288) +++ trunk/FreeOrion/universe/Enums.h 2011-09-25 12:25:38 UTC (rev 4289) @@ -343,6 +343,7 @@ UIT_BUILDING, ///< a kind of Building UIT_SHIP_PART, ///< a kind of ship part (which are placed into hulls to make designs) UIT_SHIP_HULL, ///< a ship hull (into which parts are placed) + UIT_SHIP_DESIGN, ///< a complete ship design UIT_TECH, ///< a technology NUM_UNLOCKABLE_ITEM_TYPES ///< keep last, the number of types of unlockable item }; @@ -353,6 +354,7 @@ GG_ENUM_MAP_INSERT(UIT_BUILDING) GG_ENUM_MAP_INSERT(UIT_SHIP_PART) GG_ENUM_MAP_INSERT(UIT_SHIP_HULL) + GG_ENUM_MAP_INSERT(UIT_SHIP_DESIGN) GG_ENUM_MAP_INSERT(UIT_TECH) GG_ENUM_MAP_END } Modified: trunk/FreeOrion/universe/ParserUtil.cpp =================================================================== --- trunk/FreeOrion/universe/ParserUtil.cpp 2011-09-25 05:25:26 UTC (rev 4288) +++ trunk/FreeOrion/universe/ParserUtil.cpp 2011-09-25 12:25:38 UTC (rev 4289) @@ -115,6 +115,7 @@ ("building", UIT_BUILDING) ("shippart", UIT_SHIP_PART) ("shiphull", UIT_SHIP_HULL) + ("shipdesign", UIT_SHIP_DESIGN) ("tech", UIT_TECH); tech_type_p.add |