private void _UpdateCloudAnchorRequest(CloudAnchorRequest request, bool isNewRequest = false) { var cloudState = request.NativeSession.AnchorApi.GetCloudAnchorState(request.AnchorHandle); if (cloudState == ApiCloudAnchorState.Success) { var result = new CloudAnchorResult() { Response = CloudServiceResponse.Success, Anchor = XPAnchor.Factory(request.NativeSession, request.AnchorHandle) }; request.OnTaskComplete(result); request.IsComplete = true; } else if (cloudState != ApiCloudAnchorState.TaskInProgress) { request.NativeSession.AnchorApi.Detach(request.AnchorHandle); request.NativeSession.AnchorApi.Release(request.AnchorHandle); var result = new CloudAnchorResult() { Response = cloudState.ToCloudServiceResponse(), Anchor = null }; request.OnTaskComplete(result); request.IsComplete = true; } else if (isNewRequest) { m_CloudAnchorRequests.Add(request); } }
/// <summary> /// Creates the and track cloud anchor request. /// </summary> /// <param name="cloudAnchorHandle">Cloud anchor handle.</param> /// <param name="onComplete">The on complete Action that was created for the /// AsyncTask<CloudAnchorResult>.</param> protected internal void _CreateAndTrackCloudAnchorRequest(IntPtr cloudAnchorHandle, Action <CloudAnchorResult> onComplete, String cloudAnchorId = null) { if (LifecycleManager.Instance.NativeSession == null || cloudAnchorHandle == IntPtr.Zero) { Debug.LogError("Cannot create cloud anchor request when NativeSession is null or " + "cloud anchor handle is IntPtr.Zero."); onComplete(new CloudAnchorResult() { Response = CloudServiceResponse.ErrorInternal, Anchor = null, }); return; } var request = new CloudAnchorRequest() { IsComplete = false, NativeSession = LifecycleManager.Instance.NativeSession, CloudAnchorId = cloudAnchorId, AnchorHandle = cloudAnchorHandle, OnTaskComplete = onComplete, }; _UpdateCloudAnchorRequest(request, true); }
public GoogleARCore.AsyncTask <CloudAnchorResult> ResolveCloudAnchor(String cloudAnchorId) { Action <CloudAnchorResult> onComplete; GoogleARCore.AsyncTask <CloudAnchorResult> task; if (!_CreateCloudAnchorResultAsyncTask(out onComplete, out task)) { return(task); } IntPtr cloudAnchorHandle = IntPtr.Zero; var status = LifecycleManager.Instance.NativeSession.SessionApi .ResolveCloudAnchor(cloudAnchorId, out cloudAnchorHandle); if (status != ApiArStatus.Success) { onComplete(new CloudAnchorResult() { Response = status.ToCloudServiceResponse(), Anchor = null, }); return(task); } var request = new CloudAnchorRequest() { IsComplete = false, NativeSession = LifecycleManager.Instance.NativeSession, AnchorHandle = cloudAnchorHandle, OnTaskComplete = onComplete, }; _UpdateCloudAnchorRequest(request, true); return(task); }
/// <summary> /// Helper for creating a cloud anchor for the given anchor handle. /// </summary> /// <param name="onComplete">The on complete Action that was created for the /// AsyncTask<CloudAnchorResult>.</param> /// <param name="anchorNativeHandle">The native handle for the anchor.</param> protected internal void _CreateCloudAnchor(Action <CloudAnchorResult> onComplete, IntPtr anchorNativeHandle) { IntPtr cloudAnchorHandle = IntPtr.Zero; var status = LifecycleManager.Instance.NativeSession.SessionApi .CreateCloudAnchor(anchorNativeHandle, out cloudAnchorHandle); if (status != ApiArStatus.Success) { onComplete(new CloudAnchorResult() { Response = status.ToCloudServiceResponse(), Anchor = null, }); return; } var request = new CloudAnchorRequest() { IsComplete = false, NativeSession = LifecycleManager.Instance.NativeSession, AnchorHandle = cloudAnchorHandle, OnTaskComplete = onComplete, }; _UpdateCloudAnchorRequest(request, true); return; }
public GoogleARCore.AsyncTask <CloudAnchorResult> CreateCloudAnchor(GoogleARCore.Anchor anchor) { Action <CloudAnchorResult> onComplete; var task = new GoogleARCore.AsyncTask <CloudAnchorResult>(out onComplete); IntPtr cloudAnchorHandle = IntPtr.Zero; var status = LifecycleManager.Instance.NativeSession.SessionApi .CreateCloudAnchor(anchor.m_NativeHandle, out cloudAnchorHandle); if (status != ApiArStatus.Success) { onComplete(new CloudAnchorResult() { Response = status.ToCloudServiceResponse(), Anchor = null, }); return(task); } var request = new CloudAnchorRequest() { IsComplete = false, NativeSession = LifecycleManager.Instance.NativeSession, AnchorHandle = cloudAnchorHandle, OnTaskComplete = onComplete, }; _UpdateCloudAnchorRequest(request, true); return(task); }
private void UpdateCloudAnchorRequest( CloudAnchorRequest request, bool isNewRequest = false) { var cloudState = request.NativeSession.AnchorApi.GetCloudAnchorState(request.AnchorHandle); if (cloudState == ApiCloudAnchorState.Success) { XPAnchor xpAnchor = null; CloudServiceResponse response = CloudServiceResponse.Success; try { xpAnchor = XPAnchor.Factory(request.NativeSession, request.AnchorHandle); } catch (Exception e) { Debug.LogError("Failed to create XP Anchor: " + e.Message); response = CloudServiceResponse.ErrorInternal; } var result = new CloudAnchorResult() { Response = response, Anchor = xpAnchor, }; request.OnTaskComplete(result); request.IsComplete = true; } else if (cloudState != ApiCloudAnchorState.TaskInProgress) { if (request.NativeSession != null && !request.NativeSession.IsDestroyed) { request.NativeSession.AnchorApi.Detach(request.AnchorHandle); } AnchorApi.Release(request.AnchorHandle); var result = new CloudAnchorResult() { Response = cloudState.ToCloudServiceResponse(), Anchor = null }; request.OnTaskComplete(result); request.IsComplete = true; } else if (isNewRequest) { _cloudAnchorRequests.Add(request); } }
public GoogleARCore.AsyncTask <CloudAnchorResult> CreateCloudAnchor(UnityEngine.Pose pose) { Action <CloudAnchorResult> onComplete; var task = new GoogleARCore.AsyncTask <CloudAnchorResult>(out onComplete); if (LifecycleManager.Instance.NativeSession == null) { onComplete(new CloudAnchorResult() { Response = CloudServiceResponse.ErrorNotSupportedByConfiguration, Anchor = null, }); return(task); } var poseHandle = LifecycleManager.Instance.NativeSession.PoseApi.Create(pose); IntPtr arkitAnchorHandle = IntPtr.Zero; ExternApi.ARKitAnchor_create(poseHandle, ref arkitAnchorHandle); IntPtr cloudAnchorHandle = IntPtr.Zero; var status = LifecycleManager.Instance.NativeSession.SessionApi .CreateCloudAnchor(arkitAnchorHandle, out cloudAnchorHandle); LifecycleManager.Instance.NativeSession.PoseApi.Destroy(poseHandle); ExternApi.ARKitAnchor_release(arkitAnchorHandle); if (status != ApiArStatus.Success) { onComplete(new CloudAnchorResult() { Response = status.ToCloudServiceResponse(), Anchor = null, }); return(task); } var request = new CloudAnchorRequest() { IsComplete = false, NativeSession = LifecycleManager.Instance.NativeSession, AnchorHandle = cloudAnchorHandle, OnTaskComplete = onComplete, }; _UpdateCloudAnchorRequest(request, true); return(task); }