Planet::Planet(PlanetType type, PlanetSize size) : UniverseObject(), PopCenter(), ResourceCenter(), m_type(type), m_original_type(type), m_size(size), m_orbital_period(1.0f), m_initial_orbital_position(RandZeroToOne() * 2 * 3.14159f), m_rotational_period(1.0f), m_axial_tilt(RandZeroToOne() * HIGH_TILT_THERESHOLD), m_just_conquered(false), m_is_about_to_be_colonized(false), m_is_about_to_be_invaded(false), m_is_about_to_be_bombarded(false), m_ordered_given_to_empire_id(ALL_EMPIRES), m_last_turn_attacked_by_ship(-1), m_surface_texture() { //DebugLogger() << "Planet::Planet(" << type << ", " << size <<")"; UniverseObject::Init(); PopCenter::Init(); ResourceCenter::Init(); Planet::Init(); const double SPIN_STD_DEV = 0.1; const double REVERSE_SPIN_CHANCE = 0.06; m_rotational_period = RandGaussian(1.0, SPIN_STD_DEV) / SizeRotationFactor(m_size); if (RandZeroToOne() < REVERSE_SPIN_CHANCE) m_rotational_period = -m_rotational_period; }
Planet::Planet(PlanetType type, PlanetSize size) : UniverseObject(), PopCenter(), ResourceCenter(), m_type(type), m_size(size), m_orbital_period(1.0), m_initial_orbital_position(RandZeroToOne() * 2 * 3.14159), m_rotational_period(1.0), 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_invaded(false), m_last_turn_attacked_by_ship(-1) { //Logger().debugStream() << "Planet::Planet(" << type << ", " << size <<")"; UniverseObject::Init(); PopCenter::Init(); ResourceCenter::Init(); Planet::Init(); SetType(type); SetSize(size); const double SPIN_STD_DEV = 0.1; const double REVERSE_SPIN_CHANCE = 0.01; m_rotational_period = RandGaussian(1.0, SPIN_STD_DEV) / SizeRotationFactor(m_size); if (RandZeroToOne() < REVERSE_SPIN_CHANCE) m_rotational_period = -m_rotational_period; }
void InitEmpires(const std::map<int, PlayerSetupData>& player_setup_data) { DebugLogger() << "Initializing " << player_setup_data.size() << " empires"; // copy empire colour table, so that individual colours can be removed after they're used std::vector<GG::Clr> colors = EmpireColors(); // create empire objects and do some basic initilization for each player int player_i = 0; for (std::map<int, PlayerSetupData>::const_iterator setup_data_it = player_setup_data.begin(); setup_data_it != player_setup_data.end(); ++setup_data_it, ++player_i) { int player_id = setup_data_it->first; if (player_id == Networking::INVALID_PLAYER_ID) ErrorLogger() << "InitEmpires player id (" << player_id << ") is invalid"; // use player ID for empire ID so that the calling code can get the // correct empire for each player ID in player_setup_data int empire_id = player_id; std::string player_name = setup_data_it->second.m_player_name; GG::Clr empire_colour = setup_data_it->second.m_empire_color; // validate or generate empire colour // ensure no other empire gets auto-assigned this colour automatically std::vector<GG::Clr>::iterator color_it = std::find(colors.begin(), colors.end(), empire_colour); if (color_it != colors.end()) colors.erase(color_it); // if no colour already set, do so automatically if (empire_colour == GG::Clr(0, 0, 0, 0)) { if (!colors.empty()) { // take next colour from list empire_colour = colors[0]; colors.erase(colors.begin()); } else { // as a last resort, make up a colour empire_colour = GG::FloatClr(static_cast<float>(RandZeroToOne()), static_cast<float>(RandZeroToOne()), static_cast<float>(RandZeroToOne()), 1.0f); } } // set generic default empire name std::string empire_name = UserString("EMPIRE") + boost::lexical_cast<std::string>(empire_id); DebugLogger() << "Universe::InitEmpires creating new empire" << " with ID: " << empire_id << " for player: " << player_name << " (with player id: " << player_id << ")"; // create new Empire object through empire manager Empires().CreateEmpire(empire_id, empire_name, player_name, empire_colour); } Empires().ResetDiplomacy(); }
Planet::Planet(PlanetType type, PlanetSize size) : m_type(type), m_original_type(type), m_size(size), m_initial_orbital_position(RandZeroToOne() * 2 * 3.14159f), m_axial_tilt(RandZeroToOne() * HIGH_TILT_THERESHOLD) { //DebugLogger() << "Planet::Planet(" << type << ", " << size <<")"; UniverseObject::Init(); PopCenter::Init(); ResourceCenter::Init(); Planet::Init(); const double SPIN_STD_DEV = 0.1; const double REVERSE_SPIN_CHANCE = 0.06; m_rotational_period = RandGaussian(1.0, SPIN_STD_DEV) / SizeRotationFactor(m_size); if (RandZeroToOne() < REVERSE_SPIN_CHANCE) m_rotational_period = -m_rotational_period; }
void SetNativePopulationValues(ObjectMap& object_map) { for (ObjectMap::iterator<> it = object_map.begin(); it != object_map.end(); ++it) { Meter* meter = it->GetMeter(METER_POPULATION); Meter* targetmax_meter = it->GetMeter(METER_TARGET_POPULATION); // only applies to unowned planets if (meter && targetmax_meter && it->Unowned()) { double r = RandZeroToOne(); double factor = (0.1 < r) ? r : 0.1; meter->SetCurrent(targetmax_meter->Current() * factor); } } }
void Planet::SetHighAxialTilt() { const double MAX_TILT = 90.0; m_axial_tilt = HIGH_TILT_THERESHOLD + RandZeroToOne() * (MAX_TILT - HIGH_TILT_THERESHOLD); }