Esempio n. 1
0
    //////////////////////////////////////////////////////////////////////////////////
    /*										|										*/
    /*                                   PRIVATES									*/
    /*										|										*/
    //////////////////////////////////////////////////////////////////////////////////

    protected void shufflePaths(DungeonGrid grid, PathableArea area, Random rand)
    {
        double rateo = ((double)grid.countArea(area) / (double)grid.countPerimeter(area));

        rateo = 5000 * (rateo);
        if (rateo > 9000)
        {
            rateo = 9000;
        }
        if (rateo < 1000)
        {
            rateo = 1000;
        }

        for (int x = area.position.x; x < area.sizeX + area.position.x; x++)
        {
            for (int y = area.position.y; y < area.sizeY + area.position.y; y++)
            {
                Coordinates position = new Coordinates(x, y);
                if (grid.hasDoorsTouching(position) || grid.hasForcedPathTouching(position))
                {
                    grid.grid[position.x, position.y] = Constants.PATH_MARKER;
                }
                else
                {
                    int rnd = (rand.Next() % 10000) + 1;
                    grid.grid[position.x, position.y] = rnd > rateo ? Constants.PATH_MARKER : Constants.PATHABLE_MARKER;
                }
            }
        }
    }
Esempio n. 2
0
 private static void checkArea(DungeonLayout layout, PathableArea area)
 {
     for (int x = area.position.x; x < area.sizeX + area.position.x; x++)
     {
         for (int y = area.position.y; y < area.sizeY + area.position.y; y++)
         {
             if (layout.grid.grid [x, y] != Constants.PATHABLE_MARKER)
             {
                 throw new WrongLayoutDeclarationException("PathableArea declaration error. position: " + area.position.x + "," + area.position.y);
             }
         }
     }
 }
Esempio n. 3
0
    //////////////////////////////////////////////////////////////////////////////////
    /*										|										*/
    /*                                   PRIVATES									*/
    /*										|										*/
    //////////////////////////////////////////////////////////////////////////////////

    private void recursiveMergePaths(DungeonGrid grid, PathableArea area, Random rand)
    {
        List <List <Coordinates> > tempPaths = grid.findAreas(Constants.PATH_MARKER, area.position, new Coordinates(area.position.x + area.sizeX, area.position.y + area.sizeY));

        if (tempPaths.Count == 1)
        {
            return;
        }

        PathDistance closest = findClosestPaths(tempPaths, rand);

        grid.drawPath(closest.path_1, closest.path_2, rand);

        recursiveMergePaths(grid, area, rand);
    }
Esempio n. 4
0
    //////////////////////////////////////////////////////////////////////////////////
    /*										|										*/
    /*                                   PRIVATES									*/
    /*										|										*/
    //////////////////////////////////////////////////////////////////////////////////

    private void mergePaths(DungeonGrid grid, PathableArea area, Random rand)
    {
        List <List <Coordinates> > tempPaths = grid.findAreas(Constants.PATH_MARKER, area.position, new Coordinates(area.position.x + area.sizeX, area.position.y + area.sizeY));

        if (tempPaths.Count == 1)
        {
            return;
        }

        bool[,] linkedGraph = new bool[tempPaths.Count, tempPaths.Count];

        for (int i = 0; i < tempPaths.Count; i++)
        {
            for (int j = 0; j < tempPaths.Count; j++)
            {
                linkedGraph [i, j] = (i == j ? true : false);
            }
        }

        int actual = 0;

        foreach (List <Coordinates> tempPath in tempPaths)
        {
            int linkTo = rand.Next() % tempPaths.Count;
            int count  = 0;
            while (linkedGraph [actual, linkTo] && count < tempPaths.Count)
            {
                linkTo = (linkTo + 1) % tempPaths.Count;
                count++;
            }
            if (count == tempPaths.Count)
            {
                continue;
            }

            linkedGraph [actual, linkTo] = true;
            linkedGraph [linkTo, actual] = true;
            linkAll(linkedGraph, tempPaths.Count, actual, linkTo);

            PathDistance points = findClosestPoints(tempPath, tempPaths [linkTo]);
            grid.drawPath(points.path_1, points.path_2, rand);

            actual++;
        }
    }
Esempio n. 5
0
 public int countPerimeter(PathableArea area)
 {
     return(2 * (area.sizeX + area.sizeY));
 }
Esempio n. 6
0
 public int countArea(PathableArea area)
 {
     return(area.sizeX * area.sizeY);
 }