187 lines
5.5 KiB
C#
Executable File
187 lines
5.5 KiB
C#
Executable File
using System;
|
|
using System.Collections.Generic;
|
|
using System.Diagnostics;
|
|
using System.Linq;
|
|
using DepthsBelow.GUI;
|
|
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.Media;
|
|
|
|
namespace DepthsBelow
|
|
{
|
|
/// <summary>
|
|
/// This is the main type for your game
|
|
/// </summary>
|
|
public class Core : Microsoft.Xna.Framework.Game
|
|
{
|
|
public static GraphicsDeviceManager GraphicsDeviceManager;
|
|
SpriteBatch spriteBatch;
|
|
|
|
public Camera Camera;
|
|
|
|
public static MouseInput MouseInput;
|
|
public static KeyboardInput KeyboardInput;
|
|
public List<Soldier> Squad;
|
|
public List<SmallEnemy> Swarm;
|
|
public static Map Map;
|
|
|
|
public SmallEnemy TestMonster;
|
|
|
|
public Core()
|
|
{
|
|
GraphicsDeviceManager = new GraphicsDeviceManager(this);
|
|
Content.RootDirectory = "Content";
|
|
|
|
GraphicsDeviceManager.PreferredBackBufferWidth = 1280;
|
|
GraphicsDeviceManager.PreferredBackBufferHeight = 720;
|
|
GraphicsDeviceManager.IsFullScreen = false;
|
|
|
|
//graphics.SynchronizeWithVerticalRetrace = false;
|
|
this.IsFixedTimeStep = false;
|
|
GraphicsDeviceManager.ApplyChanges();
|
|
|
|
this.IsMouseVisible = true;
|
|
}
|
|
|
|
/// <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
|
|
Camera = new Camera(this);
|
|
Squad = new List<Soldier>();
|
|
Swarm = new List<SmallEnemy>();
|
|
|
|
TestMonster = new SmallEnemy(this, ref Swarm);
|
|
|
|
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);
|
|
|
|
Map = Content.Load<Map>("maps/Cave.Level1");
|
|
// Load map objects
|
|
Map.ParseObjects(this);
|
|
|
|
// TODO: use this.Content to load your game content here
|
|
Soldier.LoadContent(this);
|
|
SmallEnemy.LoadContent(this);
|
|
|
|
MouseInput = new MouseInput(this);
|
|
MouseInput.LoadContent();
|
|
KeyboardInput = new KeyboardInput(this);
|
|
|
|
// Test GUI frames
|
|
var frame = new GUI.Button()
|
|
{
|
|
X = 100,
|
|
Width = 48,
|
|
Height = 23,
|
|
Texture = Content.Load<Texture2D>("images/Enter"),
|
|
OnClick = delegate(Point clickPos)
|
|
{
|
|
Debug.WriteLine("That ugly button was clicked at (" + clickPos.X + "," + clickPos.Y + ")");
|
|
}
|
|
};
|
|
var text = new GUI.Text(Content.Load<SpriteFont>("Arial"));
|
|
text.Value = "Hello world!";
|
|
frame.Add(text);
|
|
}
|
|
|
|
/// <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)
|
|
{
|
|
// Allows the game to exit
|
|
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
|
|
this.Exit();
|
|
|
|
Camera.Update(gameTime);
|
|
MouseInput.Update(gameTime);
|
|
KeyboardInput.Update(gameTime);
|
|
|
|
// Update soldiers in squad
|
|
foreach (var soldier in Squad)
|
|
soldier.Update(gameTime);
|
|
|
|
foreach (var body in Swarm)
|
|
body.Update(gameTime);
|
|
|
|
GUIManager.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)
|
|
{
|
|
GraphicsDevice.Clear(Color.Black);
|
|
|
|
// Start drawing using the Camera transform
|
|
spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, SamplerState.PointClamp, null, null, null,
|
|
Camera.Transform);
|
|
|
|
// Draw the level
|
|
Map.Draw(spriteBatch);
|
|
|
|
// Draw units
|
|
foreach (var soldier in Squad)
|
|
{
|
|
var sr = soldier.GetComponent<Component.SpriteRenderer>();
|
|
if (sr != null)
|
|
sr.Draw(spriteBatch);
|
|
}
|
|
foreach (var body in Swarm)
|
|
{
|
|
var sr = body.GetComponent<Component.SpriteRenderer>();
|
|
if (sr != null)
|
|
sr.Draw(spriteBatch);
|
|
}
|
|
|
|
// Draw mouse input visuals
|
|
MouseInput.Draw(spriteBatch);
|
|
|
|
TestMonster.GetComponent<Component.SpriteRenderer>().Draw(spriteBatch);
|
|
|
|
spriteBatch.End();
|
|
|
|
// Start drawing GUI components
|
|
spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, SamplerState.AnisotropicClamp, null, null, null, Matrix.Identity);
|
|
GUIManager.Draw(spriteBatch);
|
|
spriteBatch.End();
|
|
|
|
base.Draw(gameTime);
|
|
}
|
|
}
|
|
}
|