using UnityEngine; namespace InfinityCode.OnlineMapsSupport { public class SmoothCameraByCompass : MonoBehaviour { public OnlineMapsLocationService locationService; public OnlineMapsCameraOrbit cameraOrbit; public float duration = 1; public float compassThreshold = 4; private float progress = 1; private float fromHeading; private float toHeading; private void Start() { if (!locationService) locationService = OnlineMapsLocationService.instance; if (!cameraOrbit) cameraOrbit = OnlineMapsCameraOrbit.instance; locationService.compassThreshold = 0; locationService.OnCompassChanged += OnCompassChanged; } private void OnCompassChanged(float heading) { heading *= 360; if (Mathf.Abs(heading - toHeading) < compassThreshold) return; toHeading = heading; fromHeading = cameraOrbit.rotation.y; progress = 0; } private void Update() { if (progress >= 1) return; progress += Time.deltaTime / duration; cameraOrbit.rotation.y = Mathf.LerpAngle(fromHeading, toHeading, progress); } } }