123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329 |
- /****************************************************************************
- * Copyright 2019 Nreal Techonology Limited. All rights reserved.
- *
- * This file is part of NRSDK.
- *
- * https://www.nreal.ai/
- *
- *****************************************************************************/
- namespace NRKernal
- {
- #if UNITY_EDITOR
- using System;
- using UnityEngine;
- using System.Runtime.InteropServices;
- [Obsolete]
- internal partial class NativeEmulator
- {
- /// <summary> Default constructor. </summary>
- public NativeEmulator()
- {
- }
- /// <summary> Handle of the tracking. </summary>
- private UInt64 m_TrackingHandle;
- /// <summary> Handle of the controller. </summary>
- private UInt64 m_ControllerHandle;
- #region Tracking
- /// <summary> Creates simulation tracking. </summary>
- /// <returns> True if it succeeds, false if it fails. </returns>
- public bool CreateSIMTracking()
- {
- NativeResult result = NativeApi.NRSIMTrackingCreate(ref m_TrackingHandle);
- return result == NativeResult.Success;
- }
- /// <summary> Sets head tracking pose. </summary>
- /// <param name="position"> The position.</param>
- /// <param name="rotation"> The rotation.</param>
- /// <returns> True if it succeeds, false if it fails. </returns>
- public bool SetHeadTrackingPose(Vector3 position, Quaternion rotation)
- {
- NativeVector3f nativeVector3F = new NativeVector3f(new Vector3(position.x, position.y, -position.z));
- NativeVector4f nativeVector4F = new NativeVector4f(new Vector4(rotation.x, rotation.y, -rotation.z, -rotation.w));
- NativeResult result = NativeApi.NRSIMTrackingSetHeadTrackingPose(m_TrackingHandle, ref nativeVector3F, ref nativeVector4F);
- return result == NativeResult.Success;
- }
- /// <summary> Updates the trackable image data. </summary>
- /// <param name="centerPos"> The center position.</param>
- /// <param name="centerQua"> The center qua.</param>
- /// <param name="extentX"> The extent x coordinate.</param>
- /// <param name="extentZ"> The extent z coordinate.</param>
- /// <param name="identifier"> The identifier.</param>
- /// <param name="state"> The state.</param>
- /// <returns> True if it succeeds, false if it fails. </returns>
- public bool UpdateTrackableImageData(Vector3 centerPos, Quaternion centerQua, float extentX, float extentZ, UInt32 identifier, TrackingState state)
- {
- NativeVector3f pos = new NativeVector3f(new Vector3(centerPos.x, centerPos.y, -centerPos.z));
- NativeVector4f qua = new NativeVector4f(new Vector4(-centerQua.x, -centerQua.y, centerQua.z, centerQua.w));
- NativeResult result = NativeApi.NRSIMTrackingUpdateTrackableImageData(m_TrackingHandle, ref pos, ref qua, extentX, extentZ, identifier, (int)state);
- return result == NativeResult.Success;
- }
- /// <summary> Updates the trackable plane data. </summary>
- /// <param name="centerPos"> The center position.</param>
- /// <param name="centerQua"> The center qua.</param>
- /// <param name="extentX"> The extent x coordinate.</param>
- /// <param name="extentZ"> The extent z coordinate.</param>
- /// <param name="identifier"> The identifier.</param>
- /// <param name="state"> The state.</param>
- /// <returns> True if it succeeds, false if it fails. </returns>
- public bool UpdateTrackablePlaneData(Vector3 centerPos, Quaternion centerQua, float extentX, float extentZ, UInt32 identifier, TrackingState state)
- {
- NativeVector3f pos = new NativeVector3f(new Vector3(centerPos.x, centerPos.y, -centerPos.z));
- NativeVector4f qua = new NativeVector4f(new Vector4(-centerQua.x, -centerQua.y, centerQua.z, centerQua.w));
- NativeResult result = NativeApi.NRSIMTrackingUpdateTrackablePlaneData(m_TrackingHandle, ref pos, ref qua, extentX, extentZ, identifier, (int)state);
- return result == NativeResult.Success;
- }
- /// <summary> Set the trackables data for Unity Editor develop. </summary>
- /// <typeparam name="T"> Generic type parameter.</typeparam>
- /// <param name="centerPos"> The center position.</param>
- /// <param name="centerQua"> The center qua.</param>
- /// <param name="extentX"> The extent x coordinate.</param>
- /// <param name="extentZ"> The extent z coordinate.</param>
- /// <param name="identifier"> The identifier.</param>
- /// <param name="state"> The state.</param>
- /// <returns> True if it succeeds, false if it fails. </returns>
- public bool UpdateTrackableData<T>(Vector3 centerPos, Quaternion centerQua, float extentX, float extentZ, System.UInt32 identifier, TrackingState state) where T : NRTrackable
- {
- if (typeof(NRTrackablePlane).Equals(typeof(T)))
- {
- return NREmulatorTrackableProvider.UpdateTrackablePlaneData(centerPos, centerQua, extentX, extentZ, identifier, state);
- }
- else if (typeof(NRTrackableImage).Equals(typeof(T)))
- {
- return NREmulatorTrackableProvider.UpdateTrackableImageData(centerPos, centerQua, extentX, extentZ, identifier, state);
- }
- else
- {
- return false;
- }
- }
- #endregion
- #region Controller
- /// <summary> Creates simulation controller. </summary>
- /// <returns> True if it succeeds, false if it fails. </returns>
- public bool CreateSIMController()
- {
- NativeResult result = NativeApi.NRSIMControllerCreate(ref m_ControllerHandle);
- return result == NativeResult.Success;
- }
- /// <summary> Determines if we can destory simulation controller. </summary>
- /// <returns> True if it succeeds, false if it fails. </returns>
- public bool DestorySIMController()
- {
- NativeResult result = NativeApi.NRSIMControllerDestroyAll();
- return result == NativeResult.Success;
- }
- /// <summary> Sets controller timestamp. </summary>
- /// <param name="timestamp"> The timestamp.</param>
- /// <returns> True if it succeeds, false if it fails. </returns>
- public bool SetControllerTimestamp(UInt64 timestamp)
- {
- NativeResult result = NativeApi.NRSIMControllerSetTimestamp(m_ControllerHandle, timestamp);
- return result == NativeResult.Success;
- }
- /// <summary> Sets controller position. </summary>
- /// <param name="postion"> The postion.</param>
- /// <returns> True if it succeeds, false if it fails. </returns>
- public bool SetControllerPosition(Vector3 postion)
- {
- NativeVector3f nv3 = new NativeVector3f(postion);
- NativeResult result = NativeApi.NRSIMControllerSetPosition(m_ControllerHandle, ref nv3);
- return result == NativeResult.Success;
- }
- /// <summary> Sets controller rotation. </summary>
- /// <param name="quaternion"> The quaternion.</param>
- /// <returns> True if it succeeds, false if it fails. </returns>
- public bool SetControllerRotation(Quaternion quaternion)
- {
- NativeVector4f nv4 = new NativeVector4f(new Vector4(quaternion.x, quaternion.y, -quaternion.z, -quaternion.w));
- NativeResult result = NativeApi.NRSIMControllerSetRotation(m_ControllerHandle, ref nv4);
- return result == NativeResult.Success;
- }
- /// <summary> Sets controller accelerometer. </summary>
- /// <param name="accel"> The accel.</param>
- /// <returns> True if it succeeds, false if it fails. </returns>
- public bool SetControllerAccelerometer(Vector3 accel)
- {
- NativeVector3f nv3 = new NativeVector3f(accel);
- NativeResult result = NativeApi.NRSIMControllerSetAccelerometer(m_ControllerHandle, ref nv3);
- return result == NativeResult.Success;
- }
- /// <summary> Sets controller button state. </summary>
- /// <param name="buttonState"> State of the button.</param>
- /// <returns> True if it succeeds, false if it fails. </returns>
- public bool SetControllerButtonState(Int32 buttonState)
- {
- NativeResult result = NativeApi.NRSIMControllerSetButtonState(m_ControllerHandle, buttonState);
- return result == NativeResult.Success;
- }
- /// <summary> Sets controller is touching. </summary>
- /// <param name="isTouching"> True if is touching, false if not.</param>
- /// <returns> True if it succeeds, false if it fails. </returns>
- public bool SetControllerIsTouching(bool isTouching)
- {
- NativeResult result = NativeApi.NRSIMControllerSetIsTouching(m_ControllerHandle, isTouching);
- return result == NativeResult.Success;
- }
- /// <summary> Sets controller touch point. </summary>
- /// <param name="x"> The x coordinate.</param>
- /// <param name="y"> The y coordinate.</param>
- /// <returns> True if it succeeds, false if it fails. </returns>
- public bool SetControllerTouchPoint(float x, float y)
- {
- NativeVector3f nv3 = new NativeVector3f(new Vector3(x, y, 0f));
- NativeResult result = NativeApi.NRSIMControllerSetTouchPoint(m_ControllerHandle, ref nv3);
- return result == NativeResult.Success;
- }
- /// <summary> Sets controller submit. </summary>
- /// <returns> True if it succeeds, false if it fails. </returns>
- public bool SetControllerSubmit()
- {
- NativeResult result = NativeApi.NRSIMControllerSubmit(m_ControllerHandle);
- return result == NativeResult.Success;
- }
- #endregion
- private partial struct NativeApi
- {
- /// <summary> Nrsim tracking create. </summary>
- /// <param name="out_tracking_handle"> [in,out] Handle of the out tracking.</param>
- /// <returns> A NativeResult. </returns>
- [DllImport(NativeConstants.NRNativeLibrary)]
- public static extern NativeResult NRSIMTrackingCreate(ref UInt64 out_tracking_handle);
- /// <summary> Nrsim tracking set head tracking pose. </summary>
- /// <param name="tracking_handle"> Handle of the tracking.</param>
- /// <param name="position"> [in,out] The position.</param>
- /// <param name="rotation"> [in,out] The rotation.</param>
- /// <returns> A NativeResult. </returns>
- [DllImport(NativeConstants.NRNativeLibrary)]
- public static extern NativeResult NRSIMTrackingSetHeadTrackingPose(UInt64 tracking_handle,
- ref NativeVector3f position, ref NativeVector4f rotation);
- /// <summary> Nrsim tracking update trackable image data. </summary>
- /// <param name="tracking_handle"> Handle of the tracking.</param>
- /// <param name="center_pos"> [in,out] The center position.</param>
- /// <param name="center_rotation"> [in,out] The center rotation.</param>
- /// <param name="extent_x"> The extent x coordinate.</param>
- /// <param name="extent_z"> The extent z coordinate.</param>
- /// <param name="identifier"> The identifier.</param>
- /// <param name="state"> The state.</param>
- /// <returns> A NativeResult. </returns>
- [DllImport(NativeConstants.NRNativeLibrary)]
- public static extern NativeResult NRSIMTrackingUpdateTrackableImageData
- (UInt64 tracking_handle, ref NativeVector3f center_pos, ref NativeVector4f center_rotation,
- float extent_x, float extent_z, UInt32 identifier, int state);
- /// <summary> Nrsim tracking update trackable plane data. </summary>
- /// <param name="tracking_handle"> Handle of the tracking.</param>
- /// <param name="center_pos"> [in,out] The center position.</param>
- /// <param name="center_rotation"> [in,out] The center rotation.</param>
- /// <param name="extent_x"> The extent x coordinate.</param>
- /// <param name="extent_z"> The extent z coordinate.</param>
- /// <param name="identifier"> The identifier.</param>
- /// <param name="state"> The state.</param>
- /// <returns> A NativeResult. </returns>
- [DllImport(NativeConstants.NRNativeLibrary)]
- public static extern NativeResult NRSIMTrackingUpdateTrackablePlaneData(UInt64 tracking_handle,
- ref NativeVector3f center_pos, ref NativeVector4f center_rotation,
- float extent_x, float extent_z, UInt32 identifier, int state);
- /// <summary> Controller. </summary>
- /// <param name="out_controller_handle"> [in,out] Handle of the out controller.</param>
- /// <returns> A NativeResult. </returns>
- [DllImport(NativeConstants.NRNativeLibrary)]
- public static extern NativeResult NRSIMControllerCreate(ref UInt64 out_controller_handle);
- /// <summary> Nrsim controller destroy all. </summary>
- /// <returns> A NativeResult. </returns>
- [DllImport(NativeConstants.NRNativeLibrary)]
- public static extern NativeResult NRSIMControllerDestroyAll();
- /// <summary> Nrsim controller set timestamp. </summary>
- /// <param name="controller_handle"> Handle of the controller.</param>
- /// <param name="timestamp"> The timestamp.</param>
- /// <returns> A NativeResult. </returns>
- [DllImport(NativeConstants.NRNativeLibrary)]
- public static extern NativeResult NRSIMControllerSetTimestamp(UInt64 controller_handle, UInt64 timestamp);
- /// <summary> Nrsim controller set position. </summary>
- /// <param name="controller_handle"> Handle of the controller.</param>
- /// <param name="position"> [in,out] The position.</param>
- /// <returns> A NativeResult. </returns>
- [DllImport(NativeConstants.NRNativeLibrary)]
- public static extern NativeResult NRSIMControllerSetPosition(UInt64 controller_handle, ref NativeVector3f position);
- /// <summary> Nrsim controller set rotation. </summary>
- /// <param name="controller_handle"> Handle of the controller.</param>
- /// <param name="rotation"> [in,out] The rotation.</param>
- /// <returns> A NativeResult. </returns>
- [DllImport(NativeConstants.NRNativeLibrary)]
- public static extern NativeResult NRSIMControllerSetRotation(UInt64 controller_handle, ref NativeVector4f rotation);
- /// <summary> Nrsim controller set accelerometer. </summary>
- /// <param name="controller_handle"> Handle of the controller.</param>
- /// <param name="accel"> [in,out] The accel.</param>
- /// <returns> A NativeResult. </returns>
- [DllImport(NativeConstants.NRNativeLibrary)]
- public static extern NativeResult NRSIMControllerSetAccelerometer(UInt64 controller_handle, ref NativeVector3f accel);
- /// <summary> Nrsim controller set button state. </summary>
- /// <param name="controller_handle"> Handle of the controller.</param>
- /// <param name="buttonState"> State of the button.</param>
- /// <returns> A NativeResult. </returns>
- [DllImport(NativeConstants.NRNativeLibrary)]
- public static extern NativeResult NRSIMControllerSetButtonState(UInt64 controller_handle, Int32 buttonState);
- /// <summary> Nrsim controller set is touching. </summary>
- /// <param name="controller_handle"> Handle of the controller.</param>
- /// <param name="isTouching"> True if is touching, false if not.</param>
- /// <returns> A NativeResult. </returns>
- [DllImport(NativeConstants.NRNativeLibrary)]
- public static extern NativeResult NRSIMControllerSetIsTouching(UInt64 controller_handle, bool isTouching);
- /// <summary> Nrsim controller set touch point. </summary>
- /// <param name="controller_handle"> Handle of the controller.</param>
- /// <param name="point"> [in,out] The point.</param>
- /// <returns> A NativeResult. </returns>
- [DllImport(NativeConstants.NRNativeLibrary)]
- public static extern NativeResult NRSIMControllerSetTouchPoint(UInt64 controller_handle, ref NativeVector3f point);
- /// <summary> Nrsim controller submit. </summary>
- /// <param name="controller_handle"> Handle of the controller.</param>
- /// <returns> A NativeResult. </returns>
- [DllImport(NativeConstants.NRNativeLibrary)]
- public static extern NativeResult NRSIMControllerSubmit(UInt64 controller_handle);
- /// <summary> Free library. </summary>
- /// <param name="hModule"> The module.</param>
- /// <returns> True if it succeeds, false if it fails. </returns>
- [DllImport("kernel32", SetLastError = true)]
- public static extern bool FreeLibrary(IntPtr hModule);
- }
- }
- #endif
- }
|