// 経路に沿って部屋をつなぐ道を作成 private void CreateRoad() { Debug.Log("道の生成を開始します。"); for (int i = 0; i < areaRouteList.Count; i++) { List <int> now_index_list = areaList[areaRouteList[i] - 1].GetNextAreaIDList(); if (i == 0) { Door out_door = areaList[areaRouteList[i] - 1].GetDoor(0); Door in_door = areaList[areaRouteList[i + 1] - 1].GetDoor(0); Road2 road = new Road2(in_door, out_door); roadList.Add(road); } else if (now_index_list.Count >= 2) { Door out_door = areaList[areaRouteList[i] - 1].GetDoor(1); Door in_door = areaList[areaRouteList[i + 1] - 1].GetDoor(0); Road2 road = new Road2(in_door, out_door); roadList.Add(road); if (now_index_list.Count == 3) { out_door = areaList[areaRouteList[i] - 1].GetDoor(2); in_door = areaList[now_index_list[2] - 1].GetDoor(0); road = new Road2(in_door, out_door); roadList.Add(road); } } } Debug.Log("道の生成を終了しました。"); }
// 袋小路を作成 private void CreateBlindAlley() { Debug.Log("袋小路の生成を開始します。"); for (int i = 0; i < areaList.Count; i++) { Road2 road = areaList[i].CreateBlindAlley(); if (road != null) { roadList.Add(road); } } Debug.Log("袋小路の生成を終了しました。"); }
/* * 袋小路の作成 */ public Road2 CreateBlindAlley() { if (nextAreaIDList.Count != 2) { return(null); } List <int> dir_list = new List <int>() { TOP, LEFT, BOTTOM, RIGHT, }; for (int i = 0; i < nextAreaIDList.Count; i++) { int dir = GetDirection(nextAreaIDList[i]); for (int n = 0; n < dir_list.Count; n++) { if (dir == dir_list[n]) { dir_list.RemoveAt(n); break; } } } int rand = Random.Range(0, dir_list.Count); room.CreateDoor(dir_list[rand]); Door door_dummy = new Door() { Dir = DEADEND, }; switch (dir_list[rand]) { case TOP: door_dummy.X = Random.Range(Mathf.Abs(_left - 2), Mathf.Abs(_right + 2)) * -1; door_dummy.Z = _top + 1; break; case LEFT: door_dummy.X = _left - 1; door_dummy.Z = Random.Range(_top + 3, _bottom - 3); break; case BOTTOM: door_dummy.X = Random.Range(Mathf.Abs(_left - 2), Mathf.Abs(_right + 2)) * -1; door_dummy.Z = _bottom - 2; break; case RIGHT: door_dummy.X = _right + 2; door_dummy.Z = Random.Range(_top + 3, _bottom - 3); break; } Door out_door = room.GetDoor(2); Road2 road = new Road2(door_dummy, out_door); // あまりにも短い袋小路状態なら作成しない if (road.GetRoadLength() > 3 /* MG 気を付けて */) { return(road); } else { Debug.Log("短い袋小路が生成されました。"); Debug.Log("袋小路を削除 & ドアを削除"); room.DestroyDoor(); return(null); } }