using System.Collections; using UnityEngine; public class GPSManager : MonoBehaviour { [Header("GPS settings")] public float Accuracy = 10f; public float UpdateDistance = 5f; public int MaxWait = 20; [Header("GPS coordinates")] private double[] LastCoords = new double[2]; private double[] FailsafeCoords = new double[] { 50.7727878, 15.0718625 }; private double? LastTime; void Start() { } void Update() { StartCoroutine(UpdateGPS()); } public double[] GetLastCoords() { if (LastCoords[0] == 0 && LastCoords[1] == 0) { return FailsafeCoords; } return LastCoords; } IEnumerator UpdateGPS() { if (!Input.location.isEnabledByUser) { Debug.Log("GPS not enabled by user"); LastCoords = FailsafeCoords; LastTime = null; yield break; } Input.location.Start(Accuracy, UpdateDistance); while (Input.location.status == LocationServiceStatus.Initializing && MaxWait > 0) { yield return new WaitForSeconds(1); MaxWait--; } if (MaxWait < 1) { Debug.Log("GPS timed out"); LastCoords = FailsafeCoords; LastTime = null; yield break; } if (Input.location.status == LocationServiceStatus.Failed) { Debug.Log("GPS failed to determine device location"); LastCoords = FailsafeCoords; LastTime = null; yield break; } else { LastCoords[0] = Input.location.lastData.latitude; LastCoords[1] = Input.location.lastData.longitude; LastTime = Input.location.lastData.timestamp; Debug.Log("GPS location: " + LastCoords[0] + ", " + LastCoords[1] + " (time: " + LastTime + ")"); } } }