private void DrawActions()
        {
            EditorGUILayout.LabelField("Synchronize");

            EditorGUILayout.BeginHorizontal();

            EditorGUILayout.BeginVertical();
            LizEditorGUIUtil.BeginLabelWidth(50);
            m_From = EditorGUILayout.ObjectField("From", m_From, typeof(Outfit), true) as Outfit;
            m_To   = EditorGUILayout.ObjectField("To", m_To, typeof(Outfit), true) as Outfit;
            LizEditorGUIUtil.EndLabelWidth();
            EditorGUILayout.EndVertical();

            GUI.enabled = (m_From && m_To);
            var settings = Target;

            if (GUILayout.Button("Apply", GUILayout.MaxWidth(70)))
            {
                SynchronizeState(
                    m_To, m_From, settings.IncludeBlockedStatus, settings.IncludeContext, settings.IncludeContext);
            }
            GUI.enabled = true;

            EditorGUILayout.EndHorizontal();
        }
        private void DrawSettingsActions()
        {
            EditorGUILayout.Space();
            EditorGUILayout.LabelField("Inspector Settings", EditorStyles.boldLabel);

            LizEditorGUIUtil.BeginLabelWidth(80);
            OutfitterEditorUtil.AutoOffset =
                EditorGUILayout.Slider(AutoOffsetLabel, OutfitterEditorUtil.AutoOffset, 0, 5);
            LizEditorGUIUtil.EndLabelWidth();
        }
        public void DrawColliderActions()
        {
            const float BtnWidth = 60;

            EditorGUILayout.LabelField("Manage Colliders");

            var outfit = Target;

            LizEditorGUIUtil.BeginLabelWidth(50);

            EditorGUILayout.LabelField("Behavior");
            EditorGUILayout.BeginHorizontal();

            m_RigidbodyBehaviorChoice = (RigidbodyBehavior)EditorGUILayout.EnumPopup(m_RigidbodyBehaviorChoice);

            GUI.enabled = outfit.BodyPartCount > 0;
            if (GUILayout.Button(BodyPartStatusLabel, GUILayout.MaxWidth(BtnWidth)))
            {
                ApplyBodyPartColliderStatus(outfit, m_RigidbodyBehaviorChoice);
            }
            GUI.enabled = true;

            GUI.enabled = outfit.PrimaryRigidbody;
            if (GUILayout.Button(PrimaryStatusLabel, GUILayout.MaxWidth(BtnWidth)))
            {
                LizEditorGUIUtil.SetRigidbodyBehavior(outfit.PrimaryRigidbody, m_RigidbodyBehaviorChoice);
            }
            GUI.enabled = true;

            EditorGUILayout.EndHorizontal();

            EditorGUILayout.LabelField("Layer");
            EditorGUILayout.BeginHorizontal();
            m_ColliderLayer = EditorGUILayout.LayerField(m_ColliderLayer);

            GUI.enabled = outfit.BodyPartCount > 0;
            if (GUILayout.Button(BodyPartStatusLabel, GUILayout.MaxWidth(BtnWidth)))
            {
                ApplyBodyPartLayer(outfit, m_ColliderLayer);
            }
            GUI.enabled = true;

            GUI.enabled = outfit.PrimaryCollider;
            if (GUILayout.Button(PrimaryStatusLabel, GUILayout.MaxWidth(BtnWidth)))
            {
                SetPrimaryColliderLayer(outfit, m_ColliderLayer);
            }
            GUI.enabled = true;

            EditorGUILayout.EndHorizontal();

            LizEditorGUIUtil.EndLabelWidth();
        }
        private void DrawElement(
            Rect position, SerializedProperty property, GUIContent label, GUIStyle labelStyle)
        {
            var rect = new Rect(position.x, position.y, position.width, EditorGUIUtility.singleLineHeight);

            EditorGUI.LabelField(rect, label, labelStyle);

            rect        = LizEditorGUIUtil.NextGuiElementPosition(rect);
            rect.height = m_MaterialControl.GetPropertyHeight(property, GUIContent.none);

            m_MaterialControl.OnGUI(rect, property, GUIContent.none);
        }
        private void DrawMaterialAction(OutfitMaterialType matType)
        {
            var outfit = Target;

            LizEditorGUIUtil.BeginLabelWidth(70);

            var cmat = outfit.GetSharedMaterial(matType);
            var nmat = EditorGUILayout.ObjectField(matType.ToString(), cmat, typeof(Material), false) as Material;

            LizEditorGUIUtil.EndLabelWidth();

            if (nmat || nmat != cmat)
            {
                ApplyOutfitMaterial(outfit, matType, nmat);
            }
        }
