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); } } }
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); } }
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); } }