/// <summary> /// Pointを起点に周囲が既に道になっていないか調べる /// </summary> /// <param name="cell"></param> /// <returns></returns> Direction GetDirection(Cell cell) { var dir = new List <Direction>(); dir.Add(Direction.Forward); dir.Add(Direction.Backward); dir.Add(Direction.Right); dir.Add(Direction.Left); dir.Add(Direction.Top); dir.Add(Direction.Bottom); while (dir.Count > 0) { var checkDir = dir[Random.Range(0, dir.Count)]; var checkIndex = new DungeonMapIndex(); checkIndex = cell.Index; switch (checkDir) // その方向の2つ先のマスをcheckPointに指定 { case Direction.Right: checkIndex.x += 2; break; case Direction.Left: checkIndex.x -= 2; break; case Direction.Top: checkIndex.y += 2; break; case Direction.Bottom: checkIndex.y -= 2; break; case Direction.Forward: checkIndex.z += 2; break; case Direction.Backward: checkIndex.z -= 2; break; default: break; } var targetCell = m_dungeonMapModules.Find(item => item.Index == checkIndex); if (targetCell.Status == CellStatus.DigableWall) // 対象のマスのステータスが掘削可能ならその向きを返す { return(checkDir); } // 対象の方向が掘削不可能だった場合その方向を削除してもう一度チェックする dir.Remove(checkDir); } // 全方向掘削不可能だった場合Noneを返す return(Direction.None); }
/// <summary> /// スタート地点を選定する /// </summary> /// <returns></returns> Cell GetStartCell() { // 指定範囲内の偶数座標をランダムに指定 var target = new DungeonMapIndex ( Calculator.GetRandomEvenIndex(m_margin, m_width - m_margin), Calculator.GetRandomEvenIndex(m_margin, m_height - m_margin), Calculator.GetRandomEvenIndex(m_margin, m_depth - m_margin) ); // 指定した座標と同じ座標のmoduleを取得してスタート地点とする var startCell = m_dungeonMapModules.Find(item => item.Index == target); startCell.Status = CellStatus.Start; m_roadEvenCell.Add(startCell); StartCell = startCell; return(startCell); }