Monster som inte dyker upp förren runda X
This almost looks like a game now!
This commit is contained in:
+256
-256
@@ -1,256 +1,256 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using DepthsBelow.GUI;
|
using DepthsBelow.GUI;
|
||||||
using Microsoft.Xna.Framework;
|
using Microsoft.Xna.Framework;
|
||||||
using Microsoft.Xna.Framework.Audio;
|
using Microsoft.Xna.Framework.Audio;
|
||||||
using Microsoft.Xna.Framework.Content;
|
using Microsoft.Xna.Framework.Content;
|
||||||
using Microsoft.Xna.Framework.GamerServices;
|
using Microsoft.Xna.Framework.GamerServices;
|
||||||
using Microsoft.Xna.Framework.Graphics;
|
using Microsoft.Xna.Framework.Graphics;
|
||||||
using Microsoft.Xna.Framework.Input;
|
using Microsoft.Xna.Framework.Input;
|
||||||
using Microsoft.Xna.Framework.Media;
|
using Microsoft.Xna.Framework.Media;
|
||||||
|
|
||||||
namespace DepthsBelow
|
namespace DepthsBelow
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// This is the main type for your game
|
/// This is the main type for your game
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class Core : Microsoft.Xna.Framework.Game
|
public class Core : Microsoft.Xna.Framework.Game
|
||||||
{
|
{
|
||||||
public static GraphicsDeviceManager GraphicsDeviceManager;
|
public static GraphicsDeviceManager GraphicsDeviceManager;
|
||||||
private SpriteBatch spriteBatch;
|
private SpriteBatch spriteBatch;
|
||||||
private Effect lightShader;
|
private Effect lightShader;
|
||||||
private RenderTarget2D lightRenderTarget;
|
private RenderTarget2D lightRenderTarget;
|
||||||
private RenderTarget2D sceneRenderTarget;
|
private RenderTarget2D sceneRenderTarget;
|
||||||
|
|
||||||
public Lua Lua;
|
public Lua Lua;
|
||||||
|
|
||||||
public TurnManager TurnManager;
|
public TurnManager TurnManager;
|
||||||
|
|
||||||
public Camera Camera;
|
public Camera Camera;
|
||||||
public Interface Interface;
|
public Interface Interface;
|
||||||
|
|
||||||
public/* static*/ MouseInput MouseInput;
|
public/* static*/ MouseInput MouseInput;
|
||||||
public static KeyboardInput KeyboardInput;
|
public static KeyboardInput KeyboardInput;
|
||||||
public List<Soldier> Squad;
|
public List<Soldier> Squad;
|
||||||
public DynamicGroupManager GroupManager;
|
public DynamicGroupManager GroupManager;
|
||||||
public List<SmallEnemy> Swarm;
|
public List<SmallEnemy> Swarm;
|
||||||
public List<Shot> Volley;
|
public List<Shot> Volley;
|
||||||
|
|
||||||
public List<MonsterSpawn> Spawn;
|
public List<MonsterSpawn> Spawn;
|
||||||
|
|
||||||
public static Map Map;
|
public static Map Map;
|
||||||
|
|
||||||
public SmallEnemy TestMonster;
|
public SmallEnemy TestMonster;
|
||||||
|
|
||||||
public int Brightness = 30;
|
public int Brightness = 30;
|
||||||
|
|
||||||
public Core()
|
public Core()
|
||||||
{
|
{
|
||||||
GraphicsDeviceManager = new GraphicsDeviceManager(this);
|
GraphicsDeviceManager = new GraphicsDeviceManager(this);
|
||||||
GraphicsDeviceManager.PreferredBackBufferWidth = 1280;
|
GraphicsDeviceManager.PreferredBackBufferWidth = 1280;
|
||||||
GraphicsDeviceManager.PreferredBackBufferHeight = 720;
|
GraphicsDeviceManager.PreferredBackBufferHeight = 720;
|
||||||
GraphicsDeviceManager.IsFullScreen = false;
|
GraphicsDeviceManager.IsFullScreen = false;
|
||||||
//graphics.SynchronizeWithVerticalRetrace = false;
|
//graphics.SynchronizeWithVerticalRetrace = false;
|
||||||
GraphicsDeviceManager.ApplyChanges();
|
GraphicsDeviceManager.ApplyChanges();
|
||||||
|
|
||||||
this.IsFixedTimeStep = false;
|
this.IsFixedTimeStep = false;
|
||||||
this.IsMouseVisible = true;
|
this.IsMouseVisible = true;
|
||||||
|
|
||||||
Content.RootDirectory = "Content";
|
Content.RootDirectory = "Content";
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Allows the game to perform any initialization it needs to before starting to run.
|
/// 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
|
/// 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
|
/// related content. Calling base.Initialize will enumerate through any components
|
||||||
/// and initialize them as well.
|
/// and initialize them as well.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
protected override void Initialize()
|
protected override void Initialize()
|
||||||
{
|
{
|
||||||
GameServices.AddService<GraphicsDevice>(GraphicsDevice);
|
GameServices.AddService<GraphicsDevice>(GraphicsDevice);
|
||||||
GameServices.AddService<ContentManager>(Content);
|
GameServices.AddService<ContentManager>(Content);
|
||||||
|
|
||||||
Lua = new Lua();
|
Lua = new Lua();
|
||||||
|
|
||||||
TurnManager = new TurnManager(new string[] { "Player", "Computer" });
|
TurnManager = new TurnManager(new string[] { "Player", "Computer" });
|
||||||
|
|
||||||
Camera = new Camera(this);
|
Camera = new Camera(this);
|
||||||
Interface = new Interface(this);
|
Interface = new Interface(this);
|
||||||
|
|
||||||
Squad = new List<Soldier>();
|
Squad = new List<Soldier>();
|
||||||
Swarm = new List<SmallEnemy>();
|
Swarm = new List<SmallEnemy>();
|
||||||
Volley = new List<Shot>();
|
Volley = new List<Shot>();
|
||||||
|
|
||||||
Spawn = new List<MonsterSpawn>();
|
Spawn = new List<MonsterSpawn>();
|
||||||
|
|
||||||
base.Initialize();
|
base.Initialize();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// LoadContent will be called once per game and is the place to load
|
/// LoadContent will be called once per game and is the place to load
|
||||||
/// all of your content.
|
/// all of your content.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
protected override void LoadContent()
|
protected override void LoadContent()
|
||||||
{
|
{
|
||||||
// Create a new SpriteBatch, which can be used to draw textures.
|
// Create a new SpriteBatch, which can be used to draw textures.
|
||||||
spriteBatch = new SpriteBatch(GraphicsDevice);
|
spriteBatch = new SpriteBatch(GraphicsDevice);
|
||||||
lightShader = Content.Load<Effect>("shaders/LightEffect");
|
lightShader = Content.Load<Effect>("shaders/LightEffect");
|
||||||
lightRenderTarget = new RenderTarget2D(GraphicsDevice, GraphicsDevice.Viewport.Width, GraphicsDevice.Viewport.Height, false, SurfaceFormat.Color, DepthFormat.None, 0, RenderTargetUsage.PreserveContents);
|
lightRenderTarget = new RenderTarget2D(GraphicsDevice, GraphicsDevice.Viewport.Width, GraphicsDevice.Viewport.Height, false, SurfaceFormat.Color, DepthFormat.None, 0, RenderTargetUsage.PreserveContents);
|
||||||
sceneRenderTarget = new RenderTarget2D(GraphicsDevice, GraphicsDevice.Viewport.Width, GraphicsDevice.Viewport.Height);
|
sceneRenderTarget = new RenderTarget2D(GraphicsDevice, GraphicsDevice.Viewport.Width, GraphicsDevice.Viewport.Height);
|
||||||
|
|
||||||
Map = Content.Load<Map>("maps/prototyp");
|
Map = Content.Load<Map>("maps/prototyp");
|
||||||
//Map = Content.Load<Map>("maps/Aztek.Test");
|
//Map = Content.Load<Map>("maps/Aztek.Test");
|
||||||
//Map = Content.Load<Map>("maps/Cave.Level1");
|
//Map = Content.Load<Map>("maps/Cave.Level1");
|
||||||
|
|
||||||
// Load map objects
|
// Load map objects
|
||||||
Map.ParseObjects(this);
|
Map.ParseObjects(this);
|
||||||
|
|
||||||
Squad[0].Name = "Dean H. Jones";
|
Squad[0].Name = "Dean H. Jones";
|
||||||
Squad[1].Name = "Walter L. Verville";
|
Squad[1].Name = "Walter L. Verville";
|
||||||
Squad[2].Name = "Patrick Y. Southerland";
|
Squad[2].Name = "Patrick Y. Southerland";
|
||||||
Squad[3].Name = "Andrew C. Friend";
|
Squad[3].Name = "Andrew C. Friend";
|
||||||
Squad[4].Name = "Gary B. Whitley";
|
Squad[4].Name = "Gary B. Whitley";
|
||||||
|
|
||||||
// Center the camera on a unit
|
// Center the camera on a unit
|
||||||
Camera.Position = Squad[0].Transform.World.Position * -1 + new Vector2(GraphicsDevice.Viewport.Width / 2, GraphicsDevice.Viewport.Height / 2);
|
Camera.Position = Squad[0].Transform.World.Position * -1 + new Vector2(GraphicsDevice.Viewport.Width / 2, GraphicsDevice.Viewport.Height / 2);
|
||||||
|
|
||||||
GroupManager = new DynamicGroupManager(Squad.Cast<Entity>().ToList(), (float)Grid.TileSize * 1.5f);
|
GroupManager = new DynamicGroupManager(Squad.Cast<Entity>().ToList(), (float)Grid.TileSize * 1.5f);
|
||||||
|
|
||||||
Interface.CreateUnitFrames(Squad);
|
Interface.CreateUnitFrames(Squad);
|
||||||
|
|
||||||
// TODO: use this.Content to load your game content here
|
// TODO: use this.Content to load your game content here
|
||||||
Soldier.LoadContent();
|
Soldier.LoadContent();
|
||||||
SmallEnemy.LoadContent();
|
SmallEnemy.LoadContent();
|
||||||
//Shot.LoadContent();
|
//Shot.LoadContent();
|
||||||
|
|
||||||
MouseInput = new MouseInput(this);
|
MouseInput = new MouseInput(this);
|
||||||
MouseInput.LoadContent();
|
MouseInput.LoadContent();
|
||||||
KeyboardInput = new KeyboardInput(this);
|
KeyboardInput = new KeyboardInput(this);
|
||||||
|
|
||||||
TestMonster = new SmallEnemy(ref Swarm);
|
TestMonster = new SmallEnemy(ref Swarm);
|
||||||
TestMonster.X = 12;
|
TestMonster.X = 12;
|
||||||
TestMonster.Y = 4;
|
TestMonster.Y = 4;
|
||||||
Swarm.Add(TestMonster);
|
Swarm.Add(TestMonster);
|
||||||
|
|
||||||
// Load Lua scripts after everything is created
|
// Load Lua scripts after everything is created
|
||||||
Lua.LoadScripts();
|
Lua.LoadScripts();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// UnloadContent will be called once per game and is the place to unload
|
/// UnloadContent will be called once per game and is the place to unload
|
||||||
/// all content.
|
/// all content.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
protected override void UnloadContent()
|
protected override void UnloadContent()
|
||||||
{
|
{
|
||||||
// TODO: Unload any non ContentManager content here
|
// TODO: Unload any non ContentManager content here
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Allows the game to run logic such as updating the world,
|
/// Allows the game to run logic such as updating the world,
|
||||||
/// checking for collisions, gathering input, and playing audio.
|
/// checking for collisions, gathering input, and playing audio.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="gameTime">Provides a snapshot of timing values.</param>
|
/// <param name="gameTime">Provides a snapshot of timing values.</param>
|
||||||
protected override void Update(GameTime gameTime)
|
protected override void Update(GameTime gameTime)
|
||||||
{
|
{
|
||||||
// Allows the game to exit
|
// Allows the game to exit
|
||||||
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
|
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
|
||||||
this.Exit();
|
this.Exit();
|
||||||
|
|
||||||
Camera.Update(gameTime);
|
Camera.Update(gameTime);
|
||||||
MouseInput.Update(gameTime);
|
MouseInput.Update(gameTime);
|
||||||
KeyboardInput.Update(gameTime);
|
KeyboardInput.Update(gameTime);
|
||||||
|
|
||||||
EntityManager.Update(gameTime);
|
EntityManager.Update(gameTime);
|
||||||
|
|
||||||
Interface.Update(gameTime);
|
Interface.Update(gameTime);
|
||||||
GUIManager.Update(gameTime);
|
GUIManager.Update(gameTime);
|
||||||
|
|
||||||
base.Update(gameTime);
|
base.Update(gameTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// This is called when the game should draw itself.
|
/// This is called when the game should draw itself.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="gameTime">Provides a snapshot of timing values.</param>
|
/// <param name="gameTime">Provides a snapshot of timing values.</param>
|
||||||
protected override void Draw(GameTime gameTime)
|
protected override void Draw(GameTime gameTime)
|
||||||
{
|
{
|
||||||
MouseState ms = Mouse.GetState();
|
MouseState ms = Mouse.GetState();
|
||||||
|
|
||||||
// Draw to the lighting render target
|
// Draw to the lighting render target
|
||||||
GraphicsDevice.SetRenderTarget(lightRenderTarget);
|
GraphicsDevice.SetRenderTarget(lightRenderTarget);
|
||||||
GraphicsDevice.Clear(new Color(Brightness, Brightness, Brightness));
|
GraphicsDevice.Clear(new Color(Brightness, Brightness, Brightness));
|
||||||
spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.Additive, SamplerState.PointClamp, null, null, null,
|
spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.Additive, SamplerState.PointClamp, null, null, null,
|
||||||
Camera.Transform);
|
Camera.Transform);
|
||||||
|
|
||||||
// Draw flashlights
|
// Draw flashlights
|
||||||
foreach (var light in EntityManager.GetComponents<Component.Flashlight>())
|
foreach (var light in EntityManager.GetComponents<Component.Flashlight>())
|
||||||
light.Draw(spriteBatch);
|
light.Draw(spriteBatch);
|
||||||
|
|
||||||
spriteBatch.End();
|
spriteBatch.End();
|
||||||
GraphicsDevice.SetRenderTarget(null);
|
GraphicsDevice.SetRenderTarget(null);
|
||||||
|
|
||||||
// Draw the scene to a render target
|
// Draw the scene to a render target
|
||||||
GraphicsDevice.SetRenderTarget(sceneRenderTarget);
|
GraphicsDevice.SetRenderTarget(sceneRenderTarget);
|
||||||
GraphicsDevice.Clear(Color.Black);
|
GraphicsDevice.Clear(Color.Black);
|
||||||
// Start drawing using the Camera transform
|
// Start drawing using the Camera transform
|
||||||
spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.NonPremultiplied, SamplerState.PointClamp, null, null, null,
|
spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.NonPremultiplied, SamplerState.PointClamp, null, null, null,
|
||||||
Camera.Transform);
|
Camera.Transform);
|
||||||
|
|
||||||
// Draw the level
|
// Draw the level
|
||||||
Map.Draw(spriteBatch);
|
Map.Draw(spriteBatch);
|
||||||
|
|
||||||
// Draw entities
|
// Draw entities
|
||||||
foreach (var spriteRenderer in EntityManager.GetComponents<Component.SpriteRenderer>())
|
foreach (var spriteRenderer in EntityManager.GetComponents<Component.SpriteRenderer>())
|
||||||
{
|
{
|
||||||
// Only render illuminated entities
|
// Only render illuminated entities
|
||||||
var position = Camera.WorldToScreen(spriteRenderer.Parent.Transform.World + spriteRenderer.Parent.Transform.World.Origin);
|
var position = Camera.WorldToScreen(spriteRenderer.Parent.Transform.World + spriteRenderer.Parent.Transform.World.Origin);
|
||||||
var sourceRect = new Rectangle((int)position.X, (int)position.Y, 1, 1);
|
var sourceRect = new Rectangle((int)position.X, (int)position.Y, 1, 1);
|
||||||
if (
|
if (
|
||||||
sourceRect.X >= 0
|
sourceRect.X >= 0
|
||||||
&& sourceRect.Y >= 0
|
&& sourceRect.Y >= 0
|
||||||
&& sourceRect.X < lightRenderTarget.Width
|
&& sourceRect.X < lightRenderTarget.Width
|
||||||
&& sourceRect.Y < lightRenderTarget.Height
|
&& sourceRect.Y < lightRenderTarget.Height
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
var lightData = new Color[1];
|
var lightData = new Color[1];
|
||||||
lightRenderTarget.GetData<Color>(0, sourceRect, lightData, 0, 1);
|
lightRenderTarget.GetData<Color>(0, sourceRect, lightData, 0, 1);
|
||||||
if (lightData[0] != new Color(Brightness, Brightness, Brightness))
|
if (lightData[0] != new Color(Brightness, Brightness, Brightness))
|
||||||
spriteRenderer.Draw(spriteBatch);
|
spriteRenderer.Draw(spriteBatch);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#if DEBUG
|
/*#if DEBUG
|
||||||
var debugTexture = new Texture2D(GraphicsDevice, 1, 1);
|
var debugTexture = new Texture2D(GraphicsDevice, 1, 1);
|
||||||
debugTexture.SetData(new Color[] { Color.White });
|
debugTexture.SetData(new Color[] { Color.White });
|
||||||
foreach (var collisionComponent in EntityManager.GetComponents<Component.Collision>())
|
foreach (var collisionComponent in EntityManager.GetComponents<Component.Collision>())
|
||||||
{
|
{
|
||||||
spriteBatch.Draw(debugTexture, collisionComponent.Rectangle, Color.Red * 0.5f);
|
spriteBatch.Draw(debugTexture, collisionComponent.Rectangle, Color.Red * 0.5f);
|
||||||
}
|
}
|
||||||
#endif
|
#endif*/
|
||||||
|
|
||||||
// Draw mouse input visuals
|
// Draw mouse input visuals
|
||||||
MouseInput.Draw(spriteBatch);
|
MouseInput.Draw(spriteBatch);
|
||||||
|
|
||||||
spriteBatch.End();
|
spriteBatch.End();
|
||||||
GraphicsDevice.SetRenderTarget(null);
|
GraphicsDevice.SetRenderTarget(null);
|
||||||
|
|
||||||
// Draw the scene from the render target with the light shader
|
// Draw the scene from the render target with the light shader
|
||||||
lightShader.Parameters["LightsTexture"].SetValue(lightRenderTarget);
|
lightShader.Parameters["LightsTexture"].SetValue(lightRenderTarget);
|
||||||
lightShader.CurrentTechnique.Passes[0].Apply();
|
lightShader.CurrentTechnique.Passes[0].Apply();
|
||||||
spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.Opaque, SamplerState.PointClamp, null, null, lightShader,
|
spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.Opaque, SamplerState.PointClamp, null, null, lightShader,
|
||||||
Matrix.Identity);
|
Matrix.Identity);
|
||||||
spriteBatch.Draw(sceneRenderTarget, Vector2.Zero, Color.White);
|
spriteBatch.Draw(sceneRenderTarget, Vector2.Zero, Color.White);
|
||||||
spriteBatch.End();
|
spriteBatch.End();
|
||||||
|
|
||||||
// Draw GUI components
|
// Draw GUI components
|
||||||
spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, SamplerState.AnisotropicClamp, null, null, null, Matrix.Identity);
|
spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, SamplerState.AnisotropicClamp, null, null, null, Matrix.Identity);
|
||||||
GUIManager.Draw(spriteBatch);
|
GUIManager.Draw(spriteBatch);
|
||||||
spriteBatch.End();
|
spriteBatch.End();
|
||||||
|
|
||||||
base.Draw(gameTime);
|
base.Draw(gameTime);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+197
-181
@@ -1,181 +1,197 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using Microsoft.Xna.Framework;
|
using Microsoft.Xna.Framework;
|
||||||
using Microsoft.Xna.Framework.Graphics;
|
using Microsoft.Xna.Framework.Graphics;
|
||||||
|
|
||||||
namespace DepthsBelow
|
namespace DepthsBelow
|
||||||
{
|
{
|
||||||
public class MapTile
|
public class MapTile
|
||||||
{
|
{
|
||||||
public int LocalId;
|
public int LocalId;
|
||||||
public Texture2D Texture;
|
public Texture2D Texture;
|
||||||
public Rectangle SourceRectangle;
|
public Rectangle SourceRectangle;
|
||||||
public SpriteEffects SpriteEffects;
|
public SpriteEffects SpriteEffects;
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum MapObjectType : byte
|
public enum MapObjectType : byte
|
||||||
{
|
{
|
||||||
Plain,
|
Plain,
|
||||||
Tile,
|
Tile,
|
||||||
Polygon,
|
Polygon,
|
||||||
Polyline
|
Polyline
|
||||||
}
|
}
|
||||||
|
|
||||||
public class MapObject
|
public class MapObject
|
||||||
{
|
{
|
||||||
//public MapObjectType ObjectType;
|
//public MapObjectType ObjectType;
|
||||||
public string Name;
|
public string Name;
|
||||||
public string Type;
|
public string Type;
|
||||||
public Rectangle Bounds;
|
public Rectangle Bounds;
|
||||||
public List<Vector2> Points;
|
public List<Vector2> Points;
|
||||||
}
|
}
|
||||||
|
|
||||||
public class MapLayer
|
public class MapLayer
|
||||||
{
|
{
|
||||||
public int Width;
|
public int Width;
|
||||||
public int Height;
|
public int Height;
|
||||||
public string Name;
|
public string Name;
|
||||||
}
|
}
|
||||||
|
|
||||||
public class MapTileLayer : MapLayer
|
public class MapTileLayer : MapLayer
|
||||||
{
|
{
|
||||||
public MapTile[] Tiles;
|
public MapTile[] Tiles;
|
||||||
}
|
}
|
||||||
|
|
||||||
public class MapObjectLayer : MapLayer
|
public class MapObjectLayer : MapLayer
|
||||||
{
|
{
|
||||||
public MapObject[] Objects;
|
public MapObject[] Objects;
|
||||||
}
|
}
|
||||||
|
|
||||||
public class Map
|
public class Map
|
||||||
{
|
{
|
||||||
public int TileWidth;
|
public int TileWidth;
|
||||||
public int TileHeight;
|
public int TileHeight;
|
||||||
public List<MapLayer> Layers = new List<MapLayer>();
|
public List<MapLayer> Layers = new List<MapLayer>();
|
||||||
|
|
||||||
public Map()
|
public Map()
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ParseObjects(Core core)
|
public void ParseObjects(Core core)
|
||||||
{
|
{
|
||||||
foreach (var layer in Layers)
|
foreach (var layer in Layers)
|
||||||
{
|
{
|
||||||
var objectLayer = layer as MapObjectLayer;
|
var objectLayer = layer as MapObjectLayer;
|
||||||
|
|
||||||
if (objectLayer == null)
|
if (objectLayer == null)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
foreach (var mapObject in objectLayer.Objects)
|
foreach (var mapObject in objectLayer.Objects)
|
||||||
{
|
{
|
||||||
if (mapObject.Type == "SquadStart")
|
if (mapObject.Type == "SquadStart")
|
||||||
{
|
{
|
||||||
var soldier = new Soldier(ref core.Squad);
|
var soldier = new Soldier(ref core.Squad);
|
||||||
soldier.Name = "Derp";
|
soldier.Name = "Derp";
|
||||||
// HACK: For some reason, the tile object coordinates are offset by one tile on the Y-axis in the Tiled map file (https://github.com/bjorn/tiled/issues/91)
|
// HACK: For some reason, the tile object coordinates are offset by one tile on the Y-axis in the Tiled map file (https://github.com/bjorn/tiled/issues/91)
|
||||||
var mapObjectPos = new Vector2(mapObject.Bounds.X, mapObject.Bounds.Y - Grid.TileSize);
|
var mapObjectPos = new Vector2(mapObject.Bounds.X, mapObject.Bounds.Y - Grid.TileSize);
|
||||||
var mapObjectGridPos = Grid.WorldToGrid(mapObjectPos);
|
var mapObjectGridPos = Grid.WorldToGrid(mapObjectPos);
|
||||||
soldier.X = mapObjectGridPos.X;
|
soldier.X = mapObjectGridPos.X;
|
||||||
soldier.Y = mapObjectGridPos.Y;
|
soldier.Y = mapObjectGridPos.Y;
|
||||||
|
|
||||||
core.Squad.Add(soldier);
|
core.Squad.Add(soldier);
|
||||||
}
|
}
|
||||||
if (mapObject.Type == "MonsterSpawn")
|
if (mapObject.Type == "MonsterSpawn" || mapObject.Type == "EnemySpawn")
|
||||||
{
|
{
|
||||||
var enemy = new MonsterSpawn("Monster", ref core.Swarm);
|
var enemy = new MonsterSpawn("Monster", 14, 0, ref core.Swarm);
|
||||||
var mapObjectPos = new Vector2(mapObject.Bounds.X, mapObject.Bounds.Y - Grid.TileSize);
|
var mapObjectPos = new Vector2(mapObject.Bounds.X, mapObject.Bounds.Y - Grid.TileSize);
|
||||||
var mapObjectGridPos = Grid.WorldToGrid(mapObjectPos);
|
var mapObjectGridPos = Grid.WorldToGrid(mapObjectPos);
|
||||||
enemy.X = mapObjectGridPos.X;
|
enemy.X = mapObjectGridPos.X;
|
||||||
enemy.Y = mapObjectGridPos.Y;
|
enemy.Y = mapObjectGridPos.Y;
|
||||||
}
|
}
|
||||||
if (mapObject.Type == "BossSpawn")
|
if (mapObject.Type == "AmbushMonsterSpawn" || mapObject.Type == "AmbushEnemySpawn")
|
||||||
{
|
{
|
||||||
var enemy = new MonsterSpawn("BUB", ref core.Swarm);
|
var enemy = new MonsterSpawn("Monster", 2, 0, ref core.Swarm);
|
||||||
var mapObjectPos = new Vector2(mapObject.Bounds.X, mapObject.Bounds.Y - Grid.TileSize);
|
var mapObjectPos = new Vector2(mapObject.Bounds.X, mapObject.Bounds.Y - Grid.TileSize);
|
||||||
var mapObjectGridPos = Grid.WorldToGrid(mapObjectPos);
|
var mapObjectGridPos = Grid.WorldToGrid(mapObjectPos);
|
||||||
enemy.X = mapObjectGridPos.X;
|
enemy.X = mapObjectGridPos.X;
|
||||||
enemy.Y = mapObjectGridPos.Y;
|
enemy.Y = mapObjectGridPos.Y;
|
||||||
}
|
}
|
||||||
if (mapObject.Type == "Door")
|
if (mapObject.Type == "DelayedMonsterSpawn" || mapObject.Type == "DelayedEnemySpawn")
|
||||||
{
|
{
|
||||||
var door = new Door();
|
var enemy = new MonsterSpawn("Monster", 200, 8, ref core.Swarm);
|
||||||
var mapObjectPos = new Vector2(mapObject.Bounds.X, mapObject.Bounds.Y);
|
var mapObjectPos = new Vector2(mapObject.Bounds.X, mapObject.Bounds.Y - Grid.TileSize);
|
||||||
var mapObjectGridPos = Grid.WorldToGrid(mapObjectPos);
|
var mapObjectGridPos = Grid.WorldToGrid(mapObjectPos);
|
||||||
door.X = mapObjectGridPos.X;
|
enemy.X = mapObjectGridPos.X;
|
||||||
door.Y = mapObjectGridPos.Y;
|
enemy.Y = mapObjectGridPos.Y;
|
||||||
}
|
}
|
||||||
}
|
/*if (mapObject.Type == "BossSpawn")
|
||||||
}
|
{
|
||||||
}
|
var enemy = new MonsterSpawn("BUB", 12, 0, ref core.Swarm);
|
||||||
|
var mapObjectPos = new Vector2(mapObject.Bounds.X, mapObject.Bounds.Y - Grid.TileSize);
|
||||||
public void Draw(SpriteBatch spriteBatch)
|
var mapObjectGridPos = Grid.WorldToGrid(mapObjectPos);
|
||||||
{
|
enemy.X = mapObjectGridPos.X;
|
||||||
foreach (var layer in Layers)
|
enemy.Y = mapObjectGridPos.Y;
|
||||||
{
|
}*/
|
||||||
var tileLayer = layer as MapTileLayer;
|
if (mapObject.Type == "Door")
|
||||||
|
{
|
||||||
if (tileLayer == null)
|
var door = new Door();
|
||||||
continue;
|
var mapObjectPos = new Vector2(mapObject.Bounds.X, mapObject.Bounds.Y);
|
||||||
|
var mapObjectGridPos = Grid.WorldToGrid(mapObjectPos);
|
||||||
// Don't draw the collision layer
|
door.X = mapObjectGridPos.X;
|
||||||
if (tileLayer.Name == "Collision")
|
door.Y = mapObjectGridPos.Y;
|
||||||
continue;
|
}
|
||||||
|
}
|
||||||
for (int y = 0; y < tileLayer.Height; y++)
|
}
|
||||||
{
|
}
|
||||||
for (int x = 0; x < tileLayer.Width; x++)
|
|
||||||
{
|
public void Draw(SpriteBatch spriteBatch)
|
||||||
MapTile mapTile = tileLayer.Tiles[y * layer.Width + x];
|
{
|
||||||
if (mapTile != null)
|
foreach (var layer in Layers)
|
||||||
{
|
{
|
||||||
spriteBatch.Draw(
|
var tileLayer = layer as MapTileLayer;
|
||||||
mapTile.Texture,
|
|
||||||
new Rectangle(x * TileWidth, y * TileHeight, TileWidth, TileHeight),
|
if (tileLayer == null)
|
||||||
mapTile.SourceRectangle,
|
continue;
|
||||||
Color.White,
|
|
||||||
0,
|
// Don't draw the collision layer
|
||||||
Vector2.Zero,
|
if (tileLayer.Name == "Collision")
|
||||||
mapTile.SpriteEffects,
|
continue;
|
||||||
0);
|
|
||||||
}
|
for (int y = 0; y < tileLayer.Height; y++)
|
||||||
}
|
{
|
||||||
}
|
for (int x = 0; x < tileLayer.Width; x++)
|
||||||
}
|
{
|
||||||
}
|
MapTile mapTile = tileLayer.Tiles[y * layer.Width + x];
|
||||||
|
if (mapTile != null)
|
||||||
public byte[,] GetCollisionMap()
|
{
|
||||||
{
|
spriteBatch.Draw(
|
||||||
byte[,] collisionMap = null;
|
mapTile.Texture,
|
||||||
|
new Rectangle(x * TileWidth, y * TileHeight, TileWidth, TileHeight),
|
||||||
foreach (var layer in Layers)
|
mapTile.SourceRectangle,
|
||||||
{
|
Color.White,
|
||||||
var tileLayer = layer as MapTileLayer;
|
0,
|
||||||
|
Vector2.Zero,
|
||||||
if (tileLayer != null && tileLayer.Name == "Collision")
|
mapTile.SpriteEffects,
|
||||||
{
|
0);
|
||||||
collisionMap = new byte[1024,1024];
|
}
|
||||||
for (int y = 0; y < tileLayer.Height; y++)
|
}
|
||||||
{
|
}
|
||||||
for (int x = 0; x < tileLayer.Width; x++)
|
}
|
||||||
{
|
}
|
||||||
MapTile tile = tileLayer.Tiles[y * layer.Width + x];
|
|
||||||
if (tile == null || tile.LocalId == 0)
|
public byte[,] GetCollisionMap()
|
||||||
collisionMap[x, y] = 1;
|
{
|
||||||
else
|
byte[,] collisionMap = null;
|
||||||
collisionMap[x, y] = 0;
|
|
||||||
}
|
foreach (var layer in Layers)
|
||||||
}
|
{
|
||||||
|
var tileLayer = layer as MapTileLayer;
|
||||||
break;
|
|
||||||
}
|
if (tileLayer != null && tileLayer.Name == "Collision")
|
||||||
}
|
{
|
||||||
|
collisionMap = new byte[1024,1024];
|
||||||
if (collisionMap == null)
|
for (int y = 0; y < tileLayer.Height; y++)
|
||||||
Debug.WriteLine("Map lacks a Collision layer! Pathfinding won't work.");
|
{
|
||||||
|
for (int x = 0; x < tileLayer.Width; x++)
|
||||||
return collisionMap;
|
{
|
||||||
}
|
MapTile tile = tileLayer.Tiles[y * layer.Width + x];
|
||||||
}
|
if (tile == null || tile.LocalId == 0)
|
||||||
}
|
collisionMap[x, y] = 1;
|
||||||
|
else
|
||||||
|
collisionMap[x, y] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (collisionMap == null)
|
||||||
|
Debug.WriteLine("Map lacks a Collision layer! Pathfinding won't work.");
|
||||||
|
|
||||||
|
return collisionMap;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,57 +1,60 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using Microsoft.Xna.Framework;
|
using Microsoft.Xna.Framework;
|
||||||
|
|
||||||
namespace DepthsBelow
|
namespace DepthsBelow
|
||||||
{
|
{
|
||||||
public class MonsterSpawn : Entity
|
public class MonsterSpawn : Entity
|
||||||
{
|
{
|
||||||
//EntityManager entityManager;
|
//EntityManager entityManager;
|
||||||
|
|
||||||
int wakingDistance = 7;
|
int wakingDistance = 12;
|
||||||
int sleepingDistance = 6;
|
int sleepingDistance = 6;
|
||||||
|
int wakingTurn = 0;
|
||||||
string type;
|
|
||||||
|
string type;
|
||||||
List<SmallEnemy> swarm;
|
|
||||||
|
List<SmallEnemy> swarm;
|
||||||
public MonsterSpawn(string _type, ref List<SmallEnemy> Swarm)
|
|
||||||
: base()
|
public MonsterSpawn(string _type, int _wakingDistance, int _wakingTurn, ref List<SmallEnemy> Swarm)
|
||||||
{
|
: base()
|
||||||
//this.entityManager = entityManager;
|
{
|
||||||
type = _type;
|
//this.entityManager = entityManager;
|
||||||
swarm = Swarm;
|
type = _type;
|
||||||
}
|
swarm = Swarm;
|
||||||
|
wakingDistance = _wakingDistance;
|
||||||
public override void Update(GameTime gameTime)
|
wakingTurn = _wakingTurn;
|
||||||
{
|
}
|
||||||
for (int index = 0; index < EntityManager.Entities.Count; index++)
|
|
||||||
{
|
public override void Update(GameTime gameTime)
|
||||||
var entity = EntityManager.Entities[index];
|
{
|
||||||
if (entity is Soldier)
|
for (int index = 0; index < EntityManager.Entities.Count; index++)
|
||||||
{
|
{
|
||||||
Vector2 distance1 = new Vector2(this.GetComponent<Component.Transform>().Grid.Position.X,
|
var entity = EntityManager.Entities[index];
|
||||||
this.GetComponent<Component.Transform>().Grid.Position.Y);
|
if (entity is Soldier)
|
||||||
Vector2 distance2 = new Vector2(entity.GetComponent<Component.Transform>().Grid.Position.X,
|
{
|
||||||
entity.GetComponent<Component.Transform>().Grid.Position.Y);
|
Vector2 distance1 = new Vector2(this.GetComponent<Component.Transform>().Grid.Position.X,
|
||||||
if (Vector2.Distance(distance1, distance2) < wakingDistance/* && Vector2.Distance(distance1, distance2) > sleepingDistance*/)
|
this.GetComponent<Component.Transform>().Grid.Position.Y);
|
||||||
{
|
Vector2 distance2 = new Vector2(entity.GetComponent<Component.Transform>().Grid.Position.X,
|
||||||
var enemy = new SmallEnemy(ref swarm);
|
entity.GetComponent<Component.Transform>().Grid.Position.Y);
|
||||||
if (type == "BUB")
|
if (Vector2.Distance(distance1, distance2) < wakingDistance && TurnManager.currentTurn >= wakingTurn/* && Vector2.Distance(distance1, distance2) > sleepingDistance*/)
|
||||||
{
|
{
|
||||||
enemy.LoadBoss();
|
var enemy = new SmallEnemy(ref swarm);
|
||||||
}
|
if (type == "BUB")
|
||||||
enemy.X = this.X;
|
{
|
||||||
enemy.Y = this.Y;
|
enemy.LoadBoss();
|
||||||
swarm.Add(enemy);
|
}
|
||||||
this.Remove();
|
enemy.X = this.X;
|
||||||
break;
|
enemy.Y = this.Y;
|
||||||
}
|
swarm.Add(enemy);
|
||||||
}
|
this.Remove();
|
||||||
}
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,192 +1,192 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using DepthsBelow.Component;
|
using DepthsBelow.Component;
|
||||||
using Microsoft.Xna.Framework;
|
using Microsoft.Xna.Framework;
|
||||||
using Microsoft.Xna.Framework.Content;
|
using Microsoft.Xna.Framework.Content;
|
||||||
using Microsoft.Xna.Framework.Graphics;
|
using Microsoft.Xna.Framework.Graphics;
|
||||||
using Microsoft.Xna.Framework.Input;
|
using Microsoft.Xna.Framework.Input;
|
||||||
|
|
||||||
namespace DepthsBelow
|
namespace DepthsBelow
|
||||||
{
|
{
|
||||||
public class SmallEnemy : Entity
|
public class SmallEnemy : Entity
|
||||||
{
|
{
|
||||||
public static Texture2D Texture;
|
public static Texture2D Texture;
|
||||||
public Color Color;
|
public Color Color;
|
||||||
public static Point Origin;
|
public static Point Origin;
|
||||||
private bool _selected; //I guess as in "currently doing something"
|
private bool _selected; //I guess as in "currently doing something"
|
||||||
|
|
||||||
public List<SmallEnemy> Swarm;
|
public List<SmallEnemy> Swarm;
|
||||||
|
|
||||||
private PathFinder.Node nextNode;
|
private PathFinder.Node nextNode;
|
||||||
|
|
||||||
public int numberOfSteps = 5;
|
public int numberOfSteps = 8;
|
||||||
public int currentStep = 0;
|
public int currentStep = 0;
|
||||||
|
|
||||||
public bool AttackedThisTurn = false;
|
public bool AttackedThisTurn = false;
|
||||||
|
|
||||||
public int step
|
public int step
|
||||||
{
|
{
|
||||||
get { return currentStep; }
|
get { return currentStep; }
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
currentStep = value;
|
currentStep = value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public SmallEnemy(ref List<SmallEnemy> swarm)
|
public SmallEnemy(ref List<SmallEnemy> swarm)
|
||||||
: base()
|
: base()
|
||||||
{
|
{
|
||||||
if (Texture == null)
|
if (Texture == null)
|
||||||
LoadContent();
|
LoadContent();
|
||||||
|
|
||||||
this.Swarm = swarm;
|
this.Swarm = swarm;
|
||||||
|
|
||||||
Transform.World.Origin = new Vector2(20, 16);
|
Transform.World.Origin = new Vector2(20, 16);
|
||||||
|
|
||||||
this.Color = Color.White;
|
this.Color = Color.White;
|
||||||
var rc = new SpriteRenderer(this) { Texture = Texture, Color = Color.White };
|
var rc = new SpriteRenderer(this) { Texture = Texture, Color = Color.White };
|
||||||
AddComponent(rc);
|
AddComponent(rc);
|
||||||
|
|
||||||
var cc = new Collision(this, 32, 32);
|
var cc = new Collision(this, 32, 32);
|
||||||
cc.Solid = true;
|
cc.Solid = true;
|
||||||
AddComponent(cc);
|
AddComponent(cc);
|
||||||
|
|
||||||
var pfc = new PathFinder(this);
|
var pfc = new PathFinder(this);
|
||||||
AddComponent(pfc);
|
AddComponent(pfc);
|
||||||
|
|
||||||
var stat = new Component.Stat(this)
|
var stat = new Component.Stat(this)
|
||||||
{
|
{
|
||||||
Life = 50,
|
Life = 50,
|
||||||
Defence = 25,
|
Defence = 25,
|
||||||
Strength = 26,
|
Strength = 70,
|
||||||
GetAim = 100,
|
GetAim = 100,
|
||||||
GetDodge = 50
|
GetDodge = 50
|
||||||
};
|
};
|
||||||
AddComponent(stat);
|
AddComponent(stat);
|
||||||
}
|
}
|
||||||
public override void Remove()
|
public override void Remove()
|
||||||
{
|
{
|
||||||
Swarm.Remove(this);
|
Swarm.Remove(this);
|
||||||
|
|
||||||
base.Remove();
|
base.Remove();
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool Selected
|
public bool Selected
|
||||||
{
|
{
|
||||||
get { return _selected; }
|
get { return _selected; }
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
_selected = value;
|
_selected = value;
|
||||||
GetComponent<SpriteRenderer>().Color = (value) ? Color.Blue : this.Color;
|
GetComponent<SpriteRenderer>().Color = (value) ? Color.Blue : this.Color;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void LoadContent()
|
public static void LoadContent()
|
||||||
{
|
{
|
||||||
Texture = GameServices.GetService<ContentManager>().Load<Texture2D>("images/Monster");
|
Texture = GameServices.GetService<ContentManager>().Load<Texture2D>("images/Monster");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void LoadBoss()
|
public void LoadBoss()
|
||||||
{
|
{
|
||||||
GetComponent<SpriteRenderer>().AlternativeTexture = GameServices.GetService<ContentManager>().Load<Texture2D>("images/Pineapple");
|
GetComponent<SpriteRenderer>().AlternativeTexture = GameServices.GetService<ContentManager>().Load<Texture2D>("images/Pineapple");
|
||||||
var stat = new Component.Stat(this)
|
var stat = new Component.Stat(this)
|
||||||
{
|
{
|
||||||
Life = 500,
|
Life = 500,
|
||||||
Defence = 15,
|
Defence = 15,
|
||||||
Strength = 70,
|
Strength = 70,
|
||||||
GetAim = 80,
|
GetAim = 80,
|
||||||
GetDodge = 5
|
GetDodge = 5
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Update(GameTime gameTime)
|
public override void Update(GameTime gameTime)
|
||||||
{
|
{
|
||||||
base.Update(gameTime);
|
base.Update(gameTime);
|
||||||
|
|
||||||
float elapsed = gameTime.ElapsedGameTime.Milliseconds / 1000.0f;
|
float elapsed = gameTime.ElapsedGameTime.Milliseconds / 1000.0f;
|
||||||
|
|
||||||
if (nextNode == null)
|
if (nextNode == null)
|
||||||
nextNode = GetComponent<PathFinder>().Next();
|
nextNode = GetComponent<PathFinder>().Next();
|
||||||
|
|
||||||
if (nextNode != null)
|
if (nextNode != null)
|
||||||
{
|
{
|
||||||
List<Point> soldierCollisions = new List<Point>();
|
List<Point> soldierCollisions = new List<Point>();
|
||||||
|
|
||||||
// Collision with moving units
|
// Collision with moving units
|
||||||
foreach (var body in Swarm)
|
foreach (var body in Swarm)
|
||||||
{
|
{
|
||||||
if (body != this)
|
if (body != this)
|
||||||
{
|
{
|
||||||
if (body.Transform.Grid == nextNode.Position)
|
if (body.Transform.Grid == nextNode.Position)
|
||||||
{
|
{
|
||||||
soldierCollisions.Add(body.Transform.Grid);
|
soldierCollisions.Add(body.Transform.Grid);
|
||||||
GetComponent<PathFinder>().RecreatePath(soldierCollisions);
|
GetComponent<PathFinder>().RecreatePath(soldierCollisions);
|
||||||
nextNode = GetComponent<PathFinder>().Next();
|
nextNode = GetComponent<PathFinder>().Next();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (nextNode != null)
|
if (nextNode != null)
|
||||||
{
|
{
|
||||||
var nodeWorldPos = Grid.GridToWorld(nextNode.Position);
|
var nodeWorldPos = Grid.GridToWorld(nextNode.Position);
|
||||||
// HACK: Make this work properly with other speeds...
|
// HACK: Make this work properly with other speeds...
|
||||||
float speed = 4f;
|
float speed = 4f;
|
||||||
if (Transform.World.X < nodeWorldPos.X)
|
if (Transform.World.X < nodeWorldPos.X)
|
||||||
{
|
{
|
||||||
Transform.World.X += speed;
|
Transform.World.X += speed;
|
||||||
GetComponent<Component.Transform>().World.Rotation = MathHelper.ToRadians(0);
|
GetComponent<Component.Transform>().World.Rotation = MathHelper.ToRadians(0);
|
||||||
}
|
}
|
||||||
if (Transform.World.X > nodeWorldPos.X)
|
if (Transform.World.X > nodeWorldPos.X)
|
||||||
{
|
{
|
||||||
Transform.World.X -= speed;
|
Transform.World.X -= speed;
|
||||||
GetComponent<Component.Transform>().World.Rotation = MathHelper.ToRadians(180);
|
GetComponent<Component.Transform>().World.Rotation = MathHelper.ToRadians(180);
|
||||||
}
|
}
|
||||||
if (Transform.World.Y < nodeWorldPos.Y)
|
if (Transform.World.Y < nodeWorldPos.Y)
|
||||||
{
|
{
|
||||||
Transform.World.Y += speed;
|
Transform.World.Y += speed;
|
||||||
GetComponent<Component.Transform>().World.Rotation = MathHelper.ToRadians(90);
|
GetComponent<Component.Transform>().World.Rotation = MathHelper.ToRadians(90);
|
||||||
}
|
}
|
||||||
if (Transform.World.Y > nodeWorldPos.Y)
|
if (Transform.World.Y > nodeWorldPos.Y)
|
||||||
{
|
{
|
||||||
Transform.World.Y -= speed;
|
Transform.World.Y -= speed;
|
||||||
GetComponent<Component.Transform>().World.Rotation = MathHelper.ToRadians(270);
|
GetComponent<Component.Transform>().World.Rotation = MathHelper.ToRadians(270);
|
||||||
}
|
}
|
||||||
if (Transform.World == nodeWorldPos)
|
if (Transform.World == nodeWorldPos)
|
||||||
{
|
{
|
||||||
if (currentStep < numberOfSteps)
|
if (currentStep < numberOfSteps)
|
||||||
{
|
{
|
||||||
currentStep++;
|
currentStep++;
|
||||||
//lastLastNode = lastNode;
|
//lastLastNode = lastNode;
|
||||||
//lastNode = nextNode;
|
//lastNode = nextNode;
|
||||||
nextNode = GetComponent<PathFinder>().Next();
|
nextNode = GetComponent<PathFinder>().Next();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
||||||
GetComponent<PathFinder>().Stop();
|
GetComponent<PathFinder>().Stop();
|
||||||
}
|
}
|
||||||
foreach (var entity in EntityManager.Entities)
|
foreach (var entity in EntityManager.Entities)
|
||||||
{
|
{
|
||||||
if (entity is Soldier)
|
if (entity is Soldier)
|
||||||
{
|
{
|
||||||
if (entity.GetComponent<Component.Collision>().Rectangle.Intersects(this.GetComponent<Component.Collision>().Rectangle))
|
if (entity.GetComponent<Component.Collision>().Rectangle.Intersects(this.GetComponent<Component.Collision>().Rectangle))
|
||||||
{
|
{
|
||||||
if (AttackedThisTurn == false)
|
if (AttackedThisTurn == false)
|
||||||
{
|
{
|
||||||
if (Utility.AttackTest(this.GetComponent<Component.Stat>(), entity, Utility.CalculateHitChance(this.GetComponent<Component.Stat>(), this.Transform.World.Position, entity)))
|
if (Utility.AttackTest(this.GetComponent<Component.Stat>(), entity, Utility.CalculateHitChance(this.GetComponent<Component.Stat>(), this.Transform.World.Position, entity)))
|
||||||
{
|
{
|
||||||
AttackedThisTurn = true;
|
AttackedThisTurn = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,115 +1,122 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
|
||||||
namespace DepthsBelow
|
namespace DepthsBelow
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Keeps track of whose turn it is.
|
/// Keeps track of whose turn it is.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class TurnManager
|
public class TurnManager
|
||||||
{
|
{
|
||||||
/// <summary>
|
public static int currentTurn = 0;
|
||||||
/// A player turn token.
|
|
||||||
/// </summary>
|
/// <summary>
|
||||||
public class Token
|
/// A player turn token.
|
||||||
{
|
/// </summary>
|
||||||
/// <summary>
|
public class Token
|
||||||
/// Unique identifying name of the token.
|
{
|
||||||
/// </summary>
|
/// <summary>
|
||||||
public string Name { get; private set; }
|
/// Unique identifying name of the token.
|
||||||
private TurnManager turnManager;
|
/// </summary>
|
||||||
|
public string Name { get; private set; }
|
||||||
/// <summary>
|
private TurnManager turnManager;
|
||||||
/// Initializes a new instance of the <see cref="Token" /> class.
|
|
||||||
/// Preferably use <see cref="TurnManager.CreateToken" /> instead.
|
/// <summary>
|
||||||
/// </summary>
|
/// Initializes a new instance of the <see cref="Token" /> class.
|
||||||
/// <param name="turnManager">The turn manager the token belongs to.</param>
|
/// Preferably use <see cref="TurnManager.CreateToken" /> instead.
|
||||||
/// <param name="name">Unique identifying name of the token.</param>
|
/// </summary>
|
||||||
public Token(TurnManager turnManager, string name)
|
/// <param name="turnManager">The turn manager the token belongs to.</param>
|
||||||
{
|
/// <param name="name">Unique identifying name of the token.</param>
|
||||||
this.turnManager = turnManager;
|
public Token(TurnManager turnManager, string name)
|
||||||
this.Name = name;
|
{
|
||||||
turnManager.AddToken(this);
|
this.turnManager = turnManager;
|
||||||
}
|
this.Name = name;
|
||||||
}
|
turnManager.AddToken(this);
|
||||||
|
}
|
||||||
/// <summary>
|
}
|
||||||
/// Dictionary of turn tokens.
|
|
||||||
/// </summary>
|
/// <summary>
|
||||||
public Dictionary<string, Token> Tokens;
|
/// Dictionary of turn tokens.
|
||||||
private int currentTokenIndex;
|
/// </summary>
|
||||||
|
public Dictionary<string, Token> Tokens;
|
||||||
/// <summary>
|
private int currentTokenIndex;
|
||||||
/// The turn token belonging to a player.
|
|
||||||
/// </summary>
|
/// <summary>
|
||||||
public Token CurrentTurn
|
/// The turn token belonging to a player.
|
||||||
{
|
/// </summary>
|
||||||
get { return Tokens.ElementAt(currentTokenIndex).Value; }
|
public Token CurrentTurn
|
||||||
}
|
{
|
||||||
|
get { return Tokens.ElementAt(currentTokenIndex).Value; }
|
||||||
/// <summary>
|
}
|
||||||
/// Get the turn token by the specified name.
|
|
||||||
/// </summary>
|
/// <summary>
|
||||||
/// <param name="name">The identifying name of the player.</param>
|
/// Get the turn token by the specified name.
|
||||||
/// <returns>Returns a player turn token.</returns>
|
/// </summary>
|
||||||
public Token this[string name]
|
/// <param name="name">The identifying name of the player.</param>
|
||||||
{
|
/// <returns>Returns a player turn token.</returns>
|
||||||
get { return this.Tokens[name]; }
|
public Token this[string name]
|
||||||
}
|
{
|
||||||
|
get { return this.Tokens[name]; }
|
||||||
/// <summary>
|
}
|
||||||
/// Create a turn manager.
|
|
||||||
/// </summary>
|
/// <summary>
|
||||||
public TurnManager()
|
/// Create a turn manager.
|
||||||
{
|
/// </summary>
|
||||||
Tokens = new Dictionary<string, Token>();
|
public TurnManager()
|
||||||
}
|
{
|
||||||
|
Tokens = new Dictionary<string, Token>();
|
||||||
/// <summary>
|
}
|
||||||
/// Create a turn manager.
|
|
||||||
/// </summary>
|
/// <summary>
|
||||||
/// <param name="tokenNames">Tokens of players.</param>
|
/// Create a turn manager.
|
||||||
public TurnManager(string[] tokenNames)
|
/// </summary>
|
||||||
: this()
|
/// <param name="tokenNames">Tokens of players.</param>
|
||||||
{
|
public TurnManager(string[] tokenNames)
|
||||||
foreach (var tokenName in tokenNames)
|
: this()
|
||||||
CreateToken(tokenName);
|
{
|
||||||
}
|
foreach (var tokenName in tokenNames)
|
||||||
|
CreateToken(tokenName);
|
||||||
/// <summary>
|
}
|
||||||
/// Create a turn token.
|
|
||||||
/// </summary>
|
/// <summary>
|
||||||
/// <param name="name">Name of the token.</param>
|
/// Create a turn token.
|
||||||
/// <returns>Returns a player turn token.</returns>
|
/// </summary>
|
||||||
public Token CreateToken(string name)
|
/// <param name="name">Name of the token.</param>
|
||||||
{
|
/// <returns>Returns a player turn token.</returns>
|
||||||
return Tokens.ContainsKey(name) ? Tokens[name] : new Token(this, name);
|
public Token CreateToken(string name)
|
||||||
}
|
{
|
||||||
|
return Tokens.ContainsKey(name) ? Tokens[name] : new Token(this, name);
|
||||||
/// <summary>
|
}
|
||||||
/// Add a turn token to
|
|
||||||
/// </summary>
|
/// <summary>
|
||||||
/// <param name="token"></param>
|
/// Add a turn token to
|
||||||
public void AddToken(Token token)
|
/// </summary>
|
||||||
{
|
/// <param name="token"></param>
|
||||||
if (!Tokens.ContainsKey(token.Name))
|
public void AddToken(Token token)
|
||||||
Tokens.Add(token.Name, token);
|
{
|
||||||
}
|
if (!Tokens.ContainsKey(token.Name))
|
||||||
|
Tokens.Add(token.Name, token);
|
||||||
/// <summary>
|
}
|
||||||
/// End the current turn, skipping to the next token in the dictionary.
|
|
||||||
/// </summary>
|
/// <summary>
|
||||||
public void EndTurn()
|
/// End the current turn, skipping to the next token in the dictionary.
|
||||||
{
|
/// </summary>
|
||||||
var prevTurn = CurrentTurn;
|
public void EndTurn()
|
||||||
|
{
|
||||||
if (++currentTokenIndex > Tokens.Count - 1)
|
var prevTurn = CurrentTurn;
|
||||||
currentTokenIndex = 0;
|
|
||||||
|
if (++currentTokenIndex > Tokens.Count - 1)
|
||||||
Debug.WriteLine(prevTurn.Name + " turn ended. Current turn: " + CurrentTurn.Name);
|
currentTokenIndex = 0;
|
||||||
}
|
|
||||||
}
|
Debug.WriteLine(prevTurn.Name + " turn ended. Current turn: " + CurrentTurn.Name);
|
||||||
}
|
if (CurrentTurn.Name == "Player")
|
||||||
|
{
|
||||||
|
currentTurn++;
|
||||||
|
Console.WriteLine("Turn: " + currentTurn);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -29,7 +29,7 @@
|
|||||||
<object type="SquadStart" x="768" y="2720" width="32" height="32"/>
|
<object type="SquadStart" x="768" y="2720" width="32" height="32"/>
|
||||||
<object type="BossSpawn" x="832" y="2720" width="32" height="32"/>
|
<object type="BossSpawn" x="832" y="2720" width="32" height="32"/>
|
||||||
<object type="Door" x="640" y="2656" width="32" height="64"/>
|
<object type="Door" x="640" y="2656" width="32" height="64"/>
|
||||||
<object type="EnemySpawn" x="992" y="2304" width="32" height="32"/>
|
<object type="MonsterSpawn" x="992" y="2304" width="32" height="32"/>
|
||||||
<object type="EnemySpawn" x="1184" y="2144" width="32" height="32"/>
|
<object type="EnemySpawn" x="1184" y="2144" width="32" height="32"/>
|
||||||
<object type="EnemySpawn" x="992" y="2688" width="32" height="32"/>
|
<object type="EnemySpawn" x="992" y="2688" width="32" height="32"/>
|
||||||
<object type="EnemySpawn" x="1088" y="2560" width="32" height="32"/>
|
<object type="EnemySpawn" x="1088" y="2560" width="32" height="32"/>
|
||||||
@@ -59,6 +59,14 @@
|
|||||||
<object type="EnemySpawn" x="3424" y="800" width="32" height="32"/>
|
<object type="EnemySpawn" x="3424" y="800" width="32" height="32"/>
|
||||||
<object type="EnemySpawn" x="3424" y="640" width="32" height="32"/>
|
<object type="EnemySpawn" x="3424" y="640" width="32" height="32"/>
|
||||||
<object type="EnemySpawn" x="2112" y="640" width="32" height="32"/>
|
<object type="EnemySpawn" x="2112" y="640" width="32" height="32"/>
|
||||||
|
|
||||||
|
<object type="DelayedEnemySpawn" x="704" y="2624" width="32" height="32"/>
|
||||||
|
<object type="DelayedEnemySpawn" x="736" y="2656" width="32" height="32"/>
|
||||||
|
<object type="DelayedEnemySpawn" x="704" y="2720" width="32" height="32"/>
|
||||||
|
<object type="DelayedEnemySpawn" x="800" y="2656" width="32" height="32"/>
|
||||||
|
<object type="DelayedEnemySpawn" x="768" y="2720" width="32" height="32"/>
|
||||||
|
<object type="DelayedEnemySpawn" x="832" y="2720" width="32" height="32"/>
|
||||||
|
|
||||||
</objectgroup>
|
</objectgroup>
|
||||||
<layer name="Collision" width="256" height="256">
|
<layer name="Collision" width="256" height="256">
|
||||||
<data encoding="base64" compression="zlib">
|
<data encoding="base64" compression="zlib">
|
||||||
|
|||||||
Reference in New Issue
Block a user