void Ship::InitMaterials() { SceneGraph::Model *pModel = GetModel(); assert(pModel); const Uint32 numMats = pModel->GetNumMaterials(); for( Uint32 m=0; m<numMats; m++ ) { RefCountedPtr<Graphics::Material> mat = pModel->GetMaterialByIndex(m); mat->heatGradient = Graphics::TextureBuilder::Decal("textures/heat_gradient.dds").GetOrCreateTexture(Pi::renderer, "model"); mat->specialParameter0 = &s_heatGradientParams; } s_heatGradientParams.heatingAmount = 0.0f; s_heatGradientParams.heatingNormal = vector3f(0.0f, -1.0f, 0.0f); }
Intro::Intro(Graphics::Renderer *r, int width, int height) : Cutscene(r, width, height) { using Graphics::Light; m_background.reset(new Background::Container(r, Pi::rng)); m_ambientColor = Color::BLANK; 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)); m_skin.SetDecal("pioneer"); m_skin.SetLabel(Lang::PIONEER); for (auto i : ShipType::player_ships) { SceneGraph::Model *model = Pi::FindModel(ShipType::types[i].modelName)->MakeInstance(); model->SetThrust(vector3f(0.f, 0.f, -0.6f), vector3f(0.f)); const Uint32 numMats = model->GetNumMaterials(); for( Uint32 m=0; m<numMats; m++ ) { RefCountedPtr<Graphics::Material> mat = model->GetMaterialByIndex(m); mat->specialParameter0 = nullptr; } m_models.push_back(model); } PiRngWrapper rng; std::random_shuffle(m_models.begin(), m_models.end(), rng); m_modelIndex = 0; const int w = Graphics::GetScreenWidth(); const int h = Graphics::GetScreenHeight(); // double-width viewport, centred, then offset 1/6th to centre on the left // 2/3rds of the screen, to the left of the menu m_spinnerLeft = int(float(w)*-.5f - float(w)/6.f); m_spinnerWidth = w*2; m_spinnerRatio = w*2.f/h; m_needReset = true; }