Beispiel #1
0
                public override void Initialise(GPUAnimatorRenderer renderer)
                {
                    base.Initialise(renderer);

                    _skinnedMeshRenderer     = GameObjectUtils.GetComponent <SkinnedMeshRenderer>(this.gameObject, true);
                    _animationStates         = new GPUAnimationState[0];
                    _primaryAnimationState   = null;
                    _secondaryAnimationState = null;

                    GPUAnimations animations = _renderer._animations.GetAnimations();

                    _animationStates = new GPUAnimationState[animations._animations.Length];

                    for (int i = 0; i < animations._animations.Length; i++)
                    {
                        _animationStates[i] = new GPUAnimationState(this, animations._animations[i]);
                    }

                    _activeAnimationStates = new List <GPUAnimationState>(animations._animations.Length + 1);

                    _primaryAnimationState   = GetAnimationState(_defaultAnimation);
                    _secondaryAnimationState = null;

                    if (_primaryAnimationState != null && _playAutomatically)
                    {
                        _primaryAnimationState.Enabled = true;
                        _primaryAnimationState.Weight  = 1.0f;

                        if (_wrapMode != WrapMode.Default)
                        {
                            _primaryAnimationState.WrapMode = _wrapMode;
                        }
                    }
                }
Beispiel #2
0
                public GPUAnimationState CrossFade(string animation, float fadeLength = 0.3f, PlayMode mode = PlayMode.StopSameLayer, WrapMode wrapMode = WrapMode.Default)
                {
                    if (fadeLength > 0.0f)
                    {
                        ClearQueuedAnimation();

                        GPUAnimationState animState = GetAnimationState(animation);

                        if (animState != null)
                        {
                            _crossFadedAnimation = new GPUAnimationState(this, animState.GetAnimation())
                            {
                                Enabled  = true,
                                Weight   = 0.0f,
                                Speed    = animState.Speed,
                                WrapMode = wrapMode == WrapMode.Default ? animState.WrapMode : wrapMode
                            };

                            _crossFadedAnimation.FadeWeightTo(1.0f, fadeLength);
                        }
                        else
                        {
                            _crossFadedAnimation = null;
                        }
                    }
                    else
                    {
                        Play(animation, mode, wrapMode);
                    }

                    return(_crossFadedAnimation);
                }
Beispiel #3
0
                public bool Play(string animation, PlayMode mode = PlayMode.StopSameLayer, WrapMode wrapMode = WrapMode.Default)
                {
                    Stop();

                    GPUAnimationState animState = GetAnimationState(animation);

                    if (animState != null)
                    {
                        animState.Enabled = true;
                        animState.Time    = 0.0f;
                        animState.Weight  = 1.0f;

                        if (wrapMode != WrapMode.Default)
                        {
                            animState.WrapMode = wrapMode;
                        }
                        else if (_wrapMode != WrapMode.Default)
                        {
                            animState.WrapMode = _wrapMode;
                        }

                        UpdatePrimaryAndSecondaryStates();

                        return(true);
                    }
                    else
                    {
                        return(false);
                    }
                }
Beispiel #4
0
                private void ClearCrossFadedAnimation()
                {
                    if (_crossFadedAnimation != null && _crossFadedAnimation.Enabled)
                    {
                        _activeAnimationStates.Remove(_crossFadedAnimation);
                    }

                    _crossFadedAnimation = null;
                }
Beispiel #5
0
                public void Rewind(string animation)
                {
                    GPUAnimationState state = GetAnimationState(animation);

                    if (state != null)
                    {
                        state.Time = 0.0f;
                    }
                }
Beispiel #6
0
                public void Blend(string animation, float targetWeight = 1.0f, float fadeLength = 0.3f)
                {
                    GPUAnimationState state = GetAnimationState(animation);

                    if (state != null)
                    {
                        state.FadeWeightTo(targetWeight, fadeLength);
                    }
                }
