using System;
using System.Collections.Generic;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Storage;
namespace Microsoft.Xna.Samples.VirtualGamePad
{
///
/// This is the main type for your game
///
public class Game1 : Microsoft.Xna.Framework.Game
{
GraphicsDeviceManager graphics;
SpriteBatch spriteBatch;
Texture2D texture, caracter;
Vector2 position = new Vector2();
Color caracterColor = Color.White;
SpriteFont font;
public Game1()
{
graphics = new GraphicsDeviceManager(this);
Content.RootDirectory = "Content";
graphics.IsFullScreen = true;
}
///
/// 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.
///
protected override void Initialize()
{
// TODO: Add your initialization logic here
// Set the initial mouse position
//Mouse.SetPosition(160,240);
base.Initialize();
}
///
/// LoadContent will be called once per game and is the place to load
/// all of your content.
///
protected override void LoadContent()
{
// Create a new SpriteBatch, which can be used to draw textures.
spriteBatch = new SpriteBatch(GraphicsDevice);
// TODO: use this.Content to load your game content here
texture = Content.Load("gamepad.png");
caracter = Content.Load("monogameicon");
font = Content.Load("font");
// Set the virtual GamePad
ButtonDefinition BButton = new ButtonDefinition();
BButton.Texture = texture;
BButton.Position = new Vector2(200,150);
BButton.Type = Buttons.B;
BButton.TextureRect = new Rectangle(72,77,36,36);
ButtonDefinition AButton = new ButtonDefinition();
AButton.Texture = texture;
AButton.Position = new Vector2(150,150);
AButton.Type = Buttons.A;
AButton.TextureRect = new Rectangle(73,114,36,36);
GamePad.ButtonsDefinitions.Add(BButton);
GamePad.ButtonsDefinitions.Add(AButton);
ThumbStickDefinition thumbStick = new ThumbStickDefinition();
thumbStick.Position = new Vector2(200,200);
thumbStick.Texture = texture;
thumbStick.TextureRect = new Rectangle(2,2,68,68);
GamePad.LeftThumbStickDefinition = thumbStick;
}
///
/// Allows the game to run logic such as updating the world,
/// checking for collisions, gathering input, and playing audio.
///
/// Provides a snapshot of timing values.
protected override void Update(GameTime gameTime)
{
// Allows the game to exit
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
this.Exit();
// TODO: Add your update logic here
if (GamePad.GetState(PlayerIndex.One).Buttons.A == ButtonState.Pressed)
caracterColor = Color.Green;
if (GamePad.GetState(PlayerIndex.One).Buttons.B == ButtonState.Pressed)
caracterColor = Color.Red;
// change the caracter position and center in touch
//MouseState mouse = Mouse.GetState();
//position.X = mouse.X - (caracter.Width/2);
//position.Y = mouse.Y - (caracter.Height/2);
// change the caracter position using thumbstick
GamePadState gamepastatus = GamePad.GetState(PlayerIndex.One);
position.Y += (int) (gamepastatus.ThumbSticks.Left.Y * -4);
position.X += (int) (gamepastatus.ThumbSticks.Left.X * 4);
// change the caracter position using accelerometer
//position.Y += (int)(Accelerometer.GetState().Acceleration.Y * -4);
//position.X += (int)(Accelerometer.GetState().Acceleration.X * 4);
// Keep inside the screen
// right
if(position.X + caracter.Width > Window.ClientBounds.Width)
{
position.X = Window.ClientBounds.Width - caracter.Width;
}
// bottom
if (position.Y + caracter.Height > Window.ClientBounds.Height)
{
position.Y = Window.ClientBounds.Height - caracter.Height;
}
// left
if (position.X < 0)
{
position.X = 0;
}
// top
if (position.Y < 0)
{
position.Y = 0;
}
base.Update(gameTime);
}
///
/// This is called when the game should draw itself.
///
/// Provides a snapshot of timing values.
protected override void Draw(GameTime gameTime)
{
graphics.GraphicsDevice.Clear(Color.CornflowerBlue);
spriteBatch.Begin();
spriteBatch.Draw(caracter,position,caracterColor);
spriteBatch.DrawString(font,GamePad.GetState(PlayerIndex.One).ThumbSticks.Left.ToString(),Vector2.One,Color.Black);
spriteBatch.DrawString(font,Accelerometer.GetState().Acceleration.ToString(),new Vector2(1,40),Color.Black);
// Draw the virtual GamePad
GamePad.Draw(gameTime,spriteBatch);
spriteBatch.End();
base.Draw(gameTime);
}
}
}