using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace CommonAI.RTS.Manhattan
{
    /// <summary>
    /// 曼哈顿寻路基础数据结构
    /// </summary>
    public interface IManhattanMap : IDisposable
    {
        float TotalWidth { get; }
        float TotalHeight { get; }

        /// <summary>
        /// 获取地图X格子数
        /// </summary>
        /// <returns></returns>
        int XCount { get; }
        /// <summary>
        /// 获取地图Y格子数
        /// </summary>
        /// <returns></returns>
        int YCount { get; }
        /// <summary>
        /// 获取地图每格宽
        /// </summary>
        /// <returns></returns>
        float CellW { get; }
        /// <summary>
        /// 获取地图每格高
        /// </summary>
        /// <returns></returns>
        float CellH { get; }

        /// <summary>
        /// 测试是否有阻挡,true=不能通过
        /// </summary>
        /// <param name="bx"></param>
        /// <param name="by"></param>
        /// <returns>true=不能通过 ;false=可以通过</returns>
        bool TestBlock(int bx, int by);

        /// <summary>
        /// 测试值是否有阻挡,true=不能通过
        /// </summary>
        /// <param name="value">碰撞值</param>
        /// <returns>true=不能通过 ;false=可以通过</returns>
        bool TestBlockValue(int value);

        /// <summary>
        /// 获取地块值
        /// </summary>
        /// <param name="bx"></param>
        /// <param name="by"></param>
        /// <returns></returns>
        int GetValue(int bx, int by);

        /// <summary>
        /// 设置地块值
        /// </summary>
        /// <param name="bx"></param>
        /// <param name="by"></param>
        /// <param name="value"></param>
        /// <returns>是否发生变化</returns>
        bool SetValue(int bx, int by, int value);

        /// <summary>
        /// 创建地图节点
        /// </summary>
        /// <returns></returns>
        AstarManhattan.MMapNode CreateMapNode();
    }

}