public NxrLaserPointer GetControllerLaser(InteractionManager.NACTION_HAND_TYPE hAND_TYPE)
 {
     if (DualCtrlDeviceDict.ContainsKey(hAND_TYPE))
     {
         NxrTrackedDevice nxrTrackedDevice = DualCtrlDeviceDict[hAND_TYPE];
         return(nxrTrackedDevice.GetLaserPointer());
     }
     return(null);
 }
Exemple #2
0
        /// <summary>
        ///  Check 6dof controller key status, whether the button is pressed.
        /// </summary>
        /// <param name="key">refer to CKeyEvent</param>
        /// <param name="handType">left or right</param>
        /// <returns></returns>
        public static bool GetControllerKeyPressed(int key, InteractionManager.NACTION_HAND_TYPE handType)
        {
            bool isPressed = false;

            if (handType == InteractionManager.NACTION_HAND_TYPE.HAND_LEFT)
            {
                isPressed = KeyStateControllerNOLO_Left[key] == CKeyEvent.ACTION_DOWN;
            }
            else if (handType == InteractionManager.NACTION_HAND_TYPE.HAND_RIGHT)
            {
                isPressed = KeyStateControllerNOLO_Right[key] == CKeyEvent.ACTION_DOWN;
            }

            if (isPressed)
            {
                return(true);
            }

            return(false);
        }
        void OnControllerStatusChangeEvent(InteractionManager.NACTION_HAND_TYPE handType, bool isConnected,
                                           bool isSixDofController)
        {
            if (!isSixDofController)
            {
                Debug.Log("---OnControllerStatusChangeEvent---isSixDofController=false-");
                return;
            }

            DualCtrlConnected[(int)handType] = isConnected;
            if (handType == InteractionManager.NACTION_HAND_TYPE.HAND_LEFT && isConnected)
            {
                Debug.Log("---CreateControllerModel---Left-");
                LoadControllerModel(NxrInstantNativeApi.HoloeverDeviceType.LeftController, "Controller6DofLeft");
            }

            if (handType == InteractionManager.NACTION_HAND_TYPE.HAND_RIGHT && isConnected)
            {
                Debug.Log("---CreateControllerModel---Right-");
                LoadControllerModel(NxrInstantNativeApi.HoloeverDeviceType.RightController, "Controller6DofRight");
            }
        }
        private void CreateControllerModel(NxrInstantNativeApi.HoloeverDeviceType deviceType, string objName,
                                           InteractionManager.ControllerConfig mControllerConfig)
        {
            string objPath = mControllerConfig.objPath;

            if (deviceType == NxrInstantNativeApi.HoloeverDeviceType.LeftController)
            {
                objPath = mControllerConfig.leftCtrlObjPath;
            }
            else if (deviceType == NxrInstantNativeApi.HoloeverDeviceType.RightController)
            {
                objPath = mControllerConfig.rightCtrlObjPath;
            }

            if (objPath == null)
            {
                Debug.LogError("CreateControllerModel failed, objPath is null......" + objName);
                return;
            }

            GameObject      go = new GameObject(objName);
            NxrLaserPointer mNxrLaserPointer = go.AddComponent <NxrLaserPointer>();

            mNxrLaserPointer.deviceType = deviceType;
            go.transform.SetParent(transformCache);
            go.transform.localScale    = Vector3.one;
            go.transform.localPosition = new Vector3(0, 0, 0);
            go.transform.localRotation = new Quaternion(0, 0, 0, 1);

            GameObject modelGOParent = new GameObject("model_P");

            modelGOParent.transform.localScale    = new Vector3(-1, 1, 1);
            modelGOParent.transform.localPosition = new Vector3(0, 0, 0);
            modelGOParent.transform.localRotation = new Quaternion(0, 0, 0, 1);
            modelGOParent.transform.SetParent(go.transform);

            GameObject modelGO = new GameObject("model");

            modelGO.transform.SetParent(modelGOParent.transform);
            modelGO.transform.localScale = new Vector3(mControllerConfig.modelScale[0]
                                                       , mControllerConfig.modelScale[1], mControllerConfig.modelScale[2]);
            modelGO.transform.localRotation = Quaternion.Euler(mControllerConfig.modelRotation[0],
                                                               mControllerConfig.modelRotation[1], mControllerConfig.modelRotation[2]);
            modelGO.transform.localPosition = new Vector3(mControllerConfig.modelPosition[0]
                                                          , mControllerConfig.modelPosition[1], mControllerConfig.modelPosition[2]);
            modelGO.AddComponent <NxrControllerModel>();

            //  string objPath = "/system/etc/Objs/housing_bott.obj";
            Debug.Log("objPath=" + objPath);

            ObjModelLoader mObjModelLoader = go.GetComponent <ObjModelLoader>();

            if (mObjModelLoader == null)
            {
                go.AddComponent <ObjMaterial>();
                mObjModelLoader = go.AddComponent <ObjModelLoader>();
            }

            mObjModelLoader.LoadObjFile(objPath, modelGO.transform);

            GameObject powerGO = new GameObject("Power");

            powerGO.transform.SetParent(go.transform);

            MeshRenderer powerMeshRenderer = powerGO.AddComponent <MeshRenderer>();
            Mesh         quadMesh          = new Mesh();

            quadMesh.name = "QUAD";
            float quadSize = 0.5f;

            quadMesh.vertices = new Vector3[]
            {
                new Vector3(-1 * quadSize, -1 * quadSize, 0),
                new Vector3(-1 * quadSize, 1 * quadSize, 0),
                new Vector3(1 * quadSize, 1 * quadSize, 0),
                new Vector3(1 * quadSize, -1 * quadSize, 0)
            };
            quadMesh.uv = new Vector2[]
            {
                new Vector2(0, 0),
                new Vector2(0, 1),
                new Vector2(1, 1),
                new Vector2(1, 0)
            };
            int[] triangles = { 0, 1, 2, 0, 2, 3 };
            quadMesh.triangles = triangles;

            powerGO.AddComponent <MeshFilter>().mesh = quadMesh;
            powerGO.AddComponent <MeshCollider>();
            powerGO.AddComponent <HoloeverControllerPower>();

            powerGO.transform.localPosition = new Vector3(mControllerConfig.batteryPosition[0],
                                                          mControllerConfig.batteryPosition[1]
                                                          , mControllerConfig.batteryPosition[2]);
            powerGO.transform.localRotation = Quaternion.Euler(mControllerConfig.batteryRotation[0],
                                                               mControllerConfig.batteryRotation[1]
                                                               , mControllerConfig.batteryRotation[2]);
            powerGO.transform.localScale = new Vector3(mControllerConfig.batteryScale[0],
                                                       mControllerConfig.batteryScale[1]
                                                       , mControllerConfig.batteryScale[2]);

            // 射线起点
            mNxrLaserPointer.SetHolderLocalPosition(new Vector3(mControllerConfig.rayStartPosition[0],
                                                                mControllerConfig.rayStartPosition[1],
                                                                mControllerConfig.rayStartPosition[2]));

            NxrTrackedDevice trackedDevice = go.AddComponent <NxrTrackedDevice>();

            if (trackedDevice != null)
            {
                trackedDevice.ReloadLaserPointer(mNxrLaserPointer);
                trackedDevice.deviceType = deviceType;
                InteractionManager.NACTION_HAND_TYPE mHandType =
                    deviceType == NxrInstantNativeApi.HoloeverDeviceType.LeftController
                        ? InteractionManager.NACTION_HAND_TYPE.HAND_LEFT
                        : InteractionManager.NACTION_HAND_TYPE.HAND_RIGHT;

                if (!DualCtrlDeviceDict.ContainsKey(mHandType))
                {
                    DualCtrlDeviceDict.Add(mHandType, trackedDevice);
                }
                else
                {
                    DualCtrlDeviceDict[mHandType] = trackedDevice;
                }
            }

            if (deviceType == NxrInstantNativeApi.HoloeverDeviceType.LeftController)
            {
                leftObj     = go;
                leftModelGo = modelGO;
            }
            else if (deviceType == NxrInstantNativeApi.HoloeverDeviceType.RightController)
            {
                rightObj     = go;
                rightModelGo = modelGO;
            }

            //close
            NxrViewer.Instance.SwitchControllerMode(true);
            Debug.Log("HideGaze.ForceUseReticle3");
        }
