Exemple #1
0
    public override TopDownChunkData CreateChunkData(FinalTerrain terrain)
    {
        TopDownChunkData chunk = new TopDownChunkData();

        FillChunkData(chunk as ChunkData, terrain);
        return(chunk);
    }
Exemple #2
0
 public void FillChunkData(ChunkData chunk, FinalTerrain finalTerrain)
 {
     chunk.size             = finalTerrain.mergedTerrain.size;
     chunk.materializerType = finalTerrain.materializerType;
     chunk.terrain          = finalTerrain.mergedTerrain;
     chunk.biomeMap         = finalTerrain.biomeData.biomeMap;
     chunk.biomeMap3D       = null;
 }
Exemple #3
0
        public T RequestChunk(Vector3 pos, int seed)
        {
            if (seed != oldSeed)
            {
                graph.seed = seed;
            }

            graph.chunkPosition = pos;

            graph.Process();

            oldSeed = seed;
            FinalTerrain finalTerrain = graph.GetOutput <FinalTerrain>();

            if (finalTerrain == null)
            {
                Debug.LogWarning("[PWTerrainBase] Graph output does not contains T type");
                return(null);
            }

            return(CreateChunkData(finalTerrain));
        }
Exemple #4
0
 public abstract T CreateChunkData(FinalTerrain terrain);
 public override TopDownChunkData CreateChunkData(FinalTerrain terrain)
 {
     Debug.Log("TODO !");
     return(null);
 }
Exemple #6
0
        public override void OnNodeProcess()
        {
            if (mergedBiomeTerrain == null)
            {
                mergedBiomeTerrain = new FinalTerrain();
            }

            if (inputBlendedTerrain.biomeData == null)
            {
                Debug.LogError("[PWBiomeMerger] Can't find BiomeData, did you forgot to specify the BiomeGraph in a Biome node");
                return;
            }

            var inputTerrain = inputBlendedTerrain.biomeData.GetSampler(BiomeSamplerName.terrainHeight);

            finalTerrain = inputTerrain.Clone(finalTerrain);

            if (finalTerrain.type == SamplerType.Sampler2D)
            {
                BiomeMap2D biomeMap = inputBlendedTerrain.biomeData.biomeMap;

                (finalTerrain as Sampler2D).Foreach((x, y, val) => {
                    float ret = 0;

                    var biomeInfo = biomeMap.GetBiomeBlendInfo(x, y);
                    foreach (var biome in inputBlendedTerrain.biomes)
                    {
                        var terrain = biome.modifiedTerrain as Sampler2D;

                        if (terrain == null)
                        {
                            PWUtils.LogErrorMax("[PWNodeMerger] can't access to the terrain of the biome " + biome.id + "(" + biome.name + ")", 100);
                            continue;
                        }

                        //TODO: test this blending !
                        for (int i = 0; i < biomeInfo.length; i++)
                        {
                            if (biomeInfo.biomeIds[i] == biome.id)
                            {
                                ret += terrain[x, y] * biomeInfo.biomeBlends[i] / biomeInfo.totalBlend;
                            }
                        }
                    }

                    return(ret);
                });
            }
            else if (finalTerrain.type == SamplerType.Sampler3D)
            {
                Debug.Log("TODO: 3D Terrains");
            }

            mergedBiomeTerrain.biomeData        = inputBlendedTerrain.biomeData;
            mergedBiomeTerrain.mergedTerrain    = finalTerrain;
            mergedBiomeTerrain.materializerType = mainGraphRef.materializerType;

            mergedBiomeTerrain.biomeSurfacesList.Clear();
            foreach (var biome in inputBlendedTerrain.biomes)
            {
                if (mergedBiomeTerrain.biomeSurfacesList.ContainsKey(biome.id))
                {
                    Debug.LogError("[PWBiomeMerger] Duplicate biome in the biome graph: " + biome.name + ", id: " + biome.id);
                }
                mergedBiomeTerrain.biomeSurfacesList[biome.id] = biome.biomeSurfaceGraph;
            }

            update = true;
        }