Exemplo n.º 1
0
        public override void ReassociateTrackables()
        {
            this.RemoveDestroyedTrackables();
            VuMarkManagerImpl expr_11 = (VuMarkManagerImpl)this.GetVuMarkManager();

            expr_11.RemoveDestroyedTrackables();
            expr_11.DestroyBehaviourCopies();
            ObjectTracker tracker = TrackerManager.Instance.GetTracker <ObjectTracker>();

            if (tracker != null)
            {
                IEnumerable <DataSet> dataSets = tracker.GetDataSets();
                List <DataSet>        list     = tracker.GetActiveDataSets().ToList <DataSet>();
                foreach (DataSet current in dataSets)
                {
                    if (list.Contains(current))
                    {
                        tracker.DeactivateDataSet(current);
                    }
                    this.AssociateTrackableBehavioursForDataSet(current);
                    if (list.Contains(current))
                    {
                        tracker.ActivateDataSet(current);
                    }
                }
            }
            WordManagerImpl expr_9B = (WordManagerImpl)this.GetWordManager();

            expr_9B.RemoveDestroyedTrackables();
            expr_9B.InitializeWordBehaviourTemplates();
        }
        private void UpdateExtendedTrackedVuMarks()
        {
            StateManagerImpl expr_0F = (StateManagerImpl)TrackerManager.Instance.GetStateManager();

            VuforiaManager.TrackableIdPair[] array = expr_0F.GetExtendedTrackingManager().GetExtendedTrackedBehaviours().ToArray <VuforiaManager.TrackableIdPair>();
            VuMarkManagerImpl vuMarkManagerImpl    = (VuMarkManagerImpl)expr_0F.GetVuMarkManager();
            List <int>        list = new List <int>();

            for (int i = 0; i < this.mVuMarkResultDataArray.Length; i++)
            {
                list.Add(this.mVuMarkResultDataArray[i].resultID);
            }
            Dictionary <int, List <int> > dictionary = new Dictionary <int, List <int> >();

            VuforiaManager.TrackableIdPair[] array2 = array;
            for (int j = 0; j < array2.Length; j++)
            {
                int resultId = array2[j].ResultId;
                VuMarkAbstractBehaviour behaviourWithResultID = vuMarkManagerImpl.GetBehaviourWithResultID(resultId);
                if (behaviourWithResultID != null)
                {
                    int iD = behaviourWithResultID.VuMarkTarget.ID;
                    if (!list.Contains(resultId))
                    {
                        if (!dictionary.ContainsKey(iD))
                        {
                            dictionary[iD] = new List <int>();
                        }
                        dictionary[iD].Add(resultId);
                    }
                    else
                    {
                        list.Remove(resultId);
                    }
                }
            }
            for (int k = 0; k < this.mVuMarkResultDataArray.Length; k++)
            {
                int targetID = this.mVuMarkResultDataArray[k].targetID;
                int resultID = this.mVuMarkResultDataArray[k].resultID;
                if (list.Contains(resultID) && dictionary.ContainsKey(targetID))
                {
                    List <int> list2 = dictionary[targetID];
                    if (list2.Count > 0)
                    {
                        int num = list2[list2.Count - 1];
                        list2.RemoveAt(list2.Count - 1);
                        Debug.Log(string.Concat(new object[]
                        {
                            "CHANGE RESULT ID ",
                            this.mVuMarkResultDataArray[k].resultID,
                            " => ",
                            num
                        }));
                        this.mVuMarkResultDataArray[k].resultID = num;
                    }
                }
            }
            List <VuforiaManagerImpl.VuMarkTargetResultData> list3 = this.mVuMarkResultDataArray.ToList <VuforiaManagerImpl.VuMarkTargetResultData>();

            array2 = array;
            for (int j = 0; j < array2.Length; j++)
            {
                VuforiaManager.TrackableIdPair trackableIdPair = array2[j];
                if (trackableIdPair.ResultId >= 0)
                {
                    bool flag = false;
                    VuforiaManagerImpl.VuMarkTargetResultData[] array3 = this.mVuMarkResultDataArray;
                    for (int l = 0; l < array3.Length; l++)
                    {
                        if (array3[l].resultID == trackableIdPair.ResultId)
                        {
                            flag = true;
                            break;
                        }
                    }
                    if (!flag)
                    {
                        VuMarkAbstractBehaviour behaviourWithResultID2 = vuMarkManagerImpl.GetBehaviourWithResultID(trackableIdPair.ResultId);
                        list3.Add(new VuforiaManagerImpl.VuMarkTargetResultData
                        {
                            pose = new VuforiaManagerImpl.PoseData
                            {
                                coordinateSystem = TrackableBehaviour.CoordinateSystem.WORLD,
                                position         = behaviourWithResultID2.transform.position,
                                orientation      = behaviourWithResultID2.transform.rotation * Quaternion.AngleAxis(90f, Vector3.right)
                            },
                            resultID = trackableIdPair.ResultId,
                            targetID = behaviourWithResultID2.VuMarkTarget.ID,
                            status   = TrackableBehaviour.Status.EXTENDED_TRACKED
                        });
                    }
                }
            }
            this.mVuMarkResultDataArray = list3.ToArray();
            HashSet <int> hashSet = new HashSet <int>();

            array2 = array;
            for (int j = 0; j < array2.Length; j++)
            {
                VuforiaManager.TrackableIdPair trackableIdPair2 = array2[j];
                if (trackableIdPair2.ResultId >= 0)
                {
                    VuMarkAbstractBehaviour behaviourWithResultID3 = vuMarkManagerImpl.GetBehaviourWithResultID(trackableIdPair2.ResultId);
                    if (behaviourWithResultID3 != null && behaviourWithResultID3.VuMarkTarget != null)
                    {
                        hashSet.Add(behaviourWithResultID3.VuMarkTarget.ID);
                    }
                }
            }
            List <VuforiaManagerImpl.VuMarkTargetData> list4 = new List <VuforiaManagerImpl.VuMarkTargetData>();

            for (int m = 0; m < this.mVuMarkDataArray.Length; m++)
            {
                int id = this.mVuMarkDataArray[m].id;
                if (!hashSet.Contains(id))
                {
                    list4.Add(this.mVuMarkDataArray[m]);
                }
            }
            this.mVuMarkDataArray = list4.ToArray();
        }