private VirtualButton CreateNewVirtualButtonInNative(string name, RectangleData rectangleData)
        {
            if (this.ImageTargetType != ImageTargetType.PREDEFINED)
            {
                Debug.LogError("DataSet.RegisterVirtualButton: virtual button '" + name + "' cannot be registered for a user defined target.");
                return(null);
            }
            IntPtr intPtr = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(RectangleData)));

            Marshal.StructureToPtr(rectangleData, intPtr, false);
            bool          arg_63_0      = VuforiaWrapper.Instance.ImageTargetCreateVirtualButton(this.mDataSet.DataSetPtr, base.Name, name, intPtr) != 0;
            VirtualButton virtualButton = null;

            if (arg_63_0)
            {
                int num = VuforiaWrapper.Instance.VirtualButtonGetId(this.mDataSet.DataSetPtr, base.Name, name);
                if (!this.mVirtualButtons.ContainsKey(num))
                {
                    virtualButton = new VirtualButtonImpl(name, num, rectangleData, this, this.mDataSet);
                    this.mVirtualButtons.Add(num, virtualButton);
                }
                else
                {
                    virtualButton = this.mVirtualButtons[num];
                }
            }
            return(virtualButton);
        }
        private void CreateVirtualButtonsFromNative()
        {
            int num = VuforiaWrapper.Instance.ImageTargetGetNumVirtualButtons(this.mDataSet.DataSetPtr, base.Name);

            if (num > 0)
            {
                IntPtr intPtr  = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(VuforiaManagerImpl.VirtualButtonData)) * num);
                IntPtr intPtr2 = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(RectangleData)) * num);
                VuforiaWrapper.Instance.ImageTargetGetVirtualButtons(intPtr, intPtr2, num, this.mDataSet.DataSetPtr, base.Name);
                for (int i = 0; i < num; i++)
                {
                    VuforiaManagerImpl.VirtualButtonData virtualButtonData = (VuforiaManagerImpl.VirtualButtonData)Marshal.PtrToStructure(new IntPtr(intPtr.ToInt64() + (long)(i * Marshal.SizeOf(typeof(VuforiaManagerImpl.VirtualButtonData)))), typeof(VuforiaManagerImpl.VirtualButtonData));
                    if (!this.mVirtualButtons.ContainsKey(virtualButtonData.id))
                    {
                        RectangleData area          = (RectangleData)Marshal.PtrToStructure(new IntPtr(intPtr2.ToInt64() + (long)(i * Marshal.SizeOf(typeof(RectangleData)))), typeof(RectangleData));
                        int           num2          = 128;
                        StringBuilder stringBuilder = new StringBuilder(num2);
                        if (VuforiaWrapper.Instance.ImageTargetGetVirtualButtonName(this.mDataSet.DataSetPtr, base.Name, i, stringBuilder, num2) == 0)
                        {
                            Debug.LogError("Failed to get virtual button name.");
                        }
                        else
                        {
                            VirtualButton value = new VirtualButtonImpl(stringBuilder.ToString(), virtualButtonData.id, area, this, this.mDataSet);
                            this.mVirtualButtons.Add(virtualButtonData.id, value);
                        }
                    }
                }
                Marshal.FreeHGlobal(intPtr);
                Marshal.FreeHGlobal(intPtr2);
            }
        }
예제 #3
0
 public VirtualButtonImpl(string name, int id, RectangleData area, ImageTarget imageTarget, DataSet dataSet)
 {
     this.mName              = name;
     this.mID                = id;
     this.mArea              = area;
     this.mIsEnabled         = true;
     this.mParentImageTarget = imageTarget;
     this.mParentDataSet     = (DataSetImpl)dataSet;
 }
예제 #4
0
        public bool UpdateAreaRectangle()
        {
            RectangleData area = default(RectangleData);

            area.leftTopX     = this.mLeftTop.x;
            area.leftTopY     = this.mLeftTop.y;
            area.rightBottomX = this.mRightBottom.x;
            area.rightBottomY = this.mRightBottom.y;
            return(this.mVirtualButton != null && this.mVirtualButton.SetArea(area));
        }
        public VirtualButton CreateVirtualButton(string name, RectangleData area)
        {
            VirtualButton expr_08 = this.CreateNewVirtualButtonInNative(name, area);

            if (expr_08 == null)
            {
                Debug.LogError("Could not create Virtual Button.");
                return(expr_08);
            }
            Debug.Log("Created Virtual Button successfully.");
            return(expr_08);
        }
