private void CheckActiveDescriptors()
 {
     Manager.LastCheckedActiveDescriptors = VRC.Tools.FindSceneObjectsOfTypeAll <VRC.SDKBase.VRC_AvatarDescriptor>()
                                            .Select(descriptor => ModuleHelper.GetModuleForDescriptor(Manager, descriptor))
                                            .Where(module => module != null)
                                            .ToList();
 }
        private void ManagerGui()
        {
            GUILayout.Label("Gesture Manager 3.1", GestureManagerStyles.TitleStyle);

            if (Manager.Module != null)
            {
                if (Manager.Module.IsInvalid())
                {
                    Manager.UnlinkModule();
                }

                GmgLayoutHelper.ObjectField("Controlling Avatar: ", Manager.Module.Avatar, newObject =>
                {
                    if (newObject)
                    {
                        var module = ModuleHelper.GetModuleForDescriptor(Manager, newObject.GetComponent <VRC.SDKBase.VRC_AvatarDescriptor>());
                        if (module == null || !module.IsValidDesc())
                        {
                            return;
                        }
                        Manager.SetModule(module);
                    }
                    else
                    {
                        Manager.UnlinkModule();
                    }
                });

                if (Manager.Module == null)
                {
                    return;
                }

                GUILayout.BeginHorizontal();
                Manager.Module.EditorHeader();
                GUILayout.EndHorizontal();

                Manager.Module.EditorContent(_root);
            }
            else
            {
                if (EditorApplication.isPlaying)
                {
                    if (Manager.enabled && Manager.gameObject.activeInHierarchy)
                    {
                        if (Manager.GetLastCheckedActiveDescriptors().Count == 0)
                        {
                            GUILayout.Label("There are no VRC_AvatarDescriptor on your scene. \nPlease consider adding one to your avatar before entering in PlayMode.",
                                            GestureManagerStyles.TextError);
                        }
                        else
                        {
                            var eligible    = Manager.GetLastCheckedActiveDescriptors().Where(module => module.IsValidDesc()).ToList();
                            var nonEligible = Manager.GetLastCheckedActiveDescriptors().Where(module => !module.IsValidDesc()).ToList();

                            GUILayout.Label(eligible.Count == 0 ? "No one of your VRC_AvatarDescriptor are eligible." : "Eligible VRC_AvatarDescriptors:", GestureManagerStyles.SubHeader);

                            foreach (var module in eligible)
                            {
                                EditorGUILayout.BeginHorizontal(new GUIStyle(GUI.skin.box));
                                GUILayout.Label(module.AvatarDescriptor.gameObject.name + ":", GUILayout.Width(Screen.width - 131));
                                if (GUILayout.Button("Set As Avatar", GUILayout.Width(100)))
                                {
                                    Manager.SetModule(module);
                                }
                                GUILayout.EndHorizontal();
                            }

                            if (eligible.Count != 0 && nonEligible.Count != 0)
                            {
                                GUILayout.Label("Non-Eligible VRC_AvatarDescriptors:", GestureManagerStyles.SubHeader);
                            }

                            foreach (var module in nonEligible)
                            {
                                GUILayout.BeginVertical(GestureManagerStyles.EmoteError);
                                GUILayout.Label(module.AvatarDescriptor.gameObject.name + ":");
                                foreach (var error in module.GetErrors())
                                {
                                    GUILayout.Label(error, GestureManagerStyles.TextError);
                                }
                                GUILayout.EndVertical();
                            }
                        }

                        if (GUILayout.Button("Check Again"))
                        {
                            CheckActiveDescriptors();
                        }
                    }
                    else
                    {
                        GUILayout.Label("I'm disabled!", GestureManagerStyles.TextError);
                    }
                }
                else
                {
                    GUILayout.Label("I'm an useless script if you aren't on play mode :D", GestureManagerStyles.MiddleStyle);
                    GUILayout.BeginHorizontal();
                    GUILayout.FlexibleSpace();

                    GUI.enabled = !Manager.inWebClientRequest;
                    if (GUILayout.Button("Check For Updates", GUILayout.Width(130)))
                    {
                        CheckForUpdates();
                    }

                    GUILayout.Space(20);

                    if (GUILayout.Button("My Discord Name", GUILayout.Width(130)))
                    {
                        CheckDiscordName();
                    }
                    GUI.enabled = true;

                    GUILayout.FlexibleSpace();
                    GUILayout.EndHorizontal();
                }
            }

            GUILayout.Label($"Script made by {BsxName}", GestureManagerStyles.BottomStyle);
        }