From: <geo...@us...> - 2011-08-24 22:25:55
|
Revision: 4183 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=4183&view=rev Author: geoffthemedio Date: 2011-08-24 22:25:49 +0000 (Wed, 24 Aug 2011) Log Message: ----------- -Added field to planets to track the last turn they were attacked, and set this field during combat when planets are attacked. -Made planet shield, defense, and troop meters not grow on turns they are attacked. Modified Paths: -------------- trunk/FreeOrion/combat/CombatSystem.cpp trunk/FreeOrion/universe/Planet.cpp trunk/FreeOrion/universe/Planet.h trunk/FreeOrion/util/SerializeUniverse.cpp Modified: trunk/FreeOrion/combat/CombatSystem.cpp =================================================================== --- trunk/FreeOrion/combat/CombatSystem.cpp 2011-08-24 22:21:57 UTC (rev 4182) +++ trunk/FreeOrion/combat/CombatSystem.cpp 2011-08-24 22:25:49 UTC (rev 4183) @@ -301,7 +301,9 @@ target_construction->AddToCurrent(-construction_damage); Logger().debugStream() << "COMBAT: Ship " << attacker->Name() << " (" << attacker->ID() << ") does " << construction_damage << " construction damage to Planet " << target->Name() << " (" << target->ID() << ")"; } - + + target->SetLastTurnAttackedByShip(CurrentTurn()); + Logger().debugStream() << "after AttackShipPlanet: ship: " << attacker->Dump() << "\nplanet: " << target->Dump(); } Modified: trunk/FreeOrion/universe/Planet.cpp =================================================================== --- trunk/FreeOrion/universe/Planet.cpp 2011-08-24 22:21:57 UTC (rev 4182) +++ trunk/FreeOrion/universe/Planet.cpp 2011-08-24 22:25:49 UTC (rev 4183) @@ -64,7 +64,8 @@ m_available_trade(0.0), m_just_conquered(false), m_is_about_to_be_colonized(false), - m_is_about_to_be_invaded(false) + m_is_about_to_be_invaded(false), + m_last_turn_attacked_by_ship(-1) { //Logger().debugStream() << "Planet::Planet()"; // assumes PopCenter and ResourceCenter don't need to be initialized, due to having been re-created @@ -83,7 +84,8 @@ m_axial_tilt(RandZeroToOne() * HIGH_TILT_THERSHOLD), m_available_trade(0.0), m_just_conquered(false), - m_is_about_to_be_colonized(false) + m_is_about_to_be_colonized(false), + m_last_turn_attacked_by_ship(-1) { //Logger().debugStream() << "Planet::Planet(" << type << ", " << size <<")"; UniverseObject::Init(); @@ -131,7 +133,6 @@ if (vis >= VIS_BASIC_VISIBILITY) { this->m_buildings = copied_planet->VisibleContainedObjects(empire_id); - this->m_type = copied_planet->m_type; this->m_size = copied_planet->m_size; this->m_orbital_period = copied_planet->m_orbital_period; @@ -145,6 +146,7 @@ this->m_available_trade = copied_planet->m_available_trade; this->m_is_about_to_be_colonized = copied_planet->m_is_about_to_be_colonized; this->m_is_about_to_be_invaded = copied_planet->m_is_about_to_be_invaded; + this->m_last_turn_attacked_by_ship= copied_planet->m_last_turn_attacked_by_ship; } else { // copy system name if at partial visibility, as it won't be copied // by UniverseObject::Copy unless at full visibility, but players @@ -342,6 +344,11 @@ } double max_meter_value = max_meter->Current(); + // being attacked prevents meter growth + if (LastTurnAttackedByShip() >= CurrentTurn()) { + return std::min(current_meter_value, max_meter_value); + } + // currently meter growth is one per turn. return std::min(current_meter_value + 1.0, max_meter_value); } @@ -566,6 +573,9 @@ SetIsAboutToBeInvaded(false); } +void Planet::SetLastTurnAttackedByShip(int turn) +{m_last_turn_attacked_by_ship = turn;} + void Planet::SetSystem(int sys) { //Logger().debugStream() << "Planet::MoveTo(UniverseObject* object)"; @@ -613,7 +623,7 @@ // check for planets with zero population. If they have any owners // then the planet has likely just starved. Regardless, resetting the // planet keeps things consistent. - if (GetMeter(METER_POPULATION)->Current() == 0.0) { + if (GetMeter(METER_POPULATION)->Current() == 0.0 && !Unowned()) { // generate starvation sitrep for empire that owns this depopulated planet if (Empire* empire = Empires().Lookup(this->Owner())) empire->AddSitRepEntry(CreatePlanetStarvedToDeathSitRep(this->ID())); @@ -621,8 +631,7 @@ // reset planet to empty and unowned Reset(); - } else { - // not starving. grow meters + } else if (LastTurnAttackedByShip() < CurrentTurn()) { GetMeter(METER_SHIELD)->AddToCurrent(1.0); GetMeter(METER_DEFENSE)->AddToCurrent(1.0); GetMeter(METER_TROOPS)->AddToCurrent(1.0); Modified: trunk/FreeOrion/universe/Planet.h =================================================================== --- trunk/FreeOrion/universe/Planet.h 2011-08-24 22:21:57 UTC (rev 4182) +++ trunk/FreeOrion/universe/Planet.h 2011-08-24 22:25:49 UTC (rev 4183) @@ -122,6 +122,7 @@ bool IsAboutToBeColonized() const {return m_is_about_to_be_colonized;} bool IsAboutToBeInvaded() const {return m_is_about_to_be_invaded;} + int LastTurnAttackedByShip() const {return m_last_turn_attacked_by_ship;} virtual UniverseObject* Accept(const UniverseObjectVisitor& visitor) const; @@ -159,6 +160,7 @@ void ResetIsAboutToBeColonized(); ///< Called after colonization, to reset the number of prospective colonizers to 0 void SetIsAboutToBeInvaded(bool b); ///< Marks planet as being invaded or not, depending on whether \a b is true or false void ResetIsAboutToBeInvaded(); ///< Marks planet as not being invaded + void SetLastTurnAttackedByShip(int turn);///< Sets the last turn this planet was attacked by a ship //@} private: @@ -189,6 +191,7 @@ bool m_is_about_to_be_colonized; bool m_is_about_to_be_invaded; + int m_last_turn_attacked_by_ship; friend class boost::serialization::access; template <class Archive> Modified: trunk/FreeOrion/util/SerializeUniverse.cpp =================================================================== --- trunk/FreeOrion/util/SerializeUniverse.cpp 2011-08-24 22:21:57 UTC (rev 4182) +++ trunk/FreeOrion/util/SerializeUniverse.cpp 2011-08-24 22:25:49 UTC (rev 4183) @@ -119,7 +119,8 @@ & BOOST_SERIALIZATION_NVP(m_available_trade) & BOOST_SERIALIZATION_NVP(m_just_conquered) & BOOST_SERIALIZATION_NVP(m_is_about_to_be_colonized) - & BOOST_SERIALIZATION_NVP(m_is_about_to_be_invaded); + & BOOST_SERIALIZATION_NVP(m_is_about_to_be_invaded) + & BOOST_SERIALIZATION_NVP(m_last_turn_attacked_by_ship); } template <class Archive> |