/// <summary> /// フォーカスユニットの移動エリアの算出 /// </summary> /// <param name="cursorManager">Cursor manager.</param> public void CheckMoveArea(ref Struct.NodeMove[,] activeAreaList, GameObject checkUnitObj) { // スタート地点からエンドまで再帰的に移動コストをチェックする Vector3 pos = checkUnitObj.transform.position; activeAreaList = new Struct.NodeMove[fieldHeight, fieldWidth]; activeAreaList[-(int)pos.y, (int)pos.x].aREA = Enums.AREA.UNIT; CheckMoveAreaRecursive(ref activeAreaList, checkUnitObj, pos, 0); }
/// <summary> /// フォーカスユニットから目的地までの最短ルートをチェックし、 /// ユニットの移動ルートリストに登録する /// </summary> /// <param name="cursorManager">Cursor manager.</param> /// <param name="endPos">End position.</param> public void CheckShortestRoute(ref PhaseManager phaseManager, Vector3 endPos) { // ユニットの移動ルートを初期化 phaseManager.moveRoot = new List <Vector3>(); // 開始地点から終了地点までたどり着けるか bool isEnd = false; Vector3 pos = phaseManager.focusUnitObj.transform.position; Struct.NodeMove[,] nodeList = new Struct.NodeMove[fieldHeight, fieldWidth]; nodeList[-(int)pos.y, (int)pos.x].aREA = Enums.AREA.UNIT; // スタート地点からエンドまで再帰的に移動コストをチェックする CheckRootAreaRecursive(ref nodeList, ref phaseManager.activeAreaManager.activeAreaList, pos, ref endPos, 0, ref isEnd); // ゴールできる場合は最短ルートをチェックする if (isEnd) { phaseManager.moveRoot = CheckShootRootRecursive(ref phaseManager, ref nodeList, endPos); } }