// ---------------------------------------------------------------------------- // Name: Update // // Desc: Updates the scene. // ---------------------------------------------------------------------------- HRESULT CGame::Update( FLOAT fElapsedTime ) { GameState NextState; // The way this works... Each state has an initialize function, an update // function and a render function. The update function can return a new // state to switch to, or return the current state to not switch states. switch( m_CurrentState ) { case InitScreen: NextState = TitleScreen; break; case TitleScreen: // We are in the title screen, update it. NextState = UpdateTitleScreen( fElapsedTime ); break; case GameScreen: // We are in the game screen, update it. NextState = UpdateGameScreen( fElapsedTime ); break; default: return D3D_OK; } if( NextState != m_CurrentState ) { // We are switching states. DbgPrint( "Switching states." ); m_PreviousState = m_CurrentState; m_CurrentState = NextState; switch( NextState ) { case ExitingScreen: // Causes the program to shut down. PostMessage( NULL, WM_CLOSE, 0U, 0U ); return D3D_OK; case GameScreen: // If we switched to the GameScreen state, initialize the game. InitGameScreen(); break; case TitleScreen: // If we switched to the TitleScreen state, initialize the title // screen. InitTitleScreen(); break; } } return D3D_OK; }
void UpdateTransition(void) { if (!transFadeOut) { transAlpha += 0.05f; if (transAlpha >= 1.0) { transAlpha = 1.0; switch (transFromScreen) { case LOGO_RL: rlUnloadLogoScreen(); break; case TITLE: UnloadTitleScreen(); break; case GAMEPLAY: UnloadGameplayScreen(); break; default: break; } switch (transToScreen) { case LOGO_RL: { rlInitLogoScreen(); currentScreen = LOGO_RL; } break; case TITLE: { InitTitleScreen(); currentScreen = TITLE; } break; case GAMEPLAY: { InitGameplayScreen(); currentScreen = GAMEPLAY; } break; default: break; } transFadeOut = true; } } else // Transition fade out logic { transAlpha -= 0.05f; if (transAlpha <= 0) { transAlpha = 0; transFadeOut = false; onTransition = false; transFromScreen = -1; transToScreen = -1; } } }
// Update transition effect static void UpdateTransition(void) { if (!transFadeOut) { transAlpha += 0.05f; // NOTE: Due to float internal representation, condition jumps on 1.0f instead of 1.05f // For that reason we compare against 1.01f, to avoid last frame loading stop if ((int)transAlpha >= 1) { transAlpha = 1.0f; // Unload current screen switch (transFromScreen) { case LOGO: UnloadLogoScreen(); break; case TITLE: UnloadTitleScreen(); break; case GAMEPLAY: UnloadGameplayScreen(); break; case ENDING: UnloadEndingScreen(); break; default: break; } // Load next screen switch (transToScreen) { case LOGO: InitLogoScreen(); break; case TITLE: InitTitleScreen(); break; case GAMEPLAY: InitGameplayScreen(); break; case ENDING: InitEndingScreen(); break; default: break; } currentScreen = transToScreen; // Activate fade out effect to next loaded screen transFadeOut = true; } } else // Transition fade out logic { transAlpha -= 0.05f; if ((int)transAlpha <= 0) { transAlpha = 0.0f; transFadeOut = false; onTransition = false; transFromScreen = -1; transToScreen = -1; } } }
void ChangeToScreen(int screen) { switch (currentScreen) { case LOGO_RL: rlUnloadLogoScreen(); break; case TITLE: UnloadTitleScreen(); break; case GAMEPLAY: UnloadGameplayScreen(); break; default: break; } switch (screen) { case LOGO_RL: rlInitLogoScreen(); break; case TITLE: InitTitleScreen(); break; case GAMEPLAY: InitGameplayScreen(); break; default: break; } currentScreen = screen; }
void ChangeToScreen(int screen) { switch (currentScreen) { case LOGO: UnloadLogoScreen(); break; case LOGO_RL: rlUnloadLogoScreen(); break; case TITLE: UnloadTitleScreen(); break; case ATTIC: UnloadAtticScreen(); break; case AISLE01: UnloadAisle01Screen();break; case AISLE02: UnloadAisle02Screen();break; case ARMORY: UnloadArmoryScreen();break; case LIVINGROOM: UnloadLivingroomScreen();break; case KITCHEN: UnloadKitchenScreen(); break; case BATHROOM: UnloadBathroomScreen(); break; case ENDING: UnloadEndingScreen(); break; default: break; } switch (screen) { case LOGO: InitLogoScreen(); break; case LOGO_RL: rlInitLogoScreen(); break; case TITLE: InitTitleScreen(); break; case ATTIC: InitAtticScreen(); break; case AISLE01: InitAisle01Screen();break; case AISLE02: InitAisle02Screen();break; case ARMORY: InitArmoryScreen();break; case LIVINGROOM: InitLivingroomScreen();break; case KITCHEN: InitKitchenScreen(); break; case BATHROOM: InitBathroomScreen(); break; case ENDING: InitEndingScreen(); break; default: break; } currentScreen = screen; }
// Change to next screen, no transition static void ChangeToScreen(int screen) { // Unload current screen switch (currentScreen) { case LOGO: UnloadLogoScreen(); break; case TITLE: UnloadTitleScreen(); break; case GAMEPLAY: UnloadGameplayScreen(); break; case ENDING: UnloadEndingScreen(); break; default: break; } // Init next screen switch (screen) { case LOGO: InitLogoScreen(); break; case TITLE: InitTitleScreen(); break; case GAMEPLAY: InitGameplayScreen(); break; case ENDING: InitEndingScreen(); break; default: break; } currentScreen = screen; }
//---------------------------------------------------------------------------------- // Main entry point //---------------------------------------------------------------------------------- int main(void) { // Initialization (Note windowTitle is unused on Android) //--------------------------------------------------------- InitWindow(screenWidth, screenHeight, "KOALA SEASONS"); // Load global data here (assets that must be available in all screens, i.e. fonts) font = LoadFont("resources/graphics/mainfont.png"); atlas01 = LoadTexture("resources/graphics/atlas01.png"); atlas02 = LoadTexture("resources/graphics/atlas02.png"); #if defined(PLATFORM_WEB) || defined(PLATFORM_RPI) || defined(PLATFORM_ANDROID) colorBlend = LoadShader("resources/shaders/glsl100/base.vs", "resources/shaders/glsl100/blend_color.fs"); #else colorBlend = LoadShader("resources/shaders/glsl330/base.vs", "resources/shaders/glsl330/blend_color.fs"); #endif InitAudioDevice(); // Load sounds data fxJump = LoadSound("resources/audio/jump.ogg"); fxDash = LoadSound("resources/audio/dash.ogg"); fxEatLeaves = LoadSound("resources/audio/eat_leaves.ogg"); fxHitResin = LoadSound("resources/audio/resin_hit.ogg"); fxWind = LoadSound("resources/audio/wind_sound.ogg"); fxDieSnake = LoadSound("resources/audio/snake_die.ogg"); fxDieDingo = LoadSound("resources/audio/dingo_die.ogg"); fxDieOwl = LoadSound("resources/audio/owl_die.ogg"); music = LoadMusicStream("resources/audio/jngl.xm"); PlayMusicStream(music); SetMusicVolume(music, 1.0f); // Define and init first screen // NOTE: currentScreen is defined in screens.h as a global variable currentScreen = TITLE; InitLogoScreen(); //InitOptionsScreen(); InitTitleScreen(); InitGameplayScreen(); InitEndingScreen(); #if defined(PLATFORM_WEB) emscripten_set_main_loop(UpdateDrawFrame, 0, 1); #else SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- // Main game loop while (!WindowShouldClose()) UpdateDrawFrame(); #endif // De-Initialization //-------------------------------------------------------------------------------------- UnloadEndingScreen(); UnloadTitleScreen(); UnloadGameplayScreen(); UnloadLogoScreen(); UnloadTexture(atlas01); UnloadTexture(atlas02); UnloadFont(font); UnloadShader(colorBlend); // Unload color overlay blending shader UnloadSound(fxJump); UnloadSound(fxDash); UnloadSound(fxEatLeaves); UnloadSound(fxHitResin); UnloadSound(fxWind); UnloadSound(fxDieSnake); UnloadSound(fxDieDingo); UnloadSound(fxDieOwl); UnloadMusicStream(music); CloseAudioDevice(); // Close audio device CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- return 0; }
void UpdateTransition(void) { if (!transFadeOut) { transAlpha += 0.05f; if (transAlpha >= 1.0) { transAlpha = 1.0; switch (transFromScreen) { case LOGO: UnloadLogoScreen(); break; case LOGO_RL: rlUnloadLogoScreen(); break; case TITLE: UnloadTitleScreen(); break; case ATTIC: UnloadAtticScreen(); break; case AISLE01: UnloadAisle01Screen();break; case AISLE02: UnloadAisle02Screen();break; case ARMORY: UnloadArmoryScreen();break; case LIVINGROOM: UnloadLivingroomScreen();break; case KITCHEN: UnloadKitchenScreen(); break; case BATHROOM: UnloadBathroomScreen(); break; case ENDING: UnloadEndingScreen(); break; default: break; } switch (transToScreen) { case LOGO: { InitLogoScreen(); currentScreen = LOGO; } break; case LOGO_RL: { rlInitLogoScreen(); currentScreen = LOGO_RL; } break; case TITLE: { InitTitleScreen(); currentScreen = TITLE; } break; case ATTIC: { InitAtticScreen(); currentScreen = ATTIC; } break; case AISLE01: { InitAisle01Screen(); currentScreen = AISLE01; } break; case AISLE02: { InitAisle02Screen(); currentScreen = AISLE02; } break; case BATHROOM: { InitBathroomScreen(); currentScreen = BATHROOM; } break; case LIVINGROOM: { InitLivingroomScreen(); currentScreen = LIVINGROOM; } break; case KITCHEN: { InitKitchenScreen(); currentScreen = KITCHEN; } break; case ARMORY: { InitArmoryScreen(); currentScreen = ARMORY; } break; case ENDING: { InitEndingScreen(); currentScreen = ENDING; } break; default: break; } transFadeOut = true; } } else // Transition fade out logic { transAlpha -= 0.05f; if (transAlpha <= 0) { transAlpha = 0; transFadeOut = false; onTransition = false; transFromScreen = -1; transToScreen = -1; } } }