Esempio n. 1
0
        protected float CalculateShotDeviation(AimingState aimingState, MoveState moveState,
                                               PostureState postureState, float velocityMagitude)
        {
            float recoilShotDeviation = 0;

            switch (aimingState)
            {
            case AimingState.Stand:
                recoilShotDeviation = m_RecoilGainDeviation;
                break;

            case AimingState.Aim:
                //recoilShotDeviation = m_RecoilAimGainDeviation;
                recoilShotDeviation = m_RecoilGainDeviation;
                break;

            case AimingState.ADS:
                recoilShotDeviation = m_RecoilADSGainDeviation;
                break;

            default:
                recoilShotDeviation = m_RecoilGainDeviation;
                break;
            }

            m_RecoilShotDeviation += recoilShotDeviation * m_PatternScale * m_ValueClimb;
            m_RecoilShotDeviation  = Mathf.Min(recoilShotDeviation * m_MaxLimitDeviation * m_PatternScale * m_ValueClimb, m_RecoilShotDeviation);
            return(m_RecoilShotDeviation);
        }
    private void OnEnable()
    {
        remainingTime = 0.5f;
        if (aiming == null)
        {
            aiming = GetComponent <AimingState>();
        }
        if (locomotion == null)
        {
            locomotion = GetComponent <LocomotionState>();
        }
        if (characterAnimator == null)
        {
            characterAnimator = GetComponent <Animator>();
        }
        if (verticalAimingAnimator == null)
        {
            verticalAimingAnimator = aiming.aimingRigAnimator;
        }

        #region Calculate Target Rotations
        targetRotationHorizontal  = Quaternion.LookRotation(locomotion.ProjectedCameraTransform.forward, Vector3.up);
        targetRotationHorizontal *= Quaternion.Euler(0f, 45f, 0f);

        targetRotationVertical = Mathf.Clamp((locomotion.cameraBehaviour.AngleYZ - Mathf.PI / 2) * Mathf.Rad2Deg, -55f, 55f);
        targetRotationVertical = targetRotationVertical.Remap(-55f, 55f, 0f, 1f);
        aiming.VerticalAngle   = targetRotationVertical;
        #endregion

        characterAnimator.SetBool("Aiming", true);
    }
Esempio n. 3
0
        public float CalculateCrosshair(AimingState aimingState, MoveState moveState,
                                        PostureState postureState, float velocityMagitude)
        {
            var spreadAndDeviation = CalculateSpreadAndDeviation(aimingState, moveState, postureState, velocityMagitude);

            return(spreadAndDeviation.x + spreadAndDeviation.y);
        }
Esempio n. 4
0
    private void OnEnable()
    {
        if (aiming == null)
        {
            aiming = GetComponent <AimingState>();
        }
        if (locomotion == null)
        {
            locomotion = GetComponent <LocomotionState>();
        }
        if (characterAnimator == null)
        {
            characterAnimator = GetComponent <Animator>();
        }
        if (verticalAimingAnimator == null)
        {
            verticalAimingAnimator = aiming.aimingRigAnimator;
        }
        //targetRotation = Quaternion.LookRotation(aiming.cameraRig.transform.forward, Vector3.up);

        characterAnimator.SetBool("Aiming", false);
        locomotion.cameraBehaviour.gameObject.SetActive(true);

        SendEvent("AIMING_FORWARD");
    }
Esempio n. 5
0
        /*
         * 计算散布以及偏差
         * */
        protected Vector2 CalculateSpreadAndDeviation(AimingState aimingState, MoveState moveState,
                                                      PostureState postureState, float velocityMagitude)
        {
            float spread    = CalculateSpread(aimingState, moveState, postureState, velocityMagitude);
            float deviation = CalculateDeviation(aimingState, moveState, postureState, velocityMagitude);

            return(new Vector2(spread, deviation));
        }
Esempio n. 6
0
        protected float CalculateDeviation(AimingState aimingState, MoveState moveState,
                                           PostureState postureState, float velocityMagitude, bool isShoot = false)
        {
            float baseDeviation            = 0f;
            float postureModifierDeviation = 1f;

            float moveDeviation = m_MoveModifierLimitDevation *
                                  Mathf.InverseLerp(m_MoveVelocityReferenceDeviation.x / 100, m_MoveVelocityReferenceDeviation.y / 100, velocityMagitude);

            switch (aimingState)
            {
            case AimingState.Stand:
                baseDeviation = m_BaseDeviation;
                break;

            case AimingState.Aim:
                //baseDeviation = m_BaseAimDeviation;
                baseDeviation = m_BaseDeviation;
                break;

            case AimingState.ADS:
                baseDeviation = m_BaseADSDeviation;
                break;

            default:
                baseDeviation = m_BaseDeviation;
                break;
            }
            switch (postureState)
            {
            case PostureState.Stand:
                break;

            case PostureState.Crouch:
                postureModifierDeviation = m_CrouchModifierDeviation;
                break;

            case PostureState.Prone:
                postureModifierDeviation = m_ProneModifierDeviation;
                break;

            default:
                break;
            }

            float deviation = (baseDeviation + m_RecoilShotDeviation) * (1 + moveDeviation) * postureModifierDeviation;

            return(deviation * 60.0f);
        }
Esempio n. 7
0
        protected float CalculateSpread(AimingState aimingState, MoveState moveState,
                                        PostureState postureState, float velocityMagitude)
        {
            float baseSpread = m_BaseSpread;

            if (m_ShotSpread != 0f)
            {
                baseSpread *= m_ShotSpread;
            }

            float aimingModifierSpread  = 1f;
            float moveModifierSpread    = 1f;
            float postureModifierSpread = 1f;

            switch (aimingState)
            {
            case AimingState.Stand:
                break;

            case AimingState.Aim:
                aimingModifierSpread = m_AimingModifierSpread;
                break;

            case AimingState.ADS:
                aimingModifierSpread = m_ADSModifierSpread;
                break;

            default:
                break;
            }

            switch (moveState)
            {
            case MoveState.Stand:
                break;

            case MoveState.Walk:
                moveModifierSpread = m_WalkModifierSpread;
                break;

            case MoveState.Run:
                moveModifierSpread = m_RunModifierSpread;
                break;

            case MoveState.Jump:
                moveModifierSpread = m_JumpModifierSpread;
                break;

            default:
                break;
            }

            switch (postureState)
            {
            case PostureState.Stand:
                break;

            case PostureState.Crouch:
                postureModifierSpread = m_CrouchModifierSpread;
                break;

            case PostureState.Prone:
                postureModifierSpread = m_ProneModifierSpread;
                break;

            default:
                break;
            }
            float spread = baseSpread * aimingModifierSpread + m_FiringBaseSpread * postureModifierSpread * moveModifierSpread + m_ShotSpread * 30.0f;

            return(spread);
        }