/******************************************************************************************* * * raylib - Advance Game template * * * * * This game has been created using raylib (www.raylib.com) * raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details) * * Copyright (c) 2014 Ramon Santamaria (Ray San - raysan@raysanweb.com) * ********************************************************************************************/ #include "raylib.h" #include "screens/screens.h" // NOTE: Defines global variable: currentScreen //---------------------------------------------------------------------------------- // Global Variables Definition (local to this module) //---------------------------------------------------------------------------------- // Required variables to manage screen transitions (fade-in, fade-out) float transAlpha = 0; bool onTransition = false; bool transFadeOut = false; int transFromScreen = -1; int transToScreen = -1; //---------------------------------------------------------------------------------- // Local Functions Declaration //---------------------------------------------------------------------------------- void TransitionToScreen(int screen); void UpdateTransition(void); void DrawTransition(void); //---------------------------------------------------------------------------------- // Main entry point //---------------------------------------------------------------------------------- int main(void) { // Initialization //--------------------------------------------------------- const int screenWidth = 800; const int screenHeight = 450; const char windowTitle[30] = ""; InitWindow(screenWidth, screenHeight, windowTitle); // TODO: Load global data here (assets that must be available in all screens, i.e. fonts) // Setup and Init first screen currentScreen = LOGO; InitLogoScreen(); SetTargetFPS(60); //---------------------------------------------------------- // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { // Update //---------------------------------------------------------------------------------- if (!onTransition) { switch(currentScreen) { case LOGO: { UpdateLogoScreen(); if (FinishLogoScreen()) TransitionToScreen(TITLE); } break; case TITLE: { UpdateTitleScreen(); if (FinishTitleScreen() == 1) TransitionToScreen(OPTIONS); else if (FinishTitleScreen() == 2) TransitionToScreen(GAMEPLAY); } break; case OPTIONS: { UpdateOptionsScreen(); if (FinishOptionsScreen()) TransitionToScreen(TITLE); } break; case GAMEPLAY: { UpdateGameplayScreen(); if (FinishGameplayScreen()) TransitionToScreen(ENDING); } break; case ENDING: { UpdateEndingScreen(); if (FinishEndingScreen()) TransitionToScreen(TITLE); } break; default: break; } } else { // Update transition (fade-in, fade-out) UpdateTransition(); } //---------------------------------------------------------------------------------- // Draw //---------------------------------------------------------------------------------- BeginDrawing(); ClearBackground(RAYWHITE); switch(currentScreen) { case LOGO: DrawLogoScreen(); break; case TITLE: DrawTitleScreen(); break; case OPTIONS: DrawOptionsScreen(); break; case GAMEPLAY: DrawGameplayScreen(); break; case ENDING: DrawEndingScreen(); break; default: break; } if (onTransition) DrawTransition(); //DrawFPS(10, 10); EndDrawing(); //---------------------------------------------------------------------------------- } // De-Initialization //-------------------------------------------------------------------------------------- // TODO: Unload all global loaded data (i.e. fonts) here! CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- return 0; } void TransitionToScreen(int screen) { onTransition = true; transFromScreen = currentScreen; transToScreen = screen; } void UpdateTransition(void) { if (!transFadeOut) { transAlpha += 0.01; if (transAlpha >= 1.0) { transAlpha = 1.0; switch (transFromScreen) { case LOGO: UnloadLogoScreen(); break; case TITLE: UnloadTitleScreen(); break; case OPTIONS: UnloadOptionsScreen(); break; case GAMEPLAY: UnloadGameplayScreen(); break; case ENDING: UnloadEndingScreen(); break; default: break; } switch (transToScreen) { case LOGO: { InitLogoScreen(); currentScreen = LOGO; } break; case TITLE: { InitTitleScreen(); currentScreen = TITLE; } break; case OPTIONS: { InitOptionsScreen(); currentScreen = OPTIONS; } break; case GAMEPLAY: { InitGameplayScreen(); currentScreen = GAMEPLAY; } break; case ENDING: { InitEndingScreen(); currentScreen = ENDING; } break; default: break; } transFadeOut = true; } } else // Transition fade out logic { transAlpha -= 0.01f; if (transAlpha <= 0) { transAlpha = 0; transFadeOut = false; onTransition = false; transFromScreen = -1; transToScreen = -1; } } } void DrawTransition(void) { DrawRectangle(0, 0, GetScreenWidth(), GetScreenHeight(), Fade(BLACK, transAlpha)); }