Newer
Older
using Unity.Jobs;
using Unity.Mathematics;
using UnityEngine;
public struct TerrainGenJob : IJob
{
public Vector2 InitialCrawlPosition { get; private set; }
public Vector2Int GridPosition { get; private set; }
[ReadOnly]
private NativeArray<Octave> octaves;
public TerrainGenJob(Vector2 initialCrawlPos, Vector2Int gridPos, NativeArray<Octave> octaves, int samples)
ready = false;
InitialCrawlPosition = initialCrawlPos;
GridPosition = gridPos;
Samples = samples;
this.octaves = octaves;
}
public float[,] GetHeights()
{
if (ready)
{
foreach (var height in heights)
{
}
return ;
}
else
throw new System.InvalidOperationException("Heights not built yet.");
}
{
heights = new float[Samples, Samples];
foreach (var octave in octaves)
{
for (int x = 0; x < Samples; x++)
{
for (int y = 0; y < Samples; y++)
{
float2 crawlPos = new((x + InitialCrawlPosition.x * (Samples - 1)) * octave.frequency,
(y + InitialCrawlPosition.y * (Samples - 1)) * octave.frequency);
float addition;
switch (octave.type)
{
default:
case NoiseType.MathfPerlin:
addition = Mathf.PerlinNoise(crawlPos.x, crawlPos.y);
break;
case NoiseType.MathematicsPerlin:
addition = noise.cnoise(crawlPos) / 2.3f + 0.5f;
break;
case NoiseType.Simplex:
addition = noise.snoise(crawlPos) / 4.6f + 0.5f;
break;
case NoiseType.Celluar:
addition = noise.cellular(crawlPos).x / 2.3f + 0.5f;
break;
}
heights[y, x] += addition * octave.amplitude;
}
}
}
ready = true;
}
}