36 lines
1.0 KiB
C#
36 lines
1.0 KiB
C#
using UnityEngine;
|
|
|
|
namespace Generators
|
|
{
|
|
public class PerlinNoiseGenerator : IGenerator
|
|
{
|
|
public float Scale { get; set; } = 0.001f;
|
|
public Vector2 Offset { get; set; } = new Vector2(.0f, .0f);
|
|
public int Iterations { get; set; } = 8;
|
|
public float Decay { get; set; } = .7f;
|
|
public float Lacunarity { get; set; } = 1.71f;
|
|
|
|
public double GetValue(Vector2 position)
|
|
{
|
|
var amplitude = 1.0;
|
|
var scale = Scale;
|
|
var result = 0.0;
|
|
|
|
for (int i = 0; i < Iterations; i++) {
|
|
result += amplitude * Calculate(position, scale);
|
|
|
|
amplitude *= Decay;
|
|
scale *= Lacunarity;
|
|
}
|
|
|
|
return result / ((1 - System.Math.Pow(Decay, Iterations)) / (1 - Decay));
|
|
}
|
|
|
|
private double Calculate(Vector2 position, float scale)
|
|
{
|
|
var final = (position + Offset) * scale;
|
|
|
|
return Mathf.PerlinNoise(final.x, final.y);
|
|
}
|
|
}
|
|
} |