private ObservableCollection <StatisticsBuilding> GetStatisticBuildings(IEnumerable <IGrouping <string, LayoutObject> > groupedBuildingsByIdentifier, BuildingPresets buildingPresets)
        {
            if (groupedBuildingsByIdentifier is null || !groupedBuildingsByIdentifier.Any())
            {
                return(new ObservableCollection <StatisticsBuilding>());
            }

            var tempList = new List <StatisticsBuilding>();

            var validBuildingsGrouped = groupedBuildingsByIdentifier
                                        .Where(_ => !_.ElementAt(0).WrappedAnnoObject.Road&& _.ElementAt(0).Identifier != null)
                                        .Where(x => x.AsEnumerable().WithoutIgnoredObjects().Count() > 0)
                                        .OrderByDescending(_ => _.Count());

            foreach (var item in validBuildingsGrouped)
            {
                var statisticBuilding = new StatisticsBuilding();

                var identifierToCheck = item.ElementAt(0).Identifier;
                if (!string.IsNullOrWhiteSpace(identifierToCheck))
                {
                    //try to find building in presets by identifier
                    if (!_cachedPresetsBuilding.TryGetValue(identifierToCheck, out var building))
                    {
                        building = buildingPresets.Buildings.Find(_ => string.Equals(_.Identifier, identifierToCheck, StringComparison.OrdinalIgnoreCase));
                        _cachedPresetsBuilding.TryAdd(identifierToCheck, building);
                    }

                    var isUnknownObject = string.Equals(identifierToCheck, "Unknown Object", StringComparison.OrdinalIgnoreCase);
                    if (building != null || isUnknownObject)
                    {
                        statisticBuilding.Count = item.Count();
                        statisticBuilding.Name  = isUnknownObject ? _localizationHelper.GetLocalization("UnknownObject") : building.Localization[_commons.CurrentLanguageCode];
                    }
                    else
                    {
                        /// Ruled those 2 out to keep Building Name Changes done through the Labeling of the building
                        /// and when the building is not in the preset. Those statisticBuildings.name will not translated to
                        /// other luangages anymore, as users can give there own names.
                        /// However i made it so, that if localizations get those translations, it will translated.
                        /// 06-02-2021, on request of user(s) on Discord read this on
                        /// https://discord.com/channels/571011757317947406/571011757317947410/800118895855665203
                        //item.ElementAt(0).Identifier = "";
                        //statisticBuilding.Name = _localizationHelper.GetLocalization("StatNameNotFound");

                        statisticBuilding.Count = item.Count();
                        statisticBuilding.Name  = _localizationHelper.GetLocalization(item.ElementAt(0).Identifier);
                    }
                }
                else
                {
                    statisticBuilding.Count = item.Count();
                    statisticBuilding.Name  = _localizationHelper.GetLocalization("StatNameNotFound");
                }

                tempList.Add(statisticBuilding);
            }

            return(new ObservableCollection <StatisticsBuilding>(tempList.OrderByDescending(x => x.Count).ThenBy(x => x.Name, StringComparer.OrdinalIgnoreCase)));
        }
예제 #2
0
        private ObservableCollection <StatisticsBuilding> GetStatisticBuildings(IEnumerable <IGrouping <string, AnnoObject> > groupedBuildingsByIdentifier, BuildingPresets buildingPresets)
        {
            var result = new ObservableCollection <StatisticsBuilding>();

            if (groupedBuildingsByIdentifier == null)
            {
                return(result);
            }

            var language = Localization.Localization.GetLanguageCodeFromName(MainWindow.SelectedLanguage);
            var tempList = new List <StatisticsBuilding>();

            foreach (var item in groupedBuildingsByIdentifier
                     .Where(_ => !_.ElementAt(0).Road&& _.ElementAt(0).Identifier != null)
                     .OrderByDescending(_ => _.Count()))
            {
                var statisticBuilding = new StatisticsBuilding();

                if (!string.IsNullOrWhiteSpace(item.ElementAt(0).Identifier))
                {
                    var building = buildingPresets.Buildings.FirstOrDefault(_ => _.Identifier == item.ElementAt(0).Identifier);
                    if (building != null || item.ElementAt(0).Identifier == "Unknown Object")
                    {
                        if (item.ElementAt(0).Identifier == "Unknown Object")
                        {
                            statisticBuilding.Count = item.Count();
                            statisticBuilding.Name  = Localization.Localization.Translations[language]["UnknownObject"];
                        }
                        else
                        {
                            statisticBuilding.Count = item.Count();
                            statisticBuilding.Name  = building.Localization[language];
                        }
                    }
                    else
                    {
                        item.ElementAt(0).Identifier = "";

                        statisticBuilding.Count = item.Count();
                        statisticBuilding.Name  = TextNameNotFound;
                    }
                }
                else
                {
                    statisticBuilding.Count = item.Count();
                    statisticBuilding.Name  = TextNameNotFound;
                }

                tempList.Add(statisticBuilding);
            }

            foreach (var curBuilding in tempList.OrderByDescending(x => x.Count).ThenBy(x => x.Name, StringComparer.OrdinalIgnoreCase))
            {
                result.Add(curBuilding);
            }

            return(result);
        }
예제 #3
0
        private ObservableCollection <StatisticsBuilding> GetStatisticBuildings(IEnumerable <IGrouping <string, LayoutObject> > groupedBuildingsByIdentifier, BuildingPresets buildingPresets)
        {
            if (groupedBuildingsByIdentifier == null)
            {
                return(new ObservableCollection <StatisticsBuilding>());
            }

            var language = Localization.Localization.GetLanguageCodeFromName(_commons.SelectedLanguage);
            var tempList = new List <StatisticsBuilding>();

            var validBuildingsGrouped = groupedBuildingsByIdentifier
                                        .Where(_ => !_.ElementAt(0).WrappedAnnoObject.Road&& _.ElementAt(0).Identifier != null)
                                        .OrderByDescending(_ => _.Count());

            foreach (var item in validBuildingsGrouped)
            {
                var statisticBuilding = new StatisticsBuilding();

                var identifierToCheck = item.ElementAt(0).Identifier;
                if (!string.IsNullOrWhiteSpace(identifierToCheck))
                {
                    //try to find building in presets by identifier
                    if (!_cachedPresetsBuilding.TryGetValue(identifierToCheck, out var building))
                    {
                        building = buildingPresets.Buildings.Find(_ => string.Equals(_.Identifier, identifierToCheck, StringComparison.OrdinalIgnoreCase));
                        _cachedPresetsBuilding.Add(identifierToCheck, building);
                    }

                    var isUnknownObject = string.Equals(identifierToCheck, "Unknown Object", StringComparison.OrdinalIgnoreCase);
                    if (building != null || isUnknownObject)
                    {
                        statisticBuilding.Count = item.Count();
                        statisticBuilding.Name  = isUnknownObject ? Localization.Localization.Translations[language]["UnknownObject"] : building.Localization[language];
                    }
                    else
                    {
                        item.ElementAt(0).Identifier = "";

                        statisticBuilding.Count = item.Count();
                        statisticBuilding.Name  = TextNameNotFound;
                    }
                }
                else
                {
                    statisticBuilding.Count = item.Count();
                    statisticBuilding.Name  = TextNameNotFound;
                }

                tempList.Add(statisticBuilding);
            }

            return(new ObservableCollection <StatisticsBuilding>(tempList.OrderByDescending(x => x.Count).ThenBy(x => x.Name, StringComparer.OrdinalIgnoreCase)));
        }