Beispiel #1
0
    public void decideTypes()
    {
        int neighbors = 4;

        if (up == null)//find neighbors
        {
            neighbors--;
        }
        if (down == null)
        {
            neighbors--;
        }
        if (right == null)
        {
            neighbors--;
        }
        if (left == null)
        {
            neighbors--;
        }
        if (type != RoomType.StartRoom)
        {
            if (neighbors == 4)
            {
                type = RoomType.Quad;
            }
            else if (neighbors == 3)
            {
                if (up == null)
                {
                    type = RoomType.triDown;
                }
                else if (down == null)
                {
                    type = RoomType.triUp;
                }
                else if (left == null)
                {
                    type = RoomType.triRight;
                }
                else
                {
                    type = RoomType.triLeft;
                }
            }
            else if (neighbors == 2)
            {
                if (up == null)
                {
                    if (left == null)
                    {
                        type = RoomType.cornerUpLeft;
                    }
                    else if (right == null)
                    {
                        type = RoomType.cornerUpRight;
                    }
                    else if (down == null)
                    {
                        type = RoomType.hallwayUpDown;
                    }
                }
                else if (down == null)
                {
                    if (left == null)
                    {
                        type = RoomType.cornerDownLeft;
                    }
                    else if (right == null)
                    {
                        type = RoomType.cornerDownRight;
                    }
                }
                else if (left == null)
                {
                    if (right == null)
                    {
                        type = RoomType.hallwayLeftRight;
                    }
                }
            }
            else
            {
                if (up != null)
                {
                    type = RoomType.deadEndDown;
                }
                else if (down != null)
                {
                    type = RoomType.deadEndUp;
                }
                else if (left != null)
                {
                    type = RoomType.deadEndLeft;
                }
                else if (right != null)
                {
                    type = RoomType.deadEndRight;
                }
            }
        }
        lock (lockObject)
        {
            lastList.Add(this);
        }
        if (up != null && !lastList.Contains(up))
        {
            up.decideTypes();
        }
        if (down != null && !lastList.Contains(down))
        {
            down.decideTypes();
        }
        if (right != null && !lastList.Contains(right))
        {
            right.decideTypes();
        }
        if (left != null && !lastList.Contains(left))
        {
            left.decideTypes();
        }
    }
