165 lines
4.5 KiB
C#
165 lines
4.5 KiB
C#
|
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
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// This is the main type for your game.
|
|||
|
/// </summary>
|
|||
|
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();
|
|||
|
}
|
|||
|
|
|||
|
/// <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);
|
|||
|
Player.LoadContent(graphics);
|
|||
|
Cursor.LoadContent(graphics);
|
|||
|
//TODO: use this.Content to load your game 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) {
|
|||
|
// 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);
|
|||
|
}
|
|||
|
|
|||
|
/// <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) {
|
|||
|
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);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|