public static void SeverTentacle(Tentacle tentacle) { int severPoint = (int)Mathf.Ceil(tentacle.segments * Random.Range(0.2f, 0.5f)); Tentacle baseHalf = Ungenerated(); CopyTentSubSegments(tentacle, baseHalf, 0, severPoint); baseHalf.AttachBase(tentacle.connectBody); Transform endPoint = baseHalf.transform.Find("EndPoint"); MakeEndDangling(endPoint); SpringJoint2D endSpringJoint = endPoint.GetComponent <SpringJoint2D>(); endSpringJoint.connectedBody = tentacle.connectBody; endSpringJoint.distance = tentacle.length * ((float)severPoint / (float)tentacle.segments) * 0.5f; Tentacle endHalf = Ungenerated(); CopyTentSubSegments(tentacle, endHalf, severPoint, tentacle.segments - 1); MakeEndDangling(endHalf.transform); if (tentacle.Grabbing) { endHalf.AttachEnd(tentacle.endAttachSpring.connectedBody, tentacle.GetEndPosition()); } else { Transform endHalfEndPoint = endHalf.transform.Find("EndPoint"); MakeEndDangling(endHalfEndPoint); SpringJoint2D endHalfEndSpring = endHalfEndPoint.gameObject.GetComponent <SpringJoint2D>(); endHalfEndSpring.enabled = false; Rigidbody2D endBody = endHalf.gameObject.GetComponent <Rigidbody2D>(); endBody.gravityScale = 1; Rigidbody2D endPointBody = endHalfEndPoint.gameObject.GetComponent <Rigidbody2D>(); endPointBody.gravityScale = 1; } SpringJoint2D spring = endHalf.gameObject.GetComponent <SpringJoint2D>(); spring.connectedBody = endHalf.transform.Find("EndPoint").gameObject.GetComponent <Rigidbody2D>(); spring.distance = (tentacle.length - endSpringJoint.distance) * 0.5f; ExplosionManager.BloodSplatter(tentacle.tentJoints[severPoint].transform.position, 3, 0); tentacle.StopGrabbing(); GameObject.Destroy(tentacle.gameObject); }
private RaycastHit2D UpdateTentTargetPosition() { //Vector3 mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition); Vector2 mousePosition = CursorManager.GetCursorWorldPosition(); Vector2 mouseDirection = CommonUtils.NormalVector(transform.position, mousePosition); float mouseDistance = CommonUtils.Distance(transform.position, mousePosition); mouseObject.transform.position = new Vector3(mousePosition.x, mousePosition.y, 0); targetObject.SetActive(false); if (gripping) { if (grippingObject == null || !grippingObject.activeSelf) { StopGripping(); } //if ( CommonUtils.Distance( grippingObject.transform.position, transform.position ) > m_MaxStretchDistance*2.0f ) if (CommonUtils.Distance(tentacle.GetEndPosition(), transform.position) > m_MaxStretchDistance * 2.0f) { StopGripping(); } //targetRenderer.color = Color.white; //float d = CommonUtils.Distance(transform.position, mousePosition); //if (d < m_MaxStretchDistance) { // mouseObject.transform.position = new Vector3(mousePosition.x, mousePosition.y, 0); //} else { // mouseObject.transform.position = new Vector3(transform.position.x + mouseDirection.x * m_MaxStretchDistance, transform.position.y + mouseDirection.y * m_MaxStretchDistance, 0); //} return(new RaycastHit2D()); } else { // Cast from cursor position to player position Vector2 playerDirection = CommonUtils.NormalVector(mousePosition, transform.position); RaycastHit2D hit = Physics2D.Raycast(mousePosition, playerDirection, mouseDistance, m_WhatIsGrabbable); if (hit.collider == null) { //Vector3 mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition); //Vector2 mouseDirection = CommonUtils.NormalVector(transform.position, mousePosition); // cast from cursor position out to max distance hit = Physics2D.Raycast(transform.position, mouseDirection, m_MaxStretchDistance, m_WhatIsGrabbable); } if (hit.collider != null) { targetObject.SetActive(true); targetObject.transform.position = hit.point; //targetRenderer.color = Color.green; } else { //targetRenderer.color = Color.white; //float d = CommonUtils.Distance(transform.position, mousePosition); //if (d < m_MaxStretchDistance) { // mouseObject.transform.position = new Vector3(mousePosition.x, mousePosition.y, 0); //} else { // mouseObject.transform.position = new Vector3(transform.position.x + mouseDirection.x * m_MaxStretchDistance, transform.position.y + mouseDirection.y * m_MaxStretchDistance, 0); //} } return(hit); } }