mirror of
https://github.com/vcmi/vcmi.git
synced 2025-01-12 02:28:11 +02:00
92 lines
2.2 KiB
C++
92 lines
2.2 KiB
C++
/*
|
|
* 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 "../gui/EventDispatcher.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;
|
|
}
|
|
case EUserEvent::FAKE_MOUSE_MOVE:
|
|
GH.events().dispatchMouseMoved(GH.getCursorPosition());
|
|
break;
|
|
default:
|
|
logGlobal->error("Unknown user event. Code %d", user.code);
|
|
break;
|
|
}
|
|
}
|