Beispiel #2
0
    // Use this for initialization
    void Start()
    {
        Floortile = bd;
        int            rooms   = 22;
        List <Vector2> Dungeon = new List <Vector2>();

        while (Dungeon.Count < rooms)
        {
            Vector2 start = new Vector2(Random.Range(1, sizeX - 1), Random.Range(1, sizeY - 1));
            Dungeon = Path(rooms, new Vector2(4, 4));
        }

        for (int i = 0; i < Dungeon.Count; i++)
        {
            if (i == 0)
            {
                Rooms[(int)Dungeon[i].x][(int)Dungeon[i].y] = new RoomScript();
                startRoom      = Rooms[(int)Dungeon[i].x][(int)Dungeon[i].y];
                startRoom.type = RoomScript.RoomType.StartRoom;
                Map[(int)Dungeon[i].x][(int)Dungeon[i].y] = 2;
            }
            else
            {
                Rooms[(int)Dungeon[i].x][(int)Dungeon[i].y] = new RoomScript();
                Map[(int)Dungeon[i].x][(int)Dungeon[i].y]   = 1;
            }
        }
        for (int x = 0; x < Rooms.Count; x++)
        {
            for (int y = 0; y < Rooms[x].Count; y++)
            {
                if (Rooms[x][y] != null)
                {
                    if (x + 1 < Rooms.Count)
                    {
                        if (Rooms[x + 1][y] != null)
                        {
                            Rooms[x][y].right = Rooms[x + 1][y];
                        }
                    }
                    if (x - 1 >= 0)
                    {
                        if (Rooms[x - 1][y] != null)
                        {
                            Rooms[x][y].left = Rooms[x - 1][y];
                        }
                    }
                    if (y + 1 < Rooms[x].Count)
                    {
                        if (Rooms[x][y + 1] != null)
                        {
                            Rooms[x][y].up = Rooms[x][y + 1];
                        }
                    }
                    if (y - 1 >= 0)
                    {
                        if (Rooms[x][y - 1] != null)
                        {
                            Rooms[x][y].down = Rooms[x][y - 1];
                        }
                    }
                }
            }
        }
        startRoom.decideTypes();
        for (int i = 0; i < Rooms.Count; i++)
        {
            for (int t = 0; t < Rooms[i].Count; t++)
            {
                GameObject temp;
                if (Rooms[i][t] != null)
                {
                    switch (Rooms[i][t].type)
                    {
                    case RoomScript.RoomType.deadEndUp:
                        temp = Instantiate <GameObject>(Resources.Load <GameObject>("Rooms/End/End1"), new Vector3(i * bd.transform.localScale.x, t * bd.transform.localScale.y, 0f), Quaternion.Euler(0, 0, 180));
                        break;

                    case RoomScript.RoomType.deadEndDown:
                        temp = Instantiate <GameObject>(Resources.Load <GameObject>("Rooms/End/End1"), new Vector3(i * bd.transform.localScale.x, t * bd.transform.localScale.y, 0f), Quaternion.Euler(0, 0, 0));
                        break;

                    case RoomScript.RoomType.deadEndRight:
                        temp = Instantiate <GameObject>(Resources.Load <GameObject>("Rooms/End/End1"), new Vector3(i * bd.transform.localScale.x, t * bd.transform.localScale.y, 0f), Quaternion.Euler(0, 0, 270));
                        break;

                    case RoomScript.RoomType.deadEndLeft:
                        temp = Instantiate <GameObject>(Resources.Load <GameObject>("Rooms/End/End1"), new Vector3(i * bd.transform.localScale.x, t * bd.transform.localScale.y, 0f), Quaternion.Euler(0, 0, 90));
                        break;

                    case RoomScript.RoomType.hallwayUpDown:
                        if (Random.value > .5f)
                        {
                            temp = Instantiate <GameObject>(Resources.Load <GameObject>("Rooms/Hallway/Hallway1"), new Vector3(i * bd.transform.localScale.x, t * bd.transform.localScale.y, 0f), Quaternion.Euler(0, 0, 90));
                        }
                        else
                        {
                            temp = Instantiate <GameObject>(Resources.Load <GameObject>("Rooms/Hallway/Hallway1"), new Vector3(i * bd.transform.localScale.x, t * bd.transform.localScale.y, 0f), Quaternion.Euler(0, 0, 270));
                        }
                        break;

                    case RoomScript.RoomType.hallwayLeftRight:
                        if (Random.value > .5f)
                        {
                            temp = Instantiate <GameObject>(Resources.Load <GameObject>("Rooms/Hallway/Hallway1"), new Vector3(i * bd.transform.localScale.x, t * bd.transform.localScale.y, 0f), Quaternion.Euler(0, 0, 0));
                        }
                        else
                        {
                            temp = Instantiate <GameObject>(Resources.Load <GameObject>("Rooms/Hallway/Hallway1"), new Vector3(i * bd.transform.localScale.x, t * bd.transform.localScale.y, 0f), Quaternion.Euler(0, 0, 180));
                        }
                        break;

                    case RoomScript.RoomType.cornerUpLeft:
                        temp = Instantiate <GameObject>(Resources.Load <GameObject>("Rooms/Corner/Corner1"), new Vector3(i * bd.transform.localScale.x, t * bd.transform.localScale.y, 0f), Quaternion.Euler(0, 0, 270));
                        break;

                    case RoomScript.RoomType.cornerUpRight:
                        temp = Instantiate <GameObject>(Resources.Load <GameObject>("Rooms/Corner/Corner1"), new Vector3(i * bd.transform.localScale.x, t * bd.transform.localScale.y, 0f), Quaternion.Euler(0, 0, 180));
                        break;

                    case RoomScript.RoomType.cornerDownRight:
                        temp = Instantiate <GameObject>(Resources.Load <GameObject>("Rooms/Corner/Corner1"), new Vector3(i * bd.transform.localScale.x, t * bd.transform.localScale.y, 0f), Quaternion.Euler(0, 0, 90));
                        break;

                    case RoomScript.RoomType.cornerDownLeft:
                        temp = Instantiate <GameObject>(Resources.Load <GameObject>("Rooms/Corner/Corner1"), new Vector3(i * bd.transform.localScale.x, t * bd.transform.localScale.y, 0f), Quaternion.Euler(0, 0, 0));
                        break;

                    case RoomScript.RoomType.triUp:
                        temp = Instantiate <GameObject>(Resources.Load <GameObject>("Rooms/Tri/Tri1"), new Vector3(i * bd.transform.localScale.x, t * bd.transform.localScale.y, 0f), Quaternion.Euler(0, 0, 0));
                        break;

                    case RoomScript.RoomType.triDown:
                        temp = Instantiate <GameObject>(Resources.Load <GameObject>("Rooms/Tri/Tri1"), new Vector3(i * bd.transform.localScale.x, t * bd.transform.localScale.y, 0f), Quaternion.Euler(0, 0, 180));
                        break;

                    case RoomScript.RoomType.triLeft:
                        temp = Instantiate <GameObject>(Resources.Load <GameObject>("Rooms/Tri/Tri1"), new Vector3(i * bd.transform.localScale.x, t * bd.transform.localScale.y, 0f), Quaternion.Euler(0, 0, 90));
                        break;

                    case RoomScript.RoomType.triRight:
                        temp = Instantiate <GameObject>(Resources.Load <GameObject>("Rooms/Tri/Tri1"), new Vector3(i * bd.transform.localScale.x, t * bd.transform.localScale.y, 0f), Quaternion.Euler(0, 0, 270));
                        break;

                    case RoomScript.RoomType.Quad:
                        float y = Random.value;
                        if (y > .75f)
                        {
                            temp = Instantiate <GameObject>(Resources.Load <GameObject>("Rooms/Quad/Quad1"), new Vector3(i * bd.transform.localScale.x, t * bd.transform.localScale.y, 0f), Quaternion.Euler(0, 0, 270));
                        }
                        else if (y > .5f)
                        {
                            temp = Instantiate <GameObject>(Resources.Load <GameObject>("Rooms/Quad/Quad1"), new Vector3(i * bd.transform.localScale.x, t * bd.transform.localScale.y, 0f), Quaternion.Euler(0, 0, 180));
                        }
                        else if (y > .25f)
                        {
                            temp = Instantiate <GameObject>(Resources.Load <GameObject>("Rooms/Quad/Quad1"), new Vector3(i * bd.transform.localScale.x, t * bd.transform.localScale.y, 0f), Quaternion.Euler(0, 0, 90));
                        }
                        else
                        {
                            temp = Instantiate <GameObject>(Resources.Load <GameObject>("Rooms/Quad/Quad1"), new Vector3(i * bd.transform.localScale.x, t * bd.transform.localScale.y, 0f), Quaternion.Euler(0, 0, 0));
                        }
                        break;

                    case RoomScript.RoomType.StartRoom:
                        temp = Instantiate <GameObject>(Resources.Load <GameObject>("Rooms/Spawn/Spawn1"), new Vector3(i * bd.transform.localScale.x, t * bd.transform.localScale.y, 0f), Quaternion.Euler(0, 0, 0));
                        GameObject Op = GameObject.FindGameObjectWithTag("Player");
                        Op.transform.position = temp.transform.position;     //- new Vector3(temp.transform.localScale.x/2, temp.transform.localScale.y / 2, 0);

                        break;

                    default:
                        break;
                    }
                }
            }
        }

        PlaceWalls();
    }