space-tycoon-monogame/TestyMono/Game1.cs

165 lines
4.5 KiB
C#
Raw Permalink Normal View History

2017-11-11 00:21:16 +00:00
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);
}
}
}