public static void ChooseSliderList <T>(string name, UnorderedList <T, string> items, List <T> saved, int savedIndex, Action onChoose) { var currentItem = saved[savedIndex]; var currentIndex = currentItem == null ? -1 : items.IndexOfKey(currentItem); GUILayout.BeginHorizontal(); GUILayout.Label(name + " ", GUILayout.Width(DefaultLabelWidth)); var newIndex = (int)Math.Round(GUILayout.HorizontalSlider(currentIndex, -1, items.Count - 1, GUILayout.Width(DefaultSliderWidth)), 0); if (GUILayout.Button("Prev", GUILayout.Width(45)) && currentIndex >= 0) { newIndex = currentIndex - 1; } if (GUILayout.Button("Next", GUILayout.Width(45)) && currentIndex < items.Count - 1) { newIndex = currentIndex + 1; } if (GUILayout.Button("Remove", GUILayout.ExpandWidth(false))) { saved.RemoveAt(savedIndex); onChoose(); return; } var displayText = newIndex == -1 ? "None" : items.Values[newIndex]; GUILayout.Label(" " + displayText, GUILayout.ExpandWidth(true)); GUILayout.EndHorizontal(); if (currentIndex != newIndex) { currentItem = newIndex == -1 ? default(T) : items.Keys[newIndex]; saved[savedIndex] = currentItem; onChoose(); } }
static void BuildWeaponLookup() { var weapons = ResourcesLibrary.GetBlueprints <BlueprintItemEquipmentHand>().OrderBy((bp) => bp.name); foreach (var bp in weapons) { var visualParameters = bp.VisualParameters; var animationStyle = visualParameters.AnimStyle.ToString(); if (bp.VisualParameters.Model == null) { continue; } UnorderedList <BlueprintRef, string> eeList = null; if (!m_Weapons.ContainsKey(animationStyle)) { eeList = new UnorderedList <BlueprintRef, string>(); m_Weapons[animationStyle] = eeList; } else { eeList = m_Weapons[animationStyle]; } if (eeList.ContainsKey(bp.AssetGuid)) { continue; } eeList[bp.AssetGuid] = bp.name; } }
static void BuildOrphenedKingmakerEquipment() { m_OrphanedKingmakerEquipment = new UnorderedList <string, string>(); var itemLinks = EquipmentResourcesManager.Helm.Keys .Concat(EquipmentResourcesManager.Cloak.Keys) .Concat(EquipmentResourcesManager.Armor.Keys) .Concat(EquipmentResourcesManager.Bracers.Keys) .Concat(EquipmentResourcesManager.Gloves.Keys) .Concat(EquipmentResourcesManager.Boots.Keys) .Distinct() .ToDictionary(key => key); foreach (var kee in ResourcesLibrary.GetBlueprints <KingmakerEquipmentEntity>()) { if (!itemLinks.ContainsKey(kee.AssetGuid)) { m_OrphanedKingmakerEquipment[kee.AssetGuid] = kee.name; } } }
static void BuildOrphanedEquipment() { string maleFilepath = "Mods/VisualAdjustments/MaleOrphanedEquipment.json"; if (File.Exists(maleFilepath)) { JsonSerializer serializer = new JsonSerializer(); using (StreamReader sr = new StreamReader(maleFilepath)) using (JsonTextReader reader = new JsonTextReader(sr)) { var result = serializer.Deserialize <UnorderedList <string, string> >(reader); m_OrphanedMaleEquipment = result; if (m_OrphanedMaleEquipment == null) { Main.Log($"Error loading {maleFilepath}"); } } } var femaleFilepath = "Mods/VisualAdjustments/FemaleOrphanedEquipment.json"; if (File.Exists(femaleFilepath)) { JsonSerializer serializer = new JsonSerializer(); using (StreamReader sr = new StreamReader(femaleFilepath)) using (JsonTextReader reader = new JsonTextReader(sr)) { var result = serializer.Deserialize <UnorderedList <string, string> >(reader); m_OrphanedFemaleEquipment = result; if (m_OrphanedFemaleEquipment == null) { Main.Log($"Error loading {femaleFilepath}"); } } } if (m_OrphanedMaleEquipment == null || m_OrphanedFemaleEquipment == null) { Main.Log("Rebuilding Orphaned Equipment Lookup"); var eeBlacklist = new HashSet <string>(); foreach (var gender in new Gender[] { Gender.Male, Gender.Female }) { foreach (var race in BlueprintRoot.Instance.Progression.CharacterRaces) { var armorLinks = ResourcesLibrary.GetBlueprints <KingmakerEquipmentEntity>() .SelectMany(kee => kee.GetLinks(gender, race.RaceId)); var options = gender == Gender.Male ? race.MaleOptions : race.FemaleOptions; var links = race.Presets .SelectMany(preset => preset.Skin.GetLinks(gender, race.RaceId)) .Concat(armorLinks) .Concat(options.Beards) .Concat(options.Eyebrows) .Concat(options.Hair) .Concat(options.Heads) .Concat(options.Horns); foreach (var link in links) { eeBlacklist.Add(link.AssetId); } } } m_OrphanedMaleEquipment = new UnorderedList <string, string>(); m_OrphanedFemaleEquipment = new UnorderedList <string, string>(); foreach (var kv in ResourcesLibrary.LibraryObject.ResourceNamesByAssetId.OrderBy(kv => kv.Value)) { if (eeBlacklist.Contains(kv.Key)) { continue; } var ee = ResourcesLibrary.TryGetResource <EquipmentEntity>(kv.Key); if (ee == null) { continue; } var nameParts = ee.name.Split('_'); bool isMale = nameParts.Contains("M"); bool isFemale = nameParts.Contains("F"); if (!isMale && !isFemale) { isMale = true; isFemale = true; } if (isMale) { m_OrphanedMaleEquipment[kv.Key] = kv.Value; } if (isFemale) { m_OrphanedFemaleEquipment[kv.Key] = kv.Value; } } JsonSerializer serializer = new JsonSerializer(); serializer.Formatting = Formatting.Indented; using (StreamWriter sw = new StreamWriter(maleFilepath)) using (JsonWriter writer = new JsonTextWriter(sw)) { serializer.Serialize(writer, m_OrphanedMaleEquipment); } using (StreamWriter sw = new StreamWriter(femaleFilepath)) using (JsonWriter writer = new JsonTextWriter(sw)) { serializer.Serialize(writer, m_OrphanedFemaleEquipment); } ResourcesLibrary.CleanupLoadedCache(); } }