コード例 #1
0
    public void MakeCorridor(Room startRoom, Room endRoom, int exit)
    {
        int firstTileX = 0;
        int firstTileY = 0;
        int repeat     = 0;

        // Horizontal corridor, exit 0. (right to left, bottom to top)
        if (exit == 0)
        {
            for (int y = startRoom.roomTilesY - 1; y > 0; y--)
            {
                for (int x = 0; x < startRoom.roomTilesX; x++)
                {
                    if (startRoom.roomTiles[x, y] == Room.Tile.floor)
                    {
                        firstTileX = x;
                        firstTileY = y;
                        y          = 0;
                        x          = startRoom.roomTilesX;
                        repeat     = startRoom.roomTilesY - firstTileY - 1;
                    }
                }
            }
        }
        // Horizontal corridor, exit 1. (right to left, top to bot)
        else if (exit == 1)
        {
            for (int x = startRoom.roomTilesX - 1; x > 0; x--)
            {
                for (int y = 0; y < startRoom.roomTilesY; y++)
                {
                    if (startRoom.roomTiles[x, y] == Room.Tile.floor)
                    {
                        firstTileX = x;
                        firstTileY = y;
                        y          = startRoom.roomTilesY;
                        x          = 0;
                        repeat     = startRoom.roomTilesX - firstTileX - 1;
                    }
                }
            }
        }
        // Vertical corridor, exit 2. (bottom to top, left to right)
        else if (exit == 2)
        {
            for (int y = 0; y < startRoom.roomTilesY; y++)
            {
                for (int x = 0; x < startRoom.roomTilesX; x++)
                {
                    if (startRoom.roomTiles[x, y] == Room.Tile.floor)
                    {
                        firstTileX = x;
                        firstTileY = y;
                        y          = startRoom.roomTilesY;
                        x          = startRoom.roomTilesX;
                        repeat     = startRoom.roomTilesY - firstTileY - 1;
                    }
                }
            }
        }
        // Horizontal corridor, exit 3. (left to right, bottom to top)
        else if (exit == 3)
        {
            for (int x = 0; x < startRoom.roomTilesX; x++)
            {
                for (int y = 0; y < startRoom.roomTilesY; y++)
                {
                    if (startRoom.roomTiles[x, y] == Room.Tile.floor)
                    {
                        firstTileX = x;
                        firstTileY = y;
                        // Check if corridor will connect. If yes, loop out, if no, jump 2 in the appriate direction and continue.
                        y      = startRoom.roomTilesY;
                        x      = startRoom.roomTilesX;
                        repeat = firstTileX;
                    }
                }
            }
        }
        Vector2 exitDir = lvlGrid.DirectionVector(exit);

        AssignTiles(startRoom, endRoom, firstTileX, firstTileY, exitDir, repeat);
    }