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}");
            }
        }