Example #1
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));
            }
        }
Example #2
0
        private void Start()
        {
            // init filter
            kalmanFilters = new SimpleKalman[4];
            for (int i = 0; i < kalmanFilters.Length; i++)
            {
                kalmanFilters[i]   = new SimpleKalman();
                kalmanFilters[i].Q = kalmanQ;
                kalmanFilters[i].R = kalmanR;
            }

            orientationFilter = new SimpleKalman[2];
            for (int i = 0; i < orientationFilter.Length; i++)
            {
                orientationFilter[i]   = new SimpleKalman();
                orientationFilter[i].Q = 0.0001;
                orientationFilter[i].R = 0.005;
            }
            hipHeightFilter   = new SimpleKalman();
            hipHeightFilter.Q = 0.0001;
            hipHeightFilter.R = 0.003;

            InitFeet();

            // register data receiver becaus head rotation is needed here
            UnityModelDataManager mdm = GetComponent <UnityModelDataManager>();

            mdm.SubscribeReceiver(this);
        }
Example #3
0
        public void AssignUserToEntity(int user, int entity)
        {
            UnityModelDataManager mdm = null;

            if (entity != 0)
            {
                foreach (IMikaTrackedEntity item in trackedEntities)
                {
                    if (item.GetID() == entity)
                    {
                        mdm = item.GetModelDataManager();
                    }
                }

                if (mdm == null)
                {
                    return;
                }
            }

            if (user == 1)
            {
                nwPlayer1.AssignModelDataManager(mdm);
            }
            else if (user == 2)
            {
                nwPlayer2.AssignModelDataManager(mdm);
            }
        }
Example #4
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);
            }
        }
Example #5
0
        private void OnDestroy()
        {
            UnityModelDataManager mdm = GetComponent <UnityModelDataManager>();

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

            mdm.UnsubscribeReseiver(this);

            if (UserManager.Instance != null)
            {
                UserManager.Instance.RemoveTrackedEntity(this);
            }
            Destroy(avatar);
            if (LeftFoot != null)
            {
                Destroy(LeftFoot.gameObject);
            }
            if (rightFoot != null)
            {
                Destroy(rightFoot.gameObject);
            }
        }
        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();
        }
Example #7
0
        private void OnDestroy()
        {
            UnityModelDataManager mdm = GetComponent <UnityModelDataManager>();

            if (mdm != null)
            {
                mdm.RemoveProvider(headData);
            }
        }
Example #8
0
        private IEnumerator PollModelDataManager()
        {
            UnityModelDataManager mdm = FindObjectOfType <UnityModelDataManager>();

            while (mdm == null)
            {
                mdm = FindObjectOfType <UnityModelDataManager>();
                yield return(new WaitForSeconds(0.7f));
            }
            mdm.AddProvider(headData);
        }
        private void OnDestroy()
        {
            UnityModelDataManager mdm = GetComponent <UnityModelDataManager>();

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

            mdm.SubscribeReceiver(this);
            UserManager.Instance.RemoveTrackedEntity(this);
        }
Example #10
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();
        }
        public void Initialize(Transform leftFoot, Transform rightFoot)
        {
            // init filter
            kalmanFilters = new SimpleKalman[4];
            for (int i = 0; i < kalmanFilters.Length; i++)
            {
                kalmanFilters[i]   = new SimpleKalman();
                kalmanFilters[i].Q = kalmanQ;
                kalmanFilters[i].R = kalmanR;
            }

            orientationFilter = new SimpleKalman[2];
            for (int i = 0; i < orientationFilter.Length; i++)
            {
                orientationFilter[i]   = new SimpleKalman();
                orientationFilter[i].Q = 0.0001;
                orientationFilter[i].R = 0.005;
            }
            hipHeightFilter   = new SimpleKalman();
            hipHeightFilter.Q = 0.0001;
            hipHeightFilter.R = 0.003;

            viveLeftFoot  = leftFoot;  //GameObject.FindGameObjectWithTag("ViveTracker01").transform;
            viveRightFoot = rightFoot; //GameObject.FindGameObjectWithTag("ViveTracker02").transform;

            //if (useHandTracking) {
            //    viveLeftHand = GameObject.FindGameObjectWithTag("ViveController01").transform;
            //    viveRightHand = GameObject.FindGameObjectWithTag("ViveController02").transform;
            //}

            InitFeet();

            // register data receiver becaus head rotation is needed here
            UnityModelDataManager mdm = GetComponent <UnityModelDataManager>();

            mdm.SubscribeReceiver(this);
            //mdm.userID = ID;
            UserManager.Instance.AddTrackedEntity(this);
        }