void Update() { if (!grappler.IsGrappling()) { desiredRot = transform.parent.rotation; } else { desiredRot = Quaternion.LookRotation(grappler.GetGrapplePoint() - transform.position); } transform.rotation = Quaternion.Lerp(transform.rotation, desiredRot, Time.deltaTime * rotationSpeed); }
void DrawRope() { //If not grappling, don't draw rope if (!grapplingGun.IsGrappling()) { currentGrapplePosition = grapplingGun.gunTip.position; spring.Reset(); if (lr.positionCount > 0) { lr.positionCount = 0; } return; } if (lr.positionCount == 0) { spring.SetVelocity(velocity); lr.positionCount = quality + 1; } spring.SetDamper(damper); spring.SetStrength(strength); spring.Update(Time.deltaTime); var grapplePoint = grapplingGun.GetGrapplePoint(); var gunTipPosition = grapplingGun.gunTip.position; var up = Quaternion.LookRotation((grapplePoint - gunTipPosition).normalized) * Vector3.up; currentGrapplePosition = Vector3.Lerp(currentGrapplePosition, grapplePoint, Time.deltaTime * 12f); for (var i = 0; i < quality + 1; i++) { var delta = i / (float)quality; var offset = up * waveHeight * Mathf.Sin(delta * waveCount * Mathf.PI) * spring.Value * affectCurve.Evaluate(delta); lr.SetPosition(i, Vector3.Lerp(gunTipPosition, currentGrapplePosition, delta) + offset); } }