Ejemplo n.º 6
0
        public override void OnInspectorGUI()
        {
            LizEditorGUIUtil.BeginLabelWidth(115);
            base.OnInspectorGUI();
            LizEditorGUIUtil.EndLabelWidth();

            EditorGUILayout.Space();

            var targ = target as BodyPrototyperManager;

            var prefix = targ.InvertButtons
                ? "Mouse0: Rotate camera.\nMouse1: Rotate body."
                : "Mouse0: Rotate body.\nMouse1: Rotate camera.";

            EditorGUILayout.HelpBox(prefix + "\nMouse2: Camera height.\nWheel: Camera distance.", MessageType.None);
        }
        private void DrawActions()
        {
            var bp = Target;

            // Note: Rigidbody is guarenteed.

            var nstatus = LizEditorGUI.ColliderBehaviorPopup(
                EditorGUILayout.GetControlRect(true, EditorGUIUtility.singleLineHeight), m_StatusLabel,
                bp.ColliderBehavior, ColliderBehaviorCategory.RigidBody);

            if (nstatus != bp.ColliderBehavior)
            {
                var rb = bp.Rigidbody;
                if (rb)
                {
                    LizEditorGUIUtil.SetRigidbodyBehavior(rb, (RigidbodyBehavior)nstatus);
                }
            }
        }
Ejemplo n.º 8
0
        public static void ApplyBodyPartColliderStatus(Outfit outfit, RigidbodyBehavior status, bool singleUndo = true,
                                                       string undoLabel = "Set BP Collider Status")
        {
            if (AssetDatabase.Contains(outfit))
            {
                Debug.LogError("Can't modify an outfit asset.  Outfit must be in the scene.", outfit);
                return;
            }

            if (outfit.BodyPartCount == 0)
            {
                return;
            }

            if (singleUndo)
            {
                Undo.IncrementCurrentGroup();
            }

            for (int i = 0; i < outfit.BodyPartCount; i++)
            {
                var bp = outfit.GetBodyPart(i);
                if (bp)
                {
                    var rb = bp.Rigidbody;
                    if (rb)
                    {
                        LizEditorGUIUtil.SetRigidbodyBehavior(rb, status, false, undoLabel);
                    }
                }
            }

            if (singleUndo)
            {
                Undo.CollapseUndoOperations(Undo.GetCurrentGroup());
            }
        }
        public void DrawBodyPartActions()
        {
            EditorGUILayout.LabelField("Body Parts");

            LizEditorGUIUtil.BeginLabelWidth(70);

            m_ContextChoice =
                EditorGUILayout.ObjectField(ContextLabel, m_ContextChoice, typeof(GameObject), true) as GameObject;

            var outfit = Target;

            EditorGUILayout.BeginHorizontal();

            m_PartTypeChoice = (BodyPartType)EditorGUILayout.EnumPopup(m_PartTypeChoice);

            if (m_ColliderPopup == null)
            {
                m_ColliderPopup = new LocalComponentPopup(typeof(Collider), false);
            }

            m_ColliderChoice = m_ColliderPopup.OnGUI(
                EditorGUILayout.GetControlRect(false, EditorGUIUtility.singleLineHeight * 1.1f),
                m_ColliderChoice, GUIContent.none, outfit.gameObject) as Collider;

            EditorGUILayout.EndHorizontal();

            GUI.enabled = m_ColliderChoice;
            if (GUILayout.Button("Create Boby Part"))
            {
                if (m_ColliderChoice.gameObject.GetComponent <BodyPart>())
                {
                    Debug.LogError(m_ColliderChoice.name + " Already has a body part attached.", outfit);
                }
                else if (outfit.GetBodyPart(m_PartTypeChoice))
                {
                    Debug.LogError("Outfit already has a body part of type: " + m_PartTypeChoice, outfit);
                }
                else
                {
                    // Note for prefabs: If there is a missing body part in the array before the action and the
                    // user undoes the action, the mount point array may end up containing an invalid reference
                    // to the prefab's asset. This appears to be some kind of prefab related bug.

                    const string undoLabel = "Create Body Part";
                    Undo.IncrementCurrentGroup();

                    Undo.RecordObjects(Outfit.UnsafeGetUndoObjects(outfit).ToArray(), undoLabel);  // For refresh.

                    var bp = Undo.AddComponent <BodyPart>(m_ColliderChoice.gameObject);
                    Undo.RecordObject(bp, undoLabel);
                    bp.Collider = m_ColliderChoice;
                    bp.PartType = m_PartTypeChoice;
                    bp.Context  = m_ContextChoice;

                    StandardOutfit.UnsafeRefreshBodyParts(outfit);

                    Undo.CollapseUndoOperations(Undo.GetCurrentGroup());
                    m_ColliderChoice = null;
                }
            }
            GUI.enabled = true;

            EditorGUILayout.BeginHorizontal();

            if (GUILayout.Button(ApplyBodyPartContextLabel))
            {
                string undoLabel = "Apply Body Part Context";
                Undo.IncrementCurrentGroup();
                Undo.RecordObjects(Outfit.UnsafeGetUndoObjects(outfit).ToArray(), undoLabel);

                outfit.ApplyBodyPartContext(m_ContextChoice);

                Undo.CollapseUndoOperations(Undo.GetCurrentGroup());
            }

            if (GUILayout.Button(RefreshBodyPartsLabel))
            {
                Undo.RecordObject(outfit, "Refresh Body Parts");
                StandardOutfit.UnsafeRefreshBodyParts(outfit, false);
            }

            if (GUILayout.Button(ResetBodyPartsLabel))
            {
                Undo.RecordObject(outfit, "Reset Body Parts");
                StandardOutfit.UnsafeClearBodyParts(outfit);
            }

            EditorGUILayout.EndHorizontal();

            LizEditorGUIUtil.EndLabelWidth();
        }