static void AddLinks(EquipmentEntityLink[] links, string type, Race race, Gender gender) { foreach (var link in links) { var name = GetName(link); if (name == null) { continue; } if (lookup.ContainsKey(name)) { lookup[name].raceGenderCombos += ", " + race + gender; } else { lookup[name] = new EquipmentEntityInfo { type = type, raceGenderCombos = "" + race + gender, eel = link }; } } }
static void ShowCharacterInfo(UnitEntityData unitEntityData) { var character = unitEntityData.View.CharacterAvatar; if (character == null) { return; } GUILayout.Label($"View: {unitEntityData.View.name}", GUILayout.Width(200f)); GUILayout.Label($"BakedCharacter: {character.BakedCharacter?.name ?? "NULL"}", GUILayout.Width(200f)); if (m_OrphanedKingmakerEquipment == null) { BuildOrphenedKingmakerEquipment(); } if (m_OrphanedMaleEquipment == null || m_OrphanedFemaleEquipment == null) { BuildOrphanedEquipment(); } void onEquipment() { unitEntityData.View.CharacterAvatar.RemoveAllEquipmentEntities(); var preset = unitEntityData.Descriptor.Progression.Race.Presets.First(); var skin = preset.Skin.Load(unitEntityData.Gender, preset.RaceId); unitEntityData.View.CharacterAvatar.AddEquipmentEntities(skin); var kee = ResourcesLibrary.TryGetBlueprint <KingmakerEquipmentEntity>(selectedKingmakerOrphanedEquipment); if (kee != null) { var ees = kee.Load(unitEntityData.Gender, unitEntityData.Descriptor.Progression.Race.RaceId); unitEntityData.View.CharacterAvatar.AddEquipmentEntities(ees); unitEntityData.View.CharacterAvatar.IsDirty = true; } var ee = ResourcesLibrary.TryGetResource <EquipmentEntity>(selectedOrphanedEquipment); if (ee != null) { unitEntityData.View.CharacterAvatar.AddEquipmentEntity(ee); unitEntityData.View.CharacterAvatar.IsDirty = true; } } var equipmentList = unitEntityData.Gender == Gender.Male ? m_OrphanedMaleEquipment : m_OrphanedFemaleEquipment; Util.ChooseSlider($"OrphanedKingmakerEquipment", m_OrphanedKingmakerEquipment, ref selectedKingmakerOrphanedEquipment, onEquipment); Util.ChooseSlider($"OrphanedEquipment", equipmentList, ref selectedOrphanedEquipment, onEquipment); GUILayout.Label("Equipment", GUILayout.Width(200f)); foreach (var ee in character.EquipmentEntities.ToArray()) { GUILayout.BeginHorizontal(); if (ee == null) { GUILayout.Label("Null"); } else { GUILayout.Label( String.Format("{0}:{1}:{2}:P{3}:S{4}", ee.name, ee.BodyParts.Count, ee.OutfitParts.Count, character.GetPrimaryRampIndex(ee), character.GetSecondaryRampIndex(ee)), GUILayout.ExpandWidth(false)); } if (GUILayout.Button("Remove", GUILayout.ExpandWidth(false))) { character.RemoveEquipmentEntity(ee); } if (ee == null) { GUILayout.EndHorizontal(); continue; } bool expanded = ee.name == expandedEE; if (expanded && GUILayout.Button("Shrink ", GUILayout.ExpandWidth(false))) { expandedEE = null; } if (!expanded && GUILayout.Button("Expand", GUILayout.ExpandWidth(false))) { expandedEE = ee.name; } GUILayout.EndHorizontal(); if (expanded) { EquipmentEntityInfo settings = lookup.ContainsKey(ee.name) ? lookup[ee.name] : new EquipmentEntityInfo(); GUILayout.Label($" HideFlags: {ee.HideBodyParts}", GUILayout.Width(200f)); var primaryIndex = character.GetPrimaryRampIndex(ee); Texture2D primaryRamp = null; if (primaryIndex < 0 || primaryIndex > ee.PrimaryRamps.Count - 1) { primaryRamp = ee.PrimaryRamps.FirstOrDefault(); } else { primaryRamp = ee.PrimaryRamps[primaryIndex]; } GUILayout.Label($"PrimaryRamp: {primaryRamp?.name ?? "NULL"}", GUILayout.Width(200f)); var secondaryIndex = character.GetSecondaryRampIndex(ee); Texture2D secondaryRamp = null; if (secondaryIndex < 0 || secondaryIndex > ee.SecondaryRamps.Count - 1) { secondaryRamp = ee.SecondaryRamps.FirstOrDefault(); } else { secondaryRamp = ee.SecondaryRamps[secondaryIndex]; } GUILayout.Label($"SecondaryRamp: {secondaryRamp?.name ?? "NULL"}", GUILayout.Width(200f)); foreach (var bodypart in ee.BodyParts.ToArray()) { GUILayout.BeginHorizontal(); GUILayout.Label(String.Format(" BP {0}:{1}", bodypart?.RendererPrefab?.name ?? "NULL", bodypart?.Type), GUILayout.ExpandWidth(false)); if (GUILayout.Button("Remove", GUILayout.ExpandWidth(false))) { ee.BodyParts.Remove(bodypart); } GUILayout.EndHorizontal(); } foreach (var outfitpart in ee.OutfitParts.ToArray()) { GUILayout.BeginHorizontal(); var prefab = Traverse.Create(outfitpart).Field("m_Prefab").GetValue <GameObject>(); GUILayout.Label(String.Format(" OP {0}:{1}", prefab?.name ?? "NULL", outfitpart?.Special), GUILayout.ExpandWidth(false)); if (GUILayout.Button("Remove", GUILayout.ExpandWidth(false))) { ee.OutfitParts.Remove(outfitpart); } GUILayout.EndHorizontal(); } } } GUILayout.Label("Character", GUILayout.Width(300)); GUILayout.Label("RampIndices", GUILayout.Width(200f)); foreach (var index in Traverse.Create(character).Field("m_RampIndices").GetValue <List <Character.SelectedRampIndices> >()) { var name = index.EquipmentEntity != null ? index.EquipmentEntity.name : "NULL"; GUILayout.Label($" {name} - {index.PrimaryIndex}, {index.SecondaryIndex}"); } GUILayout.Label("SavedRampIndices", GUILayout.Width(200f)); foreach (var index in Traverse.Create(character).Field("m_SavedRampIndices").GetValue <List <Character.SavedSelectedRampIndices> >()) { GUILayout.Label($" {GetName(index.EquipmentEntityLink)} - {index.PrimaryIndex}, {index.SecondaryIndex}"); } GUILayout.Label("SavedEquipmentEntities", GUILayout.Width(200f)); foreach (var link in Traverse.Create(character).Field("m_SavedEquipmentEntities").GetValue <List <EquipmentEntityLink> >()) { var name = GetName(link); GUILayout.Label($" {name}"); } }