private void _OnGUI_Started_Toolbar() { GUILayout.BeginHorizontal(); { EUtil.PushGUIEnable(m_EditMode != EditMode.Fixer); if (GUILayout.Button("Fixer", EditorStyles.toolbarButton)) { _SwitchEditMode(EditMode.Fixer); } EUtil.PopGUIEnable(); EUtil.PushGUIEnable(m_EditMode != EditMode.Saver); if (GUILayout.Button("Saver", EditorStyles.toolbarButton)) { _SwitchEditMode(EditMode.Saver); } EUtil.PopGUIEnable(); EUtil.PushGUIEnable(m_EditMode != EditMode.None); EUtil.PushBackgroundColor(Color.red); if (GUILayout.Button("Stop", EditorStyles.toolbarButton)) { _EnsureStopEditing(); } EUtil.PopBackgroundColor(); EUtil.PopGUIEnable(); } GUILayout.EndHorizontal(); }
public static EAxisD DrawAffectField( EAxisD eAffect, string label, string tips, EAxisD eTarget, EAxisD eInvTarget) { bool v = (eAffect & eTarget) != 0; bool newV = v; EUtil.PushBackgroundColor(v ? EConUtil.kSelectedBtnColor : Color.white); if (GUILayout.Button(new GUIContent(label, tips), EditorStyles.toolbarButton)) { newV = !v; } EUtil.PopBackgroundColor(); if (v != newV) { if (newV) { eAffect |= eTarget; eAffect &= (~eInvTarget); } else { eAffect &= (~eTarget); } } return(eAffect); }
public static void DrawChooseTransformData(ref ETransformData curData, string label, string tips) { EditorGUILayout.BeginHorizontal(); { GUILayout.Label(new GUIContent(label, tips)); EUtil.PushBackgroundColor(curData == ETransformData.Position ? kSelectedBtnColor : Color.white); if (GUILayout.Button("Loc", EditorStyles.toolbarButton)) { curData = ETransformData.Position; return; } EUtil.PopBackgroundColor(); EUtil.PushBackgroundColor(curData == ETransformData.Rotation ? kSelectedBtnColor : Color.white); if (GUILayout.Button("Rot", EditorStyles.toolbarButton)) { curData = ETransformData.Rotation; return; } EUtil.PopBackgroundColor(); EUtil.PushBackgroundColor(curData == ETransformData.Scale ? kSelectedBtnColor : Color.white); if (GUILayout.Button("Sca", EditorStyles.toolbarButton)) { curData = ETransformData.Scale; return; } EUtil.PopBackgroundColor(); } EditorGUILayout.EndHorizontal(); }
public static EAxis DrawAxisBtnMask(GUIContent label, EAxis eAffect, float labelWidth = 80f) { bool active = false; EditorGUILayout.BeginHorizontal(); { GUILayout.Label(label, GUILayout.Width(labelWidth)); active = (eAffect & EAxis.X) != 0; EUtil.PushBackgroundColor(active ? kSelectedBtnColor : Color.white); if (GUILayout.Button("X", EditorStyles.toolbarButton)) { if (active) { eAffect &= ~EAxis.X; } else { eAffect |= EAxis.X; } } EUtil.PopBackgroundColor(); active = (eAffect & EAxis.Y) != 0; EUtil.PushBackgroundColor(active ? kSelectedBtnColor : Color.white); if (GUILayout.Button("Y", EditorStyles.toolbarButton)) { if (active) { eAffect &= ~EAxis.Y; } else { eAffect |= EAxis.Y; } } EUtil.PopBackgroundColor(); active = (eAffect & EAxis.Z) != 0; EUtil.PushBackgroundColor(active ? kSelectedBtnColor : Color.white); if (GUILayout.Button("Z", EditorStyles.toolbarButton)) { if (active) { eAffect &= ~EAxis.Z; } else { eAffect |= EAxis.Z; } } EUtil.PopBackgroundColor(); } EditorGUILayout.EndHorizontal(); return(eAffect); }
public static Enum DrawEnumBtns(Enum[] es, Enum cur, string label, string tips) { EditorGUILayout.BeginHorizontal(); { GUILayout.Label(new GUIContent(label, tips)); for (int i = 0; i < es.Length; ++i) { EUtil.PushBackgroundColor(es[i] == cur ? kSelectedBtnColor : Color.white); if (GUILayout.Button(es[i].ToString(), EditorStyles.toolbarButton)) { return(es[i]); } EUtil.PopBackgroundColor(); } } EditorGUILayout.EndHorizontal(); return(cur); }
public static Enum DrawEnumBtns(Enum[] es, string[] strs, Enum cur, string label, string tips, float labelWidth = 80f) { EditorGUILayout.BeginHorizontal(); { GUILayout.Label(new GUIContent(label, tips), GUILayout.Width(labelWidth)); for (int i = 0; i < es.Length; ++i) { Color c = (es[i].Equals(cur) ? kSelectedBtnColor : Color.white); EUtil.PushBackgroundColor(c); if (GUILayout.Button(strs[i], EditorStyles.toolbarButton)) { return(es[i]); } EUtil.PopBackgroundColor(); } } EditorGUILayout.EndHorizontal(); return(cur); }
public override void OnInspectorGUI() { MaintainVolume cp = (MaintainVolume)target; EditorGUI.BeginChangeCheck(); EConUtil.DrawActiveLine(cp); EUtil.DrawSplitter(); EUtil.PushGUIEnable(cp.IsActiveConstraint); { // base volume cp.BaseVolume = EditorGUILayout.FloatField(new GUIContent("Base", "the base value of volume, the product of xyz component of scale"), cp.BaseVolume); cp.BaseVolume = Mathf.Max(cp.BaseVolume, 0.01f); //affect X/Y/Z m_foldoutAxis = EditorGUILayout.Foldout(m_foldoutAxis, "Axis"); if (m_foldoutAxis) { EAxis eAffect = cp.FreeAxis; EditorGUILayout.BeginHorizontal(); { EUtil.PushBackgroundColor(eAffect == EAxis.X ? EConUtil.kSelectedBtnColor : Color.white); if (GUILayout.Button(new GUIContent("X", "X axis as main axis"), EditorStyles.toolbarButton)) { eAffect = EAxis.X; } EUtil.PopBackgroundColor(); EUtil.PushBackgroundColor(eAffect == EAxis.Y ? EConUtil.kSelectedBtnColor : Color.white); if (GUILayout.Button(new GUIContent("Y", "Y axis as main axis"), EditorStyles.toolbarButton)) { eAffect = EAxis.Y; } EUtil.PopBackgroundColor(); EUtil.PushBackgroundColor(eAffect == EAxis.Z ? EConUtil.kSelectedBtnColor : Color.white); if (GUILayout.Button(new GUIContent("Z", "Z axis as main axis"), EditorStyles.toolbarButton)) { eAffect = EAxis.Z; } EUtil.PopBackgroundColor(); } EditorGUILayout.EndHorizontal(); cp.FreeAxis = eAffect; GUILayout.Space(5f); } // vol mul cp.VolMul = EditorGUILayout.FloatField(new GUIContent("Multiplier", "extra multiplier on base volume"), cp.VolMul); // space 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); } // 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 override void OnInspectorGUI() { ConstraintStack cstack = (ConstraintStack)target; serializedObject.Update(); GUILayout.Space(3f); // constraints for (int i = 0; i < cstack.constraintCount; ++i) { BaseConstraint c = cstack.Get(i); if (!c) { //remove broken reference cstack.RemoveAt(i); --i; continue; } // draw constraint & buttons EditorGUILayout.BeginHorizontal(); { Color btnColor = c.IsActiveConstraint ? Color.white : Color.red; EUtil.PushBackgroundColor(btnColor); var content = new GUIContent(c.GetType().Name, "Click to fold other components"); Rect rc = GUILayoutUtility.GetRect(content, EditorStyles.toolbarButton); if (GUI.Button(rc, content, EditorStyles.toolbarButton)) { _FoldComponents(cstack); var wnd = EditorEditorWindow.OpenWindowWithActivatorRect(c, rc); EUtil.SetEditorWindowTitle(wnd, content.text); } EditorGUI.ProgressBar(rc, c.Influence, content.text); EUtil.PopBackgroundColor(); if (GUILayout.Button(new GUIContent(c.IsActiveConstraint ? EConUtil.activeBtn : EConUtil.inactiveBtn, "Toggle constraint active state"), EditorStyles.toolbarButton, GUILayout.Height(20), GUILayout.Width(20))) { c.IsActiveConstraint = !c.IsActiveConstraint; EditorUtility.SetDirty(cstack); } EUtil.PushGUIEnable(i != 0); if (GUILayout.Button(new GUIContent(EConUtil.upBtn, "move up"), EditorStyles.toolbarButton, GUILayout.Height(20), GUILayout.Width(20))) { cstack.Swap(i, i - 1); EditorUtility.SetDirty(cstack); //ComponentUtility.MoveComponentUp(c); } EUtil.PopGUIEnable(); EUtil.PushGUIEnable(i != cstack.constraintCount - 1); if (GUILayout.Button(new GUIContent(EConUtil.downBtn, "move down"), EditorStyles.toolbarButton, GUILayout.Height(20), GUILayout.Width(20))) { cstack.Swap(i, i + 1); EditorUtility.SetDirty(cstack); //ComponentUtility.MoveComponentDown(c); } EUtil.PopGUIEnable(); if (GUILayout.Button(new GUIContent(EConUtil.deleteBtn, "delete the constraint from stack"), EditorStyles.toolbarButton, GUILayout.Height(20), GUILayout.Width(20))) { MUndo.RecordObject(cstack, "Remove Constraint"); cstack.RemoveAt(i); EditorUtility.SetDirty(cstack); _FoldComponents(cstack); EditorGUIUtility.ExitGUI(); } } EditorGUILayout.EndHorizontal(); } //for(int i=0; i<cstack.constraintCount; ++i) GUILayout.Space(2f); EditorGUI.BeginChangeCheck(); int newOrder = EditorGUILayout.IntField(new GUIContent("Exec Order", "used to help decide evaluation order, the smaller the earlier"), cstack.ExecOrder); if (EditorGUI.EndChangeCheck()) { cstack.ExecOrder = newOrder; } { //new constraint window EUtil.DrawSplitter(new Color(1, 1, 1, 0.3f)); EditorGUILayout.BeginHorizontal(); GUILayout.Space(15f); var content = new GUIContent("Add Constraint", "Add new constraint into current stack"); Rect btnRc = GUILayoutUtility.GetRect(content, GUI.skin.button); if (GUI.Button(btnRc, content)) { var wnd = ScriptableObject.CreateInstance <ConstraintsWindow>(); Rect wndRc = EUtil.GetRectByActivatorRect(wnd.position, btnRc); wnd.position = wndRc; wnd.SetConstraintStack(cstack); wnd.ShowPopup(); wnd.Focus(); } GUILayout.Space(15f); EditorGUILayout.EndHorizontal(); } if (Pref.ShowInitInfos) { EditorGUILayout.PropertyField(m_spInitInfo, true); } serializedObject.ApplyModifiedProperties(); }
private void _OnGUI_SMR() { m_RootBone = EditorGUILayout.ObjectField(new GUIContent("Top GO", "fill the topmost GameObject of model"), m_RootBone, typeof(Transform), true) as Transform; GUIUtil.PushGUIEnable(m_RootBone != null); { GUILayout.BeginHorizontal(); GUILayout.Space(60f); if (EUtil.Button("AutoFind", "Automatically collect all SMR & MF on this model", Color.blue)) { _AutoFindRenderers(); } GUILayout.Space(60f); GUILayout.EndHorizontal(); } GUIUtil.PopGUIEnable(); EUtil.DrawSplitter(); //SMR for (int idx = 0; idx < m_SMRs.Count; ++idx) { GUILayout.BeginHorizontal(); if (EUtil.Button("X", "delete", Color.red, GUILayout.Width(30f))) { m_SMRs.RemoveAt(idx); --idx; continue; } Color oc = GUI.backgroundColor; GUI.backgroundColor = Color.green; m_SMRs[idx] = EditorGUILayout.ObjectField(m_SMRs[idx], typeof(SkinnedMeshRenderer), true) as SkinnedMeshRenderer; GUI.backgroundColor = oc; GUILayout.EndHorizontal(); } GUILayout.BeginHorizontal(); GUILayout.Space(60f); if (GUILayout.Button(new GUIContent("Add SMR Entry", "manually add \"Skinned-Mesh Renderer\""))) { m_SMRs.Add(null); } GUILayout.Space(60f); GUILayout.EndHorizontal(); EUtil.DrawSplitter(); //MF for (int idx = 0; idx < m_MFs.Count; ++idx) { GUILayout.BeginHorizontal(); if (EUtil.Button("X", "delete", Color.red, GUILayout.Width(30f))) { m_MFs.RemoveAt(idx); --idx; continue; } Color oc = GUI.backgroundColor; GUI.backgroundColor = Color.yellow; m_MFs[idx] = EditorGUILayout.ObjectField(m_MFs[idx], typeof(MeshFilter), true) as MeshFilter; GUI.backgroundColor = oc; GUILayout.EndHorizontal(); } GUILayout.BeginHorizontal(); GUILayout.Space(60f); if (GUILayout.Button(new GUIContent("Add MF Entry", "manually add \"Mesh Filter\""))) { m_MFs.Add(null); } GUILayout.Space(60f); GUILayout.EndHorizontal(); EUtil.DrawSplitter(); //export clips for (int idx = 0; idx < m_Clips.Count; ++idx) { GUILayout.BeginHorizontal(); if (EUtil.Button("X", "delete", Color.red, GUILayout.Width(30f))) { m_Clips.RemoveAt(idx); --idx; continue; } m_Clips[idx] = EditorGUILayout.ObjectField(m_Clips[idx], typeof(AnimationClip), true) as AnimationClip; GUILayout.EndHorizontal(); } GUILayout.BeginHorizontal(); GUILayout.Space(60f); if (GUILayout.Button(new GUIContent("Add Clip", "add another animation clip to export"))) { m_Clips.Add(null); } GUILayout.Space(60f); GUILayout.EndHorizontal(); EUtil.DrawSplitter(); bool bHasValidEntry = _HasValidEntry(); Color c = (bHasValidEntry) ? Color.green : Color.red; EUtil.PushBackgroundColor(c); GUIUtil.PushGUIEnable(bHasValidEntry); GUILayout.BeginHorizontal(); GUILayout.Space(60f); if (GUILayout.Button("Export!")) { string saveDir = _GetSaveDirectory(); string filePath = EditorUtility.SaveFilePanel("Select export file path", saveDir, "anim", "dae"); if (filePath.Length > 0) { string recDir = System.IO.Path.GetDirectoryName(filePath); _RecordSaveDirectory(recDir); SkinnedMeshRenderer[] smrArr = m_SMRs.TakeWhile(x => x != null).ToArray(); MeshFilter[] mfArr = m_MFs.TakeWhile(x => x != null).ToArray(); m_Clips.RemoveAll(x => x == null); DaeExporter exp = new DaeExporter(smrArr, mfArr, m_RootBone); exp.Export(m_Clips, filePath); AssetDatabase.Refresh(); } else { EUtil.ShowNotification("Export Cancelled..."); } } GUILayout.Space(60f); GUILayout.EndHorizontal(); GUIUtil.PopGUIEnable(); EUtil.PopBackgroundColor(); }
public override void OnInspectorGUI() { CCDSolverMB cp = (CCDSolverMB)target; EditorGUI.BeginChangeCheck(); EConUtil.DrawActiveLine(cp); //constraint target cp.Target = (Transform)EditorGUILayout.ObjectField("Target Object", cp.Target, typeof(Transform), true); EUtil.DrawSplitter(); EUtil.PushGUIEnable(cp.IsActiveConstraint); { // reset button GUILayout.BeginHorizontal(); GUILayout.Space(30f); if (EUtil.Button("Recollect IKConstraints", "click this when add new IK-constraint on this IK-link", Color.green)) { cp.GetSolver(true); EUtil.RepaintSceneView(); } GUILayout.Space(30f); GUILayout.EndHorizontal(); // jointList if (!m_manualSetJoints) { m_autoCollectBoneCount = EditorGUILayout.IntField(CONT_BoneCnt, m_autoCollectBoneCount); } else { var jointList = cp.jointList; Undo.RecordObject(cp, "JointList"); for (int i = 0; i < jointList.Count; ++i) { EditorGUILayout.BeginHorizontal(); jointList[i] = (Transform)EditorGUILayout.ObjectField(jointList[i], typeof(Transform), true); if (GUILayout.Button(new GUIContent("+", "add new entry"))) { jointList.Insert(i, null); GUIUtility.ExitGUI(); } if (GUILayout.Button(new GUIContent("-", "delete this entry"))) { jointList.RemoveAt(i); GUIUtility.ExitGUI(); } EditorGUILayout.EndHorizontal(); } } EditorGUILayout.BeginHorizontal(); if (GUILayout.Button(m_manualSetJoints ? CONT_ManualSetJoints : CONT_AutoSetJoints, EditorStyles.toolbarButton)) { m_manualSetJoints = !m_manualSetJoints; } bool isIdentical = _CheckJointListIdentical(cp); EUtil.PushBackgroundColor(isIdentical ? Color.white : Color.blue); if (GUILayout.Button(new GUIContent("Apply", "Apply the joint list"), EditorStyles.toolbarButton)) { if (m_manualSetJoints) { if (_CheckManualSetJointList(cp)) { cp._RenewInitInfoAndSolver(); } } else { cp._RenewByCollectJointsWithBontCount(m_autoCollectBoneCount); } m_autoCollectBoneCount = cp.boneCount; } EUtil.PopBackgroundColor(); EditorGUILayout.EndHorizontal(); EUtil.DrawSplitter(); // dist thres EditorGUI.BeginChangeCheck(); float newDistThres = EditorGUILayout.FloatField(CONT_DistThres, cp.distThres); if (EditorGUI.EndChangeCheck()) { if (newDistThres > 0f) { Undo.RecordObject(cp, "Set Dist Thres"); cp.distThres = newDistThres; } } cp.useDamp = EditorGUILayout.Toggle(CONT_Damp, cp.useDamp); if (cp.useDamp) { cp.globalDamp = EditorGUILayout.FloatField("Global damp", cp.globalDamp); } cp.useTargetRotation = EditorGUILayout.Toggle(CONT_UseTargetRotation, cp.useTargetRotation); cp.maxIteration = EditorGUILayout.IntField(CONT_MaxIteration, cp.maxIteration); cp.revertOpt = (CCDSolver.RevertOption)EditorGUILayout.EnumPopup(CONT_RevertOpt, cp.revertOpt); m_markerSize.val = Mathf.Max(0, EditorGUILayout.FloatField(CONT_BoneMarkSize, m_markerSize.val)); EUtil.PushGUIEnable(!cp.Target); { if (GUILayout.Button("Control Mode: " + (cp.Target ? "Target" : m_panel.ToString()), EditorStyles.toolbarButton)) { m_panel = (EPanel)((int)(m_panel + 1) % (int)EPanel.END); cp.GetSolver().Target = cp.transform.position; } _OnGUI_IKPanel(cp); } EUtil.PopGUIEnable(); // influence GUILayout.Space(5f); cp.Influence = EUtil.ProgressBar(cp.Influence, 0, 1f, "Influence: {0:F2}"); //initInfos if (Pref.ShowInitInfos) { EditorGUILayout.PropertyField(serializedObject.FindProperty("m_initInfos"), true); } } EUtil.PopGUIEnable(); if (EditorGUI.EndChangeCheck()) { EditorUtility.SetDirty(cp); //so ConstraintStack.Update can be called in edit-mode } }