using System;
using System.Runtime.InteropServices;
using AOT;
namespace UnityEngine.XR.ARKit
{
///
/// A set of callbacks related to the ARKit session. Implement this class to provide custom handling of certain
/// session events.
///
///
///
public abstract class ARKitSessionDelegate
{
///
/// Invoked when the session fails. This base class implementation does nothing.
///
///
/// Use this to respond to session failures. For example, the
/// implementation tries to restart the session by calling
/// [Reset](xref:UnityEngine.XR.ARSubsystems.XRSessionSubsystem.Reset).
///
/// See [session:didFailWithError:](https://developer.apple.com/documentation/arkit/arsessionobserver/2887453-session?language=objc)
/// for more information.
///
/// The which provides an interface to the ARKit session.
/// The object describing the failure. This object is only valid
/// during this callback. See also .
protected virtual void OnSessionDidFailWithError(ARKitSessionSubsystem sessionSubsystem, NSError error) { }
///
/// Invoked when a change to the
/// [ARConfiguration](https://developer.apple.com/documentation/arkit/arconfiguration?language=objc)
/// is requested.
///
/// The which provides an interface to the ARKit session.
protected virtual void OnConfigurationChanged(ARKitSessionSubsystem sessionSubsystem) { }
///
/// Invoked when the
/// [coaching overlay view](https://developer.apple.com/documentation/arkit/arcoachingoverlayview?language=objc)
/// activates. This base class implementation does nothing.
///
///
/// See [coachingOverlayViewWillActivate:](https://developer.apple.com/documentation/arkit/arcoachingoverlayviewdelegate/3152985-coachingoverlayviewwillactivate?language=objc)
/// for more information.
///
/// The which provides an interface to the ARKit session.
///
///
///
///
protected virtual void OnCoachingOverlayViewWillActivate(ARKitSessionSubsystem sessionSubsystem) { }
///
/// Invoked when the
/// [coaching experience](https://developer.apple.com/documentation/arkit/arcoachingoverlayview?language=objc)
/// is completely deactivated. This base class implementation does nothing.
///
///
/// See [coachingOverlayViewDidDeactivate:](https://developer.apple.com/documentation/arkit/arcoachingoverlayviewdelegate/3152983-coachingoverlayviewdiddeactivate?language=objc)
/// for more information.
///
/// The which provides an interface to the ARKit session.
///
///
///
///
protected virtual void OnCoachingOverlayViewDidDeactivate(ARKitSessionSubsystem sessionSubsystem) { }
internal static Action s_SessionDidFailWithError = SessionDidFailWithError;
internal static Action s_CoachingOverlayViewWillActivate = CoachingOverlayViewWillActivate;
internal static Action s_CoachingOverlayViewDidDeactivate = CoachingOverlayViewDidDeactivate;
internal static Action s_ConfigurationChanged = ConfigurationChanged;
[MonoPInvokeCallback(typeof(Action))]
static void SessionDidFailWithError(IntPtr subsystemHandle, NSError error)
{
if (GCHandle.FromIntPtr(subsystemHandle).Target is ARKitSessionSubsystem subsystem)
{
subsystem.sessionDelegate?.OnSessionDidFailWithError(subsystem, error);
}
}
[MonoPInvokeCallback(typeof(Action))]
static void CoachingOverlayViewWillActivate(IntPtr subsystemHandle)
{
if (GCHandle.FromIntPtr(subsystemHandle).Target is ARKitSessionSubsystem subsystem)
{
subsystem.sessionDelegate?.OnCoachingOverlayViewWillActivate(subsystem);
}
}
[MonoPInvokeCallback(typeof(Action))]
static void CoachingOverlayViewDidDeactivate(IntPtr subsystemHandle)
{
if (GCHandle.FromIntPtr(subsystemHandle).Target is ARKitSessionSubsystem subsystem)
{
subsystem.sessionDelegate?.OnCoachingOverlayViewDidDeactivate(subsystem);
}
}
[MonoPInvokeCallback(typeof(Action))]
static void ConfigurationChanged(IntPtr subsystemHandle)
{
if (GCHandle.FromIntPtr(subsystemHandle).Target is ARKitSessionSubsystem subsystem)
{
subsystem.sessionDelegate?.OnConfigurationChanged(subsystem);
}
}
}
}