/*void RasterizeHeightMap(float _min = 0, float _max = 1)
     * {
     *  OnEachArrayCase(ref heightMap, (_array, _x, _y) => CaseRasterization(ref _array, _x, _y, _min, _max));
     * }
     *
     * void CaseRasterization(ref float[,] _array, int _x, int _y, float _min, float _max)
     * {
     *  float _val = _array[_x, _y];
     * }
     *
     * void OnEachArrayCase<T>(ref T[,] _array, Action<T[,] ,int, int> OnEachtArray)
     * {
     *  for (int x = 0; x < _array.GetLength(0); x++)
     *  {
     *      for (int y = 0; y < _array.GetLength(1); y++)
     *      {
     *          OnEachtArray?.Invoke(_array,x,y);
     *      }
     *  }
     * }*/

    void RasterizeHeightMap(ref float[,] _array)
    {
        float _maxValue = maxValue;
        float _minValue = minValue;

        if (!useMinMax)
        {
            _maxValue = maxMapValue;
            _minValue = minMapValue;
        }
        RasterizationSettings _settings = new RasterizationSettings(_minValue, _maxValue);

        OnEachMapCase(ref _array, (a, b, c) => CaseRasterization(ref a, b, c, _settings));
    }
    void CaseRasterization(ref float[,] _array, int _x, int _y, RasterizationSettings _settings)
    {
        float _val = _array[_x, _y];

        if (_val > _settings.maxValue)
        {
            _val = _settings.maxValue;
        }
        else if (_val < _settings.minValue)
        {
            _val = _settings.minValue;
        }

        _array[_x, _y] = MT_MathTools.Cross(_val, _settings.maxValue, _settings.minValue);
    }