void SetTopMostCurve(DoubleCurve doubleCurve) { int topMostCurveID; if (m_CurveEditor.GetTopMostCurveID(out topMostCurveID)) { for (int j = 0; j < m_AddedCurves.Count; ++j) { CurveData cd = m_AddedCurves[j]; if (cd.m_MaxId == topMostCurveID || cd.m_MinId == topMostCurveID) { if (doubleCurve.signedRange == cd.m_SignedRange) { if (cd.m_MaxId > 0) { SetCurve(m_CurveEditor.GetCurveWrapperFromID(cd.m_MaxId), doubleCurve.maxCurve); } if (cd.m_MinId > 0) { SetCurve(m_CurveEditor.GetCurveWrapperFromID(cd.m_MinId), doubleCurve.minCurve); } } else { Debug.LogWarning("Cannot assign a curves with different signed range"); } } } } }
public void CheckCurveChangedExternally() { CurveWrapper cw = m_Editor.GetCurveWrapperFromID(0); if (m_WidthCurve != null) { AnimationCurve propCurve = m_WidthCurve.animationCurveValue; if ((cw == null) != m_WidthCurve.hasMultipleDifferentValues) { m_Refresh = true; } else if (cw != null) { if (cw.curve.length == 0) { m_Refresh = true; } else if (propCurve.length >= 1 && propCurve.keys[0].value != cw.curve.keys[0].value) { m_Refresh = true; } } } else if (cw != null) { m_Refresh = true; } }
public void CheckCurveChangedExternally() { if (Event.current.type != EventType.Repaint) { return; } CurveWrapper cw = m_Editor.GetCurveWrapperFromID(0); if (m_WidthCurve != null) { AnimationCurve propCurve = m_WidthCurve.animationCurveValue; if ((cw == null) != m_WidthCurve.hasMultipleDifferentValues) { m_Refresh = true; } else if (cw != null) { if (cw.curve.length == 0 || cw.curve.length != propCurve.length) { m_Refresh = true; } else { var curveKeys = cw.curve.keys; var propKeys = propCurve.keys; for (int i = 0; i < curveKeys.Length; i++) { if (!propKeys[i].Equals(curveKeys[i])) { m_Refresh = true; break; } } } } } else if (cw != null) { m_Refresh = true; } }
private void Audio3DGUI() { EditorGUILayout.Slider(m_DopplerLevel, 0.0f, 5.0f, Styles.dopplerLevelLabel); // Spread control AnimProp(Styles.spreadLabel, m_AudioCurves[kSpreadCurveID].curveProp, 0.0f, 360.0f, true); // Rolloff mode if (m_RolloffMode.hasMultipleDifferentValues || (m_RolloffMode.enumValueIndex == (int)AudioRolloffMode.Custom && m_AudioCurves[kRolloffCurveID].curveProp.hasMultipleDifferentValues) ) { EditorGUILayout.TargetChoiceField(m_AudioCurves[kRolloffCurveID].curveProp, Styles.rolloffLabel, SetRolloffToTarget); } else { EditorGUILayout.PropertyField(m_RolloffMode, Styles.rolloffLabel); if ((AudioRolloffMode)m_RolloffMode.enumValueIndex != AudioRolloffMode.Custom) { EditorGUI.BeginChangeCheck(); EditorGUILayout.PropertyField(m_MinDistance); if (EditorGUI.EndChangeCheck()) { m_MinDistance.floatValue = Mathf.Clamp(m_MinDistance.floatValue, 0, m_MaxDistance.floatValue / 1.01f); } } else { using (new EditorGUI.DisabledScope(true)) { EditorGUILayout.LabelField(m_MinDistance.displayName, Styles.controlledByCurveLabel); } } } // Max distance control EditorGUI.BeginChangeCheck(); EditorGUILayout.PropertyField(m_MaxDistance); if (EditorGUI.EndChangeCheck()) { m_MaxDistance.floatValue = Mathf.Min(Mathf.Max(Mathf.Max(m_MaxDistance.floatValue, 0.01f), m_MinDistance.floatValue * 1.01f), 1000000.0f); } Rect r = GUILayoutUtility.GetAspectRect(1.333f, GUI.skin.textField); r.xMin += EditorGUI.indent; if (Event.current.type != EventType.Layout && Event.current.type != EventType.Used) { m_CurveEditor.rect = new Rect(r.x, r.y, r.width, r.height); } // Draw Curve Editor UpdateWrappersAndLegend(); GUI.Label(m_CurveEditor.drawRect, GUIContent.none, "TextField"); m_CurveEditor.hRangeLocked = Event.current.shift; m_CurveEditor.vRangeLocked = EditorGUI.actionKey; m_CurveEditor.OnGUI(); // Draw current listener position if (targets.Length == 1) { AudioSource t = (AudioSource)target; AudioListener audioListener = (AudioListener)FindObjectOfType(typeof(AudioListener)); if (audioListener != null) { float distToListener = (AudioUtil.GetListenerPos() - t.transform.position).magnitude; DrawLabel("Listener", distToListener, r); } } // Draw legend DrawLegend(); if (!m_CurveEditor.InLiveEdit()) { // Check if any of the curves changed foreach (AudioCurveWrapper audioCurve in m_AudioCurves) { if ((m_CurveEditor.GetCurveWrapperFromID(audioCurve.id) != null) && (m_CurveEditor.GetCurveWrapperFromID(audioCurve.id).changed)) { AnimationCurve changedCurve = m_CurveEditor.GetCurveWrapperFromID(audioCurve.id).curve; // Never save a curve with no keys if (changedCurve.length > 0) { audioCurve.curveProp.animationCurveValue = changedCurve; m_CurveEditor.GetCurveWrapperFromID(audioCurve.id).changed = false; // Volume curve special handling if (audioCurve.type == AudioCurveType.Volume) { m_RolloffMode.enumValueIndex = (int)AudioRolloffMode.Custom; } } } } } }