From ced3d03bdb3ce866d832e03fb212865140905a9a Mon Sep 17 00:00:00 2001 From: Thomas Leyh Date: Sun, 24 Jul 2016 08:14:18 +0200 Subject: Add project files. --- V3/Map/MapManager.cs | 97 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 V3/Map/MapManager.cs (limited to 'V3/Map/MapManager.cs') diff --git a/V3/Map/MapManager.cs b/V3/Map/MapManager.cs new file mode 100644 index 0000000..f62278c --- /dev/null +++ b/V3/Map/MapManager.cs @@ -0,0 +1,97 @@ +using System.Collections.Generic; +using System.Linq; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Content; +using Microsoft.Xna.Framework.Graphics; +using V3.Camera; +using V3.Objects; + +namespace V3.Map +{ + // ReSharper disable once ClassNeverInstantiated.Global + public class MapManager : IMapManager + { + private TiledParser mTiledParser; + private FloorLayer mFloorLayer; + private ObjectLayer mObjectLayer; + private List mAreas; + private PathfindingGrid mPathfindingGrid; + private readonly ContentManager mContentManager; + private readonly GraphicsDeviceManager mGraphicsDeviceManager; + + public List Areas => mAreas; + + public Point SizeInPixel { get; private set; } + public Point SizeInTiles { get; private set; } + public Point TileSize { get; private set; } + public Point PathfindingGridSize { get; private set; } + public Point PathfindingCellSize { get; private set; } + public string FileName { get; private set; } + + public MapManager(ContentManager contentManager, GraphicsDeviceManager graphicsDeviceManager) + { + mContentManager = contentManager; + mGraphicsDeviceManager = graphicsDeviceManager; + } + + public void DrawFloor(SpriteBatch spriteBatch, ICamera camera) + { + mFloorLayer.Draw(spriteBatch, camera); + } + + public void Load(string fileName) + { + mTiledParser = new TiledParser(); + // Parse map data. + mTiledParser.Parse(fileName); + FileName = fileName; + TileSize = new Point(mTiledParser.TileWidth, mTiledParser.TileHeight); + SizeInTiles = new Point(mTiledParser.MapWidth, mTiledParser.MapHeight); + SizeInPixel = new Point((SizeInTiles.X - 1) * TileSize.X, SizeInTiles.Y / 2 * TileSize.Y - TileSize.Y / 2); + // Create floor layer of the map. + mFloorLayer = new FloorLayer(mTiledParser.TileWidth, mTiledParser.TileHeight, mTiledParser.MapWidth, mTiledParser.MapHeight, mTiledParser.MapLayers[0], mTiledParser.TileSets); + mFloorLayer.CreateObjects(); + mFloorLayer.LoadContent(mContentManager); + // Create object layer of the map. + mObjectLayer = new ObjectLayer(mTiledParser.TileWidth, mTiledParser.TileHeight, mTiledParser.MapWidth, mTiledParser.MapHeight, mTiledParser.MapLayers[1], mTiledParser.TileSets); + mObjectLayer.CreateObjects(); + mObjectLayer.LoadContent(mContentManager); + // Get areas from the map + mAreas = mTiledParser.Areas; + // Create pathfinding grid used in the pathfinder. + mPathfindingGrid = new PathfindingGrid(mTiledParser.MapWidth, mTiledParser.MapHeight, mTiledParser.TileWidth, mTiledParser.TileHeight); + mPathfindingGrid.LoadContent(mContentManager); + mPathfindingGrid.CreateCollisions(mFloorLayer.ExtractCollisions()); + mPathfindingGrid.CreateCollisions(mObjectLayer.ExtractCollisions()); + PathfindingGridSize = new Point(mPathfindingGrid.mGridWidth, mPathfindingGrid.mGridHeight); + PathfindingCellSize = new Point(Constants.CellWidth, Constants.CellHeight); + // Create Minimap texture from pathfinding grid. + mPathfindingGrid.CreateMinimap(mGraphicsDeviceManager.GraphicsDevice); + } + + public List GetObjects() + { + return mObjectLayer.ExtractObjects(); + } + + public List GetPopulation(CreatureFactory creatureFactory, Pathfinder pathfinder) + { + return mAreas.SelectMany(area => area.GetPopulation(creatureFactory, pathfinder)).ToList(); + } + + public PathfindingGrid GetPathfindingGrid() + { + return mPathfindingGrid; + } + + public void DrawPathfindingGrid(SpriteBatch spriteBatch, ICamera camera) + { + mPathfindingGrid.Draw(spriteBatch, camera); + } + + public void DrawMinimap(SpriteBatch spriteBatch, Rectangle position) + { + mPathfindingGrid.DrawSmallGrid(spriteBatch, position); + } + } +} \ No newline at end of file -- cgit v1.2.1