示例#1
0
        private static void SortByTech(HashSet <ThingDef> apparelToSort, ThingCategoryDef thingCategoryDef, NextSortOption nextSortOption = NextSortOption.None)
        {
            Log.Message($"Sorting by tech, then by {nextSortOption}");
            foreach (TechLevel techLevel in Enum.GetValues(typeof(TechLevel)))
            {
                var apparelToCheck   = (from apparelDef in apparelToSort where apparelDef.techLevel == techLevel select apparelDef).ToHashSet();
                var techLevelDefName = $"{thingCategoryDef.defName}_{techLevel}";
                if (thingCategoryDef == ThingCategoryDefOf.Apparel)
                {
                    techLevelDefName = $"CS_{techLevel}";
                }
                ThingCategoryDef techLevelThingCategory = DefDatabase <ThingCategoryDef> .GetNamedSilentFail(techLevelDefName);

                if (techLevelThingCategory == null)
                {
                    techLevelThingCategory = new ThingCategoryDef {
                        defName = techLevelDefName, label = techLevel.ToStringHuman()
                    };
                    DefGenerator.AddImpliedDef(techLevelThingCategory);
                }
                if (nextSortOption == NextSortOption.None)
                {
                    AddApparelToCategory(apparelToCheck, techLevelThingCategory);
                    if (techLevelThingCategory.childThingDefs.Count > 0 || techLevelThingCategory.childCategories.Count > 0)
                    {
                        thingCategoryDef.childCategories.Add(techLevelThingCategory);
                        techLevelThingCategory.parent = thingCategoryDef;
                    }
                }
                else
                {
                    switch (nextSortOption)
                    {
                    case NextSortOption.Layer:
                        SortByLayer(apparelToCheck, techLevelThingCategory);
                        break;

                    case NextSortOption.Mod:
                        SortByMod(apparelToCheck, techLevelThingCategory);
                        break;
                    }
                    if (techLevelThingCategory.childCategories.Count > 0)
                    {
                        thingCategoryDef.childCategories.Add(techLevelThingCategory);
                        techLevelThingCategory.parent = thingCategoryDef;
                    }
                }
                //techLevelThingCategory.ResolveReferences();
            }
        }
示例#2
0
        private static void SortByMod(HashSet <ThingDef> apparelToSort, ThingCategoryDef thingCategoryDef, NextSortOption nextSortOption = NextSortOption.None)
        {
            Log.Message($"Sorting by mod, then by {nextSortOption}");
            foreach (ModMetaData modData in from modData in ModLister.AllInstalledMods where modData.Active select modData)
            {
                var apparelToCheck = (from apparelDef in apparelToSort where apparelDef.modContentPack.PackageId == modData.PackageId select apparelDef).ToHashSet();
                var modDefName     = $"{thingCategoryDef.defName}_{modData.PackageId}";
                if (thingCategoryDef == ThingCategoryDefOf.Apparel)
                {
                    modDefName = $"CS_{modData.PackageId}";
                }
                ThingCategoryDef modThingCategory = DefDatabase <ThingCategoryDef> .GetNamedSilentFail(modDefName);

                if (modThingCategory == null)
                {
                    modThingCategory = new ThingCategoryDef {
                        defName = modDefName, label = modData.Name
                    };
                    DefGenerator.AddImpliedDef(modThingCategory);
                }
                if (nextSortOption == NextSortOption.None)
                {
                    AddApparelToCategory(apparelToCheck, modThingCategory);
                    if (modThingCategory.childThingDefs.Count > 0 || modThingCategory.childCategories.Count > 0)
                    {
                        thingCategoryDef.childCategories.Add(modThingCategory);
                        modThingCategory.parent = thingCategoryDef;
                    }
                }
                else
                {
                    switch (nextSortOption)
                    {
                    case NextSortOption.Layer:
                        SortByLayer(apparelToCheck, modThingCategory);
                        break;

                    case NextSortOption.Tech:
                        SortByTech(apparelToCheck, modThingCategory);
                        break;
                    }
                    if (modThingCategory.childCategories.Count > 0)
                    {
                        thingCategoryDef.childCategories.Add(modThingCategory);
                        modThingCategory.parent = thingCategoryDef;
                    }
                }
                //techLevelThingCategory.ResolveReferences();
            }
        }
示例#3
0
        private static void SortByLayer(HashSet <ThingDef> apparelToSort, ThingCategoryDef thingCategoryDef, NextSortOption nextSortOption = NextSortOption.None)
        {
            Log.Message($"Sorting by layer, then by {nextSortOption}");
            var layerDefs = (from layerDef in DefDatabase <ApparelLayerDef> .AllDefsListForReading orderby layerDef.label select layerDef).ToList();

            layerDefs.Add(new ApparelLayerDef {
                defName = "Layer_None", label = "NoLayer".Translate()
            });
            var selectedLayers = new List <ApparelLayerDef>();

            for (var layerInt = 0; layerInt < layerDefs.Count(); layerInt++)
            {
                if (ClothingSorterMod.instance.Settings.CombineLayers && layerDefs.Count() > layerInt + 1 && layerDefs[layerInt].label.ToLower() == layerDefs[layerInt + 1].label.ToLower())
                {
                    selectedLayers.Add(layerDefs[layerInt]);
                    continue;
                }
                var layerDef = layerDefs[layerInt];
                selectedLayers.Add(layerDef);
                var apparelToCheck = (from apparelDef in apparelToSort where apparelDef.apparel?.layers?.Count() > 0 && apparelDef.apparel.layers.SharesElementWith(selectedLayers) select apparelDef).ToHashSet();
                if (layerDef.defName == "Layer_None")
                {
                    apparelToCheck = (from apparelDef in apparelToSort where apparelDef.apparel == null || apparelDef.apparel.layers == null || apparelDef.apparel.layers.Count() == 0 select apparelDef).ToHashSet();
                }
                selectedLayers.Clear();
                var layerDefName = $"{thingCategoryDef.defName}_{layerDef}";
                if (thingCategoryDef == ThingCategoryDefOf.Apparel)
                {
                    layerDefName = $"CS_{layerDef}";
                }
                ThingCategoryDef layerThingCategory = DefDatabase <ThingCategoryDef> .GetNamedSilentFail(layerDefName);

                if (layerThingCategory == null)
                {
                    layerThingCategory = new ThingCategoryDef {
                        defName = layerDefName, label = layerDef.label
                    };
                    DefGenerator.AddImpliedDef(layerThingCategory);
                }
                if (nextSortOption == NextSortOption.None)
                {
                    AddApparelToCategory(apparelToCheck, layerThingCategory);
                    if (layerThingCategory.childThingDefs.Count > 0 || layerThingCategory.childCategories.Count > 0)
                    {
                        thingCategoryDef.childCategories.Add(layerThingCategory);
                        layerThingCategory.parent = thingCategoryDef;
                    }
                }
                else
                {
                    switch (nextSortOption)
                    {
                    case NextSortOption.Tech:
                        SortByTech(apparelToCheck, layerThingCategory);
                        break;

                    case NextSortOption.Mod:
                        SortByMod(apparelToCheck, layerThingCategory);
                        break;
                    }
                    if (layerThingCategory.childCategories.Count > 0)
                    {
                        thingCategoryDef.childCategories.Add(layerThingCategory);
                        layerThingCategory.parent = thingCategoryDef;
                    }
                }
                //layerThingCategory.ResolveReferences();
            }
        }