From: <geo...@us...> - 2014-02-09 07:25:07
|
Revision: 6868 http://sourceforge.net/p/freeorion/code/6868 Author: geoffthemedio Date: 2014-02-09 07:25:02 +0000 (Sun, 09 Feb 2014) Log Message: ----------- -Added bombard ship part class, with parsing and converted spores and terminators to it. -Adjusted bombardment UI and Order code accordingly. -Added CanBombard functions to Ship and ShipDesign. Modified Paths: -------------- trunk/FreeOrion/UI/SidePanel.cpp trunk/FreeOrion/default/ship_parts.txt trunk/FreeOrion/default/stringtables/en.txt trunk/FreeOrion/parse/EnumParser.cpp trunk/FreeOrion/parse/Tokens.h trunk/FreeOrion/python/PythonEnumWrapper.cpp trunk/FreeOrion/universe/Enums.h trunk/FreeOrion/universe/Ship.cpp trunk/FreeOrion/universe/ShipDesign.cpp trunk/FreeOrion/universe/ShipDesign.h trunk/FreeOrion/util/Order.cpp Modified: trunk/FreeOrion/UI/SidePanel.cpp =================================================================== --- trunk/FreeOrion/UI/SidePanel.cpp 2014-02-09 05:35:01 UTC (rev 6867) +++ trunk/FreeOrion/UI/SidePanel.cpp 2014-02-09 07:25:02 UTC (rev 6868) @@ -1192,10 +1192,16 @@ // is there a valid single selected ship in the active FleetWnd? std::set<int> selected_ship_ids = FleetUIManager::GetFleetUIManager().SelectedShipIDs(); - for (std::set<int>::const_iterator ss_it = selected_ship_ids.begin(); ss_it != selected_ship_ids.end(); ++ss_it) - if (TemporaryPtr<Ship> ship = GetUniverse().Objects().Object<Ship>(*ss_it)) - if (ship->SystemID() == system_id && (ship->TotalWeaponsDamage() > 0.0f) && ship->OwnedBy(HumanClientApp::GetApp()->EmpireID())) - retval.insert(ship); + for (std::set<int>::const_iterator ss_it = selected_ship_ids.begin(); + ss_it != selected_ship_ids.end(); ++ss_it) + { + TemporaryPtr<Ship> ship = GetShip(*ss_it); + if (!ship || ship->SystemID() != system_id) + continue; + if (!ship->CanBombard() || !ship->OwnedBy(HumanClientApp::GetApp()->EmpireID())) + continue; + retval.insert(ship); + } return retval; } Modified: trunk/FreeOrion/default/ship_parts.txt =================================================================== --- trunk/FreeOrion/default/ship_parts.txt 2014-02-09 05:35:01 UTC (rev 6867) +++ trunk/FreeOrion/default/ship_parts.txt 2014-02-09 07:25:02 UTC (rev 6868) @@ -27,11 +27,6 @@ buildcost = 20 * [[FLEET_UPKEEP_MULTIPLICATOR]] buildtime = 1 location = OwnedBy TheEmpire Source.Owner - effectsgroups = - EffectsGroup - scope = OrderedBombardedBy condition = Source - stackinggroup = "TEST_DEPOPULATION_STACK" - effects = SetPopulation Value / 2 icon = "icons/ship_parts/mass-driver-1.png" Part @@ -910,16 +905,17 @@ Part name = "SP_DEATH_SPORE" description = "SP_DEATH_SPORE_DESC" - class = General + class = Bombard mountableSlotTypes = External buildcost = 5 * [[FLEET_UPKEEP_MULTIPLICATOR]] buildtime = 3 location = All effectsgroups = [ - EffectsGroup + EffectsGroup // players can order death spores used on enemies scope = And [ Planet InSystem Source.SystemID + OrderedBombardedBy condition = Source Or [ OwnedBy EnemyOf Source.Owner Not OwnedBy AnyEmpire @@ -927,10 +923,6 @@ VisibleToEmpire Source.Owner HasTag "ORGANIC" ] - activation = And [ - OwnedBy AnyEmpire - InSystem - ] effects = [ SetPopulation Value - 0.5 GenerateSitRepMessage @@ -941,7 +933,7 @@ empire = Target.Owner ] - EffectsGroup + EffectsGroup // monsters use death spores on player planets scope = And [ Planet InSystem Source.SystemID @@ -952,7 +944,7 @@ activation = And [ Not OwnedBy AnyEmpire InSystem - ] + ] effects = [ SetPopulation Value - 0.5 GenerateSitRepMessage @@ -968,16 +960,17 @@ Part name = "SP_BIOTERM" description = "SP_BIOTERM_DESC" - class = General + class = Bombard mountableSlotTypes = External buildcost = 5 * [[FLEET_UPKEEP_MULTIPLICATOR]] buildtime = 3 location = All effectsgroups = [ - EffectsGroup + EffectsGroup // players can order terminators used on enemies scope = And [ Planet InSystem Source.SystemID + OrderedBombardedBy condition = Source Or [ OwnedBy EnemyOf Source.Owner Not OwnedBy AnyEmpire @@ -985,10 +978,6 @@ VisibleToEmpire Source.Owner HasTag "ORGANIC" ] - activation = And [ - OwnedBy AnyEmpire - InSystem - ] effects = [ SetPopulation Value - 1 GenerateSitRepMessage @@ -999,7 +988,7 @@ empire = Target.Owner ] - EffectsGroup + EffectsGroup // monsters use terminators on player planets scope = And [ Planet InSystem Source.SystemID @@ -1010,7 +999,7 @@ activation = And [ Not OwnedBy AnyEmpire InSystem - ] + ] effects = [ SetPopulation Value - 1 GenerateSitRepMessage Modified: trunk/FreeOrion/default/stringtables/en.txt =================================================================== --- trunk/FreeOrion/default/stringtables/en.txt 2014-02-09 05:35:01 UTC (rev 6867) +++ trunk/FreeOrion/default/stringtables/en.txt 2014-02-09 07:25:02 UTC (rev 6868) @@ -5526,6 +5526,8 @@ Starlane Speed PC_GENERAL General +PC_BOMBARD +Bombardment ############################################################# Modified: trunk/FreeOrion/parse/EnumParser.cpp =================================================================== --- trunk/FreeOrion/parse/EnumParser.cpp 2014-02-09 05:35:01 UTC (rev 6867) +++ trunk/FreeOrion/parse/EnumParser.cpp 2014-02-09 07:25:02 UTC (rev 6868) @@ -237,6 +237,7 @@ | tok.BattleSpeed_ [ _val = PC_BATTLE_SPEED ] | tok.StarlaneSpeed_ [ _val = PC_STARLANE_SPEED ] | tok.General_ [ _val = PC_GENERAL ] + | tok.Bombard_ [ _val = PC_BOMBARD ] ; static bool once = true; if (once) { Modified: trunk/FreeOrion/parse/Tokens.h =================================================================== --- trunk/FreeOrion/parse/Tokens.h 2014-02-09 05:35:01 UTC (rev 6867) +++ trunk/FreeOrion/parse/Tokens.h 2014-02-09 07:25:02 UTC (rev 6868) @@ -38,6 +38,7 @@ (BattleSpeed) \ (BlackHole) \ (Blue) \ + (Bombard) \ (Bomber) \ (BuildCost) \ (Building) \ Modified: trunk/FreeOrion/python/PythonEnumWrapper.cpp =================================================================== --- trunk/FreeOrion/python/PythonEnumWrapper.cpp 2014-02-09 05:35:01 UTC (rev 6867) +++ trunk/FreeOrion/python/PythonEnumWrapper.cpp 2014-02-09 07:25:02 UTC (rev 6868) @@ -152,6 +152,7 @@ .value("battleSpeed", PC_BATTLE_SPEED) .value("starlaneSpeed", PC_STARLANE_SPEED) .value("general", PC_GENERAL) + .value("bombard", PC_BOMBARD) ; enum_<UnlockableItemType>("unlockableItemType") .value("invalid", INVALID_UNLOCKABLE_ITEM_TYPE) Modified: trunk/FreeOrion/universe/Enums.h =================================================================== --- trunk/FreeOrion/universe/Enums.h 2014-02-09 05:35:01 UTC (rev 6867) +++ trunk/FreeOrion/universe/Enums.h 2014-02-09 07:25:02 UTC (rev 6868) @@ -533,6 +533,7 @@ PC_BATTLE_SPEED, ///< affects ship speed in battle PC_STARLANE_SPEED, ///< affects ship speed on starlanes PC_GENERAL, ///< special purpose parts that don't fall into another class + PC_BOMBARD, ///< permit orbital bombardment by ships against planets NUM_SHIP_PART_CLASSES }; @@ -553,6 +554,7 @@ GG_ENUM_MAP_INSERT(PC_BATTLE_SPEED) GG_ENUM_MAP_INSERT(PC_STARLANE_SPEED) GG_ENUM_MAP_INSERT(PC_GENERAL) + GG_ENUM_MAP_INSERT(PC_BOMBARD) GG_ENUM_MAP_END } GG_ENUM_STREAM_IN(ShipPartClass) Modified: trunk/FreeOrion/universe/Ship.cpp =================================================================== --- trunk/FreeOrion/universe/Ship.cpp 2014-02-09 05:35:01 UTC (rev 6867) +++ trunk/FreeOrion/universe/Ship.cpp 2014-02-09 07:25:02 UTC (rev 6868) @@ -309,8 +309,10 @@ return design && design->HasTroops(); } -bool Ship::CanBombard() const -{ return true; } // TODO: this +bool Ship::CanBombard() const { + const ShipDesign* design = Design(); + return design && design->CanBombard(); +} float Ship::Speed() const { return CurrentMeterValue(METER_STARLANE_SPEED); } Modified: trunk/FreeOrion/universe/ShipDesign.cpp =================================================================== --- trunk/FreeOrion/universe/ShipDesign.cpp 2014-02-09 05:35:01 UTC (rev 6867) +++ trunk/FreeOrion/universe/ShipDesign.cpp 2014-02-09 07:25:02 UTC (rev 6868) @@ -691,6 +691,7 @@ m_3D_model(), m_name_desc_in_stringtable(false), m_is_armed(false), + m_can_bombard(false), m_detection(0.0), m_colony_capacity(0.0), m_troop_capacity(0.0), @@ -729,6 +730,7 @@ m_3D_model(model), m_name_desc_in_stringtable(name_desc_in_stringtable), m_is_armed(false), + m_can_bombard(false), m_detection(0.0), m_colony_capacity(0.0), m_troop_capacity(0.0), @@ -1110,6 +1112,8 @@ case PC_DETECTION: m_detection += boost::get<float>(part->Stats()); break; + case PC_BOMBARD: + m_can_bombard = true; default: break; } Modified: trunk/FreeOrion/universe/ShipDesign.h =================================================================== --- trunk/FreeOrion/universe/ShipDesign.h 2014-02-09 05:35:01 UTC (rev 6867) +++ trunk/FreeOrion/universe/ShipDesign.h 2014-02-09 07:25:02 UTC (rev 6868) @@ -546,6 +546,7 @@ bool CanColonize() const; bool HasTroops() const { return (m_troop_capacity > 0.0f); } + bool CanBombard() const { return m_can_bombard; } bool IsArmed() const { return m_is_armed; } bool IsMonster() const { return m_is_monster; } @@ -632,6 +633,7 @@ // Note that these are fine to compute on demand and cache here -- it is // not necessary to serialize them. bool m_is_armed; + bool m_can_bombard; float m_detection; float m_colony_capacity; float m_troop_capacity; Modified: trunk/FreeOrion/util/Order.cpp =================================================================== --- trunk/FreeOrion/util/Order.cpp 2014-02-09 05:35:01 UTC (rev 6867) +++ trunk/FreeOrion/util/Order.cpp 2014-02-09 07:25:02 UTC (rev 6868) @@ -683,8 +683,8 @@ Logger().errorStream() << "BombardOrder::ExecuteImpl couldn't get ship with id " << m_ship; return; } - if (ship->TotalWeaponsDamage() <= 0) { - Logger().errorStream() << "BombardOrder::ExecuteImpl got ship that can't attack / bombard"; + if (!ship->CanBombard()) { + Logger().errorStream() << "BombardOrder::ExecuteImpl got ship that can't bombard"; return; } if (!ship->OwnedBy(empire_id)) { |