Example #1
0
    public void createTether()
    {
        float             distance   = (endPos - startPos).magnitude;
        float             numLinks   = Mathf.Round(distance / desiredLinkDist) + 2;
        Vector3           distVector = (startPos - endPos).normalized * desiredLinkDist;
        List <GameObject> links      = new List <GameObject>();

        for (var i = 0; i < numLinks; i++)
        {
            if (i == 0)
            {
                GameObject  endLink    = Instantiate(grappleLink);
                GrappleLink linkScript = endLink.GetComponent <GrappleLink>();
                //linkScript.setEndStatus(true);
                linkScript.setPosition(endPos);
                links.Add(endLink);
            }
            else if (i == numLinks - 1)
            {
                Vector3     newSpawn   = links[i - 1].transform.position + distVector;
                GameObject  newLink    = Instantiate(grappleLink);
                GrappleLink linkScript = newLink.GetComponent <GrappleLink>();
                linkScript.setPosition(newSpawn);
                linkScript.GetComponent <Rigidbody2D>().constraints = RigidbodyConstraints2D.FreezePositionX | RigidbodyConstraints2D.FreezePositionY;
                linkScript.setConnectedObj(links[i - 1].GetComponent <Rigidbody2D>());
                linkScript.setMaxDistance(desiredLinkDist + 0.02f);
            }
            else
            {
                Vector3     newSpawn   = links[i - 1].transform.position + distVector;
                GameObject  newLink    = Instantiate(grappleLink);
                GrappleLink linkScript = newLink.GetComponent <GrappleLink>();
                linkScript.setPosition(newSpawn);
                linkScript.setConnectedObj(links[i - 1].GetComponent <Rigidbody2D>());
                linkScript.setMaxDistance(desiredLinkDist + 0.02f);
                links.Add(newLink);
            }
        }
    }
Example #2
0
 IEnumerator IncreaseGrapple()
 {
     while (Input.GetKey(KeyCode.E))
     {
         for (int i = 0; i < highlightedIndices.Count; i++)
         {
             if (linkJointList[highlightedIndices[i]][3].distance > ((desiredLinkDist + 0.02f) * (linkJointList[highlightedIndices[i]].Count + 1) / (linkJointList[highlightedIndices[i]].Count)))
             {
                 for (var j = 0; j < linkJointList[highlightedIndices[i]].Count; j++)
                 {
                     linkJointList[highlightedIndices[i]][j].distance = 0.52f;
                 }
                 int         midIndex   = Mathf.RoundToInt(linkJointList[highlightedIndices[i]].Count / 2);
                 Vector3     distVector = (grappleList[highlightedIndices[i]][midIndex].transform.position - grappleList[highlightedIndices[i]][midIndex].transform.position).normalized;
                 Vector3     newSpawn   = grappleList[highlightedIndices[i]][midIndex - 1].transform.position + distVector;
                 GameObject  newLink    = Instantiate(grappleLink);
                 GrappleLink linkScript = newLink.GetComponent <GrappleLink>();
                 linkScript.setHighlight(true);
                 linkScript.setPosition(newSpawn);
                 linkScript.setConnectedObj(grappleList[highlightedIndices[i]][midIndex - 1].GetComponent <Rigidbody2D>());
                 grappleList[highlightedIndices[i]][midIndex].GetComponent <GrappleLink>().setConnectedObj(newLink.GetComponent <Rigidbody2D>());
                 linkScript.setMaxDistance(desiredLinkDist + 0.02f);
                 grappleList[highlightedIndices[i]].Insert(midIndex, newLink);
                 linkScriptList[highlightedIndices[i]].Insert(midIndex, linkScript);
                 linkJointList[highlightedIndices[i]].Insert(midIndex, newLink.GetComponent <DistanceJoint2D>());
             }
             else
             {
                 for (var j = 0; j < linkJointList[highlightedIndices[i]].Count; j++)
                 {
                     linkJointList[highlightedIndices[i]][j].distance += 0.008f;
                 }
             }
         }
         yield return(null);
     }
 }
Example #3
0
    private void InstantiateGrapple(Vector3 startPos, Vector3 endPos, bool staticStart, bool staticEnd, Rigidbody2D fromBody, Rigidbody2D hitBody)
    {
        int currentListIndex = nextAddedIndices.Pop();

        grappleIconList[currentListIndex].SetActive(true);
        float   distance   = (endPos - startPos).magnitude;
        float   numLinks   = Mathf.Round(distance / desiredLinkDist) + 2;
        Vector3 distVector = (startPos - endPos).normalized * desiredLinkDist;

        for (var i = 0; i < numLinks; i++)
        {
            if (i == 0)
            {
                GameObject  endLink    = Instantiate(grappleLink);
                GrappleLink linkScript = endLink.GetComponent <GrappleLink>();
                if (staticEnd)
                {
                    linkScript.setStaticEnd();
                }
                else
                {
                    Debug.Log(hitBody);
                    linkScript.setDynamicEnd();
                    linkScript.setHingeConnectedObj(hitBody);
                    linkScript.setHingeConnectedAnchor(endPos, hitBody.transform.position);
                }
                linkScript.setPosition(endPos);
                grappleList[currentListIndex].Add(endLink);
                linkScriptList[currentListIndex].Add(linkScript);
                linkJointList[currentListIndex].Add(endLink.GetComponent <DistanceJoint2D>());
            }
            else if (i == numLinks - 1)
            {
                Vector3     newSpawn   = grappleList[currentListIndex][i - 1].transform.position + distVector;
                GameObject  newLink    = Instantiate(grappleLink);
                GrappleLink linkScript = newLink.GetComponent <GrappleLink>();
                linkScript.setPosition(newSpawn);
                linkScript.setConnectedObj(grappleList[currentListIndex][i - 1].GetComponent <Rigidbody2D>());
                linkScript.setMaxDistance(desiredLinkDist + 0.02f);
                if (staticStart)
                {
                    linkScript.setStaticStart();
                }
                else
                {
                    linkScript.setDynamicStart();
                    linkScript.setHingeConnectedObj(fromBody);
                }
                GetComponent <PlayerMovement>().RefreshSecondJump();
                grappleList[currentListIndex].Add(newLink);
                linkScriptList[currentListIndex].Add(linkScript);
                linkJointList[currentListIndex].Add(newLink.GetComponent <DistanceJoint2D>());
            }
            else
            {
                Vector3     newSpawn   = grappleList[currentListIndex][i - 1].transform.position + distVector;
                GameObject  newLink    = Instantiate(grappleLink);
                GrappleLink linkScript = newLink.GetComponent <GrappleLink>();
                linkScript.setPosition(newSpawn);
                linkScript.setConnectedObj(grappleList[currentListIndex][i - 1].GetComponent <Rigidbody2D>());
                linkScript.setMaxDistance(desiredLinkDist + 0.02f);
                grappleList[currentListIndex].Add(newLink);
                linkScriptList[currentListIndex].Add(linkScript);
                linkJointList[currentListIndex].Add(newLink.GetComponent <DistanceJoint2D>());
            }
        }
        if (nextAddedIndices.Count == 3)
        {
            UpdateGrappleSelect(currentListIndex);
        }
    }