Exemplo n.º 1
0
        public static float DrawLimitField(
            ref ELimitAffect eAffect,
            string label,
            string tips,
            float limitVal,
            ELimitAffect field)
        {
            bool v = (eAffect & field) != 0;

            EditorGUILayout.BeginHorizontal();
            {
                Rect rc   = GUILayoutUtility.GetRect(16f, 16f);
                bool newV = EditorGUI.Toggle(rc, v);
                if (v != newV)
                {
                    if (newV)
                    {
                        eAffect |= field;
                    }
                    else
                    {
                        eAffect &= (~field);
                    }
                }

                EUtil.PushGUIEnable(newV);
                {
                    limitVal = EditorGUILayout.FloatField(new GUIContent(label, tips), limitVal);
                }
                EUtil.PopGUIEnable();
            }
            EditorGUILayout.EndHorizontal();

            return(limitVal);
        }
        public override void OnInspectorGUI()
        {
            LimitScale cp = (LimitScale)target;

            EditorGUI.BeginChangeCheck();

            EConUtil.DrawActiveLine(cp);

            EUtil.DrawSplitter();

            EUtil.PushGUIEnable(cp.IsActiveConstraint);
            {
                //affect X/Y/Z
                m_foldoutLimit = EditorGUILayout.Foldout(m_foldoutLimit, "Limits");
                if (m_foldoutLimit)
                {
                    ELimitAffect eAffect  = cp.LimitAffect;
                    Vector3      limitMin = cp.LimitMin;
                    Vector3      limitMax = cp.LimitMax;

                    limitMin.x = EConUtil.DrawLimitField(ref eAffect, "XMin", "min value of X", limitMin.x, ELimitAffect.MinX);
                    limitMax.x = EConUtil.DrawLimitField(ref eAffect, "XMax", "max value of X", limitMax.x, ELimitAffect.MaxX);
                    limitMin.y = EConUtil.DrawLimitField(ref eAffect, "YMin", "min value of Y", limitMin.y, ELimitAffect.MinY);
                    limitMax.y = EConUtil.DrawLimitField(ref eAffect, "YMax", "max value of Y", limitMax.y, ELimitAffect.MaxY);
                    limitMin.z = EConUtil.DrawLimitField(ref eAffect, "ZMin", "min value of Z", limitMin.z, ELimitAffect.MinZ);
                    limitMax.z = EConUtil.DrawLimitField(ref eAffect, "ZMax", "max value of Z", limitMax.z, ELimitAffect.MaxZ);

                    EConUtil.LimitFieldMinMaxFix(eAffect, ref limitMin, ref limitMax);

                    cp.LimitAffect = eAffect;
                    cp.LimitMin    = limitMin;
                    cp.LimitMax    = limitMax;

                    GUILayout.Space(5f);
                }

                m_foldoutSpace = EditorGUILayout.Foldout(m_foldoutSpace, "Space Mapping");
                if (m_foldoutSpace)
                {
                    // owner space
                    cp.OwnerSpace = (ESpace)EditorGUILayout.EnumPopup("Owner Space", cp.OwnerSpace);
                    GUILayout.Space(5f);
                }

                //record modify
                cp.ModifyInternalData = EditorGUILayout.Toggle(new GUIContent("Modify Internal Data", "This modification will modify the ConstraintStack's internal transform data"), cp.ModifyInternalData);

                // influence
                cp.Influence = EUtil.ProgressBar(cp.Influence, 0, 1f, "Influence: {0:F2}");
            }
            EUtil.PopGUIEnable();

            if (EditorGUI.EndChangeCheck())
            {
                EditorUtility.SetDirty(cp); //so ConstraintStack.Update can be called in edit-mode
            }
        }
Exemplo n.º 3
0
 public static void LimitFieldMinMaxFix(ELimitAffect eAffect, ref Vector3 limitMin, ref Vector3 limitMax)
 {
     if ((eAffect & (ELimitAffect.MaxX | ELimitAffect.MinX)) == (ELimitAffect.MaxX | ELimitAffect.MinX))
     {
         limitMax.x = Mathf.Max(limitMin.x, limitMax.x);
     }
     if ((eAffect & (ELimitAffect.MaxY | ELimitAffect.MinY)) == (ELimitAffect.MaxY | ELimitAffect.MinY))
     {
         limitMax.y = Mathf.Max(limitMin.y, limitMax.y);
     }
     if ((eAffect & (ELimitAffect.MaxZ | ELimitAffect.MinZ)) == (ELimitAffect.MaxZ | ELimitAffect.MinZ))
     {
         limitMax.z = Mathf.Max(limitMin.z, limitMax.z);
     }
 }