コード例 #1
0
ファイル: EnvelopeWindow.cs プロジェクト: TechniPoet/WarBeat
    void SetupHandles()
    {
        EnvelopeHandle.HandleRadius = HANDLE_RADIUS;
        EnvelopeHandle.LeftMargin   = LEFT_MARGIN;

        _handles = new EnvelopeHandle[4];

        _handles[0] = new EnvelopeHandle(ControlType.AttackStart, HEIGHT_BOTTOM);
        _handles[1] = new EnvelopeHandle(ControlType.AttackEnd, HEIGHT_TOP);
        _handles[2] = new EnvelopeHandle(ControlType.ReleaseStart, HEIGHT_TOP);
        _handles[3] = new EnvelopeHandle(ControlType.ReleaseEnd, HEIGHT_BOTTOM);

        _handles[0].SetClamps(null, _handles[1]);
        _handles[1].SetClamps(_handles[0], _handles[2]);
        _handles[2].SetClamps(_handles[1], _handles[3]);
        _handles[3].SetClamps(_handles[2], null);

        _posHandle = new EnvelopeHandle(ControlType.Position, HEIGHT_BOTTOM + 10f);

        _linePoints = new Vector3[4];

        this.maxSize = new Vector2(4000f, 300f);
        this.minSize = new Vector2(420f, 300f);
    }
コード例 #2
0
ファイル: EnvelopeWindow.cs プロジェクト: nu1/G-Audio
 public void SetClamps( EnvelopeHandle leftClamp, EnvelopeHandle rightClamp )
 {
     _leftClamp 		= leftClamp;
     _rightClamp 	= rightClamp;
 }
コード例 #3
0
ファイル: EnvelopeWindow.cs プロジェクト: nu1/G-Audio
    void SetupHandles()
    {
        EnvelopeHandle.HandleRadius = HANDLE_RADIUS;
        EnvelopeHandle.LeftMargin   = LEFT_MARGIN;

        _handles = new EnvelopeHandle[ 4 ];

        _handles[ 0 ] = new EnvelopeHandle( ControlType.AttackStart, 	HEIGHT_BOTTOM 	);
        _handles[ 1 ] = new EnvelopeHandle( ControlType.AttackEnd, 		HEIGHT_TOP 		);
        _handles[ 2 ] = new EnvelopeHandle( ControlType.ReleaseStart, 	HEIGHT_TOP 		);
        _handles[ 3 ] = new EnvelopeHandle( ControlType.ReleaseEnd,		HEIGHT_BOTTOM 	);

        _handles[ 0 ].SetClamps( 		  null, _handles[ 1 ] 	);
        _handles[ 1 ].SetClamps( _handles[ 0 ], _handles[ 2 ] 	);
        _handles[ 2 ].SetClamps( _handles[ 1 ], _handles[ 3 ] 	);
        _handles[ 3 ].SetClamps( _handles[ 2 ],  null 			);

        _posHandle = new EnvelopeHandle( ControlType.Position, HEIGHT_BOTTOM + 10f );

        _linePoints = new Vector3[ 4 ];

        this.maxSize = new Vector2( 4000f, 300f );
        this.minSize = new Vector2( 420f, 300f );
    }
