Ejemplo n.º 1
0
 // 経路に沿って部屋をつなぐ道を作成
 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("道の生成を終了しました。");
 }
Ejemplo n.º 2
0
 // 袋小路を作成
 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("袋小路の生成を終了しました。");
 }
Ejemplo n.º 3
0
    /*
     * 袋小路の作成
     */
    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);
        }
    }