//        protected override void OnEnable()
//        {
//            base.OnEnable();
//        }
//
//        protected override void OnDestroy()
//        {
//            base.OnDestroy();
//        }

//        protected override void Init( FObject obj )
//        {
//            base.Init( obj,  );
//
//            _animEvt = (FPlayAnimationEvent)_evt;
//
//            _animTrack = (FAnimationTrack)_animEvt.GetTrack();
//
//
//        }

        private void UpdateEventFromController()
        {
            bool isBlending = AnimEvt.IsBlending();

            if (isBlending)
            {
//				FPlayAnimationEvent prevAnimEvt = (FPlayAnimationEvent)_animTrack.GetEvents()[_animEvt.GetId() - 1];

                if (_transitionToState == null)
                {
                    _transitionToState = FAnimationTrackInspector.GetTransitionTo(AnimEvt);

                    if (_transitionToState == null || _transitionToState.conditions.Length > 0)
                    {
//						if( animTrackEditor.PreviewInSceneView )
//							animTrackEditor.ClearPreview();
                        FAnimationTrackInspector.RebuildStateMachine((FAnimationTrack)TrackEditor.Track);

                        _transitionToState = FAnimationTrackInspector.GetTransitionTo(AnimEvt);
                    }
                }
//				else
//				{
//					if( _transitionToState.conditions.Length > 0 )
//					{
//						FAnimationTrackInspector.RebuildStateMachine( (FAnimationTrack)_trackEditor._track );
//					}
//				}

                if (_transitionSO == null)
                {
                    if (_transitionToState != null)
                    {
                        _transitionSO = new SerializedObject(_transitionToState);
//											SerializedProperty p = _transitionSO.GetIterator();
//
//											while( p.Next( true ) )
//												Debug.Log (p.propertyPath );
                        _transitionExitTime = _transitionSO.FindProperty("m_ExitTime");
                        _transitionDuration = _transitionSO.FindProperty("m_TransitionDuration");
                        _transitionOffset   = _transitionSO.FindProperty("m_TransitionOffset");
                    }
                }
                else if (_transitionSO.targetObject == null)
                {
                    _transitionExitTime = null;
                    _transitionDuration = null;
                    _transitionOffset   = null;
                    _transitionSO       = null;
                }
            }
            else
            {
                if (_transitionToState != null || _transitionSO != null)
                {
                    _transitionToState  = null;
                    _transitionSO       = null;
                    _transitionExitTime = null;
                    _transitionOffset   = null;
                    _transitionDuration = null;
                }
            }

            if (_transitionSO != null)
            {
                _transitionSO.Update();
                _animEvtSO.Update();

                FPlayAnimationEvent prevAnimEvt = (FPlayAnimationEvent)AnimTrack.Events[AnimEvt.GetId() - 1];

                AnimationClip prevAnimEvtClip = prevAnimEvt._animationClip;
                if (prevAnimEvtClip != null)
                {
                    float exitTimeNormalized = (prevAnimEvt.Length + prevAnimEvt._startOffset) / (prevAnimEvtClip.frameRate * prevAnimEvtClip.length);

                    if (!Mathf.Approximately(exitTimeNormalized, _transitionExitTime.floatValue))
                    {
                        _transitionExitTime.floatValue = exitTimeNormalized;
                    }

                    float blendNormalized = (_blendLength.intValue / prevAnimEvtClip.frameRate) / prevAnimEvtClip.length;

                    if (!Mathf.Approximately(blendNormalized, _transitionDuration.floatValue))
                    {
                        _blendLength.intValue = Mathf.Clamp(Mathf.RoundToInt(_transitionDuration.floatValue * prevAnimEvtClip.length * prevAnimEvtClip.frameRate), 0, AnimEvt.Length);

                        _transitionDuration.floatValue = (_blendLength.intValue / prevAnimEvtClip.frameRate) / prevAnimEvtClip.length;

                        _animEvtSO.ApplyModifiedProperties();
                    }

                    float startOffsetNorm = (_startOffset.intValue / AnimEvt._animationClip.frameRate) / AnimEvt._animationClip.length;

                    if (!Mathf.Approximately(startOffsetNorm, _transitionOffset.floatValue))
                    {
                        _startOffset.intValue        = Mathf.RoundToInt(_transitionOffset.floatValue * AnimEvt._animationClip.length * AnimEvt._animationClip.frameRate);
                        _transitionOffset.floatValue = (_startOffset.intValue / AnimEvt._animationClip.frameRate) / AnimEvt._animationClip.length;

                        _animEvtSO.ApplyModifiedProperties();
                    }
                }

                _transitionSO.ApplyModifiedProperties();
            }
        }
Exemple #2
0
        private void UpdateEventFromController()
        {
            bool isBlending = AnimEvt.IsBlending();

            if (isBlending)
            {
                if (_transitionToState == null)
                {
                    _transitionToState = FAnimationTrackInspector.GetTransitionTo(AnimEvt);

                    if (_transitionToState == null || _transitionToState.conditions.Length > 0)
                    {
                        FAnimationTrackInspector.RebuildStateMachine((FAnimationTrack)TrackEditor.Track);

                        _transitionToState = FAnimationTrackInspector.GetTransitionTo(AnimEvt);
                    }
                }

                if (_transitionSO == null)
                {
                    if (_transitionToState != null)
                    {
                        _transitionSO       = new SerializedObject(_transitionToState);
                        _transitionExitTime = _transitionSO.FindProperty("m_ExitTime");
                        _transitionDuration = _transitionSO.FindProperty("m_TransitionDuration");
                        _transitionOffset   = _transitionSO.FindProperty("m_TransitionOffset");
                    }
                }
                else if (_transitionSO.targetObject == null)
                {
                    _transitionExitTime = null;
                    _transitionDuration = null;
                    _transitionOffset   = null;
                    _transitionSO       = null;
                }
            }
            else
            {
                if (_transitionToState != null || _transitionSO != null)
                {
                    _transitionToState  = null;
                    _transitionSO       = null;
                    _transitionExitTime = null;
                    _transitionOffset   = null;
                    _transitionDuration = null;
                }
            }

            if (_transitionSO != null)
            {
                _transitionSO.Update();
                _animEvtSO.Update();

                FPlayAnimationEvent prevAnimEvt     = (FPlayAnimationEvent)AnimTrack.Events[AnimEvt.GetId() - 1];
                AnimationClip       prevAnimEvtClip = prevAnimEvt._animationClip;
                if (prevAnimEvtClip != null)
                {
                    float blendSeconds = _blendLength.intValue / prevAnimEvtClip.frameRate;

                    if (!Mathf.Approximately(blendSeconds, _transitionDuration.floatValue))
                    {
                        _transitionDuration.floatValue = blendSeconds;
                        float p = blendSeconds / prevAnimEvtClip.length;
                        _transitionExitTime.floatValue = p > 1f ? 1f : 1f - Mathf.Clamp01(blendSeconds / prevAnimEvtClip.length);
                        _animEvtSO.ApplyModifiedProperties();
                    }

                    float startOffsetNorm = _startOffset.intValue / AnimEvt._animationClip.frameRate / AnimEvt._animationClip.length;

                    if (!Mathf.Approximately(startOffsetNorm, _transitionOffset.floatValue))
                    {
                        _transitionOffset.floatValue = startOffsetNorm;
                        _animEvtSO.ApplyModifiedProperties();
                    }
                }
                _transitionSO.ApplyModifiedProperties();
            }
        }