public void OnPointerClick(PointerEventData eventData) { // OnClick code goes here ... GameObject objectClicked = eventData.pointerCurrentRaycast.gameObject; // get the object that was pressed if (eventData.button != PointerEventData.InputButton.Left) // Ensure the left button was pressed (OR THE FALCON BUTTON) { return; } if (objectClicked.tag == "Tag") // A tag was pressed { if (MakeWordBank.inTutorial && MakeWordBank.stepOfTutorial != 4 && MakeWordBank.stepOfTutorial != 8) { return; } if (MakeWordBank.stepOfTutorial == 8 && MakeWordBank.timeSpentOnStep8 <= 0.25f) { return; //prevents glitch } if (objectClicked.GetComponentInChildren <Text> ().color == Color.red) { return; //Prevents trasher from clicking on a tag the tagger has selected in multiplayer } if (objectClicked.GetComponent <Text>() != null && objectClicked.GetComponent <Text>().color == Color.red) { return; } Debug.Log(objectClicked.name); // Name of the object GameObject currentTag = state.getSelected(); if (currentTag != null && currentTag.GetComponent <Text>() != null) { currentTag.GetComponent <Text>().color = Color.black; // Reset the color of the previously selected tag } state.setSelected(objectClicked); //if (MakeWordBank.trasherPanel.transform.localPosition.y >= 3000) { //If the player doesn't have a panel blocking putting tags on the image: objectClicked.GetComponentInChildren <Text> ().color = Color.red; for (int i = 0; i < MakeWordBank.tags.Length; i++) { if (objectClicked.GetComponentInChildren <Text> ().text.Equals(MakeWordBank.tags [i].getText())) { MakeWordBank.tags [i].isChangingColor = false; } } //} if (cursorTag != null) { Destroy(cursorTag); } //Make tag that follows cursor: cursorTag = Instantiate(state.getSelected().transform.parent.gameObject, canvas.transform); cursorTag.transform.LookAt(Vector3.zero); //cursorTag.transform.Rotate (new Vector3 (0f, 0f, -3f)); cursorTag.layer = 5; //UI Layer if (cursorSphere != null) { cursorSphere.GetComponent <MeshRenderer>().enabled = false; } //cursorTag.name = currentTag.GetComponent<Text> ().name; //cursorTag.transform.localScale = new Vector3 (8.8f, 3.188f, 0.001f); } else if (objectClicked.tag == "QuitButton" && !MakeWordBank.inTutorial) // Quit button clicked by falcon { QuitGameScript.TaskOnClick(); } else if (objectClicked.tag == "Bin") // The bin was pressed, so we move the tag to the bin { Debug.Log("Bin Clicked"); GameObject currentTag = state.getSelected(); if (currentTag != null) { if (MakeWordBank.sequenceIndex < MakeWordBank.wordBank.Count) { if (!MakeWordBank.inPracticeLevel && !MakeWordBank.inTutorial) { DataCollector.AddTag(currentTag.transform.parent.name); } GameObject newTrashedTag = Instantiate(state.getSelected().transform.parent.gameObject, canvas.transform); newTrashedTag.transform.localScale = new Vector3(newTrashedTag.transform.localScale.x / 2.0f, newTrashedTag.transform.localScale.y / 2.5f, newTrashedTag.transform.localScale.z); newTrashedTag.transform.GetChild(0).GetComponent <Text> ().color = Color.black; newTrashedTag.transform.tag = "TrashedTag"; newTrashedTag.transform.GetChild(0).tag = "TrashedTag"; int verticalBump = 0; if (trashedTags.Count >= 14 && trashedTags.Count < 28) { verticalBump = 168; //To prevent overlap } else if (trashedTags.Count >= 28 && trashedTags.Count < 42) { verticalBump = 606; } else if (trashedTags.Count >= 42) { verticalBump = 774; } int horizontalBump = 0; if (trashedTags.Count >= 14 && trashedTags.Count < 28) { horizontalBump = 50; } else if (trashedTags.Count >= 28 && trashedTags.Count < 42) { horizontalBump = 0; } else if (trashedTags.Count >= 42) { horizontalBump = 50; } newTrashedTag.transform.position = canvas.transform.TransformPoint(new Vector2(320 + horizontalBump, -55 - 12 * trashedTags.Count + verticalBump)) + Vector3.back * -0.25f; newTrashedTag.transform.LookAt(newTrashedTag.transform.position + Vector3.back * newTrashedTag.transform.position.z * -1); trashedTags.Add(newTrashedTag); trashedTags[trashedTags.Count - 1].layer = 5; //UI } MakeWordBank.replaceTag(currentTag, false); currentTag.GetComponentInChildren <Text>().color = Color.clear; currentTag.GetComponent <Text>().color = Color.clear; // Reset the color of the previously selected tag } if (cursorTag != null) { Destroy(cursorTag); cursorTag = null; if (cursorSphere != null) { cursorSphere.GetComponent <MeshRenderer>().enabled = true; } } state.setSelected(null); } else if (objectClicked.tag == "Image") // The image area was pressed, so here we cast a tag onto the sphere { Debug.Log("Image Clicked"); GameObject currentTag = state.getSelected(); if (currentTag != null && !currentTag.transform.parent.name.Equals("")) // TODO: Check if a tag is currently selected and that the tag isn't blank { Vector3 cursorPosition = state.getCursorPosition(); // Use the cursor position to cast a ray onto the sphere Ray ray = Camera.main.ScreenPointToRay(cursorPosition); // The ray that will be casted onto the sphere // In the following two lines, since the sphere collider is outside the sphere // We move the point of the ray well outside of the sphere, then invert the direction // This way, we cast ray to the same point of the sphere, but from the outside rather than the inside ray.origin = ray.GetPoint(100); ray.direction = -ray.direction; RaycastHit hit; // The raycast Debug.DrawRay(ray.origin, ray.direction, Color.red, 5); if (Physics.Raycast(ray, out hit)) { Destroy(cursorTag); cursorTag = null; if (cursorSphere != null) { cursorSphere.GetComponent <MeshRenderer>().enabled = true; } GameObject newObject = Instantiate(tagPrefab, hit.point * 0.95f, Quaternion.identity); // Create the new object using the tagPrefab newObject.transform.LookAt(Vector3.zero); // Make it face the center of the sphere newObject.transform.localScale = new Vector3(0.25f, 0.1f, 0.00001f); newObject.name = currentTag.transform.parent.name; // CHANGE THIS LATER newObject.transform.parent = sphere.transform; newObject.GetComponent <Renderer>().material = new Material(Shader.Find("Diffuse")); // Create the object which will hold the TextMesh GameObject textContainer = new GameObject(); textContainer.transform.parent = newObject.transform; // Create the text mesh to be rendered over the plane TextMesh text = textContainer.AddComponent <TextMesh> (); text.text = currentTag.transform.parent.name; text.fontSize = 20; text.alignment = TextAlignment.Center; text.anchor = TextAnchor.MiddleCenter; text.name = currentTag.transform.parent.name + "_Text"; text.transform.parent = textContainer.transform; text.transform.localScale = new Vector3(-0.075f, 0.25f, 0.25f); text.transform.localPosition = Vector3.zero; text.transform.localEulerAngles = Vector3.zero; if (!MakeWordBank.inTutorial && !MakeWordBank.inPracticeLevel) { DataCollector.AddTag(currentTag.transform.parent.name, newObject.transform.position); } //int diff = MakeWordBank.sequenceIndex; //This is just a convoluted way to find out if the image turned over so the trashed tag prefabs can be deleted MakeWordBank.replaceTag(currentTag, true); currentTag.GetComponentInChildren <Text>().color = Color.clear; state.setSelected(null); //diff -= MakeWordBank.sequenceIndex; //if (diff > 0) { //Means image turned over: // for (int i = 0; i < trashedTags.Count; i++) { // Destroy (trashedTags [i]); // } // trashedTags.Clear(); //} // ---- Below is old code used to create the tag whereever the click happened. It isn't being used now but may be useful later // -------------------------------------------------------------------------------------------------------------------------- //GameObject gameObject = UnityEngine.Object.Instantiate<GameObject>(this.tag, hit.point * 0.95f, Quaternion.identity); //gameObject.transform.LookAt(Vector3.zero); //gameObject.name = "Tag " + this.tags.Count; //gameObject.transform.localScale = new Vector3(20f, 5f, 1f); //this.tag.GetComponent<MeshRenderer>().shadowCastingMode = ShadowCastingMode.Off; //gameObject.AddComponent(typeof(Tag)); //gameObject.transform.parent = this.tagContainer.transform; //this.tags.Add(gameObject); //this.keycam.transform.position = Vector3.zero; //this.keycam.transform.LookAt(this.ray.point); //this.keycam.transform.position = Vector3.MoveTowards(this.keycam.transform.position, this.ray.point, Vector3.Distance(this.keycam.transform.position, this.ray.point) * 0.8f); //this.startTag(gameObject); } } } }