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)
         },
     });
 }