Beispiel #1
0
    void SmoothArea(CARuleset ruleset, List <Tile> area)
    {
        int[,] tmpMap = new int[map.GetLength(0), map.GetLength(1)];
        for (int x = 0; x < columns; x++)
        {
            for (int y = 0; y < rows; y++)
            {
                tmpMap[x, y] = map[x, y];
            }
        }

        foreach (Tile c in area)
        {
            int neighbourRoomTiles = CheckNeighbourhood(c.tileX, c.tileY, ruleset.neighbourhoodType);

            if (tmpMap[c.tileX, c.tileY] == 1 && neighbourRoomTiles >= ruleset.newMin && neighbourRoomTiles <= ruleset.newMax)
            {
                tmpMap[c.tileX, c.tileY] = 0;
            }
            else if (tmpMap[c.tileX, c.tileY] == 0 && neighbourRoomTiles >= ruleset.survMin && neighbourRoomTiles <= ruleset.survMax)
            {
                tmpMap[c.tileX, c.tileY] = 0;
            }
            else
            {
                tmpMap[c.tileX, c.tileY] = 1;
            }
        }
        map = tmpMap;
    }
Beispiel #2
0
    void SmoothMap(CARuleset ruleset)
    {
        int[,] tmpMap = new int[map.GetLength(0), map.GetLength(1)];
        for (int x = 0; x < columns; x++)
        {
            for (int y = 0; y < rows; y++)
            {
                tmpMap[x, y] = map[x, y];
                if (x == 0 || y == 0 || x == columns - 1 || y == rows - 1)
                {
                    continue;
                }

                int neighbourRoomTiles = CheckNeighbourhood(x, y, ruleset.neighbourhoodType);

                if (tmpMap[x, y] == 1 && neighbourRoomTiles >= ruleset.newMin && neighbourRoomTiles <= ruleset.newMax)
                {
                    tmpMap[x, y] = 0;
                }
                else if (tmpMap[x, y] == 0 && neighbourRoomTiles >= ruleset.survMin && neighbourRoomTiles <= ruleset.survMax)
                {
                    tmpMap[x, y] = 0;
                }
                else
                {
                    tmpMap[x, y] = 1;
                }
            }
        }
        map = tmpMap;
    }
Beispiel #3
0
    void GenerateMap()
    {
        map = new int[columns, rows];
        if (useRandomSeed)
        {
            seed = Time.time.ToString();
        }

        RandomFillMap();

        CARuleset ruleset = new CARuleset(neighbourhoodType, surviveMin, surviveMax, newMin, newMax);

        for (int i = 0; i < smoothingIterations; i++)
        {
            SmoothMap(ruleset);
        }

        if (hybridMode)
        {
            CARuleset ruleset2 = new CARuleset(neighbourhoodTypeHybrid, surviveMinHybrid, surviveMaxHybrid, newMinHybrid, newMaxHybrid);
            for (int i = 0; i < smoothingIterationsHybrid; i++)
            {
                SmoothMap(ruleset2);
            }
        }
    }
Beispiel #4
0
    void GenerateArea(List <Tile> area)
    {
        RandomFillArea(area);

        CARuleset ruleset = new CARuleset(neighbourhoodType, surviveMin, surviveMax, newMin, newMax);

        for (int i = 0; i < smoothingIterations; i++)
        {
            SmoothArea(ruleset, area);
        }
        if (hybridMode)
        {
            CARuleset ruleset2 = new CARuleset(neighbourhoodTypeHybrid, surviveMinHybrid, surviveMaxHybrid, newMinHybrid, newMaxHybrid);
            for (int i = 0; i < smoothingIterationsHybrid; i++)
            {
                SmoothArea(ruleset2, area);
            }
        }
    }
Beispiel #5
0
    public CASettings(string presetSettings = "default")
    {
        seed              = "default seed";
        useRandomSeed     = true;
        levelWidth        = 80;
        levelHeight       = 80;
        maxRoomSize       = 10000;
        maxWallSize       = 10000;
        enableConnections = true;

        if (presetSettings == "maze")
        {
            wallFill              = 60;
            iterations1           = 6;
            iterations2           = 4;
            enableSecondRuleset   = true;
            ruleset1              = new CARuleset(NeighbourhoodType.Moore, 3, 8, 5, 8);
            ruleset2              = new CARuleset(NeighbourhoodType.Neuman, 1, 4, 3, 3);
            minRoomSize           = 8;
            minWallSize           = 4;
            useDirectConnections  = false;
            maxLeavingConnections = 5;
            connectionSizeFactor  = 8;
            maxConnectionLengthX  = 8;
            maxConnectionLengthY  = 8;
        }
        else if (presetSettings == "severs")
        {
            wallFill              = 60;
            iterations1           = 6;
            iterations2           = 4;
            enableSecondRuleset   = true;
            ruleset1              = new CARuleset(NeighbourhoodType.Moore, 3, 8, 5, 8);
            ruleset2              = new CARuleset(NeighbourhoodType.Neuman, 1, 4, 3, 3);
            minRoomSize           = 8;
            minWallSize           = 4;
            useDirectConnections  = false;
            maxLeavingConnections = 5;
            connectionSizeFactor  = 8;
            maxConnectionLengthX  = 8;
            maxConnectionLengthY  = 8;
        }
        else if (presetSettings == "cave")
        {
            wallFill              = 60;
            iterations1           = 6;
            iterations2           = 4;
            enableSecondRuleset   = true;
            ruleset1              = new CARuleset(NeighbourhoodType.Moore, 3, 8, 5, 8);
            ruleset2              = new CARuleset(NeighbourhoodType.Neuman, 1, 4, 3, 3);
            minRoomSize           = 8;
            minWallSize           = 4;
            useDirectConnections  = false;
            maxLeavingConnections = 5;
            connectionSizeFactor  = 8;
            maxConnectionLengthX  = 8;
            maxConnectionLengthY  = 8;
        }
        else
        {
            wallFill              = 60;
            iterations1           = 6;
            iterations2           = 4;
            enableSecondRuleset   = true;
            ruleset1              = new CARuleset(NeighbourhoodType.Moore, 3, 8, 5, 8);
            ruleset2              = new CARuleset(NeighbourhoodType.Neuman, 1, 4, 3, 3);
            minRoomSize           = 8;
            minWallSize           = 4;
            useDirectConnections  = false;
            maxLeavingConnections = 5;
            connectionSizeFactor  = 8;
            maxConnectionLengthX  = 8;
            maxConnectionLengthY  = 8;
        }
    }