local fadeDuration = 0.35
local startDelay = {0.55, 0.45}
local startScale = 2.5
local endScale = 1.0
local bounceDuration = 0.15
local elapsedTime = {0, 0}
local isAnimating = {false, false}
local isBouncing = {false, false}

function onStartCountdown()
    for i = 1, 2 do
        elapsedTime[i] = 0
        isAnimating[i] = true
        setProperty('iconP' .. i .. '.alpha', 0)
        setProperty('iconP' .. i .. '.scale.x', startScale)
        setProperty('iconP' .. i .. '.scale.y', startScale)
        isBouncing[i] = false
    end
end

function animateIcon(index, elapsed)
    elapsedTime[index] = elapsedTime[index] + elapsed
    if elapsedTime[index] > startDelay[index] then
        local progress = (elapsedTime[index] - startDelay[index]) / fadeDuration
        if progress < 1 then
            setProperty('iconP' .. index .. '.alpha', progress)
            local scaleProgress = progress
            setProperty('iconP' .. index .. '.scale.x', startScale + (endScale - startScale) * scaleProgress)
            setProperty('iconP' .. index .. '.scale.y', startScale + (endScale - startScale) * scaleProgress)
        else
            setProperty('iconP' .. index .. '.alpha', 1)
            setProperty('iconP' .. index .. '.scale.x', endScale)
            setProperty('iconP' .. index .. '.scale.y', endScale)
            isBouncing[index] = true
            elapsedTime[index] = 0
            isAnimating[index] = false
        end
    end
end

function bounceIcon(index, elapsed)
    elapsedTime[index] = elapsedTime[index] + elapsed
    local bounceProgress = elapsedTime[index] / bounceDuration
    local scaleFactor
    if bounceProgress < 0.5 then
        scaleFactor = endScale - (endScale - (endScale * 0.8)) * (bounceProgress * 2)
    else
        scaleFactor = (endScale * 0.8) + (endScale - (endScale * 0.8)) * ((bounceProgress - 0.5) * 2)
    end
    setProperty('iconP' .. index .. '.scale.x', scaleFactor)
    setProperty('iconP' .. index .. '.scale.y', scaleFactor)
    if bounceProgress >= 1 then
        setProperty('iconP' .. index .. '.scale.x', endScale)
        setProperty('iconP' .. index .. '.scale.y', endScale)
        isBouncing[index] = false
    end
end

function onUpdate(elapsed)
    for i = 1, 2 do
        if isAnimating[i] then
            animateIcon(i, elapsed)
        end
        if isBouncing[i] then
            bounceIcon(i, elapsed)
        end
    end
end
Edit

Pub: 02 Jan 2025 17:34 UTC

Views: 74