-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathBiomeGenerator.cs
81 lines (66 loc) · 2.67 KB
/
BiomeGenerator.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BiomeGenerator : MonoBehaviour
{
public int waterThreshold = 50;
public NoiseSettings biomeNoiseSettings;
public DomainWarping domainWarping;
public bool useDomainWarping = true;
public BlockLayerHandler startLayerHandler;
public TreeGenerator treeGenerator;
internal TreeData GetTreeData(ChunkData data, Vector2Int mapSeedOffset)
{
if (treeGenerator == null)
return new TreeData();
return treeGenerator.GenerateTreeData(data, mapSeedOffset);
}
public List<BlockLayerHandler> additionalLayerHandlers;
public ChunkData ProcessChunkColumn(ChunkData data, int x, int z, Vector2Int mapSeedOffset, int? terrainHeightNoise)
{
//biomeNoiseSettings.offest = offset;
biomeNoiseSettings.worldOffset = mapSeedOffset;
int groundPosition;
if (terrainHeightNoise.HasValue == false)
groundPosition = GetSurfaceHeightNoise(data.worldPosition.x + x, data.worldPosition.z + z, data.chunkHeight);
else
groundPosition = terrainHeightNoise.Value;
//Asi nos ahorramos andar con numeros negativos en los ores
groundPosition += 35;
for (int y = data.worldPosition.y; y < data.worldPosition.y + data.chunkHeight; y++)
{
startLayerHandler.Handle(data, x, y, z, groundPosition, mapSeedOffset);
/*if (!startLayerHandler.isAuxiliarWaterHandler)
{
startLayerHandler.Handle(data, x, y, z, groundPosition, mapSeedOffset);
}
else
{
int auxgroundPosition = GetSurfaceHeightNoise(data.worldPosition.x + x, data.worldPosition.z + z, data.chunkHeight);
startLayerHandler.Handle(data, x, y, z, groundPosition, mapSeedOffset);
}*/
}
foreach (BlockLayerHandler layer in additionalLayerHandlers)
{
layer.Handle(data, x, data.worldPosition.y, z, groundPosition, mapSeedOffset);
}
return data;
}
public int GetSurfaceHeightNoise(int x, int z, int chunkHeight)
{
float terrainHeight;
if(useDomainWarping == false)
{
terrainHeight = MyNoise.OctavePerlin(x, z, biomeNoiseSettings);
}
else
{
terrainHeight = domainWarping.GenerateDomainNoise(x, z, biomeNoiseSettings);
}
terrainHeight = MyNoise.Redistribution(terrainHeight, biomeNoiseSettings);
int surfaceHeight = MyNoise.RemapValue01ToInt(terrainHeight, 0, 100);
return surfaceHeight ;
return surfaceHeight + 50 ;
}
}