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;
            }
        }
Esempio n. 3
0
        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;
            }
        }
Esempio n. 4
0
        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;
                            }
                        }
                    }
                }
            }
        }