예제 #6
0
        public override bool SetArea(RectangleData area)
        {
            IntPtr intPtr = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(RectangleData)));

            Marshal.StructureToPtr(area, intPtr, false);
            bool arg_4F_0 = VuforiaWrapper.Instance.VirtualButtonSetAreaRectangle(this.mParentDataSet.DataSetPtr, this.mParentImageTarget.Name, this.Name, intPtr) != 0;

            Marshal.FreeHGlobal(intPtr);
            if (!arg_4F_0)
            {
                Debug.LogError("Virtual Button area rectangle could not be set.");
                return(false);
            }
            return(true);
        }
        internal void AssociateExistingVirtualButtonBehaviour(VirtualButtonAbstractBehaviour virtualButtonBehaviour)
        {
            VirtualButton virtualButton = this.mImageTarget.GetVirtualButtonByName(virtualButtonBehaviour.VirtualButtonName);

            if (virtualButton == null)
            {
                Vector2 vector;
                Vector2 vector2;
                virtualButtonBehaviour.CalculateButtonArea(out vector, out vector2);
                RectangleData area = new RectangleData
                {
                    leftTopX     = vector.x,
                    leftTopY     = vector.y,
                    rightBottomX = vector2.x,
                    rightBottomY = vector2.y
                };
                virtualButton = this.mImageTarget.CreateVirtualButton(virtualButtonBehaviour.VirtualButtonName, area);
                if (virtualButton != null)
                {
                    Debug.Log("Successfully created virtual button " + virtualButtonBehaviour.VirtualButtonName + " at startup");
                    virtualButtonBehaviour.UnregisterOnDestroy = true;
                }
                else
                {
                    Debug.LogError("Failed to create virtual button " + virtualButtonBehaviour.VirtualButtonName + " at startup");
                }
            }
            if (virtualButton != null && !this.mVirtualButtonBehaviours.ContainsKey(virtualButton.ID))
            {
                virtualButtonBehaviour.InitializeVirtualButton(virtualButton);
                this.mVirtualButtonBehaviours.Add(virtualButton.ID, virtualButtonBehaviour);
                Debug.Log(string.Concat(new object[]
                {
                    "Found VirtualButton named ",
                    virtualButtonBehaviour.VirtualButton.Name,
                    " with id ",
                    virtualButtonBehaviour.VirtualButton.ID
                }));
                virtualButtonBehaviour.UpdatePose();
                if (!virtualButtonBehaviour.UpdateAreaRectangle() || !virtualButtonBehaviour.UpdateSensitivity())
                {
                    Debug.LogError("Failed to update virtual button " + virtualButtonBehaviour.VirtualButton.Name + " at startup");
                    return;
                }
                Debug.Log("Updated virtual button " + virtualButtonBehaviour.VirtualButton.Name + " at startup");
            }
        }
        private bool CreateNewVirtualButtonFromBehaviour(VirtualButtonAbstractBehaviour newVBB)
        {
            Vector2 vector;
            Vector2 vector2;

            newVBB.CalculateButtonArea(out vector, out vector2);
            RectangleData area = new RectangleData
            {
                leftTopX     = vector.x,
                leftTopY     = vector.y,
                rightBottomX = vector2.x,
                rightBottomY = vector2.y
            };
            VirtualButton virtualButton = this.mImageTarget.CreateVirtualButton(newVBB.VirtualButtonName, area);

            if (virtualButton == null)
            {
                UnityEngine.Object.Destroy(newVBB.gameObject);
                return(false);
            }
            newVBB.InitializeVirtualButton(virtualButton);
            this.mVirtualButtonBehaviours.Add(virtualButton.ID, newVBB);
            return(true);
        }
