123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202 |
- using AOT;
- using SC.XR.Unity.Module_Device;
- using SC.XR.Unity.Module_InputSystem.InputDeviceGC;
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using System.Linq;
- using System.Runtime.InteropServices;
- using System.Text;
- using System.Threading.Tasks;
- using UnityEngine;
- namespace SC.XR.Unity.Module_InputSystem.InputDeviceHand.GGT26Dof
- {
- public class InputDeviceGGT26Dof : InputDeviceHand
- {
- public override InputDeviceType inputDeviceType
- {
- get
- {
- return InputDeviceType.GGT26Dof;
- }
- }
- [HideInInspector]
- public float LowPowerPercent = 15;
- private Coroutine lowPowerCoroutine = null;
- bool isShowHandLowPower = false;
- bool isHandTrackStart = false;
- Coroutine startHand;
- [MonoPInvokeCallback(typeof(Action))]
- public static void GestureModelDataChangeCallback()
- {
- //Debug.Log("[04]GestureModelDataChangeCallback start");
- //InputDeviceGGT26DofPart inputDeviceGGT26DofPart = (inputDevicePartList[0] as InputDeviceGGT26DofPart);
- //if (inputDeviceGGT26DofPart != null) {
- // inputDeviceGGT26DofPart.inputDataGetGGT26Dof.inputDataGetHandsData.OnUpdateInputDataAndStore();
- //}
- }
- public override void OnSCAwake() {
- base.OnSCAwake();
- //PermissionRequest.getInstance.GetPerssion(UnityEngine.Android.Permission.ExternalStorageRead);
- //PermissionRequest.getInstance.GetPerssion(UnityEngine.Android.Permission.ExternalStorageWrite);
- }
- public override void OnSCStart()
- {
- base.OnSCStart();
- if (API_Module_SDKConfiguration.HasKey("Module_InputSystem", "ShowHandLowPower"))
- {
- isShowHandLowPower = API_Module_SDKConfiguration.GetBool("Module_InputSystem", "ShowHandLowPower", 0);
- DebugMy.Log("ShowHandLowPower:" + isShowHandLowPower, this, true);
- }
- }
- protected override void InputDeviceStart(){
- StartHandTrack();
- }
- public override void OnSCUpdate() {
- base.OnSCUpdate();
- if (isHandTrackStart) {
- InputDataGGT26Dof.handsInfo.originDataPose[0] = 1024 + 512 + 788 * 3 * 4;
- API_GSXR_Slam.plugin.GSXR_Get_HandTrackingData(InputDataGGT26Dof.handsInfo.originDataMode, InputDataGGT26Dof.handsInfo.originDataPose);
- }
-
- }
- public override void OnSCLateUpdate()
- {
- base.OnSCLateUpdate();
- if (lowPowerTrigger )
- {
- DebugMy.Log("ScHANDTRACK_lowPowerTrigger", this, true);
- lowPowerTrigger = false;
- if (lowPowerCoroutine == null)
- {
- lowPowerCoroutine = StartCoroutine(LowPowerFunction());
- }
- }
- }
- IEnumerator LowPowerFunction(float loopTime = 3)
- {
- StopHandTrack();
- SetActiveInputDevicePart(InputDevicePartType.HandLeft, false);
- SetActiveInputDevicePart(InputDevicePartType.HandRight, false);
- while (loopTime-- > 0 && isShowHandLowPower)
- {
- if (inputDeviceUI as InputDeviceHandUI)
- {
- (inputDeviceUI as InputDeviceHandUI).SetActiveUI(HandUIType.LOWPOWER, true);
- }
- yield return null;
- yield return new WaitForSeconds(12);
- }
- lowPowerCoroutine = null;
- }
- IEnumerator StartGreyHand()
- {
- //yield return new WaitUntil(() => API_GSXR_Slam.SlamManager != null);
- //yield return new WaitUntil(() => API_GSXR_Slam.SlamManager.IsRunning == true);
- //if (API_GSXR_Slam.plugin.GSXR_Is_SupportHandTracking() == false) {
- // DebugMy.Log("Not Support HandTracking",this,true);
- // yield break;
- //}
- if (API_Module_Device.Current.BatteryLevel < LowPowerPercent ) {
- if (lowPowerCoroutine == null) {
- lowPowerCoroutine = StartCoroutine(LowPowerFunction());
- }
- DebugMy.Log("BatteryLevel < " + LowPowerPercent + " StopHandTrack", this, true);
- yield break;
- }
- if (isHandTrackStart == false) {
- isHandTrackStart = true;
- DebugMy.Log("GSXR_StartHandTracking", this, true);
- if (Application.platform == RuntimePlatform.Android) {
- try {
- API_GSXR_Slam.plugin.GSXR_StartHandTracking(LowPowerWarningCallback);
- API_GSXR_Slam.plugin.GSXR_Set_HandTrackingCallBack(GestureChangeCallback);
- API_GSXR_Slam.plugin.GSXR_Set_HandTrackingModelDataCallBack(GestureModelDataChangeCallback);
- } catch (Exception e) {
- Debug.Log(e);
- }
- }
- }
- startHand = null;
- base.InputDeviceStart();
- }
- public override void OnSCDisable()
- {
- base.OnSCDisable();
- StopHandTrack();
- }
- private void StartHandTrack() {
- if (startHand == null) {
- startHand = StartCoroutine(StartGreyHand());
- }
- }
- private void StopHandTrack() {
- if (startHand != null) {
- StopCoroutine(startHand);
- startHand = null;
- }
- if (isHandTrackStart) {
- isHandTrackStart = false;
- DebugMy.Log("GSXR_StopHandTracking", this, true);
- if (Application.platform == RuntimePlatform.Android) {
- try {
- API_GSXR_Slam.plugin.GSXR_StopHandTracking();
- } catch (Exception e) {
- Debug.Log(e);
- }
- }
- }
- }
- //{1, "THUMB"},
- //{2, "ONE"},
- //{3, "TWO"},
- //{4, "THREE"},
- //{5, "FOUR"},
- //{6, "FIVE"},
- //{7, "OK"},
- //{8, "DIRECTION"},
- [MonoPInvokeCallback(typeof(Action<int>))]
- public static void GestureChangeCallback(int gesture)
- {
- Debug.Log("GestureChangeCallback, gesture id:" + gesture);
- }
- static bool lowPowerTrigger = false;
- [MonoPInvokeCallback(typeof(Action<int>))]
- public static void LowPowerWarningCallback(int power)
- {
- Debug.Log("HandGesture Cannot work in low power state:" + power);
- lowPowerTrigger = true;
- }
- }
- }
|