Exemple #1
0
 public void Initialize(VRCAvatar avatar)
 {
     this.avatar     = avatar;
     exclusions      = new List <SkinnedMeshRenderer>();
     targetRenderers = MeshBounds.GetSkinnedMeshRenderersWithoutExclusions(
         avatar.Animator.gameObject,
         exclusions);
 }
Exemple #2
0
        public bool DrawGUI(GUILayoutOption[] layoutOptions)
        {
            EditorGUILayout.LabelField(LocalizeText.instance.langPair.boundsTitle, EditorStyles.boldLabel);

            using (new EditorGUILayout.VerticalScope(GUI.skin.box))
            {
                using (new EditorGUILayout.HorizontalScope())
                {
                    GUILayout.FlexibleSpace();

                    GatoGUILayout.Button(
                        LocalizeText.instance.langPair.resetToBoundsToPrefabButtonText,
                        () => {
                        MeshBounds.RevertBounds(targetRenderers);
                    });
                }

                EditorGUILayout.Space();

                EditorGUILayout.LabelField(LocalizeText.instance.langPair.exclusions);

                using (new EditorGUI.IndentLevelScope())
                {
                    using (var check = new EditorGUI.ChangeCheckScope())
                    {
                        var parentObject = GatoGUILayout.ObjectField <GameObject>(
                            LocalizeText.instance.langPair.childObjectsLabel,
                            null);

                        if (check.changed && parentObject != null && avatar != null)
                        {
                            var renderers = parentObject.GetComponentsInChildren <SkinnedMeshRenderer>();
                            foreach (var renderer in renderers)
                            {
                                exclusions.Add(renderer);
                            }
                            exclusions = exclusions.Distinct().ToList();

                            targetRenderers = MeshBounds.GetSkinnedMeshRenderersWithoutExclusions(
                                avatar.Animator.gameObject,
                                exclusions);
                        }
                    }

                    EditorGUILayout.Space();

                    using (new EditorGUILayout.HorizontalScope())
                    {
                        GUILayout.FlexibleSpace();

                        GatoGUILayout.Button(
                            "+",
                            () => {
                            exclusions.Add(null);
                        },
                            true,
                            GUILayout.MaxWidth(60));
                    }

                    using (var check = new EditorGUI.ChangeCheckScope())
                    {
                        for (int i = 0; i < exclusions.Count; i++)
                        {
                            using (new EditorGUILayout.HorizontalScope())
                            {
                                exclusions[i] = GatoGUILayout.ObjectField(
                                    "Object " + (i + 1),
                                    exclusions[i]);

                                GatoGUILayout.Button(
                                    "x",
                                    () => {
                                    exclusions.RemoveAt(i);
                                },
                                    true,
                                    GUILayout.MaxWidth(30));
                            }
                        }

                        if (check.changed && avatar != null)
                        {
                            targetRenderers = MeshBounds.GetSkinnedMeshRenderersWithoutExclusions(
                                avatar.Animator.gameObject,
                                exclusions);
                        }
                    }

                    EditorGUILayout.Space();
                }
            }

            GatoGUILayout.Button(
                LocalizeText.instance.langPair.setBoundsButtonText,
                () => {
                MeshBounds.BoundsSetter(targetRenderers);
            });

            return(false);
        }