#region File Description
/* ============================================
* SplashScreens.cs
* ============================================
*
* Upon the game's startup, Splash Screens are shown. The first screen shows the
* company logo and then it slowly fades away and displays the game engine logo.
* After the game engine logo fades away, the user is taken to the Title Screen.
*
*
*/
#endregion
#region Using Statements
using System;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.Graphics;
#endregion
namespace CycloneGameEngine
{
class SplashScreens : GameScreen
{
#region Fields
public enum GameType { Splash1, Splash2}
GameType gametype = new GameType();
#region Splash Screens
#region Studio Logo
Texture2D StudioLogo;
float logoFade = 0;
bool wasNorm = false;
bool logoStarted = false;
#endregion End of Studio Logo
#region Engine Logo
Texture2D EngineLogo;
float logoFade2 = 0;
bool wasNorm2 = false;
bool logoStarted2 = false;
#endregion End of Engine Logo
#endregion End of Splash Screens
ContentManager content;
#endregion
#region Initialization
// Constructor.
public SplashScreens()
{
}
// Loads graphics content for this screen. The background texture is quite
// big, so we use our own local ContentManager to load it. This allows us
// to unload before going from the menus into the game itself, wheras if we
// used the shared ContentManager provided by the Game class, the content
// would remain loaded forever.
//
public override void LoadContent()
{
if (content == null)
content = new ContentManager(ScreenManager.Game.Services, "Content");
StudioLogo = content.Load<Texture2D>
EngineLogo = content.Load<Texture2D>
}
// Unloads graphics content for this screen.
public override void UnloadContent()
{
content.Unload();
}
#endregion
#region Update and Draw
// Updates the background screen. Unlike most screens, this should not
// transition off even if it has been covered by another screen: it is
// supposed to be covered, after all! This overload forces the
// coveredByOtherScreen parameter to false in order to stop the base
// Update method wanting to transition off.
public override void Update(GameTime gameTime, bool otherScreenHasFocus,
bool coveredByOtherScreen)
{
#region Update the 1st Splash Screen
gametype = GameType.Splash1;
// If we are at the splash screen
if (gametype == GameType.Splash1)
{
if (!logoStarted)
{
logoStarted = true;
}
// Fade the logo in , then out.
if ((logoFade <= 245) && (wasNorm == false))
logoFade += (float)0.8;
if (logoFade > 244)
wasNorm = true;
if ((logoFade > 11) && (wasNorm == true))
logoFade -= 1;
if ((logoFade < 11) && (wasNorm == true))
{
gametype = GameType.Splash2;
}
}
#endregion End of Drawing the 1st Splash Screen
#region Update 2nd Splash Screen
if (gametype == GameType.Splash2)
{
if (!logoStarted2)
{
logoStarted2 = true;
}
// Fade the logo in , then out.
if ((logoFade2 <= 245) && (wasNorm2 == false))
logoFade2 += (float)0.8;
if (logoFade2 > 244)
wasNorm2 = true;
if ((logoFade2 > 11) && (wasNorm2 == true))
logoFade2 -= 1;
if ((logoFade2 < 11) && (wasNorm2 == true))
{
ExitScreen();
}
}
#endregion End of Drawing the 2nd Splash Screen
base.Update(gameTime, false, false);
}
// Draws the splash screens.
public override void Draw(GameTime gameTime)
{
SpriteBatch spriteBatch = ScreenManager.SpriteBatch;
#region Draw the 1st Splash Screen
if (gametype == GameType.Splash1)
{
// Set the background color to black
ScreenManager.GraphicsDevice.Clear(Color.Black);
spriteBatch.Begin(SpriteSortMode.Texture, BlendState.Additive, SamplerState.PointWrap, DepthStencilState.Default, null);
// Draw the logo to screen.
spriteBatch.Draw(StudioLogo, new Vector2(ScreenManager.GraphicsDevice.Viewport.Width / 2 - (StudioLogo.Width / 2), ScreenManager.GraphicsDevice.Viewport.Height / 2 - (StudioLogo.Height / 2)), new Color(255, 255, 255, (byte)logoFade));
// End the spritebatch
spriteBatch.End();
}
#endregion End of Drawing the 1st Splash Screen
#region Draw the 2nd Splash Screen
if (gametype == GameType.Splash2)
{
// Set the background color to black
ScreenManager.GraphicsDevice.Clear(Color.Black);
spriteBatch.Begin(SpriteSortMode.Texture, BlendState.Additive, SamplerState.PointWrap, DepthStencilState.Default, null);
// Draw the logo to screen.
spriteBatch.Draw(EngineLogo, new Vector2(ScreenManager.GraphicsDevice.Viewport.Width / 2 - (EngineLogo.Width / 2), ScreenManager.GraphicsDevice.Viewport.Height / 2 - (EngineLogo.Height / 2)), new Color(255, 255, 255, (byte)logoFade2));
// End the spritebatch
spriteBatch.End();
}
#endregion End of Drawing the 2nd Splash Screen
}
#endregion
}
}
No comments:
Post a Comment