public void Compute() { CommonExecutorUTProxy commonExecutor = new CommonExecutorUTProxy(); HabitatMapDbProxy habitatMapDbProxy = _gameInitializationFields.Retrive <HabitatMapDbProxy>(); ComputeShaderContainerGameObject computeShaderContainer = _gameInitializationFields.Retrive <ComputeShaderContainerGameObject>(); UnityThreadComputeShaderExecutorObject shaderExecutorObject = _gameInitializationFields.Retrive <UnityThreadComputeShaderExecutorObject>(); var templatesDict = _vegetationConfiguration.FloraDomainCreationTemplates; var floraConfiguration = _vegetationConfiguration.FloraConfiguration; var spatialDbConfiguration = _vegetationConfiguration.FloraDomainSpatialDbConfiguration; var dbsDict = new Dictionary <HabitatAndZoneType, ISpatialDb <FloraDomainIntensityArea> >(); foreach (var pair in templatesDict) { IStoredPartsGenerator <FloraDomainIntensityArea> partsGenerator = new FloraDomainIntensityGenerator(pair.Value, computeShaderContainer, shaderExecutorObject, commonExecutor, 1f, floraConfiguration); var spatialDb = new CacheingSpatialDb <FloraDomainIntensityArea>( new SpatialDb <FloraDomainIntensityArea>(partsGenerator, spatialDbConfiguration), spatialDbConfiguration); dbsDict[pair.Key] = spatialDb; } var floraDomainDb = new FloraDomainDbProxy(dbsDict); var biomeProvidersGenerators = _vegetationConfiguration.BiomeConfigurationsDict(floraDomainDb) .ToDictionary(c => c.Key, c => new BiomeProvidersFromHabitatGenerator(habitatMapDbProxy, c.Value)); var genralPlacer = new GeneralMultiDistrictPlacer( _vegetationConfiguration.GeneralMultiDistrictPlacerConfiguration, _gameInitializationFields.Retrive <TerrainShapeDbProxy>(), commonExecutor, biomeProvidersGenerators); var database = genralPlacer.Generate( _vegetationConfiguration.GenerationArea, _vegetationConfiguration.RankDependentSpeciesCharacteristics(), _vegetationConfiguration.GenerationCenter); var vegetationOnRoadRemover = new VegetationOnRoadRemover( _gameInitializationFields.Retrive <RoadDatabaseProxy>(), _vegetationConfiguration.VegetationOnRoadRemoverConfiguration ); var newDb = vegetationOnRoadRemover.RemoveCollidingTrees(database, _vegetationConfiguration.GenerationArea); //CreateDebugObjects(newDb.Subjects.ToDictionary(c => c.Key, c => c.Value.QueryAll())); VegetationDatabaseFileUtils.WriteToFileNonOverwrite( _pathsConfiguration.LoadingVegetationDatabaseDictionaryPath, newDb); }
BiomeConfigurationsDict(FloraDomainDbProxy floraDomainDb) { return(new Dictionary <VegetationLevelRank, Dictionary <HabitatType, List <PrioritisedBiomeProvider> > >() { { VegetationLevelRank.Big, _biomeProvidersConfiguration.Big_CreateSingleResolutionBiomesProvider(floraDomainDb) }, { VegetationLevelRank.Medium, _biomeProvidersConfiguration.Mid_CreateSingleResolutionBiomesProvider(floraDomainDb) }, { VegetationLevelRank.Small, _biomeProvidersConfiguration.Min_CreateSingleResolutionBiomesProvider(floraDomainDb) }, }); }