using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using V3.Camera;
using V3.Objects;
namespace V3.Map
{
///
/// Manager for loading and drawing game maps. Also holds information about map attributes.
///
[SuppressMessage("ReSharper", "UnusedMember.Global")]
public interface IMapManager
{
///
/// A list of map areas (rectangle-sized).
///
List Areas { get; }
///
/// Size of the shown map in pixels.
///
Point SizeInPixel { get; }
///
/// Size of the map in tiles. (Some tiles are cut off at the edges.)
///
Point SizeInTiles { get; }
///
/// Size of a single tile in pixels.
///
Point TileSize { get; }
///
/// Number of cells the pathfinding grid consists of.
///
Point PathfindingGridSize { get; }
///
/// Size of a single cell of the pathfinding grid in pixels.
///
Point PathfindingCellSize { get; }
///
/// File name of the loaded map (without suffix).
///
string FileName { get; }
///
/// Efficiently draw the floor layer. Only draw the tiles seen by the camera.
///
///
///
void DrawFloor(SpriteBatch spriteBatch, ICamera camera);
///
/// Load a map file and create the map layers and pathfinding information.
///
/// Name of the map file (without suffix).
void Load(string fileName);
///
/// Returns all objects in the objects layer.
///
/// List of all static game objects imported from the map.
List GetObjects();
///
/// Returns the pathfinding grid for passing to the pathfinder.
///
/// A grid used for pathfinding.
PathfindingGrid GetPathfindingGrid();
///
/// Efficiently draw the pathfinding grid. For debugging purposes.
///
/// Sprite batch used.
/// Current camera for calculating the shown screen.
void DrawPathfindingGrid(SpriteBatch spriteBatch, ICamera camera);
///
/// Draws the minimap to specified position.
///
/// Sprite batch used.
/// Where to draw the minimap and which size.
void DrawMinimap(SpriteBatch spriteBatch, Rectangle position);
///
/// Automatically creates an initial population from the map data and returns it.
///
/// Factory for creating creatues.
/// Pathfinder is used for checking collisions when creating creatures.
/// Initial population in a list.
List GetPopulation(CreatureFactory creatureFactory, Pathfinder pathfinder);
}
}