using UnityEngine; using NeonTea.Quakeball.Players; namespace NeonTea.Quakeball.Animation { /// Lags a little behind every frame to create a delay effect in the gun movement. public class GunInterpolator : MonoBehaviour { public LocalPlayer Player; public float InterpolationSpeed; public float YawDegrees; public float PitchDegrees; public float RollDegrees; public float RotationThreshold; private Vector2 CurrentLean = Vector2.zero; private Vector2 TargetLean = Vector2.zero; private void Awake() { transform.parent = Player.Camera; } private void Update() { Vector2 LookDelta = Player.LookAction.ReadValue(); SetTarget(LookDelta.x, ref TargetLean.x); CurrentLean.x = Mathf.Lerp(CurrentLean.x, TargetLean.x, InterpolationSpeed * Time.deltaTime); SetTarget(LookDelta.y, ref TargetLean.y); CurrentLean.y = Mathf.Lerp(CurrentLean.y, TargetLean.y, InterpolationSpeed * Time.deltaTime); Vector3 Eulers = transform.localEulerAngles; Eulers.x = -CurrentLean.y * PitchDegrees; Eulers.y = CurrentLean.x * YawDegrees; Eulers.z = CurrentLean.x * RollDegrees; transform.localEulerAngles = Eulers; } private void SetTarget(float delta, ref float targetLean) { if (delta > RotationThreshold) { targetLean = -1; } else if (delta < -RotationThreshold) { targetLean = 1; } else { targetLean = Mathf.Lerp(targetLean, 0, 10f * Time.deltaTime); } } } }