87 lines
2.3 KiB
C#
87 lines
2.3 KiB
C#
using Microsoft.Xna.Framework;
|
|
using Microsoft.Xna.Framework.Graphics;
|
|
using RecrownedAthenaeum.ScreenSystem;
|
|
using System;
|
|
|
|
namespace RhythmBullet.Screens.Transitions
|
|
{
|
|
internal class FadeAwayTransition : IDisposable, ITransition
|
|
{
|
|
private float time;
|
|
public Texture2D curtain;
|
|
public Rectangle curtainSize;
|
|
private Color color;
|
|
private float progR, progG, progB, progA;
|
|
private float rR, rG, rB, rA;
|
|
|
|
internal FadeAwayTransition(float time)
|
|
{
|
|
this.time = time;
|
|
}
|
|
|
|
public void InitiateTransition(Rectangle dimensions)
|
|
{
|
|
curtainSize = dimensions;
|
|
color = Color.White;
|
|
rR = (0 - 254) / time;
|
|
rG = (0 - 254) / time;
|
|
rB = (0 - 254) / time;
|
|
rA = (0 - 254) / time;
|
|
|
|
progA = color.A;
|
|
progR = color.R;
|
|
progG = color.G;
|
|
progB = color.B;
|
|
}
|
|
|
|
private bool Fade(float deltaf)
|
|
{
|
|
if (progR > 0 || progG > 0 || progB > 0)
|
|
{
|
|
progR += rR * deltaf;
|
|
progR = Math.Max(progR, 0);
|
|
progG += rG * deltaf;
|
|
progG = Math.Max(progG, 0);
|
|
progB += rB * deltaf;
|
|
progB = Math.Max(progB, 0);
|
|
progA += rA * deltaf;
|
|
progA = Math.Max(progA, 0);
|
|
color.R = (byte)progR;
|
|
color.G = (byte)progG;
|
|
color.B = (byte)progB;
|
|
color.A = (byte)progA;
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
public void DrawTransition(SpriteBatch batch)
|
|
{
|
|
if (curtain != null)
|
|
{
|
|
batch.Draw(curtain, curtainSize, color);
|
|
}
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
curtain.Dispose();
|
|
}
|
|
|
|
public bool UpdateEnteringTransition(double delta, bool assetsLoaded)
|
|
{
|
|
return Fade((float)delta);
|
|
}
|
|
|
|
public bool UpdateExitingTransition(double delta, bool assetsLoaded)
|
|
{
|
|
return Fade((float)delta);
|
|
}
|
|
|
|
public void UpdatePreviousScreenFrame(RenderTarget2D previousScreenFrame)
|
|
{
|
|
curtain = previousScreenFrame;
|
|
}
|
|
}
|
|
}
|