void C_Client::LoadScreen(C_Screen* screen) { StopScene(); m_Engine->GetEvent().ClearBinds(); assert(screen); m_CurrentScreen = screen; m_CurrentScreen->Binds(m_Engine->GetEvent()); //TODO: TMP #ifdef _WIN32 const int KEY_LAYOUT_CANADA = 96; #else const int KEY_LAYOUT_CANADA = 35; #endif const int KEY_LAYOUT_FRANCE = 178; m_Engine->GetEvent().AddBind(KEY_LAYOUT_CANADA, "console"); m_Engine->GetEvent().AddBind(KEY_LAYOUT_FRANCE, "console"); m_CurrentScreen->Load(*m_Engine); m_CurrentScreen->OnInit(*m_Engine); m_CurrentScreen->SetConsole(this); m_CurrentGui = m_CurrentScreen->GetGui(); m_Engine->GetEvent().SetGUI(m_CurrentGui); if (m_CurrentScreen->HasScene()) { StartScene(m_CurrentScreen->GetScene()); C_Command::m_CltScene = m_CurrentScene; m_CurrentScene->StartTimer(); m_CurrentScene->StartUpdateTimer(); SetSystems(); } else { C_Command::m_CltScene = nullptr; } }
void C_Client::StartScene(C_Scene* scene) { assert(scene); if (m_CurrentScene) StopScene(); m_CurrentScene = scene; }
void C_Client::Stop() { StopScene(); UnloadScreen(); StopEngine(); m_Network.Stop(); OnStop(); }
/** \brief Initializers the event handlers * * \return void * */ void CShooterGame::InitHandlers() { /////////////////////////////////////////////////// // // On User Events // /////////////////////////////////////////////////// m_Handlers["OnUserEvent"] = { { // // STATE::SPLASH_SCREEN // (int)STATE::SPLASH_SCREEN, [&](SDL_Event& ev){ int nEventType = ev.user.code; if ( nEventType == DemoEngine::EVENTTYPE::SCENE_EVENT ) { int nState = static_cast<int>(reinterpret_cast<uintptr_t>(ev.user.data1)); int nScene = static_cast<int>(reinterpret_cast<uintptr_t>(ev.user.data2)); switch ( nScene ) { case SCENE_0_Intro: // // SCENE::INTRO // if ( nState == (int)SceneSplashScreen::STATE::FADE_OUT ) { if ( !CSingleton<CProperties>::Instance()->Property( "Game", "Quit" ) ) { LoadAndRunScene( SCENE_1_Game ); SetState( (int)STATE::GAME ); } } if ( nState == (int)SceneSplashScreen::STATE::END ) { if ( CSingleton<CProperties>::Instance()->Property( "Game", "Quit" ) ) { SetRunning( false ); } } break; default: break; } } if ( nEventType == DemoEngine::EVENTTYPE::CUSTOM_EVENT ) { int nEventID = static_cast<int>(reinterpret_cast<uintptr_t>(ev.user.data1)); int nScene = static_cast<int>(reinterpret_cast<uintptr_t>(ev.user.data2)); switch ( nEventID ) { case (int)EVENT::START_NEW_GAME: SetSceneState( nScene, (int)SceneSplashScreen::STATE::PRE_FADE_OUT ); LoadAndRunScene( SCENE_1_Game ); SetState( (int)STATE::GAME ); break; case (int)EVENT::SHOW_HIGHSCORES: SetSceneState( nScene, (int)SceneSplashScreen::STATE::PRE_FADE_OUT_NOMUSIC ); LoadAndRunScene( SCENE_3_Highscores ); SetState( (int)STATE::HIGHSCORES ); break; case (int)EVENT::SHOW_HELP: SetSceneState( nScene, (int)SceneSplashScreen::STATE::PRE_FADE_OUT_NOMUSIC ); LoadAndRunScene( SCENE_4_Help ); SetState( (int)STATE::HELP ); break; case (int)EVENT::END_GAME: SetSceneState( nScene, (int)SceneSplashScreen::STATE::PRE_FADE_OUT ); CSingleton<CProperties>::Instance()->Property( "Game", "Quit" ) = (bool)true; break; default: break; } } } }, { // // STATE::HIGHSCORES // (int)STATE::HIGHSCORES, [&](SDL_Event& ev){ int nEventType = ev.user.code; if ( nEventType == DemoEngine::EVENTTYPE::SCENE_EVENT ) { int nState = static_cast<int>(reinterpret_cast<uintptr_t>(ev.user.data1)); int nScene = static_cast<int>(reinterpret_cast<uintptr_t>(ev.user.data2)); switch ( nScene ) { case SCENE_3_Highscores: // // SCENE::HELP // if ( nState == (int)SceneHighscores::STATE::FADE_OUT ) { LoadAndRunScene( SCENE_0_Intro ); SetSceneState( SCENE_0_Intro, (int)SceneSplashScreen::STATE::START_NOMUSIC ); SetState( (int)STATE::SPLASH_SCREEN ); } break; default: break; } } } }, { // // STATE::HELP // (int)STATE::HELP, [&](SDL_Event& ev){ int nEventType = ev.user.code; if ( nEventType == DemoEngine::EVENTTYPE::SCENE_EVENT ) { int nState = static_cast<int>(reinterpret_cast<uintptr_t>(ev.user.data1)); int nScene = static_cast<int>(reinterpret_cast<uintptr_t>(ev.user.data2)); switch ( nScene ) { case SCENE_4_Help: // // SCENE::HELP // if ( nState == (int)SceneHelp::STATE::FADE_OUT ) { LoadAndRunScene( SCENE_0_Intro ); SetSceneState( SCENE_0_Intro, (int)SceneSplashScreen::STATE::START_NOMUSIC ); SetState( (int)STATE::SPLASH_SCREEN ); } break; default: break; } } } }, { // // STATE::GAME // (int)STATE::GAME, [&](SDL_Event& ev){ int nEventType = ev.user.code; if ( nEventType == DemoEngine::EVENTTYPE::SCENE_EVENT ) { int nState = static_cast<int>(reinterpret_cast<uintptr_t>(ev.user.data1)); int nScene = static_cast<int>(reinterpret_cast<uintptr_t>(ev.user.data2)); switch ( nScene ) { case SCENE_1_Game: // // SCENE::GAME // if ( nState == (int)SceneLevel::STATE::FADE_OUT ) { LoadAndRunScene( SCENE_2_GameOver ); SetState( (int)STATE::GAME_OVER ); } break; default: break; } } } }, { // // STATE::GAME_OVER // (int)STATE::GAME_OVER, [&](SDL_Event& ev){ int nEventType = ev.user.code; if ( nEventType == DemoEngine::EVENTTYPE::SCENE_EVENT ) { int nState = static_cast<int>(reinterpret_cast<uintptr_t>(ev.user.data1)); int nScene = static_cast<int>(reinterpret_cast<uintptr_t>(ev.user.data2)); switch ( nScene ) { case SCENE_2_GameOver: // // SCENE::GAME_OVER // if ( nState == (int)SceneGameOver::STATE::FADE_OUT ) { #ifdef DEBUG_SCENE1 cout << "Restarting Scene 1 because DEBUG_SCENE1 defined." << endl; StopScene( SCENE_1_Game ); LoadAndRunScene( SCENE_1_Game ); SetState( (int)STATE::GAME ); #else LoadAndRunScene( SCENE_0_Intro ); SetState( (int)STATE::SPLASH_SCREEN ); #endif } break; default: break; } } } } }; /////////////////////////////////////////////////// // // Post Render // /////////////////////////////////////////////////// m_Handlers["PostRender"] = { { // // STATE::SPLASH_SCREEN // (int)CGame::STATE::ANY_STATE, [&](SDL_Event& ev){ DISCARD_UNUNSED_PARAMETER( ev ); auto& renderer = CSingleton<CRenderer>::Instance(); int x = m_iScreenW + m_noteImgWidth - ((int)(GetRealTime()*60) % (m_iScreenW + m_noteImgWidth*2)); renderer->Render( TextFactory::Instance()->Get( RESOURCE::TEXT_BETA_BUILD_NOTE ), x, m_iScreenH-12 ); } } }; /////////////////////////////////////////////////// // // OnKeyDown // /////////////////////////////////////////////////// m_Handlers["OnKeyDown"] = { { // // STATE::TESTS // (int)CGame::STATE::ANY_STATE, [&](SDL_Event& ev){ switch ( ev.key.keysym.sym ) { #ifdef DEBUG case SDLK_1: cout << "Setting Game speed to 0.1" << endl; CSingleton<CProperties>::Instance()->Property( "Game", "Speed" ) = (float)0.1f; break; case SDLK_2: cout << "Setting Game speed to 0.3" << endl; CSingleton<CProperties>::Instance()->Property( "Game", "Speed" ) = (float)0.3f; break; case SDLK_3: cout << "Setting Game speed to 0.5" << endl; CSingleton<CProperties>::Instance()->Property( "Game", "Speed" ) = (float)0.5f; break; case SDLK_4: cout << "Setting Game speed to 0.7" << endl; CSingleton<CProperties>::Instance()->Property( "Game", "Speed" ) = (float)0.7f; break; case SDLK_5: cout << "Setting Game speed to 1.0" << endl; CSingleton<CProperties>::Instance()->Property( "Game", "Speed" ) = (float)1.0f; break; case SDLK_6: cout << "Setting Game speed to 1.3" << endl; CSingleton<CProperties>::Instance()->Property( "Game", "Speed" ) = (float)1.3f; break; case SDLK_7: cout << "Setting Game speed to 1.5" << endl; CSingleton<CProperties>::Instance()->Property( "Game", "Speed" ) = (float)1.5f; break; case SDLK_8: cout << "Setting Game speed to 1.7" << endl; CSingleton<CProperties>::Instance()->Property( "Game", "Speed" ) = (float)1.7f; break; #endif case SDLK_F1: cout << "Setting FPS to 10" << endl; SDL_setFramerate( &m_fpsManager, 10 ); break; case SDLK_F2: cout << "Setting FPS to 20" << endl; SDL_setFramerate( &m_fpsManager, 20 ); break; case SDLK_F3: cout << "Setting FPS to 30" << endl; SDL_setFramerate( &m_fpsManager, 30 ); break; case SDLK_F4: cout << "Setting FPS to 40" << endl; SDL_setFramerate( &m_fpsManager, 40 ); break; case SDLK_F5: cout << "Setting FPS to 50" << endl; SDL_setFramerate( &m_fpsManager, 50 ); break; case SDLK_F6: cout << "Setting FPS to 60" << endl; SDL_setFramerate( &m_fpsManager, 60 ); break; case SDLK_F7: cout << "Setting FPS to 120" << endl; SDL_setFramerate( &m_fpsManager, 120 ); break; default: break; } } } }; }