Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //generate maps
- //generate biome map for each point [x,y] bestBiome, bestD, secondBiome, secondD [only need to check four biomes]
- //create Splatmap with textures, noise and blending
- //create detail map depending on biome
- //modify height map by biome heightmaps
- //smooth heightmaps
- //apply heightmap / splat / detail
- public void controller()
- {
- heightMap = Generate.generate(settings); //O(n2)
- colorMap = Generate.generate(settings); //O(n2)
- moistureMap = Generate.generate(Settings); //O(n2)
- tempetureMap = Generate.generate(settings); //O(n2)
- Dictionar BiomeHData = Biome -> BiomeHeightMapArray
- BiomeMap = CalculateBiomeMap(moistureMap, tempetureMap, BiomeTable); //o(30n2)
- GenerateBiomeData();
- GenerateTextureTerrainLayers();
- SplatMap = CalculateSplatMap(Settings); //o(t*n2)
- DetailMap = CalculateDetailMap(settings); //o(n2)
- float[] secondHeightMap = AddBiomesToHeightMap(settings);
- float[] finalHeightMap = smoothHeightMap(settings); //must also normalise
- //apply everything!
- }
- private AddBiomesToHeightMap(settings)
- {
- float[,] final = new float[x,y];
- for (x in width)
- {
- for (y in height)
- {
- float mainBiomeDistance = BiomeMap[x,y].RealDistanceData;
- float closeBiomeDistance = BiomeMap[x,y].closeBiomeDistance;
- float sum = mainBiomeDistance + closeBiomeDistance;
- float firstRatio = closeBiomeDistance / sum;
- float secondRatio = mainBiomeDistance / sum;
- float firstCalc = firstRatio * mainBiome.biomeHMod * biomeHeightMap[mainBiome][x,y];
- float secondCalc = secondRatio * closeBiome.biomeHMod * biomeHeightMap[closeBiome][x,y];
- final[x,y] = height[x,y] + firstCalc + secondCalc;
- }
- }
- return final;
- }
- public BiomeFloatStruct[] BiomeMap(settings) //o(xy[2b+20])
- {
- BiomeFloatStruct[,] final = new BiomeFloatStruct[x,y];
- for (x = 0; x<moistureMap.Lenght;x++)
- {
- for (y = 0;y<tempetureMap.Lenght;y++)
- {
- //find closest biome, distanceData
- //find second closest biome , distanceData
- BiomeFloatStruct biomes = getBiomeMap(tempetureMap[t,m],moistureMap[x,y],BiomeTable); //o(2b+20)
- final[x.y] = biomes; //o(1)
- }
- }
- return final;
- }
- private BiomeFloatStruct getBiomeMap(settings) //o(2b + 20)
- {
- Node tree = treeNode;
- List<TempEnum> temps = getEnums<TempEnum>(t); //o(b)
- List<MoistureEnum> moist = getEnums<MoistureEnum>(m); //o(b)
- correctBiome = BiomeTable[temps[0],moist[0]); //o(1)
- correctD = Mathf.pow(temps[0].val - t,2) + Mathf.Pow(moist[0]val - m,2); //o(1)
- //loop through all 9 possibilities and get closest
- closestBiome = get; //o(9)
- closestD = get;
- return {new BiomeFloatStruct(data)}; //o(1)
- }
- private List<enums> getEnums<enums>(t)
- {
- Enum correct;
- Enum closest1;
- Enum closest2;
- for (i = 0;enums[].lenght;i++)
- {
- if (enums[i+1] > t)
- {
- correct = enums[i];
- closest1 = enums[i+1];
- closest2 = enums[i-1];
- }
- }
- return {correct, closest1, closest2}
- }
- struct BiomeFloatStruct
- {
- Biome RealBiomeData;
- float RealDistanceData;
- Biome ClosestBiomeData;
- float ClosestDistanceData;
- }
- class Node
- {
- //standard tree implementation
- // choose median and split in half each time
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement