void UpdateEditMode() { EditorGUILayout.BeginVertical(EditorStyles.inspectorDefaultMargins); EditorGUILayout.PropertyField(barycentricWeight); EditorGUILayout.PropertyField(normalAlignmentWeight); EditorGUILayout.PropertyField(elevationWeight); EditorGUI.BeginChangeCheck(); paintMode = GUILayout.Toggle(paintMode, new GUIContent("Paint skin", Resources.Load <Texture2D>("PaintButton")), "LargeButton"); Tools.hidden = paintMode || subject == SubjectBeingEdited.Master; if (EditorGUI.EndChangeCheck()) { SceneView.RepaintAll(); } // Buttons: GUILayout.BeginHorizontal(); if (GUILayout.Button("Bind") && masterObject != null && slaveObject != null) { EditorUtility.SetDirty(target); CoroutineJob job = new CoroutineJob(); routine = job.Start(skinMap.Bind()); EditorCoroutine.ShowCoroutineProgressBar("Generating skinmap...", ref routine); EditorGUIUtility.ExitGUI(); } if (GUILayout.Button("Done")) { EditorApplication.delayCall += ExitSkinEditMode; } GUILayout.EndHorizontal(); EditorGUILayout.EndVertical(); // skin channel selector: if (paintMode) { EditorGUILayout.Space(); GUILayout.Box(GUIContent.none, ObiEditorUtils.GetSeparatorLineStyle()); EditorGUILayout.BeginVertical(EditorStyles.inspectorDefaultMargins); // Brush parameters: paintBrush.radius = EditorGUILayout.Slider("Brush size", paintBrush.radius, 0.0001f, 0.5f); paintBrush.innerRadius = 1; paintBrush.opacity = 1; EditorGUI.BeginChangeCheck(); if (paintBrush.brushMode.needsInputValue) { currentProperty.PropertyField(); } if (EditorGUI.EndChangeCheck()) { SceneView.RepaintAll(); } GUILayout.BeginHorizontal(); if (GUILayout.Button(new GUIContent("Fill"), EditorStyles.miniButtonLeft)) { if (subject == SubjectBeingEdited.Master) { skinMap.FillChannel(skinMap.m_MasterChannels, currentProperty.GetDefault()); } else { skinMap.FillChannel(skinMap.m_SlaveChannels, currentProperty.GetDefault()); } SceneView.RepaintAll(); } if (GUILayout.Button(new GUIContent("Clear"), EditorStyles.miniButtonMid)) { if (subject == SubjectBeingEdited.Master) { skinMap.ClearChannel(skinMap.m_MasterChannels, currentProperty.GetDefault()); } else { skinMap.ClearChannel(skinMap.m_SlaveChannels, currentProperty.GetDefault()); } SceneView.RepaintAll(); } if (GUILayout.Button(new GUIContent("Copy"), EditorStyles.miniButtonMid)) { targetSkinChannel = currentProperty.GetDefault(); } if (GUILayout.Button(new GUIContent("Paste"), EditorStyles.miniButtonRight)) { if (subject == SubjectBeingEdited.Master) { skinMap.CopyChannel(skinMap.m_MasterChannels, targetSkinChannel, currentProperty.GetDefault()); } else { skinMap.CopyChannel(skinMap.m_SlaveChannels, targetSkinChannel, currentProperty.GetDefault()); } SceneView.RepaintAll(); } GUILayout.EndHorizontal(); EditorGUILayout.EndVertical(); } EditorGUILayout.Space(); GUILayout.Box(GUIContent.none, ObiEditorUtils.GetSeparatorLineStyle()); EditorGUILayout.BeginVertical(EditorStyles.inspectorDefaultMargins); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Slave transform", EditorStyles.boldLabel); if (GUILayout.Button("Reset", EditorStyles.miniButton)) { skinMap.m_SlaveTransform.Reset(); } EditorGUILayout.EndHorizontal(); EditorGUILayout.PropertyField(serializedObject.FindProperty("m_SlaveTransform")); EditorGUILayout.EndVertical(); }
void UpdateEditMode() { paintMode = GUILayout.Toggle(paintMode, new GUIContent("Paint skin master/slave", Resources.Load <Texture2D>("PaintButton")), "LargeButton"); // skin channel selector: if (paintMode) { GUILayout.BeginHorizontal(); if (GUILayout.Toggle(brushType == PaintBrushType.Add, new GUIContent("Add", Resources.Load <Texture2D>("AddIcon")), GUI.skin.FindStyle("ButtonLeft"))) { brushType = PaintBrushType.Add; } if (GUILayout.Toggle(brushType == PaintBrushType.Remove, new GUIContent("Remove", Resources.Load <Texture2D>("RemoveIcon")), GUI.skin.FindStyle("ButtonMid"))) { brushType = PaintBrushType.Remove; } if (GUILayout.Button(new GUIContent("Fill", Resources.Load <Texture2D>("FillButton")), GUI.skin.FindStyle("ButtonMid"))) { if (sourceObject != null && Selection.activeGameObject == sourceObject) { for (int i = 0; i < skinMap.masterFlags.Length; ++i) { skinMap.masterFlags[i] |= (uint)(1 << selectedSkinChannel); } } if (targetObject != null && Selection.activeGameObject == targetObject) { for (int i = 0; i < skinMap.slaveFlags.Length; ++i) { skinMap.slaveFlags[i] |= (uint)(1 << selectedSkinChannel); } } } if (GUILayout.Button(new GUIContent("Clear", Resources.Load <Texture2D>("ClearButton2")), GUI.skin.FindStyle("ButtonRight"))) { if (sourceObject != null && Selection.activeGameObject == sourceObject) { for (int i = 0; i < skinMap.masterFlags.Length; ++i) { skinMap.masterFlags[i] &= ~(uint)(1 << selectedSkinChannel); } } if (targetObject != null && Selection.activeGameObject == targetObject) { for (int i = 0; i < skinMap.slaveFlags.Length; ++i) { skinMap.slaveFlags[i] &= ~(uint)(1 << selectedSkinChannel); } } } GUILayout.EndHorizontal(); brushRadius = EditorGUILayout.Slider("Brush radius", brushRadius, 5, 200); selectedSkinChannel = EditorGUILayout.Popup("Skin channel:", selectedSkinChannel, availableChannels); GUILayout.BeginHorizontal(); if (GUILayout.Button("Copy channel to:")) { CopySkinChannels(selectedSkinChannel, targetSkinChannel); } targetSkinChannel = EditorGUILayout.Popup(targetSkinChannel, availableChannels); GUILayout.EndHorizontal(); } GUILayout.BeginHorizontal(); if (GUILayout.Button("Bind")) { if (sourceObject != null && targetObject != null) { skinMap.Bind(sourceObject.transform, targetObject.transform); } EditorUtility.SetDirty(target); } if (GUILayout.Button("Done")) { EditorApplication.delayCall += ExitSkinEditMode; } GUILayout.EndHorizontal(); DrawTransformInspector("Source transform", sourceObject); DrawTransformInspector("Target transform", targetObject); // Change materials when painting weights: if (Event.current.type == EventType.Repaint) { UpdateSourceObject(); UpdateTargetObject(); } }