//method called when user creates a new vertex while holding another public GameObject addNewVertex() { //if statement to check whether a vertex is currently held if (!currentRigidBody) { //if no held vertex, try to create a new one on a line renderer. GameObject closestBoxCollider = getClosestBoxCollider(); if (closestBoxCollider) { int index = closestBoxCollider.GetComponent <Trigger>().getEndID(); closestBoxCollider.transform.parent.GetComponent <LineManager>().addVertex(gameObject.transform.position, index, null); resetVariables(); } return(null); } else { float clampedY; float clampedTiming; yClamper(out clampedY, out clampedTiming); Vector3 posToSnap = new Vector3(currentGameObject.transform.position.x, clampedY, currentGameObject.transform.position.z); Vector3 snappedY = snap(); return(currentVertexManager.getParentsLineManager().addVertex(snappedY, currentVertexManager.getVertexID(), currentGameObject)); } }
//method called when user wants to remove the vertex currently being held from the game. public void removeVertex() { //if statement to check whether a vertex is currently being held: if (!currentRigidBody) { //if no held vertex, try to remove one that may be being hovered over. GameObject nearestVertex = hoverOverVertex(); if (nearestVertex) { nearestVertex.transform.parent = gameObject.transform; VertexManager nearestVertexManager = nearestVertex.GetComponent <VertexManager>(); nearestVertexManager.getParentsLineManager().removeVertex(nearestVertex.transform.position, nearestVertexManager.getVertexID(), nearestVertex); resetVariables(); } } else if (isEditable(currentVertexManager.getVertexID(), currentVertexManager.getBaseLineParent().gameObject)) { //if statement won't be entered if the id of the vertex being held is 1 (because that vertex is needed) currentVertexManager.getParentsLineManager().removeVertex(transform.position, currentVertexManager.getVertexID(), currentGameObject); resetVariables(); } else { return; } }
//remove this method??? private Vector3 tetherToPoint(VertexManager vm, Vector3 currentPos) { float volume = vm.getVertexVolume(); if (!vm.getParentsLineManager().checkIfTetheredForXZ(currentGameObject)) { return(currentPos); } else { float m = (currentPos.z / currentPos.x); float newX = (0.815f / (Mathf.Sqrt(Mathf.Pow(m, 2) + 1))); float newZ = newX * m; currentPos.Set(newX, currentPos.y, newZ); return(currentPos); //return currentPos.normalized*0.815f; } }
//the main method for this script, used to go through all vertices (spheres) in the environment and update their positions private void getVertexStats() { //get all vertices (spheres) allVertices = GameObject.FindGameObjectsWithTag("Vertex"); foreach (GameObject vertex in allVertices) { //get each vertexManager attached to current vertex (sphere) vertexManager = vertex.GetComponent <VertexManager>(); //Set the vector variables according to the vertice (sphere) position. To do maths on later. xVector.Set(vertex.transform.position.x, 0f, 0f); yVector.Set(0f, vertex.transform.position.y, 0f); zVector.Set(0f, 0f, vertex.transform.position.z); //calculate the distance between the vertices (sphere) x, y, and z cords from the center. xDist = Vector3.Distance(gameObject.transform.position, xVector); yDist = Vector3.Distance(gameObject.transform.position, yVector); zDist = Vector3.Distance(gameObject.transform.position, zVector); if (vertexManager != null && vertexManager.getVertexID() != 0 && vertexManager.getVertexID() != vertexManager.getParentsLineManager().getNumberOfVertices() - 1) { //setting vertex volume by passing x^2 + z^2 to convert volume vertexManager.setVertexVolume(convertVolume((xDist * xDist) + (zDist * zDist))); //setting vertex timing by passing y distance. vertexManager.setVertexTiming(convertTiming(vertex.transform.position.y)); //calling calculateAngle with the vertices (sphere) x and z cordinates, and then setting the vertices note accordingly. float vertexAngle = calculateAngle(vertexManager.transform.position.x, vertexManager.transform.position.z); vertexManager.setVertexAngle(vertexAngle); vertexManager.setVertexNote(convertAngle(vertexAngle)); } } }