コード例 #4
0
ファイル: EnvelopeWindow.cs プロジェクト: nu1/G-Audio
    void OnGUI()
    {
        int i;
        bool shouldRepaint = false;

        //*************************************************************
        //******************* Zoom slider *****************************
        GUILayout.Space( 10f );
        EditorGUIUtility.labelWidth = 55f;

        int samplesPerPixel = _samplesPerPixel;

        _samplesPerPixel = EditorGUILayout.IntSlider( "Zoom: ", _samplesPerPixel, 2, 1000 );

        if( samplesPerPixel != _samplesPerPixel )
        {
            UpdateZoom();
        }

        //*************************************************************
        //******************* ScrollView  *****************************
        Vector2 prevScroll = _scrollPos;

        _scrollPos = GUI.BeginScrollView( new Rect( 0f, 0f, this.position.width, this.position.height ), _scrollPos, new Rect( 0, 0, _scrollViewWidth ,200f ));

        if( prevScroll != _scrollPos )
            shouldRepaint = true;

        //*************************************************************
        //******************* Mouse Events ****************************
        if( Event.current.isMouse )
        {
            EventType eventType = Event.current.type;

            Vector2 mousePos = Event.current.mousePosition;

            if( eventType == EventType.MouseDown )
            {
                _draggedHandle = null;
                foreach( EnvelopeHandle handle in _handles )
                {
                    if( handle.HitTest( mousePos ) )
                    {
                        _draggedHandle = handle;
                        break;
                    }
                }

                if( _draggedHandle == null && _posHandle.HitTest( mousePos ) )
                {
                    _draggedHandle = _posHandle;
                }
            }
            else if( eventType == EventType.MouseUp )
            {
                _draggedHandle = null;
            }
            else if( eventType == EventType.MouseDrag && _draggedHandle != null )
            {
                if( _draggedHandle.Control == ControlType.Position )
                {
                    int posInSamples = _draggedHandle.EvaluatePosInSamples( mousePos.x );
                    int halfLength   = _envelopeModule.Length / 2;

                    if( posInSamples - halfLength < 0 )
                    {
                        posInSamples = halfLength;
                    }
                    else if( posInSamples + halfLength > EnvelopeHandle.MaxSamples )
                    {
                        posInSamples = EnvelopeHandle.MaxSamples - halfLength;
                    }

                    _handles[ 0 ].PosInSamples = posInSamples - halfLength;
                    _handles[ 1 ].PosInSamples = _handles[ 0 ].PosInSamples + _envelopeModule.FadeIn;

                    _handles[ 3 ].PosInSamples = posInSamples + halfLength;
                    _handles[ 2 ].PosInSamples = _handles[ 3 ].PosInSamples - _envelopeModule.FadeOut;

                    _posHandle.PosInSamples = posInSamples;

                    _envelopeModule.Offset = _handles[0].PosInSamples;
                }
                else
                {
                    _draggedHandle.Drag( mousePos.x );

                    if( _draggedHandle.Control == ControlType.AttackStart )
                    {
                        _envelopeModule.Offset = _draggedHandle.PosInSamples;
                        _envelopeModule.FadeIn = _handles[ 1 ].PosInSamples - _handles[ 0 ].PosInSamples;
                        _envelopeModule.Length = _handles[ 3 ].PosInSamples - _handles[ 0 ].PosInSamples;
                        UpdatePosHandle();
                    }
                    else if( _draggedHandle.Control == ControlType.AttackEnd )
                    {
                        _envelopeModule.FadeIn = _handles[ 1 ].PosInSamples - _handles[ 0 ].PosInSamples;
                    }
                    else if( _draggedHandle.Control == ControlType.ReleaseStart )
                    {
                        _envelopeModule.FadeOut = _handles[ 3 ].PosInSamples - _handles[ 2 ].PosInSamples;
                    }
                    else //ReleaseEnd
                    {
                        _envelopeModule.FadeOut = _handles[ 3 ].PosInSamples - _handles[ 2 ].PosInSamples;
                        _envelopeModule.Length = _handles[ 3 ].PosInSamples - _handles[ 0 ].PosInSamples;
                        UpdatePosHandle();
                    }
                }

                shouldRepaint = true;
            }
        }

        //*************************************************************
        //******************* Drawing *********************************
        for( i = 0; i < 4; i++ )
        {
            _handles[ i ].DrawHandle();
        }

        _posHandle.DrawHandle();

        for( i = 0; i < 4; i++ )
        {
            _linePoints[ i ] = _handles[ i ].Position;
        }

        Handles.color = Color.blue;
        Handles.DrawAAPolyLine( 2f, _linePoints );
        Handles.color = Color.grey;
        Handles.DrawLine( _start, _end );

        GUI.EndScrollView();

        GUILayout.Space( 110f );

        //*************************************************************
        //******************* Info ************************************
        _durationUnit = ( DurationUnit )EditorGUILayout.EnumPopup( _durationUnit, GUILayout.Width( 60f ) );
        GUILayoutOption labelWidth = GUILayout.Width( 90f );

        GUILayout.BeginHorizontal();
        GUILayout.Label( "Length: " + GetLengthStringForSamples( _envelopeModule.Length ), labelWidth );
        GUILayout.Label( "Offset: " + GetLengthStringForSamples( _envelopeModule.Offset ), labelWidth );
        GUILayout.EndHorizontal();

        GUILayout.BeginHorizontal();
        GUILayout.Label( "Fade In: "  + GetLengthStringForSamples( _envelopeModule.FadeIn  ), labelWidth );
        GUILayout.Label( "Fade Out: " + GetLengthStringForSamples( _envelopeModule.FadeOut ), labelWidth );
        GUILayout.EndHorizontal();

        GUILayout.Space( 10f );
        _envelopeModule.Pulse = ( PulseModule )EditorGUILayout.ObjectField( _envelopeModule.Pulse, typeof( PulseModule ), true, GUILayout.Width( 130f ) );

        GUI.enabled = _envelopeModule.Pulse != null;

        _envelopeModule.MapLengthToPulse = GUILayout.Toggle( _envelopeModule.MapLengthToPulse, "Map Length To Pulse", GUILayout.ExpandWidth( false ) );

        GUI.enabled = true;
        if( _envelopeModule.Pulse != null && _envelopeModule.MapLengthToPulse )
        {
            GUILayout.Label( "Length to Pulse ratio: " + _envelopeModule.LengthToPulseRatio.ToString( "0.00" ) );
            _envelopeModule.LengthToPulseRatio = GUILayout.HorizontalSlider( _envelopeModule.LengthToPulseRatio, .1f, 8f, GUILayout.Width( 190f ) );
        }

        //************************************************************************************
        //*********************** ObjectPicker Messages Handling *****************************

        if (Event.current.commandName == "ObjectSelectorUpdated")
        {
            GATSoundBank bank = EditorGUIUtility.GetObjectPickerObject() as GATSoundBank;

            if( bank != null )
            {
                _selectedBankMax = bank.SizeOfLongestSample();
                _selectedBankMin = bank.SizeOfShortestSample();

                shouldRepaint = true;
                _selectedBank = bank;
            }
        }

        //************************************************************************************
        //*********************** SoundBank Clamping *****************************
        GUILayout.BeginArea( new Rect( 200f, 130f, 200f, 150f ) );
        GUILayout.Label( "Max Length: " + GetLengthStringForSamples( EnvelopeHandle.MaxSamples ) );

        EditorGUIUtility.labelWidth = 70f;
        _selectedBank = ( GATSoundBank )EditorGUILayout.ObjectField( "SoundBank:", _selectedBank, typeof( GATSoundBank ), false );

        if( _selectedBank != null )
        {
            if( GUILayout.Button( "Shortest sample:" + GetLengthStringForSamples( _selectedBankMin ), GUILayout.Width( 140f ) ) )
            {
                EnvelopeHandle.MaxSamples = _selectedBankMin;
                UpdateZoom();
            }

            if( GUILayout.Button( "Longest sample:" + GetLengthStringForSamples( _selectedBankMax ), GUILayout.Width( 140f ) ) )
            {
                EnvelopeHandle.MaxSamples = _selectedBankMax;
                UpdateZoom();
            }
        }
        else
        {
            EditorGUILayout.HelpBox( "Select a sound bank to easily map this envelope's max length to the bank's shortest or longest sample.", MessageType.Info );
        }

        //************************************************************************************
        //*********************** Reverse and Normalize **************************************

        _envelopeModule.Reverse = GUILayout.Toggle( _envelopeModule.Reverse, "Reverse" );
        GUILayout.BeginHorizontal();
        _envelopeModule.Normalize = GUILayout.Toggle( _envelopeModule.Normalize, "Normalize", GUILayout.Width( 75f ) );
        if( _envelopeModule.Normalize )
        {
            GUILayout.Label( _envelopeModule.NormalizeValue.ToString("0.00") );
            GUILayout.EndHorizontal();
            _envelopeModule.NormalizeValue = GUILayout.HorizontalSlider( _envelopeModule.NormalizeValue, 0f, 1f );
        }
        else GUILayout.EndHorizontal();

        GUILayout.EndArea();

        if( shouldRepaint )
            Repaint();
    }
