public GrassGroupId AddGrassGroup(MyRectangle generationArea, GrassType type, IIntensitySamplingProvider intensityProvider) { var instancesPerUnitSquare = _templatesDictionary[type].InstancesPerUnitSquare; var flatPositions = _positionResolver.ResolvePositions(generationArea, intensityProvider, instancesPerUnitSquare); var spotId = _designBodiesChangeListener.RegisterBodiesGroup(flatPositions); var grassGroupId = GrassGroupId.GenerateNext; _spotIdToGrassGroupId.Add(spotId, grassGroupId); var groupWaitingToBePlantedInfo = new GroupWaitingToBePlanted() { FlatPositions = flatPositions, Type = type }; _groupsWaitingToBePlanted[spotId] = groupWaitingToBePlantedInfo; return(grassGroupId); }
private void NewGroupResolvingEnded(SpotId spotId, List <DesignBodySpotModification> spotDatas, GroupWaitingToBePlanted info, GrassGroupId groupId) { MyProfiler.BeginSample("GrassGroupsPlanter. NewGroupResolvingEnded"); var template = _templatesDictionary[info.Type]; var unplantedInstances = _grassDetailInstancer.Initialize(spotDatas.Count, template); var outAspectsList = new List <Grass2Aspect>(spotDatas.Count); for (int i = 0; i < spotDatas.Count; i++) { var unplantedInstance = unplantedInstances[i]; var flatPosition = _repositioner.Move(info.FlatPositions[i]); var aspects = _aspectsGenerator.GenerateAspect(unplantedInstance, flatPosition); outAspectsList.Add(aspects); } _groupsAspectInfos[groupId] = outAspectsList; _groupsContainer.AddGroup( Enumerable.Range(0, outAspectsList.Count) .SelectMany(i => PositionEntitiesFromAspect(outAspectsList[i], spotDatas[i])).ToList(), groupId); MyProfiler.EndSample(); }