예제 #1
0
    //replaces an given area
    public static MapData FlattenNoiseArea(MapData _mapData, int _nodeValue, bool _cannotOverwrite, EnumTypes.FigureMode _figureMode, Vector2 _clearPosition, int _clearSize, int _mapChunkSize)
    {
        int radius = Mathf.FloorToInt(_clearSize / 2);

        if (_figureMode == EnumTypes.FigureMode.Square)
        {
            for (int y = 0; y < _mapChunkSize; y++)
            {
                for (int x = 0; x < _mapChunkSize; x++)
                {
                    if (x >= _clearPosition.x - radius && x <= _clearPosition.x + radius && y >= _clearPosition.y - radius && y <= _clearPosition.y + radius)
                    {
                        float distance = x + y - _mapChunkSize + 1;

                        _mapData.noiseMap[x, y] = _mapData.noiseMap[x, y] / (_clearSize / distance);
                        _mapData.obstacleData[x, y].cannotOverwrite = _cannotOverwrite;

                        if (_nodeValue != 0)
                        {
                            _mapData.obstacleData[x, y].nodeValue = _nodeValue;
                        }
                    }
                }
            }
        }
        else if (_figureMode == EnumTypes.FigureMode.Circle)
        {
            _clearSize /= 2;

            for (int y = (int)_clearPosition.y - radius; y <= (int)_clearPosition.y + radius; y++)
            {
                for (int x = (int)_clearPosition.x - radius; x <= (int)_clearPosition.x + radius; x++)
                {
                    float distance = Vector2.Distance(_clearPosition, new Vector2(x, y));

                    //check if this location is withing the given _clearSize
                    if (distance <= _clearSize)
                    {
                        _mapData.noiseMap[x, y] = _mapData.noiseMap[x, y] / (_clearSize / distance);
                        _mapData.obstacleData[x, y].cannotOverwrite = _cannotOverwrite;
                    }
                }
            }
        }

        return(_mapData);
    }
예제 #2
0
    //flatten a circle, and add other small circles to it to make it seem natural
    public static MapData FlattenCircleRandomized(MapData _mapData, int _nodeValue, bool _cannotOverwrite, EnumTypes.FigureMode _figureMode, Vector2 _clearPosition, int _clearSize, int _mapChunkSize, int _randomizeAmount)
    {
        FlattenNoiseArea(_mapData, _nodeValue, _cannotOverwrite, EnumTypes.FigureMode.Circle, _clearPosition, _clearSize, _mapChunkSize);

        for (int i = 0; i < _randomizeAmount; i++)
        {
            int randomClearSize = Mathf.RoundToInt(_clearSize / Random.Range(1f, 2f));

            Vector2 randomCirclePosition = new Vector2(_clearPosition.x + randomClearSize / 2 * Random.Range(-1f, 1f), _clearPosition.y + randomClearSize / 2 * Random.Range(-1f, 1f));

            _mapData = FlattenNoiseArea(_mapData, _nodeValue, _cannotOverwrite, EnumTypes.FigureMode.Circle, randomCirclePosition, randomClearSize, _mapChunkSize);
        }

        return(_mapData);
    }