public void Start()
        {
            var heightmapTextureSize = new IntVector2(3600, 3600);
            var rgbaMainTexture      = SavingFileManager.LoadPngTextureFromFile(_filePathsConfiguration.HeightmapFilePath,
                                                                                heightmapTextureSize.X, heightmapTextureSize.Y, TextureFormat.ARGB32, true, false);

            TerrainTextureFormatTransformator transformator =
                new TerrainTextureFormatTransformator(_gameInitializationFields.Retrive <CommonExecutorUTProxy>());
            var globalHeightTexture = transformator.EncodedHeightTextureToPlain(new TextureWithSize()
            {
                Size    = heightmapTextureSize,
                Texture = rgbaMainTexture
            });

            if (true)
            {
                _gameInitializationFields.SetField(new TerrainDetailAlignmentCalculator(240));

                TerrainDetailGenerator terrainDetailGenerator =
                    CreateTerrainDetailGenerator(
                        globalHeightTexture,
                        _gameInitializationFields.Retrive <UTTextureRendererProxy>(),
                        _gameInitializationFields.Retrive <CommonExecutorUTProxy>(),
                        _gameInitializationFields.Retrive <UnityThreadComputeShaderExecutorObject>(),
                        _gameInitializationFields.Retrive <ComputeShaderContainerGameObject>());

                var commonExecutorUtProxy = _gameInitializationFields.Retrive <CommonExecutorUTProxy>();

                TerrainDetailProvider terrainDetailProvider =
                    CreateTerrainDetailProvider(terrainDetailGenerator, commonExecutorUtProxy);


                var terrainDetailFileManager =
                    new TerrainDetailFileManager(_configuration.TerrainDetailCachePath, commonExecutorUtProxy);
                var terrainShapeDb = CreateTerrainShapeDb(terrainDetailProvider
                                                          , commonExecutorUtProxy
                                                          , _gameInitializationFields.Retrive <TerrainDetailAlignmentCalculator>()
                                                          , _configuration.TerrainShapeDbConfiguration.MergeTerrainDetail
                                                          , _configuration.TerrainShapeDbConfiguration.UseTextureSavingToDisk
                                                          , _configuration.TerrainShapeDbConfiguration.UseTextureLoadingFromDisk, terrainDetailFileManager);

                TerrainShapeDbProxy terrainShapeDbProxy = new TerrainShapeDbProxy(terrainShapeDb);
                var baseTerrainDetailProvider           = BaseTerrainDetailProvider.CreateFrom(terrainShapeDb);
                _gameInitializationFields.SetField(baseTerrainDetailProvider);
                terrainDetailGenerator.SetBaseTerrainDetailProvider(baseTerrainDetailProvider);

                _ultraUpdatableContainer.AddOtherThreadProxy(terrainShapeDbProxy);

                _gameInitializationFields.SetField(terrainShapeDbProxy);
            }
            else
            {
                ITerrainShapeDb terrainShapeDbProxy = new DebugSlopedTerrainShapeDb(
                    _gameInitializationFields.Retrive <UTTextureRendererProxy>()
                    );

                terrainShapeDbProxy = new RecordingTerrainShapeDb(terrainShapeDbProxy);
                _gameInitializationFields.SetField((RecordingTerrainShapeDb)terrainShapeDbProxy);
            }
        }
