/******************************************************************************************* * * JUST DO - Global Game Jam 2015 Videogame * Experimental puzzle game that lets the user try to find a logic solution to * different shape-color-based situations. * * Developed by: Ramon Santamaria (Ray San) * * This game has been created using raylib 1.6 (www.raylib.com) * raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details) * * raylib - Copyright (c) 2015 Ramon Santamaria (Ray San - raysan@raysanweb.com) * ********************************************************************************************/ #include "raylib.h" #include "screens/screens.h" // NOTE: Defines currentScreen #if defined(PLATFORM_WEB) #include #endif //---------------------------------------------------------------------------------- // Global Variables Definition (local to this module) //---------------------------------------------------------------------------------- const int screenWidth = 1280; // Moved to screens.h const int screenHeight = 720; // Moved to screens.h // 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; int framesCounter = 0; //static Sound levelWin; Music music; //---------------------------------------------------------------------------------- // Local Functions Declaration //---------------------------------------------------------------------------------- void TransitionToScreen(int screen); void UpdateTransition(void); void DrawTransition(void); void UpdateDrawFrame(void); // Update and Draw one frame //---------------------------------------------------------------------------------- // Main entry point //---------------------------------------------------------------------------------- int main(void) { // Initialization //--------------------------------------------------------- const char windowTitle[30] = "JUST DO"; //SetupFlags(FLAG_FULLSCREEN_MODE); InitWindow(screenWidth, screenHeight, windowTitle); // Load global data here (assets that must be available in all screens, i.e. fonts) InitAudioDevice(); levelWin = LoadSound("resources/win.wav"); music = LoadMusicStream("resources/ambient.ogg"); // Setup and Init first screen currentScreen = LOGO; InitLogoScreen(); #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()) // Detect window close button or ESC key { if (IsKeyPressed(KEY_SPACE)) PlaySound(levelWin); UpdateDrawFrame(); } #endif // De-Initialization //-------------------------------------------------------------------------------------- // Unload all global loaded data (i.e. fonts) here! UnloadSound(levelWin); UnloadMusicStream(music); CloseAudioDevice(); CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- return 0; } //---------------------------------------------------------------------------------- // Local Functions Definition //---------------------------------------------------------------------------------- void TransitionToScreen(int screen) { onTransition = true; transFromScreen = currentScreen; transToScreen = screen; } void UpdateTransition(void) { if (!transFadeOut) { transAlpha += 0.02f; if (transAlpha >= 1.0) { transAlpha = 1.0; currentScreen = transToScreen; transFadeOut = true; framesCounter = 0; } } else // Transition fade out logic { transAlpha -= 0.02f; if (transAlpha <= 0) { transAlpha = 0; transFadeOut = false; onTransition = false; transFromScreen = -1; transToScreen = -1; } } } void DrawTransition(void) { DrawRectangle(0, 0, GetScreenWidth(), GetScreenHeight(), Fade(RAYWHITE, transAlpha)); } void UpdateDrawFrame(void) { // Update //---------------------------------------------------------------------------------- if (!onTransition) { if (IsKeyPressed('0')) { TransitionToScreen(LEVEL00); InitLevel00Screen(); } else if (IsKeyPressed('1')) { TransitionToScreen(LEVEL01); InitLevel01Screen(); } else if (IsKeyPressed('2')) { TransitionToScreen(LEVEL02); InitLevel02Screen(); } else if (IsKeyPressed('3')) { TransitionToScreen(LEVEL03); InitLevel03Screen(); } else if (IsKeyPressed('4')) { TransitionToScreen(LEVEL04); InitLevel04Screen(); } else if (IsKeyPressed('5')) { TransitionToScreen(LEVEL05); InitLevel05Screen(); } else if (IsKeyPressed('6')) { TransitionToScreen(LEVEL06); InitLevel06Screen(); } else if (IsKeyPressed('7')) { TransitionToScreen(LEVEL07); InitLevel07Screen(); } else if (IsKeyPressed('8')) { TransitionToScreen(LEVEL08); InitLevel08Screen(); } else if (IsKeyPressed('9')) { TransitionToScreen(LEVEL09); InitLevel08Screen(); } UpdateMusicStream(music); switch(currentScreen) { case LOGO: { UpdateLogoScreen(); if (FinishLogoScreen()) { UnloadLogoScreen(); TransitionToScreen(LEVEL00); InitLevel00Screen(); PlayMusicStream(music); SetMusicVolume(music, 0.6f); } } break; case LEVEL00: { UpdateLevel00Screen(); if (FinishLevel00Screen()) { UnloadLevel00Screen(); TransitionToScreen(LEVEL01); InitLevel01Screen(); } } break; case LEVEL01: { UpdateLevel01Screen(); if (FinishLevel01Screen()) { UnloadLevel01Screen(); TransitionToScreen(LEVEL02); InitLevel02Screen(); } } break; case LEVEL02: { UpdateLevel02Screen(); if (FinishLevel02Screen()) { UnloadLevel02Screen(); TransitionToScreen(LEVEL03); InitLevel03Screen(); } } break; case LEVEL03: { UpdateLevel03Screen(); if (FinishLevel03Screen()) { UnloadLevel03Screen(); TransitionToScreen(LEVEL04); InitLevel04Screen(); } } break; case LEVEL04: { UpdateLevel04Screen(); if (FinishLevel04Screen()) { UnloadLevel04Screen(); TransitionToScreen(LEVEL05); InitLevel05Screen(); } } break; case LEVEL05: { UpdateLevel05Screen(); if (FinishLevel05Screen()) { UnloadLevel05Screen(); TransitionToScreen(LEVEL06); InitLevel06Screen(); } } break; case LEVEL06: { UpdateLevel06Screen(); if (FinishLevel06Screen()) { UnloadLevel06Screen(); TransitionToScreen(LEVEL07); InitLevel07Screen(); } } break; case LEVEL07: { UpdateLevel07Screen(); if (FinishLevel07Screen()) { UnloadLevel07Screen(); TransitionToScreen(LEVEL08); InitLevel08Screen(); } } break; case LEVEL08: { UpdateLevel08Screen(); if (FinishLevel08Screen()) { UnloadLevel08Screen(); TransitionToScreen(LEVEL09); InitLevel09Screen(); } } break; case LEVEL09: { UpdateLevel09Screen(); if (FinishLevel09Screen()) { UnloadLevel09Screen(); TransitionToScreen(LEVEL00); InitLevel00Screen(); } } break; default: break; } } else UpdateTransition(); // Update transition (fade-in, fade-out) //---------------------------------------------------------------------------------- // Draw //---------------------------------------------------------------------------------- BeginDrawing(); ClearBackground(RAYWHITE); switch(currentScreen) { case LOGO: DrawLogoScreen(); break; case LEVEL00: DrawLevel00Screen(); break; case LEVEL01: DrawLevel01Screen(); break; case LEVEL02: DrawLevel02Screen(); break; case LEVEL03: DrawLevel03Screen(); break; case LEVEL04: DrawLevel04Screen(); break; case LEVEL05: DrawLevel05Screen(); break; case LEVEL06: DrawLevel06Screen(); break; case LEVEL07: DrawLevel07Screen(); break; case LEVEL08: DrawLevel08Screen(); break; case LEVEL09: DrawLevel09Screen(); break; default: break; } if (onTransition) DrawTransition(); EndDrawing(); //---------------------------------------------------------------------------------- }