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++; } }
// 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); } }
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; }
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); }
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)); }
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); }
private void SnapToGrid(Snappable snappable) { Vector3 snappedPos = GetNearestGridPoint(snappable.snapTarget.position); snappable.SetPosition(snappedPos); }