Ejemplo n.º 2
0
        private void CreateGrass2IntensityDb()
        {
            HabitatToGrassIntensityMapGenerator habitatToGrassIntensityMapGenerator =
                new HabitatToGrassIntensityMapGenerator(
                    _initializationFields.Retrive <ComputeShaderContainerGameObject>(),
                    _initializationFields.Retrive <UnityThreadComputeShaderExecutorObject>(),
                    _initializationFields.Retrive <CommonExecutorUTProxy>(),
                    _veConfiguration.HabitatToGrassIntensityMapGeneratorConfiguration);

            HabitatMapDbProxy habitatDbProxy = _initializationFields.Retrive <HabitatMapDbProxy>();

            var pathProximityTextureDbProxy = _initializationFields.Retrive <PathProximityTextureDbProxy>();

            var mapsGenerator = new Grass2IntensityMapGenerator(
                habitatToGrassIntensityMapGenerator,
                new HabitatTexturesGenerator(habitatDbProxy,
                                             _veConfiguration.HabitatTexturesGeneratorConfiguration,
                                             _initializationFields.Retrive <TextureConcieverUTProxy>()),
                _veConfiguration.Grass2IntensityMapGeneratorConfiguration,
                pathProximityTextureDbProxy);

            var db = new SpatialDb <List <Grass2TypeWithIntensity> >(mapsGenerator,
                                                                     _veConfiguration.Grass2IntensityDbConfiguration
                                                                     );

            var databaseProxy = new Grass2IntensityDbProxy(db);

            _ultraUpdatableContainer.AddOtherThreadProxy(databaseProxy);
            _ultraUpdatableContainer.AddOtherThreadProxy(habitatDbProxy);

            _initializationFields.SetField(databaseProxy);
        }
Ejemplo n.º 3
0
        public void Start()
        {
            var ring2ShaderRepository = Ring2PlateShaderRepository.Create();

            var conciever      = _gameInitializationFields.Retrive <TextureConcieverUTProxy>();
            var detailEnhancer =
                new Ring2IntensityPatternEnhancer(_gameInitializationFields.Retrive <UTTextureRendererProxy>(),
                                                  _ring2InitializerConfiguration.Ring2IntensityPatternEnhancingSizeMultiplier);

            var ring2PatchesPainterUtProxy = new Ring2PatchesPainterUTProxy(new Ring2PatchesPainter(
                                                                                new Ring2MultishaderMaterialRepository(ring2ShaderRepository, Ring2ShaderNames.ShaderNames)));

            _ultraUpdatableContainer.Add(ring2PatchesPainterUtProxy);

            var patchesCreator = new GRing2PatchesCreator(
                _gameInitializationFields.Retrive <IRing2RegionsDatabase>(),
                new GRing2RegionsToPatchTemplateConventer(),
                new Ring2PatchTemplateCombiner(),
                new Ring2PatchCreator(),
                new Ring2IntensityPatternProvider(conciever, detailEnhancer),
                new GRing2Deviser(),
                _ring2InitializerConfiguration.Ring2PatchesOverseerConfiguration
                );

            var gRing2PatchesCreatorProxy = new GRing2PatchesCreatorProxy(patchesCreator);

            _ultraUpdatableContainer.AddOtherThreadProxy(gRing2PatchesCreatorProxy);

            _gameInitializationFields.SetField(gRing2PatchesCreatorProxy);

            UTRing2PlateStamperProxy stamperProxy = new UTRing2PlateStamperProxy(
                new Ring2PlateStamper(_ring2InitializerConfiguration.Ring2PlateStamperConfiguration,
                                      _gameInitializationFields.Retrive <ComputeShaderContainerGameObject>()));

            _ultraUpdatableContainer.Add(stamperProxy);

            Ring2PatchStamplingOverseerFinalizer patchStamper = new Ring2PatchStamplingOverseerFinalizer(
                stamperProxy,
                _gameInitializationFields.Retrive <UTTextureRendererProxy>(), _gameInitializationFields.Retrive <CommonExecutorUTProxy>());

            _gameInitializationFields.SetField(patchStamper);
        }
        private void InitializeWelding()
        {
            var weldingTexture = new RenderTexture(1024, 1024, 0, RenderTextureFormat.RFloat);

            weldingTexture.enableRandomWrite = true;
            weldingTexture.filterMode        = FilterMode.Point;
            weldingTexture.wrapMode          = TextureWrapMode.Clamp;
            weldingTexture.Create();

            HeightArrayWelderProxy welderProxy = new HeightArrayWelderProxy(
                new HeightArrayWeldingDispatcher(
                    new WeldMapLevel1Manager(
                        new WeldMapLevel2Manager(
                            new WeldingExecutor(
                                _gameInitializationFields.Retrive <ComputeShaderContainerGameObject>(),
                                _gameInitializationFields.Retrive <UnityThreadComputeShaderExecutorObject>(),
                                weldingTexture),
                            new WeldMapLevel2ManagerConfiguration()
            {
                WeldTextureSize         = new IntVector2(1024, 1024),
                ColumnsCount            = 1024,
                StripLength             = 240,
                StripsPerOneColumnCount = 2,                 //todo
                StripStride             = 256
            }))));

            _ultraUpdatableContainer.AddOtherThreadProxy(welderProxy);

            var terrainThreadAssignBox = new LateAssignBox <Ring1TreeProxy>();

            _gameInitializationFields.SetField(terrainThreadAssignBox);

            var weldingPack = new HeightArrayWeldingPack(new TextureWithSize()
            {
                Texture = weldingTexture,
                Size    = new IntVector2(1024, 1024)
            }, welderProxy, _gameInitializationFields.Retrive <CommonExecutorUTProxy>(), _gRingConfiguration.WeldingEnabled);

            _gameInitializationFields.SetField(weldingPack);
        }
