summaryrefslogtreecommitdiffhomepage
path: root/examples/core/core_basic_screen_manager.c
diff options
context:
space:
mode:
authorraysan5 <[email protected]>2021-06-30 18:53:55 +0200
committerraysan5 <[email protected]>2021-06-30 18:53:55 +0200
commitfe8dad48e2dae58f9a0c87936b74e0d14eb05ede (patch)
tree686d01a62c7308c48796a73396be2b85cc850669 /examples/core/core_basic_screen_manager.c
parent2cda1502a34e158b369c15c55e28d52959e00cac (diff)
downloadraylib-fe8dad48e2dae58f9a0c87936b74e0d14eb05ede.tar.gz
raylib-fe8dad48e2dae58f9a0c87936b74e0d14eb05ede.zip
ADDED: EXAMPLE: core_basic_screen_manager
Diffstat (limited to 'examples/core/core_basic_screen_manager.c')
-rw-r--r--examples/core/core_basic_screen_manager.c150
1 files changed, 150 insertions, 0 deletions
diff --git a/examples/core/core_basic_screen_manager.c b/examples/core/core_basic_screen_manager.c
new file mode 100644
index 00000000..9c19d862
--- /dev/null
+++ b/examples/core/core_basic_screen_manager.c
@@ -0,0 +1,150 @@
+/*******************************************************************************************
+*
+* raylib [core] examples - basic screen manager
+*
+* This example illustrates a very simple screen manager based on a states machines
+*
+* This test has been created using raylib 1.1 (www.raylib.com)
+* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
+*
+* Copyright (c) 2021 Ramon Santamaria (@raysan5)
+*
+********************************************************************************************/
+
+#include "raylib.h"
+
+//------------------------------------------------------------------------------------------
+// Types and Structures Definition
+//------------------------------------------------------------------------------------------
+typedef enum GameScreen { LOGO = 0, TITLE, GAMEPLAY, ENDING } GameScreen;
+
+//------------------------------------------------------------------------------------------
+// Main entry point
+//------------------------------------------------------------------------------------------
+int main(void)
+{
+ // Initialization
+ //--------------------------------------------------------------------------------------
+ const int screenWidth = 800;
+ const int screenHeight = 450;
+
+ InitWindow(screenWidth, screenHeight, "raylib [core] example - basic screen manager");
+
+ GameScreen currentScreen = LOGO;
+
+ // TODO: Initialize all required variables and load all required data here!
+
+ int framesCounter = 0; // Useful to count frames
+
+ SetTargetFPS(60); // Set desired framerate (frames-per-second)
+ //--------------------------------------------------------------------------------------
+
+ // Main game loop
+ while (!WindowShouldClose()) // Detect window close button or ESC key
+ {
+ // Update
+ //----------------------------------------------------------------------------------
+ switch(currentScreen)
+ {
+ case LOGO:
+ {
+ // TODO: Update LOGO screen variables here!
+
+ framesCounter++; // Count frames
+
+ // Wait for 2 seconds (120 frames) before jumping to TITLE screen
+ if (framesCounter > 120)
+ {
+ currentScreen = TITLE;
+ }
+ } break;
+ case TITLE:
+ {
+ // TODO: Update TITLE screen variables here!
+
+ // Press enter to change to GAMEPLAY screen
+ if (IsKeyPressed(KEY_ENTER) || IsGestureDetected(GESTURE_TAP))
+ {
+ currentScreen = GAMEPLAY;
+ }
+ } break;
+ case GAMEPLAY:
+ {
+ // TODO: Update GAMEPLAY screen variables here!
+
+ // Press enter to change to ENDING screen
+ if (IsKeyPressed(KEY_ENTER) || IsGestureDetected(GESTURE_TAP))
+ {
+ currentScreen = ENDING;
+ }
+ } break;
+ case ENDING:
+ {
+ // TODO: Update ENDING screen variables here!
+
+ // Press enter to return to TITLE screen
+ if (IsKeyPressed(KEY_ENTER) || IsGestureDetected(GESTURE_TAP))
+ {
+ currentScreen = TITLE;
+ }
+ } break;
+ default: break;
+ }
+ //----------------------------------------------------------------------------------
+
+ // Draw
+ //----------------------------------------------------------------------------------
+ BeginDrawing();
+
+ ClearBackground(RAYWHITE);
+
+ switch(currentScreen)
+ {
+ case LOGO:
+ {
+ // TODO: Draw LOGO screen here!
+ DrawText("LOGO SCREEN", 20, 20, 40, LIGHTGRAY);
+ DrawText("WAIT for 2 SECONDS...", 290, 220, 20, GRAY);
+
+ } break;
+ case TITLE:
+ {
+ // TODO: Draw TITLE screen here!
+ DrawRectangle(0, 0, screenWidth, screenHeight, GREEN);
+ DrawText("TITLE SCREEN", 20, 20, 40, DARKGREEN);
+ DrawText("PRESS ENTER or TAP to JUMP to GAMEPLAY SCREEN", 120, 220, 20, DARKGREEN);
+
+ } break;
+ case GAMEPLAY:
+ {
+ // TODO: Draw GAMEPLAY screen here!
+ DrawRectangle(0, 0, screenWidth, screenHeight, PURPLE);
+ DrawText("GAMEPLAY SCREEN", 20, 20, 40, MAROON);
+ DrawText("PRESS ENTER or TAP to JUMP to ENDING SCREEN", 130, 220, 20, MAROON);
+
+ } break;
+ case ENDING:
+ {
+ // TODO: Draw ENDING screen here!
+ DrawRectangle(0, 0, screenWidth, screenHeight, BLUE);
+ DrawText("ENDING SCREEN", 20, 20, 40, DARKBLUE);
+ DrawText("PRESS ENTER or TAP to RETURN to TITLE SCREEN", 120, 220, 20, DARKBLUE);
+
+ } break;
+ default: break;
+ }
+
+ EndDrawing();
+ //----------------------------------------------------------------------------------
+ }
+
+ // De-Initialization
+ //--------------------------------------------------------------------------------------
+
+ // TODO: Unload all loaded data (textures, fonts, audio) here!
+
+ CloseWindow(); // Close window and OpenGL context
+ //--------------------------------------------------------------------------------------
+
+ return 0;
+}