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