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 } }
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); } }