diff options
| author | Ray <raysan5@gmail.com> | 2014-09-21 14:10:33 +0200 |
|---|---|---|
| committer | Ray <raysan5@gmail.com> | 2014-09-21 14:10:33 +0200 |
| commit | 1b2225a622054a733b70009a5f928cf2fc580fb1 (patch) | |
| tree | 2e51dcfbd98542651167bb008a00dc474877714e /examples/shapes_logo_raylib_anim.c | |
| parent | 0cdeb4e2672f162a5c45eb46739797f70f59db9b (diff) | |
| download | raylib-1b2225a622054a733b70009a5f928cf2fc580fb1.tar.gz raylib-1b2225a622054a733b70009a5f928cf2fc580fb1.zip | |
Rename ex06b_logo_anim.c to shapes_logo_raylib_anim.c
Diffstat (limited to 'examples/shapes_logo_raylib_anim.c')
| -rw-r--r-- | examples/shapes_logo_raylib_anim.c | 171 |
1 files changed, 171 insertions, 0 deletions
diff --git a/examples/shapes_logo_raylib_anim.c b/examples/shapes_logo_raylib_anim.c new file mode 100644 index 00000000..54e41eb9 --- /dev/null +++ b/examples/shapes_logo_raylib_anim.c @@ -0,0 +1,171 @@ +/******************************************************************************************* +* +* 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; +} |
