123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using UnityEngine;
- namespace SC.XR.Unity.Module_InputSystem.InputDeviceHand.GGT26Dof {
- public class InputDeviceGGT26DofPartStatus : InputDeviceHandPartStatus {
- public InputDeviceGGT26DofPart inputDeviceGGT26DofPart;
- public InputDeviceGGT26DofPartStatus(InputDeviceGGT26DofPart _inputDeviceHandPart) : base(_inputDeviceHandPart) {
- inputDeviceGGT26DofPart = _inputDeviceHandPart;
- }
- float timer = 0;
- static bool isUpdateDataThisFrame = false;
- static bool ISGCPriorityGGT26Dof=false;
- public override void OnSCAwake() {
- base.OnSCAwake();
- if (API_Module_SDKConfiguration.HasKey("Module_InputSystem", "ISGCPriorityGGT26Dof")) {
- ISGCPriorityGGT26Dof = API_Module_SDKConfiguration.GetBool("Module_InputSystem", "ISGCPriorityGGT26Dof", 1);
- DebugMy.Log("ISGCPriorityGGT26Dof:"+ ISGCPriorityGGT26Dof,this,true);
- }
- }
- public override void OnSCLateUpdate() {
- base.OnSCLateUpdate();
- ///每帧只执行一次
- if (isUpdateDataThisFrame == false) {
- isUpdateDataThisFrame = true;
- UpdateStatus(InputDataGGT26Dof.handsInfo.originDataMode, InputDataGGT26Dof.handsInfo.originDataPose);
- }
- if (inputDeviceGGT26DofPart.PartType == InputDevicePartType.HandLeft) {
- inputDeviceGGT26DofPart.inputDataGGT26Dof.isFound = InputDataGGT26Dof.handsInfo.handLeftFind;
- if (inputDeviceGGT26DofPart.inputDeviceGGT26Dof.LeftHandOpen == false) {
- inputDeviceGGT26DofPart.inputDataGGT26Dof.isFound = false;
- }
- }
- if (inputDeviceGGT26DofPart.PartType == InputDevicePartType.HandRight) {
- inputDeviceGGT26DofPart.inputDataGGT26Dof.isFound = InputDataGGT26Dof.handsInfo.handRightFind;
- if (inputDeviceGGT26DofPart.inputDeviceGGT26Dof.RightHandOpen == false) {
- inputDeviceGGT26DofPart.inputDataGGT26Dof.isFound = false;
- }
- }
- //if (inputDeviceHandPart.inputDataHand.isFound == false) {
- // timer += Time.deltaTime;
- // inputDeviceHandPart.inputDataHand.handInfo.lostPercent = timer / inputDeviceHandPart.inputDataHand.handInfo.lostTimer;
- // if (inputDeviceHandPart.inputDataHand.handInfo.lostPercent >= 1) {
- // inputDeviceHandPart.inputDataHand.handInfo.lostPercent = 1;
- // inputDeviceHandPart.inputDataHand.handInfo.isLost = true;
- // }
- // ///hand都是多少百分比后将手势值设为复位值,以触发UP事件(如果已经Down或者Drag后)
- // //if(inputDeviceHandPart.inputDataHand.handInfo.lostPercent > 0.90f) {
- // // //Debug.Log("========= lost > 80 :" + inputDeviceHandPart.PartType);
- // // inputDeviceHandPart.inputDataHand.ResetHandData(inputDeviceHandPart.PartType);
- // //}
- //} else {
- // timer = 0;
- // inputDeviceHandPart.inputDataHand.handInfo.lostPercent = 0;
- // inputDeviceHandPart.inputDataHand.handInfo.isLost = false;
- //}
- inputDeviceHandPart.inputDataHand.handInfo.isLost = !inputDeviceHandPart.inputDataHand.isFound;
- if (inputDeviceHandPart.inputDataHand.handInfo.isLost) {
- inputDeviceHandPart.inputDataBase.isVaild = false;
- //DebugMy.Log("Hand:" + inputDeviceHandPart.PartType + " Status: DisActive !", this);
- } else {
- inputDeviceHandPart.inputDataBase.isVaild = true;
- //DebugMy.Log("Hand:" + inputDeviceHandPart.PartType + " Status: Active", this);
- }
- if (ISGCPriorityGGT26Dof == true) {
- //if (API_Module_InputSystem.InputDeviceStatus(InputDeviceType.KS) || API_Module_InputSystem.InputDeviceStatus(InputDeviceType.BT3Dof)) {
- // inputDeviceHandPart.inputDataBase.isVaild = false;
- //}
- if (API_GSXR_Module_InputSystem.GSXR_InputDeviceStatus(InputDeviceType.KS) || API_GSXR_Module_InputSystem.GSXR_InputDeviceStatus(InputDeviceType.BT3Dof))
- {
- inputDeviceHandPart.inputDataBase.isVaild = false;
- }
- }
- }
- public override void OnSCFuncitonWaitForEndOfFrame() {
- base.OnSCFuncitonWaitForEndOfFrame();
- isUpdateDataThisFrame = false;
- }
- /// <summary>
- /// every frame invoke once
- /// </summary>
- /// <param name="mode"></param>
- /// <param name="pose"></param>
- /// <returns></returns>
- protected virtual void UpdateStatus(float[] mode, float[] pose) {
- ///识别到手的个数
- InputDataGGT26Dof.handsInfo.handAmount = (int)mode[0];
- ///0代表不知左右
- ///1代表左
- ///2代表右
- ///可以同时0或1或2,此时舍去一个
- ///
- if ((int)mode[0] == 0) {
- InputDataGGT26Dof.handsInfo.handLeftFind = false;
- InputDataGGT26Dof.handsInfo.handRightFind = false;
- } else if ((int)mode[0] == 1) {
- if ((int)(mode[1]) == 1) {
- InputDataGGT26Dof.handsInfo.handLeftFind = true;
- InputDataGGT26Dof.handsInfo.handRightFind = false;
- InputDataGGT26Dof.handsInfo.handLeftIndex = 0;
- } else if ((int)(mode[1]) == 2) {
- InputDataGGT26Dof.handsInfo.handLeftFind = false;
- InputDataGGT26Dof.handsInfo.handRightFind = true;
- InputDataGGT26Dof.handsInfo.handRighIndex = 0;
- }
- } else if ((int)mode[0] == 2) {
- if ((int)(mode[1]) == 1 && (int)(mode[3 + 63]) == 2) {
- InputDataGGT26Dof.handsInfo.handLeftFind = true;
- InputDataGGT26Dof.handsInfo.handRightFind = true;
- InputDataGGT26Dof.handsInfo.handLeftIndex = 0;
- InputDataGGT26Dof.handsInfo.handRighIndex = 1;
- }
- }
- if (Application.platform != RuntimePlatform.Android) {
- InputDataGGT26Dof.handsInfo.handLeftFind = true;
- InputDataGGT26Dof.handsInfo.handRightFind = true;
- InputDataGGT26Dof.handsInfo.handRighIndex = 0;
- InputDataGGT26Dof.handsInfo.handRighIndex = 1;
- ///按K键左手丢失
- if (Input.GetKey(KeyCode.O) == true) {
- InputDataGGT26Dof.handsInfo.handLeftFind = false;
- }
- ///按L键右手丢失
- if (Input.GetKey(KeyCode.P) == true) {
- InputDataGGT26Dof.handsInfo.handRightFind = false;
- }
- }
- if (InputDataGGT26Dof.handsInfo.handLeftFind) {
- InputDataGGT26Dof.handsInfo.handLeft.findFrameCount++;
- } else if (InputDataGGT26Dof.handsInfo.handLeftFind == false) {
- InputDataGGT26Dof.handsInfo.handLeft.findFrameCount = 0;
- }
- if (InputDataGGT26Dof.handsInfo.handRightFind) {
- InputDataGGT26Dof.handsInfo.handRight.findFrameCount++;
- } else if (InputDataGGT26Dof.handsInfo.handRightFind == false) {
- InputDataGGT26Dof.handsInfo.handRight.findFrameCount = 0;
- }
- if (InputDataGGT26Dof.handsInfo.handLeft.findFrameCount > InputDataGGT26Dof.handsInfo.handLeft.frameCountValid) {
- InputDataGGT26Dof.handsInfo.handLeftFind = true;
- } else if (InputDataGGT26Dof.handsInfo.handLeft.isLost) {
- InputDataGGT26Dof.handsInfo.handLeftFind = false;
- }
- if (InputDataGGT26Dof.handsInfo.handRight.findFrameCount > InputDataGGT26Dof.handsInfo.handRight.frameCountValid) {
- InputDataGGT26Dof.handsInfo.handRightFind = true;
- } else if (InputDataGGT26Dof.handsInfo.handRight.isLost) {
- InputDataGGT26Dof.handsInfo.handRightFind = false;
- }
- }
- }
- }
|