Beispiel #7
0
                public void Stop(string animation)
                {
                    GPUAnimationState state = GetAnimationState(animation);

                    if (state != null)
                    {
                        state.Enabled = false;
                        UpdatePrimaryAndSecondaryStates();
                    }
                }
Beispiel #8
0
 internal void OnStateEnabledChanged(GPUAnimationState state, bool enabled)
 {
     if (enabled)
     {
         _activeAnimationStates.Add(state);
     }
     else
     {
         _activeAnimationStates.Remove(state);
     }
 }
Beispiel #9
0
                public bool IsPlaying(string animation)
                {
                    GPUAnimationState state = this[animation];

                    if (state != null)
                    {
                        return(state.Enabled);
                    }

                    return(false);
                }
Beispiel #10
0
                public void Stop()
                {
                    for (int i = 0; i < _animationStates.Length; i++)
                    {
                        _animationStates[i].Enabled = false;
                    }

                    _activeAnimationStates.Clear();

                    _primaryAnimationState   = null;
                    _secondaryAnimationState = null;
                    _queuedAnimation         = string.Empty;
                    _crossFadedAnimation     = null;
                }
Beispiel #11
0
                public GPUAnimationState CrossFadeQueued(string animation, float fadeLength = 0.3f, QueueMode queue = QueueMode.CompleteOthers, PlayMode mode = PlayMode.StopSameLayer, WrapMode wrapMode = WrapMode.Default)
                {
                    ClearQueuedAnimation();

                    _queuedAnimation                = animation;
                    _queuedAnimationMode            = queue;
                    _queuedAnimationPlayMode        = mode;
                    _queuedAnimationWrapMode        = wrapMode;
                    _queuedAnimationCrossFadeLength = fadeLength;

                    _crossFadedAnimation = null;

                    //TO DO! return valid state??
                    return(_crossFadedAnimation);
                }
Beispiel #12
0
                private void UpdatePrimaryAndSecondaryStates()
                {
                    _primaryAnimationState   = _crossFadedAnimation;
                    _secondaryAnimationState = null;

                    foreach (GPUAnimationState state in _activeAnimationStates)
                    {
                        if (_crossFadedAnimation == null && (_primaryAnimationState == null || state.Weight > _primaryAnimationState.Weight))
                        {
                            _secondaryAnimationState = _primaryAnimationState;
                            _primaryAnimationState   = state;
                        }
                        else if (_secondaryAnimationState == null || state.Weight > _secondaryAnimationState.Weight)
                        {
                            _secondaryAnimationState = state;
                        }
                    }
                }
Beispiel #13
0
                private void UpdateAnimations(float deltaTime)
                {
                    for (int i = 0; i < _activeAnimationStates.Count;)
                    {
                        GPUAnimationState state = _activeAnimationStates[i];
                        state.Update(deltaTime, this.gameObject);

                        if (state.Enabled)
                        {
                            i++;
                        }
                        else
                        {
                            _activeAnimationStates.RemoveAt(i);
                        }
                    }

                    UpdateQueuedAnimation();
                    UpdateCrossFadedAnimation();
                }
Beispiel #14
0
                private void UpdateCrossFadedAnimation()
                {
                    if (_crossFadedAnimation != null && _crossFadedAnimation.Weight >= 1.0f)
                    {
                        for (int i = 0; i < _animationStates.Length; i++)
                        {
                            if (_animationStates[i].Name == _crossFadedAnimation.Name)
                            {
                                _animationStates[i].Time     = _crossFadedAnimation.Time;
                                _animationStates[i].Speed    = _crossFadedAnimation.Speed;
                                _animationStates[i].WrapMode = _crossFadedAnimation.WrapMode;
                                _animationStates[i].Enabled  = _crossFadedAnimation.Enabled;
                                _animationStates[i].Weight   = 1.0f;
                            }
                            else
                            {
                                _animationStates[i].Enabled = false;
                            }
                        }

                        _activeAnimationStates.Remove(_crossFadedAnimation);
                        _crossFadedAnimation = null;
                    }
                }