void GrandPrixWin::eventCallback(GUIEngine::Widget* widget, const std::string& name, const int playerID) { if (name == "continue") { // un-set the GP mode so that after unlocking, it doesn't try to continue the GP race_manager->setMajorMode (RaceManager::MAJOR_MODE_SINGLE); if (unlock_manager->getRecentlyUnlockedFeatures().size() > 0) { std::vector<const ChallengeData*> unlocked = unlock_manager->getRecentlyUnlockedFeatures(); unlock_manager->clearUnlocked(); FeatureUnlockedCutScene* scene = FeatureUnlockedCutScene::getInstance(); assert(unlocked.size() > 0); scene->addUnlockedThings(unlocked); StateManager::get()->replaceTopMostScreen(scene); } else { // we assume the main menu was pushed before showing this menu StateManager::get()->popMenu(); } } } // eventCallback
void GrandPrixLose::eventCallback(GUIEngine::Widget* widget, const std::string& name, const int playerID) { if (name == "continue") { // un-set the GP mode so that after unlocking, it doesn't try to continue the GP race_manager->setMajorMode (RaceManager::MAJOR_MODE_SINGLE); std::vector<const ChallengeData*> unlocked = PlayerManager::getCurrentPlayer()->getRecentlyCompletedChallenges(); if (unlocked.size() > 0) { FeatureUnlockedCutScene* scene = FeatureUnlockedCutScene::getInstance(); scene->addTrophy(race_manager->getDifficulty()); scene->findWhatWasUnlocked(race_manager->getDifficulty()); StateManager::get()->replaceTopMostScreen(scene); PlayerManager::getCurrentPlayer()->clearUnlocked(); } else { if (race_manager->raceWasStartedFromOverworld()) { StateManager::get()->resetAndGoToScreen(MainMenuScreen::getInstance()); OverWorld::enterOverWorld(); } else { // we assume the main menu was pushed before showing this menu StateManager::get()->popMenu(); } } } } // eventCallback
void MainMenuScreen::eventCallback(Widget* widget, const std::string& name, const int playerID) { if(name=="user-id") { UserScreen::getInstance()->push(); return; } // most interesting stuff is in the ribbons, so start there RibbonWidget* ribbon = dynamic_cast<RibbonWidget*>(widget); if (ribbon == NULL) return; // what's that event?? // ---- A ribbon icon was clicked std::string selection = ribbon->getSelectionIDString(PLAYER_ID_GAME_MASTER); /* if (selection == "story") { StateManager::get()->enterGameState(); race_manager->setMinorMode(RaceManager::MINOR_MODE_CUTSCENE); race_manager->setNumKarts( 0 ); race_manager->setNumPlayers(0); race_manager->setNumPlayers(0); race_manager->startSingleRace("endcutscene", 999, false); std::vector<std::string> parts; parts.push_back("introcutscene"); parts.push_back("introcutscene2"); ((CutsceneWorld*)World::getWorld())->setParts(parts); //race_manager->startSingleRace("introcutscene2", 999, false); return; } */ #if DEBUG_MENU_ITEM if (selection == "test_gpwin") { StoryModeStatus* sms = PlayerManager::getCurrentPlayer()->getStoryModeStatus(); sms->unlockFeature(const_cast<ChallengeStatus*>(sms->getChallengeStatus("gp1")), RaceManager::DIFFICULTY_HARD); StateManager::get()->enterGameState(); race_manager->setMinorMode(RaceManager::MINOR_MODE_CUTSCENE); race_manager->setNumKarts(0); race_manager->setNumPlayers(0); race_manager->setNumPlayers(0); race_manager->startSingleRace("gpwin", 999, false); GrandPrixWin* scene = GrandPrixWin::getInstance(); scene->push(); const std::string winners[] = { "kiki", "nolok", "pidgin" }; scene->setKarts(winners); } else if (selection == "test_gplose") { StateManager::get()->enterGameState(); race_manager->setMinorMode(RaceManager::MINOR_MODE_CUTSCENE); race_manager->setNumKarts(0); race_manager->setNumPlayers(0); race_manager->setNumPlayers(0); race_manager->startSingleRace("gplose", 999, false); GrandPrixLose* scene = GrandPrixLose::getInstance(); scene->push(); std::vector<std::string> losers; losers.push_back("nolok"); losers.push_back("kiki"); //losers.push_back("wilber"); //losers.push_back("tux"); scene->setKarts(losers); } else if (selection == "test_unlocked" || selection == "test_unlocked2") { StoryModeStatus* sms = PlayerManager::getCurrentPlayer()->getStoryModeStatus(); sms->unlockFeature(const_cast<ChallengeStatus*>(sms->getChallengeStatus("gp1")), RaceManager::DIFFICULTY_HARD); StateManager::get()->enterGameState(); race_manager->setMinorMode(RaceManager::MINOR_MODE_CUTSCENE); race_manager->setNumKarts(0); race_manager->setNumPlayers(0); race_manager->setNumPlayers(0); race_manager->startSingleRace("featunlocked", 999, false); FeatureUnlockedCutScene* scene = FeatureUnlockedCutScene::getInstance(); std::vector<std::string> parts; parts.push_back("featunlocked"); ((CutsceneWorld*)World::getWorld())->setParts(parts); scene->addTrophy(RaceManager::DIFFICULTY_EASY); if (selection == "test_unlocked") { // the passed kart will not be modified, that's why I allow myself // to use const_cast scene->addUnlockedKart( const_cast<KartProperties*>( kart_properties_manager->getKart("tux") ), L"You unlocked <actual text would go here...>" ); scene->addUnlockedTrack(track_manager->getTrack("lighthouse")); scene->push(); } else if (selection == "test_unlocked2") { std::vector<video::ITexture*> textures; textures.push_back(irr_driver->getTexture( track_manager->getTrack("lighthouse") ->getScreenshotFile().c_str())); textures.push_back(irr_driver->getTexture( track_manager->getTrack("snowtuxpeak") ->getScreenshotFile().c_str())); textures.push_back(irr_driver->getTexture( track_manager->getTrack("sandtrack") ->getScreenshotFile().c_str())); textures.push_back(irr_driver->getTexture( track_manager->getTrack("snowmountain") ->getScreenshotFile().c_str())); scene->addUnlockedPictures(textures, 4.0, 3.0, L"You unlocked <actual text would go here...>"); scene->push(); } } else if (selection == "test_intro") { CutsceneWorld::setUseDuration(true); StateManager::get()->enterGameState(); race_manager->setMinorMode(RaceManager::MINOR_MODE_CUTSCENE); race_manager->setNumKarts(0); race_manager->setNumPlayers(0); race_manager->setNumPlayers(0); race_manager->startSingleRace("introcutscene", 999, false); std::vector<std::string> parts; parts.push_back("introcutscene"); parts.push_back("introcutscene2"); ((CutsceneWorld*)World::getWorld())->setParts(parts); //race_manager->startSingleRace("introcutscene2", 999, false); return; } else if (selection == "test_outro") { CutsceneWorld::setUseDuration(true); StateManager::get()->enterGameState(); race_manager->setMinorMode(RaceManager::MINOR_MODE_CUTSCENE); race_manager->setNumKarts(0); race_manager->setNumPlayers(0); race_manager->setNumPlayers(0); race_manager->startSingleRace("endcutscene", 999, false); std::vector<std::string> parts; parts.push_back("endcutscene"); ((CutsceneWorld*)World::getWorld())->setParts(parts); } else #endif if (selection == "new") { NetworkConfig::get()->unsetNetworking(); KartSelectionScreen* s = OfflineKartSelectionScreen::getInstance(); s->setMultiplayer(false); s->setFromOverworld(false); s->push(); } else if (selection == "multiplayer") { KartSelectionScreen* s = OfflineKartSelectionScreen::getInstance(); NetworkConfig::get()->unsetNetworking(); s->setMultiplayer(true); s->setFromOverworld(false); s->push(); } else if (selection == "options") { OptionsScreenVideo::getInstance()->push(); } else if (selection == "quit") { StateManager::get()->popMenu(); return; } else if (selection == "about") { CreditsScreen::getInstance()->push(); } else if (selection == "help") { HelpScreen1::getInstance()->push(); } else if (selection == "startTutorial") { race_manager->setNumPlayers(1); race_manager->setMajorMode (RaceManager::MAJOR_MODE_SINGLE); race_manager->setMinorMode (RaceManager::MINOR_MODE_TUTORIAL); race_manager->setNumKarts( 1 ); race_manager->setTrack( "tutorial" ); race_manager->setDifficulty(RaceManager::DIFFICULTY_EASY); race_manager->setReverseTrack(false); // Use keyboard 0 by default (FIXME: let player choose?) InputDevice* device = input_manager->getDeviceManager()->getKeyboard(0); // Create player and associate player with keyboard StateManager::get()->createActivePlayer(PlayerManager::getCurrentPlayer(), device); if (kart_properties_manager->getKart(UserConfigParams::m_default_kart) == NULL) { Log::warn("MainMenuScreen", "Cannot find kart '%s', will revert to default", UserConfigParams::m_default_kart.c_str()); UserConfigParams::m_default_kart.revertToDefaults(); } race_manager->setPlayerKart(0, UserConfigParams::m_default_kart); // ASSIGN should make sure that only input from assigned devices // is read. input_manager->getDeviceManager()->setAssignMode(ASSIGN); input_manager->getDeviceManager() ->setSinglePlayer( StateManager::get()->getActivePlayer(0) ); StateManager::get()->enterGameState(); race_manager->setupPlayerKartInfo(); race_manager->startNew(false); } else if (selection == "story") { NetworkConfig::get()->unsetNetworking(); PlayerProfile *player = PlayerManager::getCurrentPlayer(); if (player->isFirstTime()) { CutsceneWorld::setUseDuration(true); StateManager::get()->enterGameState(); race_manager->setMinorMode(RaceManager::MINOR_MODE_CUTSCENE); race_manager->setNumKarts( 0 ); race_manager->setNumPlayers(0); race_manager->startSingleRace("introcutscene", 999, false); std::vector<std::string> parts; parts.push_back("introcutscene"); parts.push_back("introcutscene2"); ((CutsceneWorld*)World::getWorld())->setParts(parts); //race_manager->startSingleRace("introcutscene2", 999, false); return; } else { const std::string default_kart = UserConfigParams::m_default_kart; if (player->isLocked(default_kart)) { KartSelectionScreen *next = OfflineKartSelectionScreen::getInstance(); next->setGoToOverworldNext(); next->setMultiplayer(false); StateManager::get()->resetAndGoToScreen(next); return; } OverWorld::enterOverWorld(); } } else if (selection == "online") { if(UserConfigParams::m_internet_status!=RequestManager::IPERM_ALLOWED) { new MessageDialog(_("You can not play online without internet access. " "If you want to play online, go to options, select " " tab 'User Interface', and edit " "\"Connect to the Internet\".")); return; } // Define this to require a login to the stk server (default behaviour) // Undefine for testing LAN only. if (MainMenuScreen::m_enable_online) { OnlineScreen::getInstance()->push(); } else { if (PlayerManager::getCurrentOnlineId()) { ProfileManager::get()->setVisiting(PlayerManager::getCurrentOnlineId()); TabOnlineProfileAchievements::getInstance()->push(); } else { UserScreen::getInstance()->push(); } } } else if (selection == "addons") { // Don't go to addons if there is no internet, unless some addons are // already installed (so that you can delete addons without being online). if(UserConfigParams::m_internet_status!=RequestManager::IPERM_ALLOWED && !addons_manager->anyAddonsInstalled()) { new MessageDialog(_("You can not download addons without internet access. " "If you want to download addons, go to options, select " " tab 'User Interface', and edit " "\"Connect to the Internet\".")); return; } AddonsScreen::getInstance()->push(); } else if (selection == "gpEditor") { GrandPrixEditorScreen::getInstance()->push(); } else if (selection == "achievements") { OnlineProfileAchievements::getInstance()->push(); } } // eventCallback
//----------------------------------------------------------------------------- void RaceResultGUI::eventCallback(GUIEngine::Widget* widget, const std::string& name, const int playerID) { // If something was unlocked, the 'continue' button was // actually used to display "Show unlocked feature(s)" text. // --------------------------------------------------------- int n = unlock_manager->getRecentlyUnlockedFeatures().size(); if(n>0) { if(name=="top") { std::vector<const Challenge*> unlocked = unlock_manager->getRecentlyUnlockedFeatures(); unlock_manager->clearUnlocked(); FeatureUnlockedCutScene* scene = FeatureUnlockedCutScene::getInstance(); scene->addUnlockedThings(unlocked); StateManager::get()->popMenu(); StateManager::get()->pushScreen(scene); World::deleteWorld(); return; } fprintf(stderr, "Incorrect event '%s' when things are unlocked.\n", name.c_str()); assert(false); } // Next check for GP // ----------------- if (race_manager->getMajorMode() == RaceManager::MAJOR_MODE_GRAND_PRIX) { StateManager::get()->popMenu(); if(name=="top") // Next GP { race_manager->next(); } else if (name=="middle") // Restart { race_manager->rerunRace(); } else if (name=="bottom") // Abort { race_manager->exitRace(); StateManager::get()->resetAndGoToScreen(MainMenuScreen::getInstance()); } else { fprintf(stderr, "Incorrect event '%s' when things are unlocked.\n", name.c_str()); assert(false); } return; } // This is a normal race, nothing was unlocked // ------------------------------------------- StateManager::get()->popMenu(); if(name=="top") // Setup new race { race_manager->exitRace(); Screen* newStack[] = {MainMenuScreen::getInstance(), RaceSetupScreen::getInstance(), NULL}; StateManager::get()->resetAndSetStack( newStack ); } else if (name=="middle") // Restart { race_manager->rerunRace(); } else if (name=="bottom") // Back to main { race_manager->exitRace(); StateManager::get()->resetAndGoToScreen(MainMenuScreen::getInstance()); } else { fprintf(stderr, "Incorrect event '%s' for normal race.\n", name.c_str()); } return; } // eventCallback
void MainMenuScreen::eventCallback(Widget* widget, const std::string& name, const int playerID) { // most interesting stuff is in the ribbons, so start there RibbonWidget* ribbon = dynamic_cast<RibbonWidget*>(widget); if (ribbon == NULL) return; // what's that event?? // ---- A ribbon icon was clicked std::string selection = ribbon->getSelectionIDString(PLAYER_ID_GAME_MASTER); /* if (selection == "story") { 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("endcutscene", 999, false); std::vector<std::string> parts; parts.push_back("introcutscene"); parts.push_back("introcutscene2"); ((CutsceneWorld*)World::getWorld())->setParts(parts); //race_manager->startSingleRace("introcutscene2", 999, false); return; } */ #if DEBUG_MENU_ITEM if (selection == "options") { // The DEBUG item FeatureUnlockedCutScene* scene = FeatureUnlockedCutScene::getInstance(); scene->addTrophy(RaceManager::DIFFICULTY_EASY); StateManager::get()->pushScreen(scene); /* static int i = 1; i++; if (i % 4 == 0) { // the passed kart will not be modified, that's why I allow myself // to use const_cast scene->addUnlockedKart( const_cast<KartProperties*>( kart_properties_manager->getKart("tux") ), L"Unlocked" ); StateManager::get()->pushScreen(scene); } else if (i % 4 == 1) { std::vector<video::ITexture*> textures; textures.push_back(irr_driver->getTexture( track_manager->getTrack("lighthouse") ->getScreenshotFile().c_str())); textures.push_back(irr_driver->getTexture( track_manager->getTrack("crescentcrossing") ->getScreenshotFile().c_str())); textures.push_back(irr_driver->getTexture( track_manager->getTrack("sandtrack") ->getScreenshotFile().c_str())); textures.push_back(irr_driver->getTexture( track_manager->getTrack("snowmountain") ->getScreenshotFile().c_str())); 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 ); } */ } else #endif if (selection == "new") { KartSelectionScreen* s = OfflineKartSelectionScreen::getInstance(); //FIXME : that was for tests s->setMultiplayer(false); s->setFromOverworld(false); StateManager::get()->pushScreen( s ); } else if (selection == "multiplayer") { KartSelectionScreen* s = OfflineKartSelectionScreen::getInstance(); s->setMultiplayer(true); s->setFromOverworld(false); StateManager::get()->pushScreen( s ); } else if (selection == "options") { StateManager::get()->pushScreen( OptionsScreenVideo::getInstance() ); } else if (selection == "quit") { StateManager::get()->popMenu(); return; } else if (selection == "about") { StateManager::get()->pushScreen(CreditsScreen::getInstance()); } else if (selection == "help") { StateManager::get()->pushScreen(HelpScreen1::getInstance()); } else if (selection == "startTutorial") { race_manager->setNumLocalPlayers(1); race_manager->setMajorMode (RaceManager::MAJOR_MODE_SINGLE); race_manager->setMinorMode (RaceManager::MINOR_MODE_TUTORIAL); race_manager->setNumKarts( 1 ); race_manager->setTrack( "tutorial" ); race_manager->setDifficulty(RaceManager::DIFFICULTY_EASY); race_manager->setReverseTrack(false); // Use keyboard 0 by default (FIXME: let player choose?) InputDevice* device = input_manager->getDeviceList()->getKeyboard(0); // Create player and associate player with keyboard StateManager::get()->createActivePlayer(PlayerManager::get()->getCurrentPlayer(), device, NULL); if (kart_properties_manager->getKart(UserConfigParams::m_default_kart) == NULL) { fprintf(stderr, "[MainMenuScreen] WARNING: cannot find kart '%s', will revert to default\n", UserConfigParams::m_default_kart.c_str()); UserConfigParams::m_default_kart.revertToDefaults(); } race_manager->setLocalKartInfo(0, UserConfigParams::m_default_kart); // ASSIGN should make sure that only input from assigned devices // is read. input_manager->getDeviceList()->setAssignMode(ASSIGN); input_manager->getDeviceList() ->setSinglePlayer( StateManager::get()->getActivePlayer(0) ); StateManager::get()->enterGameState(); race_manager->setupPlayerKartInfo(); race_manager->startNew(false); } else if (selection == "story") { PlayerProfile *player = PlayerManager::get()->getCurrentPlayer(); if (player->isFirstTime()) { 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("introcutscene", 999, false); std::vector<std::string> parts; parts.push_back("introcutscene"); parts.push_back("introcutscene2"); ((CutsceneWorld*)World::getWorld())->setParts(parts); //race_manager->startSingleRace("introcutscene2", 999, false); return; } else { const std::string default_kart = UserConfigParams::m_default_kart; if (player->isLocked(default_kart)) { KartSelectionScreen *next = OfflineKartSelectionScreen::getInstance(); next->setGoToOverworldNext(); next->setMultiplayer(false); StateManager::get()->resetAndGoToScreen(next); return; } OverWorld::enterOverWorld(); } } else if (selection == "online") { if(UserConfigParams::m_internet_status!=RequestManager::IPERM_ALLOWED) { new MessageDialog(_("You can not play online without internet access. " "If you want to play online, go to options, select " " tab 'User Interface', and edit " "\"Allow STK to connect to the Internet\".")); return; } if(CurrentUser::get()->getID()) StateManager::get()->pushScreen(OnlineScreen::getInstance()); else StateManager::get()->pushScreen(LoginScreen::getInstance()); } else if (selection == "addons") { // Don't go to addons if there is no internet, unless some addons are // already installed (so that you can delete addons without being online). if(UserConfigParams::m_internet_status!=RequestManager::IPERM_ALLOWED && !addons_manager->anyAddonsInstalled()) { new MessageDialog(_("You can not download addons without internet access. " "If you want to download addons, go to options, select " " tab 'User Interface', and edit " "\"Allow STK to connect to the Internet\".")); return; } StateManager::get()->pushScreen(AddonsScreen::getInstance()); } } // eventCallback
//----------------------------------------------------------------------------- void RaceResultGUI::eventCallback(GUIEngine::Widget* widget, const std::string& name, const int playerID) { // If something was unlocked, the 'continue' button was // actually used to display "Show unlocked feature(s)" text. // --------------------------------------------------------- int n = unlock_manager->getCurrentSlot()->getRecentlyCompletedChallenges().size(); if(n>0) { if(name=="top") { if (race_manager->getMajorMode() == RaceManager::MAJOR_MODE_GRAND_PRIX) { cleanupGPProgress(); } std::vector<const ChallengeData*> unlocked = unlock_manager->getCurrentSlot()->getRecentlyCompletedChallenges(); bool gameCompleted = false; for (unsigned int n = 0; n < unlocked.size(); n++) { if (unlocked[n]->getId() == "fortmagma") { gameCompleted = true; break; } } unlock_manager->getCurrentSlot()->clearUnlocked(); if (gameCompleted) { // clear the race // kart will no longer be available during cutscene, drop reference StateManager::get()->getActivePlayer(playerID)->setKart(NULL); World::deleteWorld(); 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("endcutscene", 999, false); std::vector<std::string> parts; parts.push_back("endcutscene"); ((CutsceneWorld*)World::getWorld())->setParts(parts); } else { FeatureUnlockedCutScene* scene = FeatureUnlockedCutScene::getInstance(); scene->addTrophy(race_manager->getDifficulty()); scene->findWhatWasUnlocked(race_manager->getDifficulty()); StateManager::get()->popMenu(); World::deleteWorld(); StateManager::get()->pushScreen(scene); race_manager->setAIKartOverride(""); } return; } fprintf(stderr, "Incorrect event '%s' when things are unlocked.\n", name.c_str()); assert(false); } // If we're playing online : if (World::getWorld()->isNetworkWorld()) { StateManager::get()->popMenu(); if (name == "middle") // Continue button (return to server lobby) { race_manager->exitRace(); race_manager->setAIKartOverride(""); Screen* newStack[] = {MainMenuScreen::getInstance(), OnlineScreen::getInstance(), ServerSelection::getInstance(), NetworkingLobby::getInstance(), NULL}; StateManager::get()->resetAndSetStack( newStack ); } if (name == "bottom") // Quit server (return to main menu) { race_manager->exitRace(); race_manager->setAIKartOverride(""); StateManager::get()->resetAndGoToScreen(MainMenuScreen::getInstance()); } return; } // Next check for GP // ----------------- if (race_manager->getMajorMode() == RaceManager::MAJOR_MODE_GRAND_PRIX) { if (name == "middle") // Next GP { cleanupGPProgress(); StateManager::get()->popMenu(); race_manager->next(); } else if (name == "bottom") // Abort { new MessageDialog(_("Do you really want to abort the Grand Prix?"), MessageDialog::MESSAGE_DIALOG_CONFIRM, this, false); } else if (!getWidget(name.c_str())->isVisible()) { fprintf(stderr, "Incorrect event '%s' when things are unlocked.\n", name.c_str()); assert(false); } return; } // This is a normal race, nothing was unlocked // ------------------------------------------- StateManager::get()->popMenu(); if(name=="top") // Setup new race { race_manager->exitRace(); race_manager->setAIKartOverride(""); NetworkKartSelectionScreen::getInstance()->tearDown(); // be sure to delete the kart selection screen Screen* newStack[] = {MainMenuScreen::getInstance(), RaceSetupScreen::getInstance(), NULL}; StateManager::get()->resetAndSetStack( newStack ); } else if (name=="middle") // Restart { race_manager->rerunRace(); } else if (name=="bottom") // Back to main { race_manager->exitRace(); race_manager->setAIKartOverride(""); NetworkKartSelectionScreen::getInstance()->tearDown(); // be sure to delete the kart selection screen StateManager::get()->resetAndGoToScreen(MainMenuScreen::getInstance()); if (race_manager->raceWasStartedFromOverworld()) { OverWorld::enterOverWorld(); } } else { fprintf(stderr, "Incorrect event '%s' for normal race.\n", name.c_str()); } return; } // eventCallback
void MainMenuScreen::eventCallback(Widget* widget, const std::string& name, const int playerID) { // most interesting stuff is in the ribbons, so start there RibbonWidget* ribbon = dynamic_cast<RibbonWidget*>(widget); if (ribbon == NULL) return; // what's that event?? // ---- A ribbon icon was clicked std::string selection = ribbon->getSelectionIDString(PLAYER_ID_GAME_MASTER); /* if (selection == "story") { 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("endcutscene", 999, false); std::vector<std::string> parts; parts.push_back("introcutscene"); parts.push_back("introcutscene2"); ((CutsceneWorld*)World::getWorld())->setParts(parts); //race_manager->startSingleRace("introcutscene2", 999, false); return; } */ #if DEBUG_MENU_ITEM if (selection == "options") { // The DEBUG item FeatureUnlockedCutScene* scene = FeatureUnlockedCutScene::getInstance(); scene->addTrophy(RaceManager::DIFFICULTY_EASY); StateManager::get()->pushScreen(scene); /* static int i = 1; i++; if (i % 4 == 0) { // the passed kart will not be modified, that's why I allow myself // to use const_cast scene->addUnlockedKart( const_cast<KartProperties*>( kart_properties_manager->getKart("tux") ), L"Unlocked" ); StateManager::get()->pushScreen(scene); } else if (i % 4 == 1) { std::vector<video::ITexture*> textures; textures.push_back(irr_driver->getTexture( track_manager->getTrack("lighthouse") ->getScreenshotFile().c_str())); textures.push_back(irr_driver->getTexture( track_manager->getTrack("crescentcrossing") ->getScreenshotFile().c_str())); textures.push_back(irr_driver->getTexture( track_manager->getTrack("sandtrack") ->getScreenshotFile().c_str())); textures.push_back(irr_driver->getTexture( track_manager->getTrack("snowmountain") ->getScreenshotFile().c_str())); 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 ); } */ } else #endif if (selection == "new") { KartSelectionScreen* s = KartSelectionScreen::getInstance(); s->setMultiplayer(false); s->setFromOverworld(false); StateManager::get()->pushScreen( s ); } else if (selection == "multiplayer") { KartSelectionScreen* s = KartSelectionScreen::getInstance(); s->setMultiplayer(true); s->setFromOverworld(false); StateManager::get()->pushScreen( s ); } else if (selection == "options") { StateManager::get()->pushScreen( OptionsScreenVideo::getInstance() ); } else if (selection == "quit") { StateManager::get()->popMenu(); return; } else if (selection == "about") { StateManager::get()->pushScreen(CreditsScreen::getInstance()); } else if (selection == "help") { StateManager::get()->pushScreen(HelpScreen1::getInstance()); } else if (selection == "story") { GameSlot* slot = unlock_manager->getCurrentSlot(); if (slot->isFirstTime()) { 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("introcutscene", 999, false); std::vector<std::string> parts; parts.push_back("introcutscene"); parts.push_back("introcutscene2"); ((CutsceneWorld*)World::getWorld())->setParts(parts); //race_manager->startSingleRace("introcutscene2", 999, false); return; } else { OverWorld::enterOverWorld(); } } else if (selection == "tutorial") { StateManager::get()->pushScreen(TutorialScreen::getInstance()); } else if (selection == "addons") { StateManager::get()->pushScreen(AddonsScreen::getInstance()); } } // eventCallback