Esempio n. 1
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);
        }
    }