コード例 #5
0
ファイル: EnvelopeWindow.cs プロジェクト: TechniPoet/WarBeat
 public void SetClamps(EnvelopeHandle leftClamp, EnvelopeHandle rightClamp)
 {
     _leftClamp  = leftClamp;
     _rightClamp = rightClamp;
 }
コード例 #6
0
ファイル: EnvelopeWindow.cs プロジェクト: TechniPoet/WarBeat
    void OnGUI()
    {
        int  i;
        bool shouldRepaint = false;

        //*************************************************************
        //******************* Zoom slider *****************************
        GUILayout.Space(10f);
        EditorGUIUtility.labelWidth = 55f;

        int samplesPerPixel = _samplesPerPixel;

        _samplesPerPixel = EditorGUILayout.IntSlider("Zoom: ", _samplesPerPixel, 2, 1000);

        if (samplesPerPixel != _samplesPerPixel)
        {
            UpdateZoom();
        }

        //*************************************************************
        //******************* ScrollView  *****************************
        Vector2 prevScroll = _scrollPos;

        _scrollPos = GUI.BeginScrollView(new Rect(0f, 0f, this.position.width, this.position.height), _scrollPos, new Rect(0, 0, _scrollViewWidth, 200f));

        if (prevScroll != _scrollPos)
        {
            shouldRepaint = true;
        }

        //*************************************************************
        //******************* Mouse Events ****************************
        if (Event.current.isMouse)
        {
            EventType eventType = Event.current.type;

            Vector2 mousePos = Event.current.mousePosition;

            if (eventType == EventType.MouseDown)
            {
                _draggedHandle = null;
                foreach (EnvelopeHandle handle in _handles)
                {
                    if (handle.HitTest(mousePos))
                    {
                        _draggedHandle = handle;
                        break;
                    }
                }

                if (_draggedHandle == null && _posHandle.HitTest(mousePos))
                {
                    _draggedHandle = _posHandle;
                }
            }
            else if (eventType == EventType.MouseUp)
            {
                _draggedHandle = null;
            }
            else if (eventType == EventType.MouseDrag && _draggedHandle != null)
            {
                if (_draggedHandle.Control == ControlType.Position)
                {
                    int posInSamples = _draggedHandle.EvaluatePosInSamples(mousePos.x);
                    int halfLength   = _envelopeModule.Length / 2;

                    if (posInSamples - halfLength < 0)
                    {
                        posInSamples = halfLength;
                    }
                    else if (posInSamples + halfLength > EnvelopeHandle.MaxSamples)
                    {
                        posInSamples = EnvelopeHandle.MaxSamples - halfLength;
                    }

                    _handles[0].PosInSamples = posInSamples - halfLength;
                    _handles[1].PosInSamples = _handles[0].PosInSamples + _envelopeModule.FadeIn;

                    _handles[3].PosInSamples = posInSamples + halfLength;
                    _handles[2].PosInSamples = _handles[3].PosInSamples - _envelopeModule.FadeOut;

                    _posHandle.PosInSamples = posInSamples;

                    _envelopeModule.Offset = _handles[0].PosInSamples;
                }
                else
                {
                    _draggedHandle.Drag(mousePos.x);

                    if (_draggedHandle.Control == ControlType.AttackStart)
                    {
                        _envelopeModule.Offset = _draggedHandle.PosInSamples;
                        _envelopeModule.FadeIn = _handles[1].PosInSamples - _handles[0].PosInSamples;
                        _envelopeModule.Length = _handles[3].PosInSamples - _handles[0].PosInSamples;
                        UpdatePosHandle();
                    }
                    else if (_draggedHandle.Control == ControlType.AttackEnd)
                    {
                        _envelopeModule.FadeIn = _handles[1].PosInSamples - _handles[0].PosInSamples;
                    }
                    else if (_draggedHandle.Control == ControlType.ReleaseStart)
                    {
                        _envelopeModule.FadeOut = _handles[3].PosInSamples - _handles[2].PosInSamples;
                    }
                    else                     //ReleaseEnd
                    {
                        _envelopeModule.FadeOut = _handles[3].PosInSamples - _handles[2].PosInSamples;
                        _envelopeModule.Length  = _handles[3].PosInSamples - _handles[0].PosInSamples;
                        UpdatePosHandle();
                    }
                }

                shouldRepaint = true;
            }
        }

        //*************************************************************
        //******************* Drawing *********************************
        for (i = 0; i < 4; i++)
        {
            _handles[i].DrawHandle();
        }

        _posHandle.DrawHandle();

        for (i = 0; i < 4; i++)
        {
            _linePoints[i] = _handles[i].Position;
        }

        Handles.color = Color.blue;
        Handles.DrawAAPolyLine(2f, _linePoints);
        Handles.color = Color.grey;
        Handles.DrawLine(_start, _end);

        GUI.EndScrollView();

        GUILayout.Space(110f);

        //*************************************************************
        //******************* Info ************************************
        _durationUnit = ( DurationUnit )EditorGUILayout.EnumPopup(_durationUnit, GUILayout.Width(60f));
        GUILayoutOption labelWidth = GUILayout.Width(90f);

        GUILayout.BeginHorizontal();
        GUILayout.Label("Length: " + GetLengthStringForSamples(_envelopeModule.Length), labelWidth);
        GUILayout.Label("Offset: " + GetLengthStringForSamples(_envelopeModule.Offset), labelWidth);
        GUILayout.EndHorizontal();

        GUILayout.BeginHorizontal();
        GUILayout.Label("Fade In: " + GetLengthStringForSamples(_envelopeModule.FadeIn), labelWidth);
        GUILayout.Label("Fade Out: " + GetLengthStringForSamples(_envelopeModule.FadeOut), labelWidth);
        GUILayout.EndHorizontal();

        GUILayout.Space(10f);
        _envelopeModule.Pulse = ( PulseModule )EditorGUILayout.ObjectField(_envelopeModule.Pulse, typeof(PulseModule), true, GUILayout.Width(130f));

        GUI.enabled = _envelopeModule.Pulse != null;

        _envelopeModule.MapLengthToPulse = GUILayout.Toggle(_envelopeModule.MapLengthToPulse, "Map Length To Pulse", GUILayout.ExpandWidth(false));

        GUI.enabled = true;
        if (_envelopeModule.Pulse != null && _envelopeModule.MapLengthToPulse)
        {
            GUILayout.Label("Length to Pulse ratio: " + _envelopeModule.LengthToPulseRatio.ToString("0.00"));
            _envelopeModule.LengthToPulseRatio = GUILayout.HorizontalSlider(_envelopeModule.LengthToPulseRatio, .1f, 8f, GUILayout.Width(190f));
        }

        //************************************************************************************
        //*********************** ObjectPicker Messages Handling *****************************

        if (Event.current.commandName == "ObjectSelectorUpdated")
        {
            GATSoundBank bank = EditorGUIUtility.GetObjectPickerObject() as GATSoundBank;

            if (bank != null)
            {
                _selectedBankMax = bank.SizeOfLongestSample();
                _selectedBankMin = bank.SizeOfShortestSample();

                shouldRepaint = true;
                _selectedBank = bank;
            }
        }

        //************************************************************************************
        //*********************** SoundBank Clamping *****************************
        GUILayout.BeginArea(new Rect(200f, 130f, 200f, 150f));
        GUILayout.Label("Max Length: " + GetLengthStringForSamples(EnvelopeHandle.MaxSamples));

        EditorGUIUtility.labelWidth = 70f;
        _selectedBank = ( GATSoundBank )EditorGUILayout.ObjectField("SoundBank:", _selectedBank, typeof(GATSoundBank), false);

        if (_selectedBank != null)
        {
            if (GUILayout.Button("Shortest sample:" + GetLengthStringForSamples(_selectedBankMin), GUILayout.Width(140f)))
            {
                EnvelopeHandle.MaxSamples = _selectedBankMin;
                UpdateZoom();
            }

            if (GUILayout.Button("Longest sample:" + GetLengthStringForSamples(_selectedBankMax), GUILayout.Width(140f)))
            {
                EnvelopeHandle.MaxSamples = _selectedBankMax;
                UpdateZoom();
            }
        }
        else
        {
            EditorGUILayout.HelpBox("Select a sound bank to easily map this envelope's max length to the bank's shortest or longest sample.", MessageType.Info);
        }

        //************************************************************************************
        //*********************** Reverse and Normalize **************************************

        _envelopeModule.Reverse = GUILayout.Toggle(_envelopeModule.Reverse, "Reverse");
        GUILayout.BeginHorizontal();
        _envelopeModule.Normalize = GUILayout.Toggle(_envelopeModule.Normalize, "Normalize", GUILayout.Width(75f));
        if (_envelopeModule.Normalize)
        {
            GUILayout.Label(_envelopeModule.NormalizeValue.ToString("0.00"));
            GUILayout.EndHorizontal();
            _envelopeModule.NormalizeValue = GUILayout.HorizontalSlider(_envelopeModule.NormalizeValue, 0f, 1f);
        }
        else
        {
            GUILayout.EndHorizontal();
        }


        GUILayout.EndArea();

        if (shouldRepaint)
        {
            Repaint();
        }
    }