Esempio n. 1
0
        private void InitFeet()
        {
            leftFootData  = new LeftFootData(() => GetLeftFootPosition(), () => GetLeftFootRotation() /*GetLeftFootRotation()*/);
            rightFootData = new RightFootData(() => GetRightFootPosition(), () => GetRightFootRotation() /*GetRightFootRotation()*/);
            hipData       = new HipData(() => GetCenterPosition(), () => GetCenterRotation());
            leftHandData  = new LeftHandData(() => GetLeftHandPosition(), () => GetLeftHandRotation());
            rightHandData = new RightHandData(() => GetRightHandPosition(), () => GetRightHandRotation());

            UnityModelDataManager mdm = GetComponent <UnityModelDataManager>();

            mdm.AddProvider(leftFootData);
            mdm.AddProvider(rightFootData);
            mdm.AddProvider(hipData);
            mdm.AddProvider(leftHandData);
            mdm.AddProvider(rightHandData);

            leftFoot  = Instantiate(playerFootPrefab);
            rightFoot = Instantiate(playerFootPrefab);

            if (useLineRenderers)
            {
                leftFoot.InitLineRenderer(Color.red);
                rightFoot.InitLineRenderer(Color.blue);
            }
        }
        private void InitFeet()
        {
            //yield return new WaitUntil(mdm != null);
            leftFootData  = new LeftFootData(() => GetLeftFootPosition(), () => GetLeftFootRotation() /*GetLeftFootRotation()*/);
            rightFootData = new RightFootData(() => GetRightFootPosition(), () => GetRightFootRotation() /*GetRightFootRotation()*/);
            hipData       = new HipData(() => GetCenterPosition(), () => GetCenterRotation());
            leftHandData  = new LeftHandData(() => GetLeftHandPosition(), () => GetLeftHandRotation());
            rightHandData = new RightHandData(() => GetRightHandPosition(), () => GetRightHandRotation());

            UnityModelDataManager mdm = GetComponent <UnityModelDataManager>();

            print("mdm " + mdm + " lf " + leftFootData);
            mdm.AddProvider(leftFootData);
            mdm.AddProvider(rightFootData);
            mdm.AddProvider(hipData);
            mdm.AddProvider(leftHandData);
            mdm.AddProvider(rightHandData);

            // comments are approximations which can be used if calibration with trackers does not provide satisfying results
            leftFootDirectionCorrection    = /*vLeftFoot.up;*/ new Vector3(0, -0.3f, 0.1f);
            leftFootDirectionCorrection.z  = 0;
            rightFootDirectionCorrection   = /*vRightFoot.up;*/ new Vector3(0, -0.3f, 0.1f);
            rightFootDirectionCorrection.z = 0;

            print("Left foot orientation correction: " + leftFootDirectionCorrection);
            print("Right foot orientation correction: " + rightFootDirectionCorrection);


            lastLeftFootPosition  = viveLeftFoot.position;
            lastRightFootPosition = viveRightFoot.position;

            TrackViveFeet();
        }
Esempio n. 3
0
        private IEnumerator TryAssignPlayer()
        {
            while (modelDataManager == null)
            {
                UnityModelDataManager[] mdms = FindObjectsOfType <UnityModelDataManager>();

                foreach (UnityModelDataManager item in mdms)
                {
                    if (item.userID == 0)
                    {
                        modelDataManager = item;
                        //// TODO: this is just a workaround.
                        //// vive implementation has no "UnityPharusFootTracking"
                        //if (modelDataManager.GetComponent<UnityPharusFootTracking>() != null) {
                        //    playerNumber = modelDataManager.userID = (int)modelDataManager.GetComponent<UnityPharusFootTracking>().TrackID;
                        //}
                        //else if (modelDataManager.GetComponent<UnityViveTracking>() !=  null) {
                        //    playerNumber = modelDataManager.GetComponent<UnityViveTracking>().GetID();
                        //}

                        playerNumber = modelDataManager.GetComponent <IMikaTrackedEntity>().GetID();

                        item.userID = ID;

                        modelDataManager.AddProvider(headData);
                        modelDataManager.SubscribeReceiver(this);
                        break;
                    }
                }

                yield return(new WaitForSeconds(0.333f));
            }
        }
Esempio n. 4
0
        private IEnumerator PollModelDataManager()
        {
            UnityModelDataManager mdm = FindObjectOfType <UnityModelDataManager>();

            while (mdm == null)
            {
                mdm = FindObjectOfType <UnityModelDataManager>();
                yield return(new WaitForSeconds(0.7f));
            }
            mdm.AddProvider(headData);
        }
Esempio n. 5
0
        public void AssignModelDataManager(UnityModelDataManager mdm)
        {
            // forget old manager
            if (modelDataManager != null)
            {
                modelDataManager.RemoveProvider(headData);
                modelDataManager.UnsubscribeReseiver(this);
            }

            // assign new manager
            modelDataManager = mdm;
            if (mdm == null)
            {
                return;
            }
            modelDataManager.AddProvider(headData);
            modelDataManager.SubscribeReceiver(this);
            playerNumber = modelDataManager.GetComponent <IMikaTrackedEntity>().GetID();
        }