void GetClosestFrame()
    {
        Snappable[] frames = (Snappable[])GameObject.FindObjectsOfType(typeof(Snappable));
        int         i      = 0;

        if (frames.Length == 1)
        {
            closest = null;
            return;
        }
        float minDist = frames[0].GetDistance(this);

        closest = frames[0];
        if (minDist == 0)
        {
            minDist = frames[1].GetDistance(this);
            closest = frames[1];
        }
        foreach (Snappable frame in frames)
        {
            float dist = frame.GetDistance(this);
            if (dist > 0 && dist < minDist)
            {
                minDist = dist;
                closest = frame;
            }
            i++;
        }
    }
Exemple #2
0
    // Update is called once per frame
    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            RaycastHit hit;

            if (Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out hit))
            {
                this.selectedObject = hit.transform.gameObject.GetComponent <Snappable>();
            }
        }

        if (this.selectedObject != null && Input.GetMouseButton(0))
        {
            this.selectedObject.beingDragged = true;

            var hits = Physics.RaycastAll(Camera.main.ScreenPointToRay(Input.mousePosition), 10f, 1 << LayerMask.NameToLayer("SnapTarget"));
            if (hits.Any())
            {
                var closestHit = FindClosest(hits);
                this.selectedObject.transform.position = closestHit.position;
            }
            else
            {
                this.selectedObject.transform.position = Camera.main.ScreenPointToRay(Input.mousePosition).origin +
                                                         (Camera.main.ScreenPointToRay(Input.mousePosition).direction *5f);
            }
        }
        else if (this.selectedObject != null)
        {
            this.selectedObject.beingDragged = false;
            this.selectedObject = null;
        }
    }
 public void AddToInView(Snappable snappable)
 {
     if (!inView.Contains(snappable))
     {
         inView.Add(snappable);
     }
 }
 public void RemoveFromInView(Snappable snappable)
 {
     if (inView.Contains(snappable))
     {
         inView.Remove(snappable);
     }
 }
Exemple #5
0
 private void OnTriggerExit(Collider other)
 {
     EnteredSnappable = other.GetComponent <Snappable>();
     if (EnteredSnappable == null)
     {
         return;
     }
     if (EnteredSnappableList.Contains(EnteredSnappable))
     {
         EnteredSnappableList.Remove(EnteredSnappable);
         EnteredSnappable.InitiateUnReadyToAttach();
         //temp sol
         if (EnteredSnappable.HighlightOnPickup == false)
         {
             meshRenderer.enabled = false;
         }
         //
     }
     if (AttachedOnEnter)
     {
         AttachedOnEnter = false;
         AttachOnEnter   = true;
     }
     EnteredSnappable = null;
 }
Exemple #6
0
 private void OnTriggerEnter(Collider other)
 {
     EnteredSnappable = other.GetComponent <Snappable>();
     if (EnteredSnappable == null)
     {
         return;
     }
     if (Locks.Contains(EnteredSnappable.Key))
     {
         EnteredSnappableList.Add(EnteredSnappable);
         EnteredSnappable.InitiateReadyToAttach(this);
         //temp sol
         meshRenderer.enabled = true;
         //
         if (AttachOnEnter)
         {
             if (!PermanentSnap)
             {
                 AttachedOnEnter = true;
                 AttachOnEnter   = false;
             }
             EnteredSnappable.ForceInvokeSnap();
         }
         return;
     }
 }
    void OnMouseUp()
    {
        Snappable parent = GetComponentInParent <Snappable>();

        parent.DoSnap();
        // Update position after snap
        noteEventManager.TriggerNotePosition(transform.parent.parent.position);
    }
Exemple #8
0
    void OnMouseUp()
    {
        end = new Vector3(transform.parent.parent.position.x, transform.parent.parent.position.y, transform.parent.parent.position.z);
        Snappable parent = GetComponentInParent <Snappable>();

        parent.DoSnap();
        // Update position after snap
        noteEventManager.TriggerNotePosition(end - start);
    }
    float GetDistance(Snappable other)
    {
        float xThis  = transform.parent.position.x + transform.position.x;
        float yThis  = transform.parent.position.y + transform.position.y;
        float zThis  = transform.parent.position.z + transform.position.z;
        float xOther = other.transform.parent.position.x + other.transform.position.x;
        float yOther = other.transform.parent.position.y + other.transform.position.y;
        float zOther = other.transform.parent.position.z + other.transform.position.z;

        return((xOther - xThis) * (xOther - xThis) + (yOther - yThis) * (yOther - yThis) + (zOther - zThis) * (zOther - zThis));
    }
Exemple #10
0
    private bool CheckIfInsideMe(Snappable snappable)
    {
        // Check if the other object is inside each axis
        if (snappable.snapTarget.position.x < transform.position.x - m_planeExtensions.x || snappable.snapTarget.position.x > transform.position.x + m_planeExtensions.x)
        {
            return(false);
        }
        if (snappable.snapTarget.position.y < transform.position.y - m_planeExtensions.y - maxSnapHeight || snappable.snapTarget.position.y > transform.position.y + m_planeExtensions.y + maxSnapHeight)
        {
            return(false);
        }
        if (snappable.snapTarget.position.x < transform.position.z - m_planeExtensions.z || snappable.snapTarget.position.z > transform.position.z + m_planeExtensions.z)
        {
            return(false);
        }

        return(true);
    }
        /// <summary>
        /// Finds the nearest object that can be snapped to and adds a new snap point to
        /// it with the user hand representation.
        /// </summary>
        public void RecordPose()
        {
            Snappable snappable = _grabNotifier.FindClosestSnappable();

            snappable?.AddSnapPoint(puppetHand);
        }
Exemple #12
0
    private void SnapToGrid(Snappable snappable)
    {
        Vector3 snappedPos = GetNearestGridPoint(snappable.snapTarget.position);

        snappable.SetPosition(snappedPos);
    }