static void ChooseClassOutfit(CharacterSettings characterSettings, UnitEntityData unitEntityData)
        {
            var focusedStyle = new GUIStyle(GUI.skin.button);

            focusedStyle.normal.textColor  = Color.yellow;
            focusedStyle.focused.textColor = Color.yellow;
            GUILayout.BeginHorizontal();
            foreach (var _class in classes)
            {
                if (_class.Name == "Magus")
                {
                    GUILayout.EndHorizontal();
                    GUILayout.BeginHorizontal();
                }
                var style = characterSettings.classOutfit == _class ? focusedStyle : GUI.skin.button;
                if (GUILayout.Button(_class.Name, style, GUILayout.Width(100f)))
                {
                    characterSettings.classOutfit = _class;
                    CharacterManager.RebuildCharacter(unitEntityData);
                    unitEntityData.View.UpdateClassEquipment();
                }
            }
            GUILayout.EndHorizontal();
        }
        public static void ShowInfo(UnitEntityData unitEntityData)
        {
            ;
            GUILayout.BeginHorizontal();
            if (GUILayout.Button("Rebuild Character", GUILayout.Width(175f)))
            {
                CharacterManager.RebuildCharacter(unitEntityData);
            }
            if (GUILayout.Button("Rebuild Outfit", GUILayout.Width(175f)))
            {
                var bakedCharacter = unitEntityData.View.CharacterAvatar.BakedCharacter;
                unitEntityData.View.CharacterAvatar.BakedCharacter = null;
                unitEntityData.View.CharacterAvatar.RebuildOutfit();
                unitEntityData.View.CharacterAvatar.BakedCharacter = bakedCharacter;
            }
            if (GUILayout.Button("Update Class Equipment", GUILayout.Width(175f)))
            {
                var bakedCharacter = unitEntityData.View.CharacterAvatar.BakedCharacter;
                unitEntityData.View.CharacterAvatar.BakedCharacter = null;
                bool useClassEquipment = unitEntityData.Descriptor.ForcceUseClassEquipment;
                unitEntityData.Descriptor.ForcceUseClassEquipment = true;
                unitEntityData.View.UpdateClassEquipment();
                unitEntityData.Descriptor.ForcceUseClassEquipment  = useClassEquipment;
                unitEntityData.View.CharacterAvatar.BakedCharacter = bakedCharacter;
            }
            if (GUILayout.Button("Update Body Equipment", GUILayout.Width(175f)))
            {
                var bakedCharacter = unitEntityData.View.CharacterAvatar.BakedCharacter;
                unitEntityData.View.CharacterAvatar.BakedCharacter = null;
                unitEntityData.View.UpdateBodyEquipmentModel();
                unitEntityData.View.CharacterAvatar.BakedCharacter = bakedCharacter;
            }
            if (GUILayout.Button("Update Model", GUILayout.Width(175f)))
            {
                CharacterManager.UpdateModel(unitEntityData.View);
            }
            if (GUILayout.Button("Update HandsEquipment", GUILayout.Width(175f)))
            {
                unitEntityData.View.HandsEquipment.UpdateAll();
            }
            GUILayout.EndHorizontal();
            GUILayout.BeginHorizontal();
            if (GUILayout.Button("Toggle Stance", GUILayout.Width(175f)))
            {
                unitEntityData.View.HandsEquipment.ForceSwitch(!unitEntityData.View.HandsEquipment.InCombat);
            }
            GUILayout.EndHorizontal();
            GUILayout.BeginHorizontal();
            GUILayout.Label($"Original size {unitEntityData.Descriptor.OriginalSize}", GUILayout.Width(200f));
            GUILayout.Label($"Current size {unitEntityData.Descriptor.State.Size}", GUILayout.Width(200f));
            var m_OriginalScale = Traverse.Create(unitEntityData.View).Field("m_OriginalScale").GetValue <Vector3>();
            var m_Scale         = Traverse.Create(unitEntityData.View).Field("m_Scale").GetValue <float>();
            var realScale       = unitEntityData.View.transform.localScale;

            GUILayout.Label($"View Original {m_OriginalScale.x:0.#}", GUILayout.Width(200f));
            GUILayout.Label($"View Current {m_Scale:0.#}", GUILayout.Width(200f));
            GUILayout.Label($"View Real {realScale.x:0.#}", GUILayout.Width(200f));
            GUILayout.Label($"Disabled Scaling {unitEntityData.View.DisableSizeScaling}", GUILayout.Width(200f));
            GUILayout.EndHorizontal();
            var message =
                unitEntityData.View == null ? "No View" :
                unitEntityData.View.CharacterAvatar == null ? "No Character Avatar" :
                null;

            if (message != null)
            {
                GUILayout.Label(message, GUILayout.Width(200f));
            }
            GUILayout.BeginHorizontal();
            showCharacter = GUILayout.Toggle(showCharacter, "Show Character", GUILayout.Width(175f));
            showWeapons   = GUILayout.Toggle(showWeapons, "Show Weapons", GUILayout.Width(175f));
            showDoll      = GUILayout.Toggle(showDoll, "Show Doll", GUILayout.Width(175f));
            showBuffs     = GUILayout.Toggle(showBuffs, "Show Buffs", GUILayout.Width(175f));
            showFx        = GUILayout.Toggle(showFx, "Show FX", GUILayout.Width(175f));
            showPortrait  = GUILayout.Toggle(showPortrait, "Show Portrait", GUILayout.Width(175f));
            showAsks      = GUILayout.Toggle(showAsks, "Show Asks", GUILayout.Width(175f));

            GUILayout.EndHorizontal();
            if (showCharacter)
            {
                ShowCharacterInfo(unitEntityData);
            }
            if (showWeapons)
            {
                ShowWeaponInfo(unitEntityData);
            }
            if (showDoll)
            {
                ShowDollInfo(unitEntityData);
            }
            if (showBuffs)
            {
                ShowBuffInfo(unitEntityData);
            }
            if (showFx)
            {
                ShowFxInfo(unitEntityData);
            }
            if (showPortrait)
            {
                ShowPortraitInfo(unitEntityData);
            }
            if (showAsks)
            {
                ShowAsksInfo(unitEntityData);
            }
        }
        static void ChooseEquipmentOverride(UnitEntityData unitEntityData, CharacterSettings characterSettings)
        {
            void onEquipment()
            {
                CharacterManager.RebuildCharacter(unitEntityData);
                CharacterManager.UpdateModel(unitEntityData.View);
            }

            GUILayout.Label("Equipment", "box", GUILayout.Width(DefaultLabelWidth));
            void onView() => ViewManager.ReplaceView(unitEntityData, characterSettings.overrideView);

            Util.ChooseSlider("Override Helm", EquipmentResourcesManager.Helm, ref characterSettings.overrideHelm, onEquipment);
            Util.ChooseSlider("Override Shirt", EquipmentResourcesManager.Shirt, ref characterSettings.overrideShirt, onEquipment);
            Util.ChooseSlider("Override Glasses", EquipmentResourcesManager.Glasses, ref characterSettings.overrideGlasses, onEquipment);
            Util.ChooseSlider("Override Armor", EquipmentResourcesManager.Armor, ref characterSettings.overrideArmor, onEquipment);
            Util.ChooseSlider("Override Bracers", EquipmentResourcesManager.Bracers, ref characterSettings.overrideBracers, onEquipment);
            Util.ChooseSlider("Override Gloves", EquipmentResourcesManager.Gloves, ref characterSettings.overrideGloves, onEquipment);
            Util.ChooseSlider("Override Boots", EquipmentResourcesManager.Boots, ref characterSettings.overrideBoots, onEquipment);
            Util.ChooseSlider("Override Tattoos", EquipmentResourcesManager.Tattoos, ref characterSettings.overrideTattoo, onEquipment);
            GUILayout.Label("Weapons", "box", GUILayout.Width(DefaultLabelWidth));
            foreach (var kv in EquipmentResourcesManager.Weapons)
            {
                var animationStyle = kv.Key;
                var weaponLookup   = kv.Value;
                characterSettings.overrideWeapons.TryGetValue(animationStyle, out BlueprintRef currentValue);
                void onWeapon()
                {
                    characterSettings.overrideWeapons[animationStyle] = currentValue;
                    unitEntityData.View.HandsEquipment.UpdateAll();
                }

                Util.ChooseSlider($"Override {animationStyle} ", weaponLookup, ref currentValue, onWeapon);
            }
            GUILayout.BeginHorizontal();
            GUILayout.Label("Main Weapon Enchantments", "box", GUILayout.Width(DefaultLabelWidth));
            if (GUILayout.Button("Add Enchantment", GUILayout.ExpandWidth(false)))
            {
                characterSettings.overrideMainWeaponEnchantments.Add(null);
            }
            GUILayout.EndHorizontal();
            void onWeaponEnchantment()
            {
                unitEntityData.View.HandsEquipment.UpdateAll();
            }

            for (int i = 0; i < characterSettings.overrideMainWeaponEnchantments.Count; i++)
            {
                Util.ChooseSliderList($"Override Main Hand", EquipmentResourcesManager.WeaponEnchantments,
                                      characterSettings.overrideMainWeaponEnchantments, i, onWeaponEnchantment);
            }
            GUILayout.BeginHorizontal();
            GUILayout.Label("Offhand Weapon Enchantments", "box", GUILayout.Width(DefaultLabelWidth));
            if (GUILayout.Button("Add Enchantment", GUILayout.ExpandWidth(false)))
            {
                characterSettings.overrideOffhandWeaponEnchantments.Add("");
            }
            GUILayout.EndHorizontal();
            for (int i = 0; i < characterSettings.overrideOffhandWeaponEnchantments.Count; i++)
            {
                Util.ChooseSliderList($"Override Off Hand", EquipmentResourcesManager.WeaponEnchantments,
                                      characterSettings.overrideOffhandWeaponEnchantments, i, onWeaponEnchantment);
            }
            GUILayout.Label("View", "box", GUILayout.Width(DefaultLabelWidth));
            Util.ChooseSlider("Override View", EquipmentResourcesManager.Units, ref characterSettings.overrideView, onView);
            void onChooseScale()
            {
                HarmonyLib.Traverse.Create(unitEntityData.View).Field("m_Scale").SetValue(unitEntityData.View.GetSizeScale() + 0.01f);
            }

            GUILayout.Label("Scale", "box", GUILayout.Width(DefaultLabelWidth));
            GUILayout.BeginHorizontal();
            ChooseToggle("Enable Override Scale", ref characterSettings.overrideScale, onChooseScale);
            ChooseToggle("Restrict to polymorph", ref characterSettings.overrideScaleShapeshiftOnly, onChooseScale);
            ChooseToggle("Use Additive Factor", ref characterSettings.overrideScaleAdditive, onChooseScale);
            ChooseToggle("Use Cheat Mode", ref characterSettings.overrideScaleCheatMode, onChooseScale);
            ChooseToggle("Use Continuous Factor", ref characterSettings.overrideScaleFloatMode, onChooseScale);
            GUILayout.Space(10f);
            GUILayout.EndHorizontal();
            if (characterSettings.overrideScale && characterSettings.overrideScaleAdditive)
            {
                ChooseSizeAdditive(unitEntityData, characterSettings);
            }
            if (characterSettings.overrideScale && !characterSettings.overrideScaleAdditive)
            {
                ChooseSizeOverride(unitEntityData, characterSettings);
            }
        }