Files
UltimateFishing/Assets/Scripts/Assembly-CSharp/vp_FractalNoise.cs
2026-02-21 16:45:37 +08:00

102 lines
2.1 KiB
C#

using System;
using UnityEngine;
public class vp_FractalNoise
{
private vp_Perlin m_Noise;
private float[] m_Exponent;
private int m_IntOctaves;
private float m_Octaves;
private float m_Lacunarity;
public vp_FractalNoise(float inH, float inLacunarity, float inOctaves)
: this(inH, inLacunarity, inOctaves, null)
{
}
public vp_FractalNoise(float inH, float inLacunarity, float inOctaves, vp_Perlin noise)
{
m_Lacunarity = inLacunarity;
m_Octaves = inOctaves;
m_IntOctaves = (int)inOctaves;
m_Exponent = new float[m_IntOctaves + 1];
float num = 1f;
for (int i = 0; i < m_IntOctaves + 1; i++)
{
m_Exponent[i] = (float)Math.Pow(m_Lacunarity, 0f - inH);
num *= m_Lacunarity;
}
if (noise == null)
{
m_Noise = new vp_Perlin();
}
else
{
m_Noise = noise;
}
}
public float HybridMultifractal(float x, float y, float offset)
{
float num = (m_Noise.Noise(x, y) + offset) * m_Exponent[0];
float num2 = num;
x *= m_Lacunarity;
y *= m_Lacunarity;
int i;
for (i = 1; i < m_IntOctaves; i++)
{
if (num2 > 1f)
{
num2 = 1f;
}
float num3 = (m_Noise.Noise(x, y) + offset) * m_Exponent[i];
num += num2 * num3;
num2 *= num3;
x *= m_Lacunarity;
y *= m_Lacunarity;
}
float num4 = m_Octaves - (float)m_IntOctaves;
return num + num4 * m_Noise.Noise(x, y) * m_Exponent[i];
}
public float RidgedMultifractal(float x, float y, float offset, float gain)
{
float num = Mathf.Abs(m_Noise.Noise(x, y));
num = offset - num;
num *= num;
float num2 = num;
float num3 = 1f;
for (int i = 1; i < m_IntOctaves; i++)
{
x *= m_Lacunarity;
y *= m_Lacunarity;
num3 = num * gain;
num3 = Mathf.Clamp01(num3);
num = Mathf.Abs(m_Noise.Noise(x, y));
num = offset - num;
num *= num;
num *= num3;
num2 += num * m_Exponent[i];
}
return num2;
}
public float BrownianMotion(float x, float y)
{
float num = 0f;
long num2;
for (num2 = 0L; num2 < m_IntOctaves; num2++)
{
num = m_Noise.Noise(x, y) * m_Exponent[num2];
x *= m_Lacunarity;
y *= m_Lacunarity;
}
float num3 = m_Octaves - (float)m_IntOctaves;
return num + num3 * m_Noise.Noise(x, y) * m_Exponent[num2];
}
}