123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- /*
- * EventHandlerSDLUser.cpp, part of VCMI engine
- *
- * Authors: listed in file AUTHORS in main folder
- *
- * License: GNU General Public License v2.0 or later
- * Full text of license available in license.txt file, in main folder
- *
- */
- #include "StdInc.h"
- #include "UserEventHandler.h"
- #include "../CMT.h"
- #include "../CPlayerInterface.h"
- #include "../CServerHandler.h"
- #include "../gui/CGuiHandler.h"
- #include "../gui/WindowHandler.h"
- #include "../mainmenu/CMainMenu.h"
- #include "../mainmenu/CPrologEpilogVideo.h"
- #include <SDL_events.h>
- void UserEventHandler::handleUserEvent(const SDL_UserEvent & user)
- {
- switch(static_cast<EUserEvent>(user.code))
- {
- case EUserEvent::FORCE_QUIT:
- {
- handleQuit(false);
- return;
- }
- break;
- case EUserEvent::RETURN_TO_MAIN_MENU:
- {
- CSH->endGameplay();
- GH.defActionsDef = 63;
- CMM->menu->switchToTab("main");
- }
- break;
- case EUserEvent::RESTART_GAME:
- {
- CSH->sendRestartGame();
- }
- break;
- case EUserEvent::CAMPAIGN_START_SCENARIO:
- {
- CSH->campaignServerRestartLock.set(true);
- CSH->endGameplay();
- auto ourCampaign = std::shared_ptr<CCampaignState>(reinterpret_cast<CCampaignState *>(user.data1));
- auto & epilogue = ourCampaign->camp->scenarios[ourCampaign->mapsConquered.back()].epilog;
- auto finisher = [=]()
- {
- if(!ourCampaign->mapsRemaining.empty())
- {
- GH.windows().pushWindow(CMM);
- GH.windows().pushWindow(CMM->menu);
- CMM->openCampaignLobby(ourCampaign);
- }
- };
- if(epilogue.hasPrologEpilog)
- {
- GH.windows().createAndPushWindow<CPrologEpilogVideo>(epilogue, finisher);
- }
- else
- {
- CSH->campaignServerRestartLock.waitUntil(false);
- finisher();
- }
- }
- break;
- case EUserEvent::RETURN_TO_MENU_LOAD:
- CSH->endGameplay();
- GH.defActionsDef = 63;
- CMM->menu->switchToTab("load");
- break;
- case EUserEvent::FULLSCREEN_TOGGLED:
- {
- boost::unique_lock<boost::recursive_mutex> lock(*CPlayerInterface::pim);
- GH.onScreenResize();
- break;
- }
- default:
- logGlobal->error("Unknown user event. Code %d", user.code);
- break;
- }
- }
|