using System;
using System.Collections;
using UnityEngine;
using UnityEngine.Serialization;
namespace ARLocation
{
[Serializable]
public class LocationProviderOptions
{
///
/// The minimum desired update time, in seconds.
///
[Tooltip("The minimum desired update time, in seconds.")]
public float TimeBetweenUpdates = 2.0f;
///
/// The minimum distance between consecutive location updates, in meters.
///
[Tooltip("The minimum distance between consecutive location updates, in meters.")]
public double MinDistanceBetweenUpdates = 0;
///
/// The minimum accuracy of accepted location measurements, in meters.
///
[FormerlySerializedAs("MaxAccuracyRadius")]
[Tooltip("The minimum accuracy of accepted location measurements, in meters. " +
"Accuracy here means the radius of uncertainty of the device's location, " +
"defining a circle where it can possibly be found in.")]
public double AccuracyRadius = 25.0f;
[Tooltip("The global maximum number of location updates. The updates will be paused after this amount. Zero means there is no limit and " +
"the updates won't be paused automatically. Note that this will possibly override the settings from individual components, like 'PlaceAtLocation'.")]
public uint MaxNumberOfUpdates;
}
public enum LocationProviderStatus
{
Idle,
Initializing,
Started,
Failed
}
// Location provider delegates/events
public delegate void LocationUpdatedDelegate(LocationReading currentLocation, LocationReading lastLocation);
public delegate void CompassUpdateDelegate(HeadingReading heading, HeadingReading lastReading);
public delegate void LocationEnabledDelegate();
public delegate void LocationFailedDelegate(string message);
public interface ILocationProvider
{
string Name { get; }
LocationProviderOptions Options { get; set; }
LocationReading CurrentLocation { get; }
LocationReading CurrentLocationRaw { get; }
LocationReading LastLocation { get; }
LocationReading LastLocationRaw { get; }
LocationReading FirstLocation { get; }
HeadingReading CurrentHeading { get; }
HeadingReading LastHeading { get; }
float StartTime { get; }
bool IsCompassEnabled { get; }
double DistanceFromStartPoint { get; }
bool IsEnabled { get; }
bool Paused { get; }
int LocationUpdateCount { get; }
bool HasStarted { get; }
bool ApplyCompassTiltCompensationOnAndroid { get; set; }
event LocationUpdatedDelegate LocationUpdated;
event LocationUpdatedDelegate LocationUpdatedRaw;
event CompassUpdateDelegate CompassUpdated;
event LocationEnabledDelegate LocationEnabled;
event LocationFailedDelegate LocationFailed;
IEnumerator Start(uint maxWaitTime = 10000, uint delay = 0);
void ForceLocationUpdate();
void Pause();
void Resume();
void Update();
void Restart();
void OnEnabled(LocationEnabledDelegate del);
void OnFail(LocationFailedDelegate del);
void SetCompassLowPassFactor(double factor);
string GetInfoString();
string GetStatusString();
}
}