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);
        }
Esempio n. 2
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. 3
0
        public Vector3 GetPitchYawOffset(PostureState postureState, float deltaTime)
        {
            float swayModifier = 1f;

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

            case PostureState.Crouch:
                swayModifier = m_CrouchModifierSway;
                break;

            case PostureState.Prone:
                swayModifier = m_ProneModifierSway;
                break;

            default:
                swayModifier = m_MovementModifierSway;
                break;
            }

            m_PitchYawTime += deltaTime;
            float pitchOffset = m_PitchSway * swayModifier * SwayUnit;
            float yawOffset   = m_YawOffsetSway * swayModifier * SwayUnit;

            return(new Vector3(yawOffset * (m_YawCurve.Evaluate(m_PitchYawTime) - 0.5f), pitchOffset * m_PitchCurve.Evaluate(m_PitchYawTime), 0f));
        }
Esempio n. 4
0
        public UnderRaycaster(ref PostureState posture, ref FigureInfo figure, _Action3Enemy act)
        {
            hookingReach = figure.groundHookReach;

            up = posture.rot * Vector3.up;

            bodypos = act.rb.position + up * figure.moveRadius;
        }
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
        public ForwawrdAndUnderRaycaster(ref PostureState posture, ref FigureInfo figure, _Action3Enemy act)
        {
            r = new UnderRaycaster(ref posture, ref figure, act);


            movedist = act.stance.moveSpeed * GM.t.delta;


            moveRadius = figure.moveRadius;


            forward = posture.rot * Vector3.forward;

            forwardOrigin = posture.isGotFoothold ? r.bodypos : r.bodypos - forward;
        }
Esempio n. 8
0
        /*
         * 开枪时不同姿势对枪口上升时间的修正
         * */

        private void GunUpTimeModifier(PostureState postureState)
        {
            switch (postureState)
            {
            case PostureState.Stand:
                m_GunUpTimeFactor = 1.0f;
                break;

            case PostureState.Crouch:
                m_GunUpTimeFactor = m_CrouchModifierRecoil;
                break;

            case PostureState.Prone:
                m_GunUpTimeFactor = m_ProneModifierRecoil;
                break;

            default:
                m_GunUpTimeFactor = 1f;
                break;
            }
        }
Esempio n. 9
0
        private void OnParentPhysicsPropChange(Rigidbody rigidBody, CapsuleCollider collider, PostureState postureState)
        {
            if (m_Rigidbody == null)
            {
                return;
            }

            m_Rigidbody.isKinematic = rigidBody.isKinematic;
            m_Rigidbody.useGravity  = rigidBody.useGravity;
            m_Rigidbody.constraints = rigidBody.constraints;

            m_CapsuleCollider.center    = collider.center;
            m_CapsuleCollider.height    = collider.height;
            m_CapsuleCollider.direction = collider.direction;
            m_CapsuleCollider.radius    = collider.radius;

            m_PostureState = postureState;
            if (m_PostureState == PostureState.Swim)
            {
                m_Rigidbody.velocity = m_Velocity.GetVectorXZ();
            }
        }
Esempio n. 10
0
        private void UpdatePosture(NxtLog log)
        {
            double av    = 0;
            double delta = 0;

            // センサ値を取得
            currentGyro = log.SensorAdc0;
            // センサ値をバッファに格納
            gyroBuffer.Append(currentGyro);

            // 初期化中
            switch (init_sate)
            {
            case PostureState.Init:
                // 初期化中は角度0
                posture = 0;
                // バッファがいっぱいになった
                if (gyroBuffer.Length == gyroBuffer.Count)
                {
                    // ジャイロ平均値をオフセットに設定
                    offset = gyroBuffer.Average();

                    // 角速度を計算
                    av = currentGyro - offset;
                    anglarVelocity.Append(av);

                    // Ready 状態に遷移
                    init_sate = PostureState.Ready;
                }
                break;

            case PostureState.Ready:
                // 角速度を計算
                //av = currentGyro - offset;
                av = gyroBuffer.Average() - offset;
                anglarVelocity.Append(av);

                // Δt = 瞬間移動時間[msec] / 1000
                double dt = ((double)this.MomentRunTime / 1000);

                // 台形公式により、面積を計算
                // ΔP =( (AVn + AVn-1) * Δt) / 2
                delta = ((anglarVelocity[0] + anglarVelocity[1]) * dt) / 2;

                // 不感帯を設定
                if (delta <= DeadZoneThreshold && delta >= -DeadZoneThreshold)
                {
                    delta = 0;
                }

                // 傾斜を更新
                posture += delta;

                deltaBuffer.Append(delta);

                // 傾斜の更新値が一定時間ほぼ0 = 直立状態
                if (-0.05 <= av && av <= 0.05)
                {
                    posture = 0;
                }

                break;
            }

#if DEBUG_DUMP
            string rec = string.Format("{0}, {1}, {2}, {3}, {4}\r\n", currentGyro, offset, anglarVelocity[0], delta, posture);


            // ログファイルを開く
            using (StreamWriter sw = new StreamWriter(new FileStream("posture_dump.csv", FileMode.Append)))
            {
                try
                {
                    // ファイルへ追記
                    sw.Write(rec);
                }
                catch (Exception ex)
                {
                    Debug.WriteLine("FILE WRITE ERROR : {0}", ex.ToString());
                }
            }
#endif
            this.Posture = posture;
        }
Esempio n. 11
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);
        }