Files
RobustToolbox/Robust.Shared/Noise/NoiseGenerator.cs
Pieter-Jan Briers cdd3afaa4c Remove redundant custom math types (#6078)
Vector3, Vector4, Matrix4, and Quaternion are now gone. Use System.Numerics instead.

This commit is just replacing usages, cleaning up using declarations, and moving over the (couple) helpers that are actually important.
2025-07-23 01:15:27 +02:00

144 lines
3.8 KiB
C#

using System;
using System.Numerics;
using JetBrains.Annotations;
namespace Robust.Shared.Noise
{
[Obsolete("Use FastNoiseLite")]
[PublicAPI]
public sealed class NoiseGenerator
{
[PublicAPI]
public enum NoiseType : byte
{
Fbm = 0,
Ridged = 1
}
private readonly FastNoise _fastNoiseInstance;
private float _periodX;
private float _periodY;
public NoiseGenerator(NoiseType type)
{
_fastNoiseInstance = new FastNoise();
_fastNoiseInstance.SetNoiseType(FastNoise.NoiseType.SimplexFractal);
_fastNoiseInstance.SetFractalLacunarity((float) (Math.PI * 2 / 3));
switch (type)
{
case NoiseType.Fbm:
_fastNoiseInstance.SetFractalType(FastNoise.FractalType.FBM);
break;
case NoiseType.Ridged:
_fastNoiseInstance.SetFractalType(FastNoise.FractalType.RigidMulti);
break;
default:
throw new ArgumentOutOfRangeException(nameof(type), type, null);
}
}
public void SetFrequency(float frequency)
{
_fastNoiseInstance.SetFrequency(frequency);
}
public void SetLacunarity(float lacunarity)
{
_fastNoiseInstance.SetFractalLacunarity(lacunarity);
}
public void SetPersistence(float persistence)
{
_fastNoiseInstance.SetFractalGain(persistence);
}
public void SetPeriodX(float periodX)
{
_periodX = periodX;
}
public void SetPeriodY(float periodY)
{
_periodY = periodY;
}
public void SetOctaves(uint octaves)
{
_fastNoiseInstance.SetFractalOctaves((int) octaves);
}
public void SetSeed(uint seed)
{
_fastNoiseInstance.SetSeed((int) seed);
}
public float GetNoiseTiled(float x, float y)
{
return GetNoiseTiled(new Vector2(x, y));
}
public float GetNoiseTiled(Vector2 vec)
{
var s = vec.X / _periodX;
var t = vec.Y / _periodY;
const float x1 = 0;
const float x2 = 1;
const float y1 = 0;
const float y2 = 1;
const float dx = x2 - x1;
const float dy = y2 - y1;
const float tau = (float)Math.PI * 2;
const float dxTau = dx / tau;
const float dyTau = dy / tau;
var nx = x1 + (float)Math.Cos(s * tau) * dxTau;
var ny = y1 + (float)Math.Cos(t * tau) * dyTau;
var nz = x1 + (float)Math.Sin(s * tau) * dxTau;
var nw = y1 + (float)Math.Sin(t * tau) * dyTau;
return GetNoise(nx, ny, nz, nw);
}
public float GetNoise(float x)
{
return GetNoise(new Vector2(x, 0));
}
public float GetNoise(float x, float y)
{
return _fastNoiseInstance.GetSimplexFractal(x, y);
}
public float GetNoise(Vector2 vector)
{
return GetNoise(vector.X, vector.Y);
}
public float GetNoise(float x, float y, float z)
{
return _fastNoiseInstance.GetSimplexFractal(x, y, z);
}
public float GetNoise(Vector3 vector)
{
return GetNoise(vector.X, vector.Y, vector.Z);
}
public float GetNoise(float x, float y, float z, float w)
{
return _fastNoiseInstance.GetSimplex(x, y, z, w);
}
public float GetNoise(Vector4 vector)
{
return GetNoise(vector.X, vector.Y, vector.Z, vector.W);
}
}
}