using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Input.Touch;
using Microsoft.Xna.Framework.Media;
using Harlinn.WindowsPhone.XNA.Engine.Imaging;
using Harlinn.WindowsPhone.XNA.Engine.Particles;
using Harlinn.WindowsPhone.XNA.Engine.Extensions;
namespace XNAImageIntro
{
/// <summary>
/// This is the main type for your game
/// </summary>
public class XNAImageIntroGame : Microsoft.Xna.Framework.Game
{
GraphicsDeviceManager graphics;
SpriteBatch spriteBatch;
XNAImage textureImage;
Texture2D texture;
public XNAImageIntroGame()
{
graphics = new GraphicsDeviceManager(this);
Content.RootDirectory = "Content";
// Frame rate is 30 fps by default for Windows Phone.
TargetElapsedTime = TimeSpan.FromTicks(333333);
// Extend battery life under lock.
InactiveSleepTime = TimeSpan.FromSeconds(1);
graphics.PreferredBackBufferWidth = 480;
graphics.PreferredBackBufferHeight = 800;
}
/// <summary>
/// Allows the game to perform any initialization it needs to before starting to run.
/// This is where it can query for any required services and load any non-graphic
/// related content. Calling base.Initialize will enumerate through any components
/// and initialize them as well.
/// </summary>
protected override void Initialize()
{
// TODO: Add your initialization logic here
base.Initialize();
}
/// <summary>
/// LoadContent will be called once per game and is the place to load
/// all of your content.
/// </summary>
protected override void LoadContent()
{
// Create a new SpriteBatch, which can be used to draw textures.
spriteBatch = new SpriteBatch(GraphicsDevice);
Rectangle rect = Window.ClientBounds;
texture = new Texture2D(GraphicsDevice, rect.Width, rect.Height, false, SurfaceFormat.Color);
textureImage = new XNAImage(rect.Width, rect.Height, Color.CornflowerBlue);
Color color = Color.Green;
textureImage.FillEllipseCentered(480/3, 275, 75, 75, color);
color = Color.Blue;
textureImage.FillEllipseCentered(480*2/3, 275, 75, 75, color);
XNAImage noisyImage = new XNAImage(200, 200);
noisyImage.PerlinNoise(1.2, 0.025, 0.9, 3, 5);
textureImage.Blit(new Rectangle(140, 400, 200, 100), noisyImage, new Rectangle(0, 0, 200, 100),BlendMode.Subtractive);
textureImage.Blit(new Rectangle(140, 500, 200, 100), noisyImage, new Rectangle(0, 100, 200, 100));
texture.Assign(textureImage);
}
/// <summary>
/// UnloadContent will be called once per game and is the place to unload
/// all content.
/// </summary>
protected override void UnloadContent()
{
// TODO: Unload any non ContentManager content here
}
/// <summary>
/// Allows the game to run logic such as updating the world,
/// checking for collisions, gathering input, and playing audio.
/// </summary>
/// <param name="gameTime">Provides a snapshot of timing values.</param>
protected override void Update(GameTime gameTime)
{
try
{
// Allows the game to exit
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
this.Exit();
ProcessInput();
}
catch (Exception exc)
{
System.Diagnostics.Debugger.Log(1, "Exception", exc.Message);
}
base.Update(gameTime);
}
protected void ProcessInput()
{
MouseState mouseState = Mouse.GetState();
if (mouseState.LeftButton == ButtonState.Pressed)
{
}
}
/// <summary>
/// This is called when the game should draw itself.
/// </summary>
/// <param name="gameTime">Provides a snapshot of timing values.</param>
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.Green);
spriteBatch.Begin(SpriteSortMode.FrontToBack, null);
try
{
Rectangle rectangle = Window.ClientBounds;
Vector2 pos = new Vector2(rectangle.X, rectangle.Y);
spriteBatch.Draw(texture, pos, null, Color.White, 0, Vector2.Zero, 1, SpriteEffects.None, 1);
}
finally
{
spriteBatch.End();
}
base.Draw(gameTime);
}
}
}