Work on new GPWin screen. Seems to work well now

This commit is contained in:
Marianne Gagnon 2014-05-03 20:21:34 -04:00
parent 6b3d1a4770
commit bee4dcf36c
12 changed files with 84 additions and 51 deletions

View File

@ -1810,7 +1810,8 @@ void IrrDriver::update(float dt)
World *world = World::getWorld();
if (GUIEngine::getCurrentScreen() != NULL &&
GUIEngine::getCurrentScreen()->needs3D())
GUIEngine::getCurrentScreen()->needs3D() &&
world != NULL)
{
//printf("Screen that needs 3D\n");
//m_video_driver->beginScene(/*backBuffer clear*/true, /*zBuffer*/true,

View File

@ -111,9 +111,9 @@ void MaterialManager::setAllMaterialFlags(video::ITexture* t,
mb->getMaterial().ColorMaterial = video::ECM_DIFFUSE_AND_AMBIENT;
if (World::getWorld() != NULL && World::getWorld()->getTrack() != NULL)
if (World::getWorld() != NULL)
{
mb->getMaterial().FogEnable = World::getWorld()->getTrack()->isFogEnabled();
mb->getMaterial().FogEnable = World::getWorld()->isFogEnabled();
}

View File

@ -212,7 +212,7 @@ void IrrDriver::renderGLSL(float dt)
renderSolidSecondPass();
PROFILER_POP_CPU_MARKER();
if (UserConfigParams::m_dynamic_lights && World::getWorld()->getTrack()->isFogEnabled())
if (UserConfigParams::m_dynamic_lights && World::getWorld()->isFogEnabled())
{
PROFILER_PUSH_CPU_MARKER("- Fog", 0xFF, 0x00, 0x00);
m_post_processing->renderFog(irr_driver->getInvProjMatrix());

View File

@ -253,7 +253,7 @@ void STKAnimatedMesh::render()
for_in(mesh, TransparentMesh[TM_BUBBLE])
drawBubble(*mesh, ModelViewProjectionMatrix);
if (World::getWorld()->getTrack()->isFogEnabled())
if (World::getWorld()->isFogEnabled())
{
if (!TransparentMesh[TM_DEFAULT].empty() || !TransparentMesh[TM_ADDITIVE].empty())
glUseProgram(MeshShader::TransparentFogShader::Program);

View File

@ -858,7 +858,7 @@ void initvaostate(GLMesh &mesh, TransparentMaterial TranspMat)
break;
case TM_DEFAULT:
case TM_ADDITIVE:
if (World::getWorld()->getTrack()->isFogEnabled())
if (World::getWorld()->isFogEnabled())
mesh.vao_first_pass = createVAO(mesh.vertex_buffer, mesh.index_buffer,
MeshShader::TransparentFogShader::attrib_position, MeshShader::TransparentFogShader::attrib_texcoord, -1, -1, -1, -1, MeshShader::TransparentFogShader::attrib_color, mesh.Stride);
else

View File

@ -501,7 +501,7 @@ void STKMeshSceneNode::render()
for_in(mesh, TransparentMesh[TM_BUBBLE])
drawBubble(*mesh, ModelViewProjectionMatrix);
if (World::getWorld()->getTrack()->isFogEnabled())
if (World::getWorld() ->isFogEnabled())
{
if (!TransparentMesh[TM_DEFAULT].empty() || !TransparentMesh[TM_ADDITIVE].empty())
glUseProgram(MeshShader::TransparentFogShader::Program);

View File

@ -384,6 +384,13 @@ void CutsceneWorld::enterRaceOverState()
StateManager::get()->pushScreen(credits);
}
// TODO: remove hardcoded knowledge of cutscenes, replace with scripting probably
else if (m_parts.size() == 1 && m_parts[0] == "gpwin")
{
MainMenuScreen* mainMenu = MainMenuScreen::getInstance();
race_manager->exitRace();
StateManager::get()->resetAndGoToScreen(mainMenu);
}
// TODO: remove hardcoded knowledge of cutscenes, replace with scripting probably
else if (race_manager->getTrackName() == "introcutscene" ||
race_manager->getTrackName() == "introcutscene2")
{

View File

@ -1180,4 +1180,11 @@ void World::escapePressed()
new RacePausedDialog(0.8f, 0.6f);
}
//-----------------------------------------------------------------------------
bool World::isFogEnabled() const
{
return m_track != NULL && m_track->isFogEnabled();
}
/* EOF */

View File

@ -302,6 +302,8 @@ public:
/** Returns a pointer to the track. */
Track *getTrack() const { return m_track; }
// ------------------------------------------------------------------------
bool isFogEnabled() const;
// ------------------------------------------------------------------------
/** The code that draws the timer should call this first to know
* whether the game mode wants a timer drawn. */
virtual bool shouldDrawTimer() const

View File

@ -685,8 +685,18 @@ void RaceManager::exitRace(bool delete_world)
if (someHumanPlayerWon)
{
StateManager::get()->pushScreen( GrandPrixWin::getInstance() );
GrandPrixWin::getInstance()->setKarts(winners);
if (delete_world) World::deleteWorld();
delete_world = false;
StateManager::get()->enterGameState();
race_manager->setMinorMode(RaceManager::MINOR_MODE_CUTSCENE);
race_manager->setNumKarts(0);
race_manager->setNumPlayers(0);
race_manager->setNumLocalPlayers(0);
race_manager->startSingleRace("gpwin", 999, false);
GrandPrixWin* scene = GrandPrixWin::getInstance();
StateManager::get()->pushScreen(scene);
scene->setKarts(winners);
}
else
{

View File

@ -71,19 +71,6 @@ GrandPrixWin::GrandPrixWin() : Screen("grand_prix_win.stkgui", false)
m_throttle_FPS = false;
StateManager::get()->enterGameState();
race_manager->setMinorMode(RaceManager::MINOR_MODE_CUTSCENE);
race_manager->setNumKarts(0);
race_manager->setNumPlayers(0);
race_manager->setNumLocalPlayers(0);
race_manager->startSingleRace("gpwin", 999, false);
std::vector<std::string> parts;
parts.push_back("gpwin");
((CutsceneWorld*)World::getWorld())->setParts(parts);
CutsceneWorld::setUseDuration(false);
World::getWorld()->setPhase(WorldStatus::RACE_PHASE);
m_kart_node[0] = NULL;
m_kart_node[1] = NULL;
m_kart_node[2] = NULL;
@ -98,21 +85,22 @@ GrandPrixWin::GrandPrixWin() : Screen("grand_prix_win.stkgui", false)
void GrandPrixWin::loadedFromFile()
{
//m_podium_x[0] = 1.4f;
//m_podium_z[0] = 0.0f;
//
//m_podium_x[1] = 2.2f;
//m_podium_z[1] = 0.5f;
//
//m_podium_x[2] = 3.0f;
//m_podium_z[2] = 0.0f;
} // loadedFromFile
// -------------------------------------------------------------------------------------
void GrandPrixWin::init()
{
std::vector<std::string> parts;
parts.push_back("gpwin");
((CutsceneWorld*)World::getWorld())->setParts(parts);
CutsceneWorld::setUseDuration(false);
Screen::init();
World::getWorld()->setPhase(WorldStatus::RACE_PHASE);
if (PlayerManager::getCurrentPlayer()->getRecentlyCompletedChallenges().size() > 0)
{
const core::dimension2d<u32>& frame_size = GUIEngine::getDriver()->getCurrentRenderTargetSize();
@ -187,6 +175,14 @@ void GrandPrixWin::tearDown()
delete m_unlocked_label;
m_unlocked_label = NULL;
}
m_kart_node[0] = NULL;
m_kart_node[1] = NULL;
m_kart_node[2] = NULL;
m_podium_steps[0] = NULL;
m_podium_steps[1] = NULL;
m_podium_steps[2] = NULL;
} // tearDown
// -------------------------------------------------------------------------------------
@ -355,6 +351,8 @@ void GrandPrixWin::setKarts(const std::string idents_arg[3])
for (int i = 0; i < 3; i++)
{
const KartProperties* kp = kart_properties_manager->getKart(idents[i]);
if (kp == NULL) continue;
KartModel* kart_model = kp->getKartModelCopy();
m_all_kart_models.push_back(kart_model);
scene::ISceneNode* kart_main_node = kart_model->attachModel(false);

View File

@ -233,17 +233,42 @@ void MainMenuScreen::eventCallback(Widget* widget, const std::string& name,
if (selection == "options")
{
// The DEBUG item
// GP WIN
StateManager::get()->enterGameState();
race_manager->setMinorMode(RaceManager::MINOR_MODE_CUTSCENE);
race_manager->setNumKarts(0);
race_manager->setNumPlayers(0);
race_manager->setNumLocalPlayers(0);
race_manager->startSingleRace("gpwin", 999, false);
GrandPrixWin* scene = GrandPrixWin::getInstance();
const std::string winners[] = { "elephpant", "nolok", "pidgin" };
StateManager::get()->pushScreen(scene);
scene->setKarts(winners);
// GP Lose
/*
GrandPrixLose* scene = GrandPrixLose::getInstance();
StateManager::get()->pushScreen(scene);
std::vector<std::string> losers;
losers.push_back("nolok");
losers.push_back("elephpant");
losers.push_back("wilber");
scene->setKarts( losers );
*/
/*
// FEATURE UNLOCKED
FeatureUnlockedCutScene* scene =
FeatureUnlockedCutScene::getInstance();
FeatureUnlockedCutScene::getInstance();
scene->addTrophy(RaceManager::DIFFICULTY_EASY);
StateManager::get()->pushScreen(scene);
/*
static int i = 1;
i++;
if (i % 4 == 0)
if (i % 2 == 0)
{
// the passed kart will not be modified, that's why I allow myself
// to use const_cast
@ -255,7 +280,7 @@ void MainMenuScreen::eventCallback(Widget* widget, const std::string& name,
);
StateManager::get()->pushScreen(scene);
}
else if (i % 4 == 1)
else if (i % 2 == 1)
{
std::vector<video::ITexture*> textures;
textures.push_back(irr_driver->getTexture(
@ -274,23 +299,6 @@ void MainMenuScreen::eventCallback(Widget* widget, const std::string& name,
scene->addUnlockedPictures(textures, 1.0, 0.75, L"You did it");
StateManager::get()->pushScreen(scene);
}
else if (i % 4 == 2)
{
GrandPrixWin* scene = GrandPrixWin::getInstance();
const std::string winners[] = { "elephpant", "nolok", "pidgin" };
StateManager::get()->pushScreen(scene);
scene->setKarts( winners );
}
else
{
GrandPrixLose* scene = GrandPrixLose::getInstance();
StateManager::get()->pushScreen(scene);
std::vector<std::string> losers;
losers.push_back("nolok");
losers.push_back("elephpant");
losers.push_back("wilber");
scene->setKarts( losers );
}
*/
}