public HydraulicErosionTerrainFeatureApplier(ComputeShaderContainerGameObject computeShaderContainer,
                                              UnityThreadComputeShaderExecutorObject shaderExecutorObject,
                                              Dictionary <TerrainCardinalResolution, HydraulicEroderConfiguration> configurations)
 {
     _computeShaderContainer = computeShaderContainer;
     _shaderExecutorObject   = shaderExecutorObject;
     _configurations         = configurations;
 }
 public ThermalErosionTerrainFeatureApplier(ComputeShaderContainerGameObject computeShaderContainer,
                                            UnityThreadComputeShaderExecutorObject shaderExecutorObject, CommonExecutorUTProxy commonExecutor,
                                            Dictionary <TerrainCardinalResolution, ThermalErosionTerrainFeatureApplierConfiguration> configurations)
 {
     _computeShaderContainer = computeShaderContainer;
     _shaderExecutorObject   = shaderExecutorObject;
     _commonExecutor         = commonExecutor;
     _configurations         = configurations;
 }
        public static List <RankedTerrainFeatureApplier> CreateFeatureAppliers(
            UTTextureRendererProxy utTextureRendererProxy,
            ComputeShaderContainerGameObject computeShaderContainerGameObject,
            CommonExecutorUTProxy commonExecutor,
            UnityThreadComputeShaderExecutorObject threadComputeShaderExecutorObject,
            Func <RoadEngravingTerrainFeatureApplier> roadApplierCreatingFunc = null)
        {
            var toReturn = new List <RankedTerrainFeatureApplier>()
            {
                new RankedTerrainFeatureApplier()
                {
                    Rank    = 1,
                    Applier = new RandomNoiseTerrainFeatureApplier(utTextureRendererProxy, commonExecutor,
                                                                   new Dictionary <TerrainCardinalResolution, RandomNoiseTerrainFeatureApplierConfiguration>
                    {
                        {
                            TerrainCardinalResolution.MIN_RESOLUTION,
                            new RandomNoiseTerrainFeatureApplierConfiguration()
                            {
                                DetailResolutionMultiplier = 1,
                                NoiseStrengthMultiplier    = 1
                            }
                        },
                        {
                            TerrainCardinalResolution.MID_RESOLUTION,
                            new RandomNoiseTerrainFeatureApplierConfiguration()
                            {
                                DetailResolutionMultiplier = 8,
                                NoiseStrengthMultiplier    = 0.45f
                            }
                        },
                        {
                            TerrainCardinalResolution.MAX_RESOLUTION,
                            new RandomNoiseTerrainFeatureApplierConfiguration()
                            {
                                DetailResolutionMultiplier = 8 * 8,
                                NoiseStrengthMultiplier    = 4.7f * 0.45f / 9f  //todo CHANGE IT !!
                            }
                        },
                    }),
                    AvalibleResolutions = new List <TerrainCardinalResolution>()
                    {
                        TerrainCardinalResolution.MIN_RESOLUTION,
                        TerrainCardinalResolution.MID_RESOLUTION,
                        TerrainCardinalResolution.MAX_RESOLUTION,
                    }
                },
                new RankedTerrainFeatureApplier()
                {
                    Rank    = 2,
                    Applier = new DiamondSquareTerrainFeatureApplier(
                        new RandomProviderGenerator(123), commonExecutor,
                        utTextureRendererProxy,
                        new Dictionary <TerrainCardinalResolution, DiamondSquareTerrainFeatureApplierConfiguration>
                    {
                        {
                            TerrainCardinalResolution.MIN_RESOLUTION,
                            new DiamondSquareTerrainFeatureApplierConfiguration
                            {
                                DiamondSquareWorkingArrayLength = 32,
                                DiamondSquareWeight             = 0.012f
                            }
                        },
                        {
                            TerrainCardinalResolution.MID_RESOLUTION,
                            new DiamondSquareTerrainFeatureApplierConfiguration
                            {
                                DiamondSquareWorkingArrayLength = 32,
                                DiamondSquareWeight             = 0.0025f * 1.3f
                            }
                        },
                        {
                            TerrainCardinalResolution.MAX_RESOLUTION,
                            new DiamondSquareTerrainFeatureApplierConfiguration
                            {
                                DiamondSquareWorkingArrayLength = 32,
                                DiamondSquareWeight             = 0.0003f
                            }
                        },
                    }),
                    AvalibleResolutions = new List <TerrainCardinalResolution>()
                    {
                        TerrainCardinalResolution.MIN_RESOLUTION,
                        TerrainCardinalResolution.MID_RESOLUTION,
                        TerrainCardinalResolution.MAX_RESOLUTION,
                    }
                },
                new RankedTerrainFeatureApplier()
                {
                    Rank    = 3,
                    Applier = new ThermalErosionTerrainFeatureApplier(computeShaderContainerGameObject,
                                                                      threadComputeShaderExecutorObject, commonExecutor,
                                                                      new Dictionary <TerrainCardinalResolution, ThermalErosionTerrainFeatureApplierConfiguration>
                    {
                        {
                            TerrainCardinalResolution.MIN_RESOLUTION,
                            new ThermalErosionTerrainFeatureApplierConfiguration
                            {
                            }
                        },
                        {
                            TerrainCardinalResolution.MID_RESOLUTION,
                            new ThermalErosionTerrainFeatureApplierConfiguration
                            {
                                TParam = 0.001f / 2.3f,
                                CParam = 0.06f
                            }
                        },
                    }),
                    AvalibleResolutions = new List <TerrainCardinalResolution>()
                    {
                        TerrainCardinalResolution.MIN_RESOLUTION,
                        TerrainCardinalResolution.MID_RESOLUTION
                    }
                },
                new RankedTerrainFeatureApplier()
                {
                    Rank    = 4,
                    Applier = new HydraulicErosionTerrainFeatureApplier(computeShaderContainerGameObject,
                                                                        threadComputeShaderExecutorObject,
                                                                        new Dictionary <TerrainCardinalResolution, HydraulicEroderConfiguration>()
                    {
                        {
                            TerrainCardinalResolution.MIN_RESOLUTION, new HydraulicEroderConfiguration()
                            {
                                StepCount = 20,
                                kr_ConstantWaterAddition  = 0.000002f,    // 0.0001f,
                                ks_GroundToSedimentFactor = 1f,
                                ke_WaterEvaporationFactor = 0.05f,
                                kc_MaxSedimentationFactor = 0.8f,
                            }
                        },
                        {
                            TerrainCardinalResolution.MID_RESOLUTION, new HydraulicEroderConfiguration()
                            {
                                StepCount = 20,
                                kr_ConstantWaterAddition  = 0.000002f,    // 0.0001f,
                                ks_GroundToSedimentFactor = 1f,
                                ke_WaterEvaporationFactor = 0.05f,
                                kc_MaxSedimentationFactor = 0.8f / 2f,
                            }
                        },
                        {
                            TerrainCardinalResolution.MAX_RESOLUTION, new HydraulicEroderConfiguration()
                            {
                                StepCount = 20,
                                kr_ConstantWaterAddition  = 0.0000035f,    // 0.0001f,
                                ks_GroundToSedimentFactor = 1f,
                                ke_WaterEvaporationFactor = 0.05f,
                                kc_MaxSedimentationFactor = 0.8f / 4f,
                            }
                        }
                    }),
                    AvalibleResolutions = new List <TerrainCardinalResolution>()
                    {
                        TerrainCardinalResolution.MIN_RESOLUTION,
                        TerrainCardinalResolution.MID_RESOLUTION,
                        TerrainCardinalResolution.MAX_RESOLUTION,
                    }
                },
                new RankedTerrainFeatureApplier()
                {
                    Rank    = 5,
                    Applier = new TweakedThermalErosionTerrainFeatureApplier(computeShaderContainerGameObject,
                                                                             threadComputeShaderExecutorObject,
                                                                             new Dictionary <TerrainCardinalResolution,
                                                                                             TweakedThermalErosionTerrainFeatureApplierConfiguration>
                    {
                        {
                            TerrainCardinalResolution.MIN_RESOLUTION,
                            new TweakedThermalErosionTerrainFeatureApplierConfiguration()
                            {
                            }
                        },
                        {
                            TerrainCardinalResolution.MID_RESOLUTION,
                            new TweakedThermalErosionTerrainFeatureApplierConfiguration()
                            {
                                TParam = 0.001f,
                                CParam = 0.008f
                            }
                        },
                        {
                            TerrainCardinalResolution.MAX_RESOLUTION,
                            new TweakedThermalErosionTerrainFeatureApplierConfiguration()
                            {
                                TParam = 0.001f,
                                CParam = 0.008f
                            }
                        },
                    }),
                    AvalibleResolutions = new List <TerrainCardinalResolution>()
                    {
                        TerrainCardinalResolution.MIN_RESOLUTION,
                        TerrainCardinalResolution.MID_RESOLUTION,
                        TerrainCardinalResolution.MAX_RESOLUTION,
                    }
                },
            };

            if (roadApplierCreatingFunc != null)
            {
                var roadApplier = roadApplierCreatingFunc();
                toReturn.Add(new RankedTerrainFeatureApplier()
                {
                    Applier             = roadApplier,
                    AvalibleResolutions = new List <TerrainCardinalResolution>()
                    {
                        TerrainCardinalResolution.MAX_RESOLUTION
                    },
                    Rank = 10
                });
            }

            return(toReturn);
        }
 public MeiErosionTerrainFeatureApplier(ComputeShaderContainerGameObject computeShaderContainer,
                                        UnityThreadComputeShaderExecutorObject shaderExecutorObject)
 {
     _computeShaderContainer = computeShaderContainer;
     _shaderExecutorObject   = shaderExecutorObject;
 }