示例#1
0
        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);
        }
示例#2
0
        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();
        }