public void Add(IRigEffectorHolder holder, Transform transform) { m_Transforms.Add(new HolderTransformPair() { holder = holder, transform = transform }); }
static void FetchOrCreateEffectors(IRigEffectorHolder holder) { foreach (var effectorData in holder.effectors) { if (s_Effectors.ContainsKey(effectorData)) { s_ActiveEffectors.Add(s_Effectors[effectorData]); } else { var newEffector = ScriptableObject.CreateInstance <RigEffector>(); newEffector.Initialize(effectorData); s_Effectors.Add(effectorData, newEffector); s_ActiveEffectors.Add(newEffector); } } }
public void OnSceneGUIOverlay() { GameObject targetGameObject = null; m_SerializedObject.Update(); if (!m_SerializedObject.isEditingMultipleObjects) { RigEffector rigEffector = m_SerializedObject.targetObject as RigEffector; if (rigEffector.transform != null) { targetGameObject = rigEffector.transform.gameObject; } } GUILayout.BeginHorizontal(GUILayout.Width(210.0f)); EditorGUI.BeginChangeCheck(); m_ExpandOverlay = EditorGUILayout.Toggle(m_ExpandOverlay, EditorStyles.foldout, GUILayout.Width(12)); if (EditorGUI.EndChangeCheck()) { EditorPrefs.SetBool(s_ExpandOverlayPrefKey, m_ExpandOverlay); } GUILayout.BeginHorizontal(EditorStyles.toolbar); EditorGUILayout.PropertyField(m_Visible, GUIContent.none, GUILayout.Width(17)); GUILayout.Label((targetGameObject != null) ? targetGameObject.name : "(Multiple objects)"); if (GUILayout.Button(GUIContent.none, "OL Minus", GUILayout.Width(17))) { UnityEngine.Object[] targetObjects = m_SerializedObject.targetObjects; foreach (var targetObject in targetObjects) { var effector = targetObject as IRigEffector; Transform transform = effector.transform; IRigEffectorHolder holder = FetchRigEffectorHolder(transform); if (holder != null) { var holderObject = holder as UnityEngine.Object; Undo.RecordObject(holderObject, "Remove Effector"); if (PrefabUtility.IsPartOfPrefabInstance(holderObject)) { EditorUtility.SetDirty(holderObject); } holder.RemoveEffector(transform); } } } GUILayout.EndHorizontal(); GUILayout.EndHorizontal(); if (m_ExpandOverlay) { EditorGUILayout.LabelField(s_ShapeLabel); EditorGUILayout.PropertyField(m_Shape, GUIContent.none); Rect rect = GUILayoutUtility.GetRect(s_ColorLabel, EditorStyles.colorField); // Shenanigans to bypass color picker bug. var evt = Event.current; if (evt.type == EventType.MouseUp) { if (rect.Contains(evt.mousePosition)) { GUIUtility.hotControl = 0; } } EditorGUI.BeginProperty(rect, s_ColorLabel, m_Color); EditorGUI.BeginChangeCheck(); Color newColor = EditorGUI.ColorField(rect, s_ColorLabel, m_Color.colorValue, false, true, false); if (EditorGUI.EndChangeCheck()) { m_Color.colorValue = newColor; } EditorGUI.EndProperty(); EditorGUILayout.PropertyField(m_Size, s_SizeLabel); EditorGUILayout.PropertyField(m_Position, s_PositionLabel); EditorGUILayout.PropertyField(m_Rotation, s_RotationLabel); } if (m_SerializedObject.hasModifiedProperties) { UnityEngine.Object[] targetObjects = m_SerializedObject.targetObjects; foreach (var targetObject in targetObjects) { var effector = targetObject as IRigEffector; Transform transform = effector.transform; IRigEffectorHolder holder = FetchRigEffectorHolder(transform); if (holder != null) { var holderObject = holder as UnityEngine.Object; Undo.RecordObject(holderObject, "Edit Effector"); if (PrefabUtility.IsPartOfPrefabInstance(holderObject)) { EditorUtility.SetDirty(holderObject); } } } m_SerializedObject.ApplyModifiedProperties(); } }
static IRigEffectorOverlay FetchOrCreateEffectorOverlay() { Transform[] transforms = Selection.GetTransforms(SelectionMode.ExcludePrefab | SelectionMode.Editable); var inspectedEffectors = new List <ScriptableObject>(); for (int i = 0; i < s_ActiveEffectors.Count; ++i) { var effector = s_ActiveEffectors[i]; if (effector != null && effector.transform != null) { if (Selection.Contains(effector.transform) || Selection.Contains(effector.transform.gameObject)) { inspectedEffectors.Add(s_ActiveEffectors[i]); } } } if (inspectedEffectors.Count > 0) { var overlay = new RigEffectorOverlay(); overlay.Initialize(new SerializedObject(inspectedEffectors.ToArray())); s_ActiveOverlay = overlay; } else { RigEffectorWizard wizard = null; foreach (var transform in transforms) { RigBuilder rigBuilder = EditorHelper.GetClosestComponent <RigBuilder>(transform); Rig rig = EditorHelper.GetClosestComponent <Rig>(transform, (rigBuilder != null) ? rigBuilder.transform : null); IRigEffectorHolder holder = (rig != null) ? (IRigEffectorHolder)rig : (IRigEffectorHolder)rigBuilder; if (holder == null) { continue; } if (wizard == null) { wizard = new RigEffectorWizard(); } wizard.Add(holder, transform); } if (wizard != null) { s_ActiveOverlay = wizard; } else { s_ActiveOverlay = null; } } s_ActiveSelection = transforms; return(s_ActiveOverlay); }