/// <summary> /// 搜寻攻击范围 /// </summary> /// <param name="howToFind"></param> /// <param name="start"></param> /// <param name="minRange"></param> /// <param name="maxRange"></param> /// <param name="useEndCell"></param> /// <returns></returns> public bool SearchAttackRange(IHowToFind howToFind, CellData start, int minRange, int maxRange, bool useEndCell = false) { if (howToFind == null || start == null || minRange < 1 || maxRange < minRange) { return(false); } Reset(); m_HowToFind = howToFind; m_Range = new Vector2(minRange, maxRange); if (useEndCell) { m_EndCell = start; m_EndCell.g = 0f; m_EndCell.h = 0f; m_Reachable.Add(m_EndCell); } else { m_StartCell = start; m_StartCell.g = 0f; m_StartCell.h = 0f; m_Reachable.Add(m_StartCell); } return(SearchRangeInternal()); }
/// <summary> /// 寻找攻击范围 /// </summary> /// <returns><c>true</c>, if attack range was searched, <c>false</c> otherwise.</returns> /// <param name="howToFind">How to find.</param> /// <param name="start">Start.</param> /// <param name="minRange">Minimum range.</param> /// <param name="maxRange">Max range.</param> /// <param name="useEndCell">If set to <c>true</c> use end cell.</param> public bool SearchAttackRange(IHowToFind howToFind, CellData start, int minRange, int maxRange, bool useEndCell = false) { if (howToFind == null || start == null || minRange < 1 || maxRange < minRange) { return(false); } Reset(); this.howToFind = howToFind; range = new Vector2(minRange, maxRange); // 在重置时, 不重置父亲节点 // 其一: 没有用到 // 其二: 二次查找时不破坏路径, 否则路径将被破坏 if (useEndCell) { endCell = start; endCell.G = 0f; reachable.Add(endCell); } else { startCell = start; startCell.G = 0f; reachable.Add(startCell); } return(SearchRangeInternal()); }
/// <summary> /// 重置 /// </summary> public void Reset() { m_Reachable.Clear(); m_Explored.Clear(); m_Result.Clear(); m_Range = Vector2.zero; m_StartCell = null; m_EndCell = null; m_CurrentCell = null; m_Finished = false; m_HowToFind = null; m_MoveConsumption = null; m_SearchCount = 0; }
/// <summary> /// 重置 /// </summary> public void Reset() { reachable.Clear(); explored.Clear(); result.Clear(); range = Vector2.zero; startCell = null; endCell = null; currentCell = null; finished = false; howToFind = null; moveConsumption = null; searchCount = 0; }
/// <summary> /// 寻找移动范围 /// </summary> /// <param name="howToFind"></param> /// <param name="start"></param> /// <param name="movePoint"></param> /// <param name="consumption"></param> /// <returns></returns> public bool SearchMoveRange(IHowToFind howToFind, CellData start, float movePoint, MoveConsumption consumption) { if (howToFind == null || start == null || movePoint < 0) { return(false); } Reset(); m_HowToFind = howToFind; m_MoveConsumption = consumption; m_StartCell = start; m_StartCell.ResetAStar(); m_Range.y = movePoint; m_Reachable.Add(m_StartCell); return(SearchRangeInternal()); }
public bool SearchPath(IHowToFind howToFind, CellData start, CellData end, MoveConsumption consumption) { if (howToFind == null || start == null || end == null) { return(false); } Reset(); this.howToFind = howToFind; moveConsumption = consumption; startCell = start; startCell.ResetAStar(); endCell = end; endCell.ResetAStar(); reachable.Add(startCell); startCell.H = this.howToFind.CalcH(this, startCell); return(SearchRangeInternal()); }
/// <summary> /// 搜寻路径 /// </summary> /// <param name="howToFind"></param> /// <param name="start"></param> /// <param name="end"></param> /// <param name="consumption"></param> /// <returns></returns> public bool SearchPath(IHowToFind howToFind, CellData start, CellData end, MoveConsumption consumption = null) { if (howToFind == null || start == null || end == null) { return(false); } Reset(); m_HowToFind = howToFind; m_MoveConsumption = consumption; m_StartCell = start; m_StartCell.ResetAStar(); m_EndCell = end; m_EndCell.ResetAStar(); m_Reachable.Add(m_StartCell); m_StartCell.h = m_HowToFind.CalcH(this, m_StartCell); return(SearchRangeInternal()); }