Ejemplo n.º 1
0
    private void MoveSelectedModel(Vector3 touch)
    {
        if (camera == null || SelectedModel == null)
        {
            return;
        }
        // Create ray from camera starting at touch
        Ray ray = camera.ScreenPointToRay(touch);

        // Get intersection point of ray and offset plane
        float distance = 0f;

        if (offset_plane.Raycast(ray, out distance))
        {
            Vector3 point = ray.GetPoint(distance);

            // Reset flag resets point offset's x and z coordinates
            // to the difference of the selected model's position and
            // intersection point.
            if (reset_offset)
            {
                Vector3 dif = SelectedModel.position - point;
                point_offset.x = dif.x;
                point_offset.z = dif.z;
                reset_offset   = false;
            }

            //model position
            Vector3 position = point + point_offset * SelectedModel.size;
            if (Vector3.Distance(ARScene.Origin.position, position) < 10)
            {
                //Start ewa
                if (drag_start)
                {
                    drag_start = false;
                    dragEWA    = position;
                }
                else
                {
                    dragEWA = dragEWA * (EWAlambda) + (1 - EWAlambda) * position;
                }

                float bp = SelectedModel.binPercent;
                SelectedModel.binPercent = binPercent(touch);
                if (bp < DeleteThreshold && SelectedModel.binPercent > DeleteThreshold)
                {
                    NativeAid.HapticEvent(HEvent.Delete);
                }

                SelectedModel.position = dragEWA;
            }
        }
    }
Ejemplo n.º 2
0
 void Awake()
 {
     if (IconClickBox != null)
     {
         IconClickBox.AddEventListener("onclick", () => {
             if (Mode == CenterIcon.Screenshot)
             {
                 Flash.hold = true;
                 Flash.Start();
                 NativeAid.SavePhoto(capture);
                 NativeAid.HapticEvent(HEvent.Success);
                 Flash.hold = false;
             }
         });
     }
 }
Ejemplo n.º 3
0
    public void Click(Vector2 start, Vector2 end)
    {
        StartPos = start;
        EndPos   = end;

        Debug.Log($"{gameObject.name}'s clickbox clicked.");
        if (Haptic)
        {
            NativeAid.HapticEvent(HEvent.Click);
        }
        RunEvent("onclick");
        if (OnClick != null)
        {
            OnClick();
        }
    }
Ejemplo n.º 4
0
    void Update()
    {
        if (locked)
        {
            return;
        }

        //One touch detected
        if (Input.touchCount == 1)
        {
            Touch   touch = Input.GetTouch(0);
            Vector2 point = touch.position;

            //normalise touch phase Canceled = Ended, Stationary = Moved
            TouchPhase phase = touch.phase;
            if (phase == TouchPhase.Canceled)
            {
                phase = TouchPhase.Ended;
            }
            if (phase == TouchPhase.Stationary)
            {
                phase = TouchPhase.Moved;
            }

            if (phase == TouchPhase.Began)
            {
                //If the touch isn't on any ui click boxes, select a model
                //and set the drag offset, otherwise drag not started.
                if (isInClickBox(point))
                {
                    Debug.Log("in click box");
                    Mode = GMode.None;
                }
                else
                {
                    if (SelectModel(point))
                    {
                        NativeAid.HapticEvent(HEvent.Select);
                        SelectedModel.Held = true;
                        Mode      = GMode.Drag;
                        Icon.Mode = CenterIcon.Bin;
                    }
                    else
                    {
                        Mode = GMode.None;
                    }
                }
            }
            else if (phase == TouchPhase.Moved && Mode == GMode.Drag)
            {
                MoveSelectedModel(point);
            }
            else if (phase == TouchPhase.Ended && Mode == GMode.Drag)
            {
                if (SelectedModel != null)
                {
                    SelectedModel.Held = false;
                    if (SelectedModel.binPercent > DeleteThreshold)
                    {
                        ARScene.Remove(SelectedModel);
                        NativeAid.HapticEvent(HEvent.Deleted);
                    }
                    else
                    {
                        SelectedModel.goalBinPercent = 0;
                        if (SelectedModel.binPercent > 0)
                        {
                            NativeAid.HapticEvent(HEvent.Warning);
                        }
                    }
                }
                Icon.Mode = CenterIcon.Screenshot;
                Mode      = GMode.None;
            }
            //Two or more touch's detected
        }
        else if (Input.touchCount > 1)
        {
            Touch a = Input.GetTouch(0);
            Touch b = Input.GetTouch(1);

            Vector2 av = a.position;
            Vector2 bv = b.position;

            //nomalise touch phases Canceled = Ended
            TouchPhase phaseA = a.phase;
            TouchPhase phaseB = b.phase;
            if (phaseA == TouchPhase.Canceled)
            {
                phaseA = TouchPhase.Ended;
            }
            if (phaseB == TouchPhase.Canceled)
            {
                phaseB = TouchPhase.Ended;
            }

            // Either touch has just began, set the initial rotation vector
            if (phaseA == TouchPhase.Began || phaseB == TouchPhase.Began)
            {
                RotateStart(av, bv);
                Mode = GMode.Rotate;

                // Either touches have ended
            }
            else if (phaseA == TouchPhase.Ended || phaseB == TouchPhase.Ended)
            {
                // Both touches have ended, mode set to none
                if (phaseA == TouchPhase.Ended && phaseB == TouchPhase.Ended)
                {
                    Mode      = GMode.None;
                    Icon.Mode = CenterIcon.Screenshot;

                    // One touch has ended, mode reverts to drag with offset set to point
                    // that has not ended.
                }
                else
                {
                    reset_offset = true;
                    Mode         = GMode.Drag;
                }
                // Neither touch has began or ended
            }
            else if (Mode == GMode.Rotate)
            {
                RotateSelectedModel(av, bv);
            }
        }
    }