//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;
        }
    }
Example #4
0
    //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));
            }
        }
    }