// Scene 04 void Scene04(float time, float dt) { static const float cameraBobbleSpeed = 0.5f; static const float cameraBobble = 0.1f; static float wobbleParameter = 0.0f; // Get world World* world = WorldSingleton::Get(); // Move tanks redTank1->SetTargetPosition(Vector3f(160.0f, 0.0f, -16.0f)); redTank2->SetTargetPosition(Vector3f(60.0f, 0.0f, -16.0f)); blueTank1->SetTargetPosition(Vector3f(-128.0f, 0.0f, -64.0f)); blueTank2->SetTargetPosition(Vector3f(432.0f, 0.0f, -80.0f)); redTank1->SetTargetVelocity(30.0f); redTank2->SetTargetVelocity(30.0f); blueTank1->SetTargetVelocity(30.0f); blueTank2->SetTargetVelocity(30.0f); redTank1->Update(dt, terrain); redTank2->Update(dt, terrain); blueTank1->Update(dt, terrain); blueTank2->Update(dt, terrain); redTank1->OrientToTerrain(terrain, dt); redTank2->OrientToTerrain(terrain, dt); blueTank1->OrientToTerrain(terrain, dt); blueTank2->OrientToTerrain(terrain, dt); blueTank1->OrientTurret(-5.0f, Approach(blueTank1->GetTurretOrientation().y, -80.0f, 1.0f, dt)); blueTank2->OrientTurret(-10.0f, Approach(blueTank2->GetTurretOrientation().y, 90.0f, 1.0f, dt)); // Spit particles static Trigger* particleSpawnTimer = new Trigger(0.25f); static Lerp2f* sizeLerp = new Lerp2f(Vector2f(4.0f, 4.0f), Vector2f(8.0f, 8.0f)); particleSpawnTimer->SetPlayState(Loop); particleSpawnTimer->Update(dt); if( particleSpawnTimer->DoTrigger() ) { cout << "Trigger..." << endl; PointManager* pointManager = PointManagerSingleton::Get(); Particle* particle; particle = pointManager->EmitParticle(); if( particle ) { particle->MaxLife() = Rnd(0.25f, 1.5f); particle->Life() = particle->MaxLife(); particle->Rotation() = Rnd(0.0f, 360.0f); particle->Position() = redTank1->GetPosition()+Vector3f(Rnd(-4.0f, 4.0f), Rnd(0.0f, 4.0f), Rnd(-4.0f, 4.0f)); particle->Velocity().Set(Rnd(-1.5f, 1.5f), Rnd(-1.5f, 1.5f), Rnd(-1.5f, 1.5f)); particle->Size() = sizeLerp; particle->SetTexture(smokeTexture); particle->Color().Set(140.0f/255.0f, 128.0f/255.0f, 112.0f/255.0f, 0.75f); } particle = pointManager->EmitParticle(); if( particle ) { particle->MaxLife() = Rnd(0.25f, 1.5f); particle->Life() = particle->MaxLife(); particle->Rotation() = Rnd(0.0f, 360.0f); particle->Position() = redTank2->GetPosition()+Vector3f(Rnd(-4.0f, 4.0f), Rnd(0.0f, 4.0f), Rnd(-4.0f, 4.0f)); particle->Velocity().Set(Rnd(-1.5f, 1.5f), Rnd(-1.5f, 1.5f), Rnd(-1.5f, 1.5f)); particle->Size() = sizeLerp; particle->SetTexture(smokeTexture); particle->Color().Set(140.0f/255.0f, 128.0f/255.0f, 112.0f/255.0f, 0.75f); } } // Orbit camera wobbleParameter += 30.0f*(1.0f+sin(wobbleParameter*0.4f)*0.05f)*dt; mainCamera->SetFieldOfView(90.0f); mainCamera->SetPosition(500.0f, 700.0f, -300.0f); mainCamera->SetEulerRotation( -60.0f+sin(wobbleParameter*0.2f*cameraBobbleSpeed)*3.0f*cameraBobble-5, 120.0f+sin(wobbleParameter*0.1f*cameraBobbleSpeed)*6.0f*cameraBobble, sin(wobbleParameter*0.05f*cameraBobbleSpeed)*30.0f*cameraBobble); // Update blur effect blurEffect->SetBlurFactor(0.6f); }
// Scene 03 void Scene03(float time, float dt) { // Get world World* world = WorldSingleton::Get(); // Move tanks redTank1->SetTargetPosition(Vector3f(160.0f, 0.0f, -16.0f)); redTank2->SetTargetPosition(Vector3f(60.0f, 0.0f, -16.0f)); redTank1->SetTargetVelocity(30.0f); redTank2->SetTargetVelocity(30.0f); redTank1->Update(dt, terrain); redTank2->Update(dt, terrain); redTank1->OrientToTerrain(terrain, dt); redTank2->OrientToTerrain(terrain, dt); blueTank1->OrientToTerrain(terrain, dt); blueTank2->OrientToTerrain(terrain, dt); redTank1->OrientTurret(10.0f, 45.0f+Sin(time*60.0f)*30.0f); redTank2->OrientTurret(15.0f, -30.0f+Sin(time*80.0f)*45.0f); // Spit particles static Trigger* particleSpawnTimer = new Trigger(0.25f); static Lerp2f* sizeLerp = new Lerp2f(Vector2f(4.0f, 4.0f), Vector2f(8.0f, 8.0f)); particleSpawnTimer->SetPlayState(Loop); particleSpawnTimer->Update(dt); if( particleSpawnTimer->DoTrigger() ) { cout << "Trigger..." << endl; PointManager* pointManager = PointManagerSingleton::Get(); Particle* particle; particle = pointManager->EmitParticle(); if( particle ) { particle->MaxLife() = Rnd(0.25f, 1.5f); particle->Life() = particle->MaxLife(); particle->Rotation() = Rnd(0.0f, 360.0f); particle->Position() = redTank1->GetPosition()+Vector3f(Rnd(-4.0f, 4.0f), Rnd(0.0f, 4.0f), Rnd(-4.0f, 4.0f)); particle->Velocity().Set(Rnd(-1.5f, 1.5f), Rnd(-1.5f, 1.5f), Rnd(-1.5f, 1.5f)); particle->Size() = sizeLerp; particle->SetTexture(smokeTexture); particle->Color().Set(140.0f/255.0f, 128.0f/255.0f, 112.0f/255.0f, 0.75f); } particle = pointManager->EmitParticle(); if( particle ) { particle->MaxLife() = Rnd(0.25f, 1.5f); particle->Life() = particle->MaxLife(); particle->Rotation() = Rnd(0.0f, 360.0f); particle->Position() = redTank2->GetPosition()+Vector3f(Rnd(-4.0f, 4.0f), Rnd(0.0f, 4.0f), Rnd(-4.0f, 4.0f)); particle->Velocity().Set(Rnd(-1.5f, 1.5f), Rnd(-1.5f, 1.5f), Rnd(-1.5f, 1.5f)); particle->Size() = sizeLerp; particle->SetTexture(smokeTexture); particle->Color().Set(140.0f/255.0f, 128.0f/255.0f, 112.0f/255.0f, 0.75f); } } // Orbit camera mainCamera->SetFieldOfView(90.0f); mainCamera->SetEulerRotation(-6.0f, 100.0f, 0.0f); float yaw = mainCamera->GetEulerRotation().y; mainCamera->SetPosition( redTank1->GetPosition().x+Sin(yaw)*64.0f, redTank1->GetPosition().y+18.0f, redTank1->GetPosition().z+24.0f+Cos(yaw)*64.0f); // Update blur effect blurEffect->SetBlurFactor(0.7); }