예제 #9
0
        private void UpdateSurfaces(VuforiaManagerImpl.SmartTerrainRevisionData[] smartTerrainRevisions, VuforiaManagerImpl.SurfaceData[] updatedSurfaceData)
        {
            List <Surface> list  = new List <Surface>();
            List <Surface> list2 = new List <Surface>();
            List <Surface> list3 = new List <Surface>();

            for (int i = 0; i < updatedSurfaceData.Length; i++)
            {
                VuforiaManagerImpl.SurfaceData surfaceData = updatedSurfaceData[i];
                bool        flag = false;
                SurfaceImpl surfaceImpl;
                bool        flag2;
                if (!this.mSurfaces.ContainsKey(surfaceData.id))
                {
                    surfaceImpl = new SurfaceImpl(surfaceData.id, this.FindSmartTerrainTrackable(surfaceData.parentID));
                    this.mSurfaces.Add(surfaceData.id, surfaceImpl);
                    list.Add(surfaceImpl);
                    flag2 = true;
                    flag  = true;
                }
                else
                {
                    surfaceImpl = (SurfaceImpl)this.mSurfaces[surfaceData.id];
                    flag2       = (surfaceData.revision != surfaceImpl.MeshRevision);
                }
                if (flag2)
                {
                    Mesh mesh = MeshUtils.UpdateMesh(surfaceData.meshData, surfaceImpl.GetMesh(), false, true);
                    if (flag)
                    {
                        surfaceImpl.SetLocalPose(surfaceData.localPose);
                    }
                    if (mesh != null)
                    {
                        Mesh navMesh = null;
                        if (this.mReconstruction.IsNavMeshUpdating())
                        {
                            navMesh = MeshUtils.UpdateMesh(surfaceData.navMeshData, surfaceImpl.GetNavMesh(), true, true);
                        }
                        int[] meshBoundaries = ReconstructionAbstractBehaviour.ReadMeshBoundaries(surfaceData.numBoundaryIndices, surfaceData.meshBoundaryArray);
                        surfaceImpl.SetMesh(surfaceData.revision, mesh, navMesh, meshBoundaries);
                    }
                    RectangleData boundingBox  = surfaceData.boundingBox;
                    Rect          boundingBox2 = new Rect(boundingBox.leftTopX, boundingBox.leftTopY, boundingBox.rightBottomX - boundingBox.leftTopX, boundingBox.rightBottomY - boundingBox.leftTopY);
                    surfaceImpl.SetBoundingBox(boundingBox2);
                    list2.Add(surfaceImpl);
                }
                else
                {
                    Debug.LogError("Inconsistency: received updated Surface, but mesh revision is unchanged!");
                }
            }
            int[] array = new int[this.mSurfaces.Count];
            this.mSurfaces.Keys.CopyTo(array, 0);
            int[] array2 = array;
            for (int i = 0; i < array2.Length; i++)
            {
                int  num   = array2[i];
                bool flag3 = false;
                for (int j = 0; j < smartTerrainRevisions.Length; j++)
                {
                    if (smartTerrainRevisions[j].id == num)
                    {
                        flag3 = true;
                    }
                }
                if (!flag3)
                {
                    list3.Add(this.mSurfaces[num]);
                    ((SurfaceImpl)this.mSurfaces[num]).DestroyMesh();
                    this.mSurfaces.Remove(num);
                }
            }
            this.UnregisterDeletedSurfaces(list3);
            foreach (Surface current in list3)
            {
                if (current.Parent != null)
                {
                    ((SmartTerrainTrackableImpl)current.Parent).RemoveChild(current);
                }
            }
            foreach (Surface current2 in list)
            {
                if (current2.Parent != null)
                {
                    ((SmartTerrainTrackableImpl)current2.Parent).AddChild(current2);
                }
            }
            this.NotifySurfaceEventHandlers(list, list2, list3);
        }
예제 #10
0
 public VirtualButton CreateVirtualButton(string name, RectangleData area)
 {
     Debug.LogError("Virtual buttons are currently not supported for cloud reco targets.");
     return(null);
 }
예제 #11
0
 public abstract bool SetArea(RectangleData area);