fadeColor is a helper function to make smooth color transitions suitable to fading effects.

```function fadeColor(
time, prologue, attack, sustain, decay, epilogue,
)
-- [0, prologue)
if time < prologue then
return
255
end

-- (prologue, prologue + attack]
time = time - prologue
if time < attack then
return
( math.cos( time / attack * math.pi ) + 1 ) / 2 * 255
end

-- (prologue + attack, prologue + attack + sustain]
time = time - attack
if time < sustain then
return
0
end

-- (prologue + attack + sustain, prologue + attack + sustain + decay]
time = time - sustain
if time < decay then
return
255 - ( ( math.cos( time / decay * math.pi ) + 1 ) / 2 * 255 )
end

-- (prologue + attack + sustain + decay, prologue + attack + sustain + decay + epilogue]
time = time - decay
if time < epilogue then
return
255
end

-- End of fading, return all nils.
end
```

Arguments:

• time is the 0-based time to evaluate the color.
• prologue is how much time the resulting color will be equal to the fully opaque fade_in color.
• attack is how much time it takes to go from fully opaque fade_in to fully transparent fade_in.
• sustain is how much time the color resulting color will be the fully transparent fade_in.
• decay is how much time it takes to go from fully transparent fade_out color to fully opaque fade_out color.
• epilogue is how much time the resulting color will be equal to the fully opaque fade_out color.

The function returns nil when the transitions are over. The transitions from fully opaque to fully transparent are evaluated with the cosine function to make it smooth. Usage:

```-- This is part of your update loop, draw whatever you need here.

-- Evaluate a color that makes the screen fade from white and then to black.
local r, g, b, a = fadeColor(
dt,
2,   -- Two seconds opaque white.
2,   -- Two seconds to make it transparent.
3,   -- Three seconds transparent.
2,   -- Two seconds to go to opaque black.
0,   -- Zero seconds opaque black.
255, 255, 255, -- White.
0, 0, 0 -- Black.
)

-- If the fading is done, better go do something else...
if not r then
-- Change state to something else...
return
end

-- Fill the entire screen with the resulting color.
love.graphics.setColor( r, g, b, a )
love.graphics.rectangle( 'fill', 0, 0, love.graphics.getWidth(), love.graphics.getHeight() )
```