mirror of
				https://github.com/raysan5/raylib.git
				synced 2025-10-26 04:16:57 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			171 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			171 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*******************************************************************************************
 | |
| *
 | |
| *   raylib example 06b - raylib Logo Animation
 | |
| *
 | |
| *   This example has been created using raylib 1.0 (www.raylib.com)
 | |
| *   raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
 | |
| *
 | |
| *   Copyright (c) 2013 Ramon Santamaria (Ray San - raysan@raysanweb.com)
 | |
| *
 | |
| ********************************************************************************************/
 | |
| 
 | |
| #include "raylib.h"
 | |
| 
 | |
| int main()
 | |
| {
 | |
|     // Initialization
 | |
|     //--------------------------------------------------------------------------------------
 | |
|     int screenWidth = 800;
 | |
|     int screenHeight = 450;
 | |
|     
 | |
|     int logoPositionX = screenWidth/2 - 128;
 | |
|     int logoPositionY = screenHeight/2 - 128;
 | |
|     
 | |
|     int framesCounter = 0;
 | |
|     int lettersCount = 0;
 | |
|     
 | |
|     int topSideRecWidth = 16;
 | |
|     int leftSideRecHeight = 16;
 | |
|     
 | |
|     int bottomSideRecWidth = 16;
 | |
|     int rightSideRecHeight = 16;
 | |
|     
 | |
|     char raylib[8] = "       ";     // raylib text array, max 8 letters
 | |
|     
 | |
|     int state = 0;                  // Tracking animation states (State Machine)
 | |
|     
 | |
|     float alpha = 1.0;              // Useful for fading
 | |
|     
 | |
|     InitWindow(screenWidth, screenHeight, "raylib example 06b - raylib logo animation");
 | |
|     
 | |
|     SetTargetFPS(60);
 | |
|     //--------------------------------------------------------------------------------------
 | |
|     
 | |
|     // Main game loop
 | |
|     while (!WindowShouldClose())    // Detect window close button or ESC key
 | |
|     {
 | |
|         // Update
 | |
|         //----------------------------------------------------------------------------------
 | |
|         if (state == 0)                 // State 0: Small box blinking
 | |
|         {
 | |
|             framesCounter++;
 | |
|         
 | |
|             if (framesCounter == 120)
 | |
|             {                
 | |
|                 state = 1;
 | |
|                 framesCounter = 0;      // Reset counter... will be used later...
 | |
|             }
 | |
|         }
 | |
|         else if (state == 1)            // State 1: Top and left bars growing
 | |
|         {
 | |
|             topSideRecWidth += 4;
 | |
|             leftSideRecHeight += 4;
 | |
|             
 | |
|             if (topSideRecWidth == 256) state = 2;
 | |
|         }
 | |
|         else if (state == 2)            // State 2: Bottom and right bars growing
 | |
|         {
 | |
|             bottomSideRecWidth += 4;
 | |
|             rightSideRecHeight += 4;
 | |
|             
 | |
|             if (bottomSideRecWidth == 256) state = 3;
 | |
|         }
 | |
|         else if (state == 3)            // State 3: Letters appearing (one by one)
 | |
|         {
 | |
|             framesCounter++;
 | |
|             
 | |
|             if (framesCounter/12)       // Every 12 frames, one more letter!
 | |
|             {    
 | |
|                 lettersCount++;
 | |
|                 framesCounter = 0;
 | |
|             }
 | |
|             
 | |
|             switch (lettersCount)
 | |
|             {
 | |
|                 case 1: raylib[0] = 'r'; break;
 | |
|                 case 2: raylib[1] = 'a'; break;
 | |
|                 case 3: raylib[2] = 'y'; break;
 | |
|                 case 4: raylib[3] = 'l'; break;
 | |
|                 case 5: raylib[4] = 'i'; break;
 | |
|                 case 6: raylib[5] = 'b'; break;
 | |
|                 default: break;
 | |
|             }
 | |
|             
 | |
|             if (lettersCount >= 10)     // When all letters have appeared, just fade out everything
 | |
|             {
 | |
|                 alpha -= 0.02;
 | |
|                 
 | |
|                 if (alpha <= 0)
 | |
|                 {
 | |
|                     alpha = 0;
 | |
|                     state = 4;
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|         else if (state == 4)            // State 4: Reset and Replay
 | |
|         {
 | |
|             if (IsKeyPressed('R'))
 | |
|             {
 | |
|                 framesCounter = 0;
 | |
|                 lettersCount = 0;
 | |
|     
 | |
|                 topSideRecWidth = 16;
 | |
|                 leftSideRecHeight = 16;
 | |
|     
 | |
|                 bottomSideRecWidth = 16;
 | |
|                 rightSideRecHeight = 16;
 | |
|     
 | |
|                 for (int i = 0; i < 8; i++) raylib[i] = ' ';
 | |
|                 alpha = 1.0;
 | |
| 
 | |
|                 state = 0;      // Return to State 0
 | |
|             }
 | |
|         }
 | |
|         //----------------------------------------------------------------------------------
 | |
|         
 | |
|         // Draw
 | |
|         //----------------------------------------------------------------------------------
 | |
|         BeginDrawing();
 | |
|         
 | |
|             ClearBackground(RAYWHITE);
 | |
|             
 | |
|             if (state == 0)
 | |
|             {
 | |
|                 if ((framesCounter/15)%2) DrawRectangle(logoPositionX, logoPositionY, 16, 16, BLACK);
 | |
|             }
 | |
|             else if (state == 1)
 | |
|             {
 | |
|                 DrawRectangle(logoPositionX, logoPositionY, topSideRecWidth, 16, BLACK);
 | |
|                 DrawRectangle(logoPositionX, logoPositionY, 16, leftSideRecHeight, BLACK);
 | |
|             }
 | |
|             else if (state == 2)
 | |
|             {
 | |
|                 DrawRectangle(logoPositionX, logoPositionY, topSideRecWidth, 16, BLACK);
 | |
|                 DrawRectangle(logoPositionX, logoPositionY, 16, leftSideRecHeight, BLACK);
 | |
|                 
 | |
|                 DrawRectangle(logoPositionX + 240, logoPositionY, 16, rightSideRecHeight, BLACK);
 | |
|                 DrawRectangle(logoPositionX, logoPositionY + 240, bottomSideRecWidth, 16, BLACK);
 | |
|             }
 | |
|             else if (state == 3)
 | |
|             {
 | |
|                 DrawRectangle(logoPositionX, logoPositionY, 256, 256, Fade(BLACK, alpha));
 | |
|                 DrawRectangle(screenWidth/2 - 112, screenHeight/2 - 112, 224, 224, Fade(RAYWHITE, alpha));
 | |
|                 
 | |
|                 DrawText(raylib, 356, 273, 50, Fade(BLACK, alpha));
 | |
|             }
 | |
|             else if (state == 4)
 | |
|             {
 | |
|                 DrawText("[R] REPLAY", 340, 200, 20, GRAY);
 | |
|             }
 | |
|         
 | |
|         EndDrawing();
 | |
|         //----------------------------------------------------------------------------------
 | |
|     }
 | |
| 
 | |
|     // De-Initialization
 | |
|     //--------------------------------------------------------------------------------------
 | |
|     CloseWindow();        // Close window and OpenGL context
 | |
|     //--------------------------------------------------------------------------------------
 | |
|     
 | |
|     return 0;
 | |
| } | 
