Exemplo n.º 1
0
        public void Initialize(Controller controller)
        {
            Controller = controller;
            Anim       = GetComponent <AnimancerComponent>();

            // Set the upper body layer
            Anim.SetLayerMask(1, UpperbodyMask);
            Anim.GetLayer(1).SetWeight(1);
            // Set additive layer
            Anim.SetLayerMask(2, AdditiveMask);
            Anim.GetLayer(2).SetWeight(1);
            Anim.GetLayer(2).IsAdditive = true;

            // Setup sound source
            foreach (AudioSource source in transform.root.GetComponentsInChildren <AudioSource>())
            {
                source.spatialBlend = Networker.IsOwner ? 0.0f : 1.0f;
            }
        }
Exemplo n.º 2
0
        /************************************************************************************************************************/

        public void PerformAction()
        {
            var state = _BasicAnimancer.CrossFade(_Action);

            state.OnEnd = () => _BasicAnimancer.CrossFade(_IsRunning ? _Run : _Idle);

            const float FadeDuration = AnimancerPlayable.DefaultFadeDuration;

            // When running, perform the action on the ActionLayer (1) then fade that layer back out.
            if (_IsRunning)
            {
                state       = _LayeredAnimancer.CrossFade(_Action, FadeDuration, ActionLayer);
                state.OnEnd = () => _LayeredAnimancer.GetLayer(ActionLayer).StartFade(0);
            }
            else// Otherwise perform the action on the BaseLayer (0) then return to idle.
            {
                state       = _LayeredAnimancer.CrossFade(_Action, FadeDuration, BaseLayer);
                state.OnEnd = () => _LayeredAnimancer.CrossFade(_Idle);
            }
        }
Exemplo n.º 3
0
        /************************************************************************************************************************/

        private void Awake()
        {
            // Enable the OnAnimatorIK message.
            _Animancer.GetLayer(0).ApplyAnimatorIK = true;
        }
