Esempio n. 1
0
        private void StartBushVegetation()
        {
            var singleGenerationArea = _veConfiguration.BushSingleGenerationArea;
            var positionsProvider    =
                new GrassVegetationSubjectsPositionsGenerator(
                    new GrassVegetationSubjectsPositionsGenerator.
                    GrassVegetationSubjectsPositionsGeneratorConfiguration()
            {
                PositionsGridSize = singleGenerationArea
            });


            var grassIntensityDbProxy = _initializationFields.Retrive <Grass2IntensityDbProxy>();

            OtherThreadExecutingLocation otherThreadExecutingLocation = new OtherThreadExecutingLocation();
            var planter = CreateBushGroupsPlanter(otherThreadExecutingLocation);

            GrassGroupsGrower    grassGroupsGrower    = new GrassGroupsGrower(planter, grassIntensityDbProxy, _veConfiguration.SupportedGrassTypes, _veConfiguration.GrassPlantingCorrectionRepositioner);
            Grass2RuntimeManager grass2RuntimeManager = new Grass2RuntimeManager(grassGroupsGrower,
                                                                                 new Grass2RuntimeManager.Grass2RuntimeManagerConfiguration()
            {
                GroupSize = singleGenerationArea
            });

            var vegetationSubjectsChangesListener = new Grass2RuntimeManagerProxy(grass2RuntimeManager);

            otherThreadExecutingLocation.SetExecutingTarget(vegetationSubjectsChangesListener);

            //////
            var runtimeManagement = new VegetationRuntimeManagement(
                positionsProvider: positionsProvider,
                vegetationSubjectsChangesListener: vegetationSubjectsChangesListener,
                visibleEntitiesContainer: new VegetationSubjectsVisibleEntitiesContainer(),
                configuration: _veConfiguration.BushVegetationRuntimeManagementConfiguration);

            var vegetationRuntimeManagementProxy = new VegetationRuntimeManagementProxy(runtimeManagement);

            var repositioner = _veConfiguration.VegetationRepositioner;

            _ultraUpdatableContainer.AddUpdatableElement(new FieldBasedUltraUpdatable()
            {
                StartCameraField = (camera) =>
                {
                    vegetationRuntimeManagementProxy.StartThreading();
                    var newPosition = repositioner.InvMove(camera.Position);
                    vegetationRuntimeManagementProxy.Start(newPosition);
                },
                UpdateCameraField = (camera) =>
                {
                    var newPosition = repositioner.InvMove(camera.Position);
                    vegetationRuntimeManagementProxy.AddUpdate(newPosition);
                    vegetationRuntimeManagementProxy.SynchronicUpdate(newPosition);
                },
            });
            _ultraUpdatableContainer.AddOtherThreadProxy(vegetationSubjectsChangesListener);
        }
Esempio n. 2
0
        private void StartGrassRuntimeManagmentSource()
        {
            var positionsGenerator = new GrassVegetationSubjectsPositionsGenerator(_veConfiguration.GrassVegetationSubjectsPositionsGeneratorConfiguration);

            var grassIntensityDbProxy = _initializationFields.Retrive <Grass2IntensityDbProxy>();

            var otherThreadExecutingLocation = new OtherThreadExecutingLocation();

            var planter = CreateGrassGroupsPlanter(otherThreadExecutingLocation);
            var grower  = new GrassGroupsGrower(planter, grassIntensityDbProxy, _veConfiguration.SupportedGrassTypes, _veConfiguration.GrassPlantingCorrectionRepositioner);

            var grass2RuntimeManager = new Grass2RuntimeManager(grower, _veConfiguration.Grass2RuntimeManagerConfiguration);

            var grass2RuntimeManagerProxy = new Grass2RuntimeManagerProxy(grass2RuntimeManager);

            otherThreadExecutingLocation.SetExecutingTarget(grass2RuntimeManagerProxy);

            _ultraUpdatableContainer.AddOtherThreadProxy(grass2RuntimeManagerProxy);

            var runtimeManagement = new VegetationRuntimeManagement(
                positionsProvider: positionsGenerator,
                vegetationSubjectsChangesListener: grass2RuntimeManagerProxy,
                visibleEntitiesContainer: new VegetationSubjectsVisibleEntitiesContainer(),
                configuration: _veConfiguration.Grass2VegetationRuntimeManagementConfiguration);

            var vegetationRuntimeManagementProxy = new VegetationRuntimeManagementProxy(runtimeManagement);

            var queryRepositioner = _veConfiguration.VegetationRepositioner;

            _ultraUpdatableContainer.AddUpdatableElement(new FieldBasedUltraUpdatable()
            {
                StartCameraField = (camera) =>
                {
                    vegetationRuntimeManagementProxy.StartThreading();
                    var position = camera.Position;
                    vegetationRuntimeManagementProxy.Start(queryRepositioner.InvMove(position));
                },
                UpdateCameraField = (camera) =>
                {
                    var position = camera.Position;
                    vegetationRuntimeManagementProxy.AddUpdate(queryRepositioner.InvMove(position));
                    vegetationRuntimeManagementProxy.SynchronicUpdate(queryRepositioner.InvMove(position));
                },
            });
        }
Esempio n. 3
0
        public void Start()
        {
            TaskUtils.SetGlobalMultithreading(false);

            ///// GRASSING!!!!!

            var singleGenerationArea = new Vector2(10, 10);
            var positionsProvider    =
                new GrassVegetationSubjectsPositionsGenerator(
                    new GrassVegetationSubjectsPositionsGenerator.
                    GrassVegetationSubjectsPositionsGeneratorConfiguration()
            {
                PositionsGridSize = singleGenerationArea
            });

            _debugGrassGroupsGrowerUnderTest = new DebugGrassGroupsGrowerUnderTest(new DebugBushPlanterUnderTest());
            _debugGrassGroupsGrowerUnderTest.Start(ComputeShaderContainer);

            GrassGroupsGrower    grassGroupsGrower    = _debugGrassGroupsGrowerUnderTest.Grower;
            Grass2RuntimeManager grass2RuntimeManager = new Grass2RuntimeManager(grassGroupsGrower,
                                                                                 new Grass2RuntimeManager.Grass2RuntimeManagerConfiguration()
            {
                GroupSize = singleGenerationArea
            });
            var vegetationSubjectsChangesListener =
                new Grass2RuntimeManagerProxy(grass2RuntimeManager);

            //////

            _runtimeManagement = new VegetationRuntimeManagement(
                positionsProvider: positionsProvider,
                vegetationSubjectsChangesListener: vegetationSubjectsChangesListener,
                visibleEntitiesContainer: new VegetationSubjectsVisibleEntitiesContainer(),
                configuration: new VegetationRuntimeManagementConfiguration()
            {
                DetailFieldsTemplate = new SingleSquareDetailFieldsTemplate(100, VegetationDetailLevel.FULL),
                UpdateMinDistance    = 10
            });

            _vegetationRuntimeManagementProxy = new VegetationRuntimeManagementProxy(_runtimeManagement);
        }