Intro::Intro(Graphics::Renderer *r, int width, int height) : Cutscene(r, width, height) { using Graphics::Light; m_background.reset(new Background::Container(r, UNIVERSE_SEED)); m_ambientColor = Color(0); const Color one = Color::WHITE; const Color two = Color(77, 77, 204, 0); m_lights.push_back(Light(Graphics::Light::LIGHT_DIRECTIONAL, vector3f(0.f, 0.3f, 1.f), one, one)); m_lights.push_back(Light(Graphics::Light::LIGHT_DIRECTIONAL, vector3f(0.f, -1.f, 0.f), two, Color::BLACK)); SceneGraph::ModelSkin skin; skin.SetDecal("pioneer"); skin.SetLabel(Lang::PIONEER); for (std::vector<ShipType::Id>::const_iterator i = ShipType::player_ships.begin(); i != ShipType::player_ships.end(); ++i) { SceneGraph::Model *model = Pi::FindModel(ShipType::types[*i].modelName)->MakeInstance(); skin.SetRandomColors(Pi::rng); skin.Apply(model); model->SetThrust(vector3f(0.f, 0.f, -0.6f), vector3f(0.f)); m_models.push_back(model); } PiRngWrapper rng; std::random_shuffle(m_models.begin(), m_models.end(), rng); m_state = STATE_SELECT; m_modelIndex = 0; }
// Fill the list of starships on sale. Ships that // can't fit atmo shields are only available in // atmosphereless environments void SpaceStation::UpdateShipyard() { bool atmospheric = false; if (IsGroundStation()) { Body *planet = GetFrame()->GetBody(); atmospheric = planet->GetSystemBody()->HasAtmosphere(); } const std::vector<ShipType::Id> &ships = atmospheric ? ShipType::playable_atmospheric_ships : ShipType::player_ships; unsigned int toAdd = 0, toRemove = 0; if (m_shipsOnSale.size() == 0) // fill shipyard toAdd = Pi::rng.Int32(20); else if (Pi::rng.Int32(2)) // add one toAdd = 1; else if(m_shipsOnSale.size() > 0) // remove one toRemove = 1; else // nothing happens return; for (; toAdd > 0; toAdd--) { ShipType::Id id = ships[Pi::rng.Int32(ships.size())]; std::string regId = Ship::MakeRandomLabel(); SceneGraph::ModelSkin skin; skin.SetRandomColors(Pi::rng); skin.SetPattern(Pi::rng.Int32(0, Pi::FindModel(id)->GetNumPatterns())); skin.SetLabel(regId); ShipOnSale sos(id, regId, skin); m_shipsOnSale.push_back(sos); } for (; toRemove > 0; toRemove--) { int pos = Pi::rng.Int32(m_shipsOnSale.size()); m_shipsOnSale.erase(m_shipsOnSale.begin() + pos); } onShipsForSaleChanged.emit(); }