// Update is called once per frame public override void ClickUpdate() { if (Input.GetMouseButtonDown(0) && GUIUtility.hotControl == 0) //We check that we haven't clicked on an active GUI element { Ray castRay = Camera.main.ScreenPointToRay(Input.mousePosition); //Debug.Log ("Raycasting from " + castRay.origin.ToString()); RaycastHit hit; if (Physics.Raycast(castRay, out hit)) { //Debug.Log ("Hit something!"); GameObject hitObject = hit.collider.gameObject; if (hitObject.GetComponent <CNode> () != null) { if (Input.GetButton("LeftShift")) { GameObject.Destroy(hitObject); } else { lastNode = hitObject.GetComponent <CNode>(); //Debug.Log ("Clicked a node"); hitObject.GetComponent <CNode>().StartCoroutine("LinkDraw"); } } else if (hitObject.GetComponent <CLink>() != null) { if (Input.GetButton("LeftShift")) { GameObject.Destroy(hitObject); } } else { CreateNode(hit.point); } } } if (Input.GetMouseButtonUp(1) && GUIUtility.hotControl == 0) { Ray castRay = Camera.main.ScreenPointToRay(Input.mousePosition); //Debug.Log ("Raycasting from " + castRay.origin.ToString()); RaycastHit hit; if (Physics.Raycast(castRay, out hit)) { //Debug.Log ("Hit something!"); GameObject hitObject = hit.collider.gameObject; if (hitObject.GetComponent <CNode> () != null) { hitObject.GetComponent <CNode> ().menuOpen = !hitObject.GetComponent <CNode> ().menuOpen; } } } if (Input.GetMouseButtonUp(0) && GUIUtility.hotControl == 0) { Ray castRay = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit; if (Physics.Raycast(castRay, out hit)) { GameObject hitObject = hit.collider.gameObject; if (hitObject.GetComponent <CNode> () != null) { if (lastNode != null && lastNode != hitObject.GetComponent <CNode> ()) //we dropped and lifted on two different nodes { lastNode.EstablishLink(hitObject.GetComponent <CNode>()); } } else if (lastNode != null) //we were dragging a node and want to make a new one { lastNode.EstablishLink(CreateNode(hit.point)); } } lastNode = null; } }