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); }
public float CalculateCrosshair(AimingState aimingState, MoveState moveState, PostureState postureState, float velocityMagitude) { var spreadAndDeviation = CalculateSpreadAndDeviation(aimingState, moveState, postureState, velocityMagitude); return(spreadAndDeviation.x + spreadAndDeviation.y); }
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)); }
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; }
/* * 计算散布以及偏差 * */ 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)); }
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); }
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; }
/* * 开枪时不同姿势对枪口上升时间的修正 * */ 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; } }
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(); } }
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; }
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); }