Ejemplo n.º 1
0
    private void GenerateMap()
    {
        FillWithWalls();
        int roomIterations = 0;

        while (rooms.Count < roomsToGenerate && roomIterations < maxRoomIterations)
        {
            roomIterations++;
            MapRoom room = new MapRoom(mapSize, maxRoomSize, minRoomSize);
            if (ScanRoom(room))
            {
                //Fill with the room
                PlaceRoom(room);
                rooms.Add(room);
            }
            //Place a corridor
            if (rooms.Count > 1)
            {
                MapRoom from = rooms[rooms.Count - 2];
                MapRoom to   = rooms[rooms.Count - 1];
                try {
                    MapCorridor corridor = new MapCorridor(from, to, mapSize);
                    PlaceCorridor(corridor);
                }
                catch (ImpossibleCorridorError) {
                }
            }
        }
    }
        private void RasterizeCorridor(MapCorridor corridor, Edge edge)
        {
            Point srcPos, dstPos;

            CreateCorridor(edge.RoomA, edge.RoomB, out srcPos, out dstPos);
            corridor.Rasterize(edge.RoomA, edge.RoomB, srcPos, dstPos);
        }
Ejemplo n.º 3
0
    private void PlaceCorridor(MapCorridor mc)
    {
        Vector2Int cursor = new Vector2Int(mc.start.x, mc.start.y);

        EditTile(cursor, true, false);
        if (mc.horizontal_priority)
        {
            while (cursor.x != mc.end.x)
            {
                if (cursor.x > mc.end.x)
                {
                    cursor.x--;
                }
                else
                {
                    cursor.x++;
                }
                EditTile(cursor, true, false);
            }
            while (cursor.y != mc.end.y)
            {
                if (cursor.y > mc.end.y)
                {
                    cursor.y--;
                }
                else
                {
                    cursor.y++;
                }
                EditTile(cursor, true, false);
            }
        }
        else
        {
            while (cursor.y != mc.end.y)
            {
                if (cursor.y > mc.end.y)
                {
                    cursor.y--;
                }
                else
                {
                    cursor.y++;
                }
                EditTile(cursor, true, false);
            }
            while (cursor.x != mc.end.x)
            {
                if (cursor.x > mc.end.x)
                {
                    cursor.x--;
                }
                else
                {
                    cursor.x++;
                }
                EditTile(cursor, true, false);
            }
        }
    }