Exemplo n.º 4
0
        public void HandleAnimations()
        {
            if (Networker == null)
            {
                return;
            }
            // We set these variables here so we can access them at any time in another script
            // It's basically caching them so things can be a bit more performant
            Velocity                = Networker.GetVelocity();
            MoveDirectionXZ         = new Vector3(Velocity.x, 0, Velocity.z);
            MoveDirectionXZRelative = transform.InverseTransformDirection(new Vector3(Velocity.x, 0, Velocity.z));
            MoveSpeed               = Networker.GetMoveSpeed();

            // Upperbody stuff
            if (Networker.b1.DrawingWeapon)
            {
                if (!Anim.IsPlaying(Weapon.DrawWeapon))
                {
                    // Set layer weight
                    Anim.GetLayer(1).SetWeight(1);

                    Anim.Stop(Weapon.ReloadWeapon);
                    Anim.CrossFade(Weapon.ReloadWeapon, 0.1f, 1);
                }
            }
            else if (Networker.b1.Reloading)
            {
                if (!Anim.IsPlaying(Weapon.ReloadWeapon))
                {
                    // Set layer weight
                    Anim.GetLayer(1).SetWeight(1);

                    Anim.Stop(Weapon.ReloadWeapon);
                    Anim.CrossFade(Weapon.ReloadWeapon, 0.2f, 1);
                }
            }
            else if ((Networker.b1.Attacking || Networker.b1.Aiming) && Controller.ActiveWeapon.AimToCamera)
            {
                // Set layer weight
                Anim.GetLayer(1).SetWeight(1);

                var state = (LinearMixerState)Anim.Transition(Weapon.Aiming, 1);
                state.Parameter = (float)Networker.nv_Pitch.Value / 100;
            }
            else if (Networker.b1.Attacking && !Controller.ActiveWeapon.AimToCamera)
            {
                foreach (AttackAnim attackAnim in Weapon.Attack.Attacking)
                {
                    if (attackAnim.AttackNumber != Networker.nv_AttackNumber.Value)
                    {
                        continue;
                    }
                    if (attackAnim.UseFullbody)
                    {
                        break;
                    }

                    if (!Anim.IsPlaying(attackAnim.Animation))
                    {
                        // Set layer weight
                        Anim.GetLayer(1).SetWeight(1);

                        Anim.Stop(attackAnim.Animation);
                        Anim.CrossFade(attackAnim.Animation, 0.15f, 1);
                    }
                    break;
                }
            }
            else if (Networker.b1.Aiming && !Controller.ActiveWeapon.AimToCamera)
            {
                // Set layer weight
                Anim.GetLayer(1).SetWeight(1);

                var state = (LinearMixerState)Anim.Transition(Weapon.Aiming, 1);
                state.Parameter = 0;
            }
            else
            {
                // Set layer weight
                Anim.GetLayer(1).StartFade(0, 0.15f);
            }

            // Lowerbody stuff
            if (Networker.b1.Attacking || Networker.b1.Aiming)
            {
                if (!Controller.ActiveWeapon.AimToCamera)
                {
                    if (Networker.b1.Aiming)
                    {
                        DoBasicMoveLocomotion();
                    }
                    else
                    {
                        foreach (AttackAnim attackAnim in Weapon.Attack.Attacking)
                        {
                            if (attackAnim.AttackNumber != Networker.nv_AttackNumber.Value)
                            {
                                continue;
                            }

                            transform.localRotation = Quaternion.Lerp(transform.localRotation, Quaternion.Euler(0, 0, 0), 18 * Time.deltaTime);
                            if (!attackAnim.UseFullbody)
                            {
                                DoBasicMoveLocomotion();
                                break;
                            }

                            if (!Anim.IsPlaying(attackAnim.Animation))
                            {
                                Anim.GetLayer(1).SetWeight(0);
                                Anim.Stop(attackAnim.Animation);
                                Anim.CrossFade(attackAnim.Animation, 0.15f);
                            }
                            break;
                        }
                    }
                }
                else if (Controller.ActiveWeapon.AimToCamera)
                {
                    DoBasicMoveLocomotion();

                    Vector3    direction    = new Vector3(Networker.nv_AimPositionX.Value / 10, Networker.nv_AimPositionY.Value / 10, Networker.nv_AimPositionZ.Value / 10) - Controller.transform.position;
                    Quaternion lookRotation = Quaternion.LookRotation(direction);
                    lookRotation.x = 0;
                    lookRotation.z = 0;

                    transform.rotation = Quaternion.Lerp(transform.rotation, lookRotation, 18 * Time.deltaTime);
                }
            }
            else if (Networker.b2.IsWallJumpFrozen)
            {
                transform.localRotation = Quaternion.Lerp(transform.localRotation, Quaternion.Euler(0, 0, 0), 18 * Time.deltaTime);
                Anim.CrossFade(Base.WallJumpFrozen, 0.15f);
            }
            else if (Networker.b2.IsWallJumping && Velocity.y >= -4)
            {
                var state = (LinearMixerState)Anim.Transition(Base.WallJumping);
                if (wallJumpX > 6)
                {
                    Base.WallJumping.State.Parameter = 1;
                }
                else if (wallJumpX < -6)
                {
                    Base.WallJumping.State.Parameter = -1;
                }
                else
                {
                    Base.WallJumping.State.Parameter = 0;
                }

                transform.localRotation = Quaternion.Lerp(transform.localRotation, Quaternion.Euler(0, 0, 0), 15 * Time.deltaTime);
            }
            else if (Networker.b1.IsDodging)
            {
                if (Networker.b1.DodgeDirection && !Anim.IsPlaying(Base.DodgeRight))
                {
                    Anim.Stop(Base.DodgeRight);
                    // Moving right
                    var state = Anim.CrossFade(Base.DodgeRight, 0.2f);
                    state.Speed = 1.4f;
                }
                if (!Networker.b1.DodgeDirection && !Anim.IsPlaying(Base.DodgeLeft))
                {
                    Anim.Stop(Base.DodgeLeft);
                    // Moving left
                    var state = Anim.CrossFade(Base.DodgeLeft, 0.2f);
                    state.Speed = 1.4f;
                }

                transform.localRotation = Quaternion.Lerp(transform.localRotation, Quaternion.Euler(0, 0, 0), 15 * Time.deltaTime);
            }
            else if (Networker.b2.IsWallSlammed)
            {
                if (!Anim.IsPlaying(Base.WallSlammed))
                {
                    Anim.CrossFade(Base.WallSlammed, 0.1f);
                }

                Quaternion to = Quaternion.LookRotation(MoveDirectionXZ);
                transform.rotation = Quaternion.Lerp(transform.rotation, to, 20 * Time.deltaTime);
            }
            else if (Networker.b2.IsKnockingBack)
            {
                Anim.CrossFade(Base.KnockingBack, 0.25f);

                // Rotate
                Quaternion to = Quaternion.LookRotation(-MoveDirectionXZ);
                transform.rotation = Quaternion.Lerp(transform.rotation, to, 15 * Time.deltaTime);
            }
            else if (Networker.b2.IsFlinching)
            {
            }
            else if (Networker.b2.IsStunned)
            {
            }
            else
            {
                if (!Networker.b1.IsSprinting)
                {
                    DoBasicMoveLocomotion();
                }
                else
                {
                    transform.localRotation = Quaternion.Lerp(transform.localRotation, Quaternion.Euler(0, 0, 0), 20 * Time.deltaTime);
                    Anim.CrossFade(Weapon.Sprint, 0.2f);
                }
            }

            // Update weapon holster/attack/rest
            if (Networker.b1.IsSprinting || Networker.b1.IsDodging || Networker.b2.IsWallJumpFrozen || Networker.b2.IsWallJumping || Networker.b2.IsStunned || Networker.b2.IsKnockingBack || Networker.b2.IsWallSlammed)
            {
                Controller.ActiveWeapon.ActiveSkin.Holster();
            }
            else if (Networker.b1.Attacking || Networker.b1.Reloading)
            {
                Controller.ActiveWeapon.ActiveSkin.Hold();
            }
            else
            {
                Controller.ActiveWeapon.ActiveSkin.Hold();
            }

            // Update Final IK
            ModelRefrences.Tilt.weight = Networker.b1.IsSprinting ? 1 : 0;

            // Animation effects
            CheckDodge();
            //CheckWallJump();
            CheckJump();
            CheckLand();
            CheckSprint();

            if (Networker.b1.IsGrounded && !Networker.b1.IsDodging && !Networker.b2.IsKnockingBack && !Networker.b2.IsStunned && !Networker.b2.IsFlinching && MoveDirectionXZ.magnitude != 0.0f && !Networker.nv_Dead.Value && !(Networker.b1.Attacking && !Controller.ActiveWeapon.AimToCamera))
            {
                DoFootstep();
            }
        }