Files
beyond/Assets/ThirdParty/PlayMaker/Actions/Device/GetLocationInfo.cs
2024-11-20 15:21:28 +01:00

75 lines
2.0 KiB
C#

// (c) Copyright HutongGames, LLC 2010-2013. All rights reserved.
using UnityEngine;
namespace HutongGames.PlayMaker.Actions
{
[ActionCategory(ActionCategory.Device)]
[Tooltip("Gets Location Info from a mobile device. NOTE: Use StartLocationService before trying to get location info.")]
public class GetLocationInfo : FsmStateAction
{
[UIHint(UIHint.Variable)]
public FsmVector3 vectorPosition;
[UIHint(UIHint.Variable)]
public FsmFloat longitude;
[UIHint(UIHint.Variable)]
public FsmFloat latitude;
[UIHint(UIHint.Variable)]
public FsmFloat altitude;
[UIHint(UIHint.Variable)]
public FsmFloat horizontalAccuracy;
[UIHint(UIHint.Variable)]
public FsmFloat verticalAccuracy;
// TODO: figure out useful way to expose timeStamp
// maybe how old is the location...?
//[UIHint(UIHint.Variable)]
//[Tooltip("Timestamp (in seconds since the game started) when location was last updated.")]
//public FsmFloat timeStamp;
[Tooltip("Event to send if the location cannot be queried.")]
public FsmEvent errorEvent;
public override void Reset()
{
longitude = null;
latitude = null;
altitude = null;
horizontalAccuracy = null;
verticalAccuracy = null;
//timeStamp = null;
errorEvent = null;
}
public override void OnEnter()
{
DoGetLocationInfo();
Finish();
}
void DoGetLocationInfo()
{
#if UNITY_IPHONE || UNITY_IOS || UNITY_ANDROID || UNITY_BLACKBERRY || UNITY_WP8
if (Input.location.status != LocationServiceStatus.Running)
{
Fsm.Event(errorEvent);
return;
}
float x = Input.location.lastData.longitude;
float y = Input.location.lastData.latitude;
float z = Input.location.lastData.altitude;
vectorPosition.Value = new Vector3(x,y,z);
longitude.Value = x;
latitude.Value = y;
altitude.Value = z;
horizontalAccuracy.Value = Input.location.lastData.horizontalAccuracy;
verticalAccuracy.Value = Input.location.lastData.verticalAccuracy;
#endif
}
}
}