Exemple #5
0
        // Update is called once per frame
        void Update()
        {
            //GameObject controllerDot = NibiruAxis.NxrPlayerCtrl.Instance.GetControllerLaserDot();
            //if (controllerDot != null)
            //{
            //    Debug.Log("Contoller Dot:" + controllerDot.transform.position.ToString());
            //}
            //NxrReticle reticle = NxrViewer.Instance.GetNxrReticle();
            //if (reticle.IsShowing())
            //{
            //    Debug.Log("Reticle:" + reticle.GetReticlePointer().transform.position.ToString());
            //}

            if (NxrInput.GetKeyDown(CKeyEvent.KEYCODE_DPAD_CENTER))
            {
                textMesh.text = "HMD Enter : Down";
            }

            if (NxrInput.GetKeyPressed(CKeyEvent.KEYCODE_DPAD_CENTER))
            {
                textMesh.text = "HMD Enter : Pressed";
            }

            if (NxrInput.GetKeyUp(CKeyEvent.KEYCODE_DPAD_CENTER))
            {
                textMesh.text = "HMD Enter  : Up";
            }

            if (NxrInput.GetKeyDown(CKeyEvent.KEYCODE_BACK))
            {
                textMesh.text = "HMD Back : Down";
            }

            if (NxrInput.GetKeyPressed(CKeyEvent.KEYCODE_BACK))
            {
                textMesh.text = "HMD Back : Pressed";
            }

            if (NxrInput.GetKeyUp(CKeyEvent.KEYCODE_BACK))
            {
                textMesh.text = "HMD Back : Up";
            }

            if (NxrInput.GetKeyDown(CKeyEvent.KEYCODE_DPAD_LEFT))
            {
                textMesh.text = "HMD Left : Down";
            }

            if (NxrInput.GetKeyPressed(CKeyEvent.KEYCODE_DPAD_LEFT))
            {
                textMesh.text = "HMD Left : Pressed";
            }

            if (NxrInput.GetKeyUp(CKeyEvent.KEYCODE_DPAD_LEFT))
            {
                textMesh.text = "HMD Left : Up";
            }

            if (NxrInput.GetKeyDown(CKeyEvent.KEYCODE_DPAD_RIGHT))
            {
                textMesh.text = "HMD Right : Down";
            }

            if (NxrInput.GetKeyPressed(CKeyEvent.KEYCODE_DPAD_RIGHT))
            {
                textMesh.text = "HMD Right : Pressed";
            }

            if (NxrInput.GetKeyUp(CKeyEvent.KEYCODE_DPAD_RIGHT))
            {
                textMesh.text = "HMD Right : Up";
            }

            if (NxrInput.GetKeyDown(CKeyEvent.KEYCODE_DPAD_UP))
            {
                textMesh.text = "HMD Up : Down";
            }

            if (NxrInput.GetKeyPressed(CKeyEvent.KEYCODE_DPAD_UP))
            {
                textMesh.text = "HMD Up : Pressed";
            }

            if (NxrInput.GetKeyUp(CKeyEvent.KEYCODE_DPAD_UP))
            {
                textMesh.text = "HMD Up : Up";
            }

            if (NxrInput.GetKeyDown(CKeyEvent.KEYCODE_DPAD_DOWN))
            {
                textMesh.text = "HMD Down : Down";
            }

            if (NxrInput.GetKeyPressed(CKeyEvent.KEYCODE_DPAD_DOWN))
            {
                textMesh.text = "HMD Down : Pressed";
            }

            if (NxrInput.GetKeyUp(CKeyEvent.KEYCODE_DPAD_DOWN))
            {
                textMesh.text = "HMD Down : Up";
            }

            // 3DOF Controller
            if (InteractionManager.Is3DofControllerConnected())
            {
                InteractionManager.NACTION_HAND_TYPE mHandType = InteractionManager.GetHandTypeByHandMode();
                TextMesh textMeshController = textMeshControllerRight;
                if (mHandType == InteractionManager.NACTION_HAND_TYPE.HAND_LEFT)
                {
                    textMeshController = textMeshControllerLeft;
                }

                bool HasKeyDown = false;
                for (int i = 0, size = threeDofCtrlKeyCode.Length; i < size; i++)
                {
                    int    keyCode = threeDofCtrlKeyCode[i];
                    string keyStr  = threeDofCtrlKeyStr[i];
                    if (NxrInput.GetControllerKeyDown(keyCode))
                    {
                        textMeshController.text = keyStr + "Down_" + mHandType.ToString();
                        HasKeyDown = true;
                    }

                    if (!HasKeyDown && NxrInput.GetControllerKeyPressed(keyCode))
                    {
                        textMeshController.text = keyStr + "Pressed_" + mHandType.ToString();
                        HasKeyDown = true;
                    }

                    if (!HasKeyDown)
                    {
                        if (NxrInput.GetControllerKeyUp(keyCode))
                        {
                            textMeshController.text = keyStr + "Up_" + mHandType.ToString();
                        }
                    }
                }
            }
            else
            {
                // SixDof Controller
                foreach (InteractionManager.NACTION_HAND_TYPE HandType in handTypes)
                {
                    TextMesh textMeshCtrl = null;
                    if (HandType == InteractionManager.NACTION_HAND_TYPE.HAND_LEFT)
                    {
                        textMeshCtrl = textMeshControllerLeft;
                    }
                    else
                    {
                        textMeshCtrl = textMeshControllerRight;
                    }

                    bool HasKeyDown = false;
                    for (int i = 0, size = sixDofCtrlKeyCode.Length; i < size; i++)
                    {
                        int    keyCode = sixDofCtrlKeyCode[i];
                        string keyStr  = sixDofCtrlKeyStr[i];
                        if (NxrInput.GetControllerKeyDown(keyCode, HandType))
                        {
                            textMeshCtrl.text = keyStr + "Down_" + HandType.ToString();
                            HasKeyDown        = true;
                        }

                        if (!HasKeyDown && NxrInput.GetControllerKeyPressed(keyCode, HandType))
                        {
                            textMeshCtrl.text = keyStr + "Pressed_" + HandType.ToString();
                            HasKeyDown        = true;
                        }

                        if (!HasKeyDown)
                        {
                            if (NxrInput.GetControllerKeyUp(keyCode, HandType))
                            {
                                textMeshCtrl.text = keyStr + "Up_" + HandType.ToString();
                            }
                        }
                    }
                }
            }
        }
Exemple #6
0
 /// <summary>
 ///  Get Controller Touchpad Touch Position
 ///  Horizontal direction: (Left->Right) -1~1
 ///  Vertical direction: (Up->Down) -1~1
 /// </summary>
 /// <param name="handType">left or right</param>
 /// <returns></returns>
 public static Vector2 GetTouchPadPosition(InteractionManager.NACTION_HAND_TYPE handType)
 {
     return(handType == InteractionManager.NACTION_HAND_TYPE.HAND_LEFT
         ? InteractionManager.TouchPadPositionLeft
         : InteractionManager.TouchPadPositionRight);
 }