using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; namespace TestyMono { class Cursor { static int CURSOR_SIZE = 8; Vector2 position; static Texture2D texture; Rectangle dimensions; public Cursor() { position = new Vector2(0, 0); dimensions = new Rectangle(0, 0, CURSOR_SIZE, CURSOR_SIZE); } public static void LoadContent(GraphicsDeviceManager graphics) { texture = new Texture2D(graphics.GraphicsDevice, 1, 1); texture.SetData(new[] { Color.White }); } public void Update(GameTime gameTime) { var mousePos = Mouse.GetState().Position; position.X = (float)mousePos.X; position.Y = (float)mousePos.Y; dimensions.X = (int)position.X; dimensions.Y = (int)position.Y; } public void Draw(GameTime gameTime, SpriteBatch batch) { batch.Draw(texture, dimensions, Color.Gold); } } class Player { const int MOVEMENT_SPEED = 128; // pixels per second i guess? Vector2 position; Vector2 direction; Rectangle dimensions; static Texture2D texture; public Player() { position = new Vector2(0, 0); direction = new Vector2(0, 0); dimensions = new Rectangle(0, 0, 32, 32); } public static void LoadContent(GraphicsDeviceManager graphics) { texture = new Texture2D(graphics.GraphicsDevice, 1, 1); texture.SetData(new[] { Color.White }); } public void Update(GameTime gameTime) { var delta = new Vector2(0, 0); var state = Keyboard.GetState(); var deltaSeconds = (float)gameTime.ElapsedGameTime.TotalSeconds; if (state.IsKeyDown(Keys.W)) { position.Y -= 1 * deltaSeconds * MOVEMENT_SPEED; } else if (state.IsKeyDown(Keys.S)) { position.Y += 1 * deltaSeconds * MOVEMENT_SPEED; } if (state.IsKeyDown(Keys.A)) { position.X -= 1 * deltaSeconds * MOVEMENT_SPEED; } else if (state.IsKeyDown(Keys.D)) { position.X += 1 * deltaSeconds * MOVEMENT_SPEED; } dimensions.X = (int)position.X; dimensions.Y = (int)position.Y; } public void Draw(GameTime gameTime, SpriteBatch batch) { batch.Draw(texture, dimensions, Color.Orange); } } // Player /// /// This is the main type for your game. /// public class Game1 : Game { GraphicsDeviceManager graphics; SpriteBatch spriteBatch; // temp Cursor cursor; Player player; public Game1() { graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; player = new Player(); cursor = new Cursor(); } /// /// 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 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); Player.LoadContent(graphics); Cursor.LoadContent(graphics); //TODO: use this.Content to load your game content here } /// /// 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) { // For Mobile devices, this logic will close the Game when the Back button is pressed // Exit() is obsolete on iOS #if !__IOS__ && !__TVOS__ if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape)) Exit(); #endif // TODO: Add your update logic here player.Update(gameTime); cursor.Update(gameTime); 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); //TODO: Add your drawing code here spriteBatch.Begin(); player.Draw(gameTime, spriteBatch); cursor.Draw(gameTime, spriteBatch); spriteBatch.End(); base.Draw(gameTime); } } }