aboutsummaryrefslogtreecommitdiff
path: root/examples/shapes_logo_raylib_anim.lua
blob: c6c4499561210110fe9e8ef9fe5d24e9b7c71a38 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
-------------------------------------------------------------------------------------------
--
--  raylib [shapes] example - raylib logo animation
--
--  This example has been created using raylib 1.6 (www.raylib.com)
--  raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
--
--  Copyright (c) 2014-2016 Ramon Santamaria (@raysan5)
--
-------------------------------------------------------------------------------------------

-- Initialization
-------------------------------------------------------------------------------------------
local screenWidth = 800
local screenHeight = 450

InitWindow(screenWidth, screenHeight, "raylib [shapes] example - raylib logo animation")

local logoPositionX = screenWidth/2 - 128
local logoPositionY = screenHeight/2 - 128

local framesCounter = 0
local lettersCount = 0

local topSideRecWidth = 16
local leftSideRecHeight = 16

local bottomSideRecWidth = 16
local rightSideRecHeight = 16

local state = 0                -- Tracking animation states (State Machine)
local alpha = 1.0              -- Useful for fading

SetTargetFPS(60)               -- Set target frames-per-second
-------------------------------------------------------------------------------------------

-- Main game loop
while not WindowShouldClose() do            -- Detect window close button or ESC key
    -- Update
    ---------------------------------------------------------------------------------------
    if (state == 0) then                    -- State 0: Small box blinking
        framesCounter = framesCounter + 1

        if (framesCounter == 120) then
            state = 1
            framesCounter = 0               -- Reset counter... will be used later...
        end
    elseif (state == 1) then                -- State 1: Top and left bars growing
        topSideRecWidth = topSideRecWidth + 4
        leftSideRecHeight = leftSideRecHeight + 4

        if (topSideRecWidth == 256) then state = 2 end
    elseif (state == 2) then                -- State 2: Bottom and right bars growing
        bottomSideRecWidth = bottomSideRecWidth + 4
        rightSideRecHeight = rightSideRecHeight + 4

        if (bottomSideRecWidth == 256) then state = 3 end
    elseif (state == 3) then                -- State 3: Letters appearing (one by one)
        framesCounter = framesCounter + 1

        if (framesCounter//12 == 1) then    -- Every 12 frames, one more letter!
            lettersCount = lettersCount + 1
            framesCounter = 0
        end

        if (lettersCount >= 10) then        -- When all letters have appeared, just fade out everything
            alpha = alpha - 0.02

            if (alpha <= 0.0) then
                alpha = 0.0
                state = 4
            end
        end
    elseif (state == 4) then                -- State 4: Reset and Replay
        if (IsKeyPressed(KEY.R)) then
            framesCounter = 0
            lettersCount = 0

            topSideRecWidth = 16
            leftSideRecHeight = 16

            bottomSideRecWidth = 16
            rightSideRecHeight = 16

            alpha = 1.0
            state = 0                       -- Return to State 0
        end
    end
    ---------------------------------------------------------------------------------------

    -- Draw
    ---------------------------------------------------------------------------------------
    BeginDrawing()

        ClearBackground(RAYWHITE)

        if (state == 0) then
            if ((framesCounter//15)%2 == 1) then DrawRectangle(logoPositionX, logoPositionY, 16, 16, BLACK) end
        elseif (state == 1) then
            DrawRectangle(logoPositionX, logoPositionY, topSideRecWidth, 16, BLACK)
            DrawRectangle(logoPositionX, logoPositionY, 16, leftSideRecHeight, BLACK)
        elseif (state == 2) then
            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)
        elseif (state == 3) then
            DrawRectangle(logoPositionX, logoPositionY, topSideRecWidth, 16, Fade(BLACK, alpha))
            DrawRectangle(logoPositionX, logoPositionY + 16, 16, leftSideRecHeight - 32, Fade(BLACK, alpha))

            DrawRectangle(logoPositionX + 240, logoPositionY + 16, 16, rightSideRecHeight - 32, Fade(BLACK, alpha))
            DrawRectangle(logoPositionX, logoPositionY + 240, bottomSideRecWidth, 16, Fade(BLACK, alpha))

            DrawRectangle(screenWidth/2 - 112, screenHeight/2 - 112, 224, 224, Fade(RAYWHITE, alpha))

            DrawText(string.sub("raylib", 0, lettersCount), screenWidth/2 - 44, screenHeight/2 + 48, 50, Fade(BLACK, alpha))
        elseif (state == 4) then DrawText("[R] REPLAY", 340, 200, 20, GRAY) end

    EndDrawing()
    ---------------------------------------------------------------------------------------
end

-- De-Initialization
-------------------------------------------------------------------------------------------
CloseWindow()        -- Close window and OpenGL context
-------------------------------------------------------------------------------------------