Ejemplo n.º 5
0
        // Use this for initialization
        void Start()
        {
            _configuration = new FEConfiguration(new FilePathsConfiguration())
            {
                Multithreading = UseMultithreading
            };
            _configuration.TerrainShapeDbConfiguration = TerrainShapeDbConfiguration;
            FeGRingConfiguration.FeConfiguration       = _configuration;
            VegetationConfiguration.FeConfiguration    = _configuration;

            TaskUtils.SetGlobalMultithreading(_configuration.Multithreading);
            TaskUtils.ExecuteActionWithOverridenMultithreading(true, () =>
            {
                MyProfiler.BeginSample("Sample1");
                msw.StartSegment("Game initialization");

                GlobalServicesProfileInfo servicesProfileInfo = new GlobalServicesProfileInfo();
                if (GraphicsOverlay != null)
                {
                    GraphicsOverlay.ServicesProfileInfo = servicesProfileInfo;
                }

                _ultraUpdatableContainer = new UltraUpdatableContainer(
                    _configuration.SchedulerConfiguration,
                    servicesProfileInfo,
                    _configuration.UpdatableContainerConfiguration);

                _configuration.TerrainShapeDbConfiguration.UseTextureSavingToDisk = true;

                _gameInitializationFields.SetField(ContainerGameObject);
                _gameInitializationFields.SetField(_configuration.Repositioner);
                _gameInitializationFields.SetField(_configuration.HeightDenormalizer);

                var initializingHelper =
                    new FEInitializingHelper(_gameInitializationFields, _ultraUpdatableContainer, _configuration);
                initializingHelper.InitializeUTService(new TextureConcieverUTProxy());
                initializingHelper.InitializeUTService(new UnityThreadComputeShaderExecutorObject(_configuration.UseMultistepComputeShaderExecution));
                initializingHelper.InitializeUTService(new CommonExecutorUTProxy());
                initializingHelper.CreatePathProximityTextureDb();

                SetInitialCameraPosition();

                initializingHelper.InitializeDesignBodySpotUpdater();
                initializingHelper.InitializeUTRendererProxy();
                initializingHelper.InitializeUTService(new MeshGeneratorUTProxy(new MeshGeneratorService()));
                initializingHelper.InitializeMonoliticRing2RegionsDatabase();

                var finalSurfacePathInitialization =
                    new Ring2PatchInitializer(_gameInitializationFields, _ultraUpdatableContainer, new Ring2PatchInitializerConfiguration(_configuration));
                finalSurfacePathInitialization.Start();

                var finalTerrainInitialization =
                    new FinalTerrainInitialization(_ultraUpdatableContainer, _gameInitializationFields, _configuration, FeGRingConfiguration);
                finalTerrainInitialization.Start();

                initializingHelper.InitializeGlobalInstancingContainer();
                var finalVegetation = new FinalVegetation(_gameInitializationFields, _ultraUpdatableContainer, VegetationConfiguration);
                finalVegetation.Start();
            });

            MyProfiler.EndSample();
        }
Ejemplo n.º 6
0
 public void InitializeUTService <T>(T updatable) where T : BaseUTService
 {
     _gameInitializationFields.SetField(updatable);
     _updatableContainer.Add(updatable);
 }