public static Vector3 CalculateLinearMovement(float dt, Vector3 cameraCalculated, Vector3 cameraReal, CameraData cameraData, Transform target, bool mouse) { Vector3 vector = cameraCalculated - cameraReal; float magnitude = vector.magnitude; if (magnitude > 0.1f) { cameraData.linearSpeed = 5f * (magnitude - 0.1f); } if (mouse) { float b = magnitude / dt; cameraData.linearSpeed = Mathf.Lerp(cameraData.linearSpeed, b, Mathf.Sin((270f + Mathf.Lerp(0f, 90f, Vector3.Angle(cameraCalculated - target.position, cameraReal - target.position) / 90f)) * 0.01745329f) + 1f); } vector.Normalize(); vector *= Mathf.Clamp(cameraData.linearSpeed * dt, 0f, magnitude); cameraReal += vector; cameraData.linearSpeed = MathUtil.Snap(cameraData.linearSpeed, 0f, 0.1f); return(cameraReal); }
public static void CalculateYawMovement(Vector3 targetDirection, ref Vector3 rotation, float dt, CameraData cameraData, bool mouse = false) { float angleError = MathUtil.ClampAngleFast(Mathf.Atan2(targetDirection.x, targetDirection.z) - MathUtil.ClampAngle(rotation.y)); cameraData.yawSpeed = GetAngularSpeed(angleError, cameraData.yawSpeed, mouse); float num4 = cameraData.yawSpeed * dt; if (((angleError > 0f) && (num4 > angleError)) || ((angleError < 0f) && (num4 < angleError))) { num4 = angleError; } rotation.y += num4; cameraData.yawSpeed = MathUtil.Snap(cameraData.yawSpeed, 0f, 0.1f); }
public static Vector3 CalculateCameraPosition(Transform target, BaseRendererComponent tankRendererComponent, Vector3 tankBoundsCenter, BezierPosition bezierPosition, CameraData cameraData, Vector3 cameraOffset, float additionalAngle) { GameObject gameObject = target.gameObject; Vector3 position = target.position; Vector3 localPosition = target.parent.localPosition; float z = tankRendererComponent.Mesh.bounds.extents.z; float num3 = z * Mathf.Max((float)0f, (float)((z - 1.2f) / 1.981962f)); if (target.parent != null) { Vector3 vector4 = target.parent.InverseTransformPoint(tankBoundsCenter); num3 -= vector4.z - localPosition.z; } Vector3 vector5 = new Vector3(0f, 0f, -num3); Quaternion quaternion = Quaternion.Euler(target.rotation.eulerAngles + new Vector3(0f, additionalAngle, 0f)); Vector3 vector6 = (Vector3)(quaternion * (vector5 - new Vector3(0f, 0f, localPosition.z))); Vector3 targetPosition = (position + (quaternion * (localPosition + cameraOffset))) + (Vector3.up * 0.2f); bool hasCollision = false; bool flag2 = false; Vector3 vector11 = CalculateCollisionPoint(targetPosition, CalculateCameraDirection(bezierPosition.GetCameraHeight() / bezierPosition.GetCameraHorizontalDistance(), (Vector3)(Quaternion.Euler(new Vector3(0f, additionalAngle, 0f)) * target.forward)), bezierPosition.GetDistanceToPivot(), gameObject, out hasCollision); float magnitude = (targetPosition - vector11).magnitude; cameraData.collisionDistanceRatio = magnitude / bezierPosition.GetDistanceToPivot(); if (magnitude < 3f) { float rayLength = 3f - magnitude; vector11 = CalculateCollisionPoint(vector11, -Vector3.up, rayLength, gameObject, out flag2); } else { RaycastHit hit; int layerMask = LayerMasksUtils.RemoveLayerFromMask(LayerMasks.STATIC, gameObject.layer); Vector3 normalized = vector6.normalized; vector11 = !Physics.Raycast(vector11, normalized, out hit, vector6.magnitude, layerMask) ? (vector11 + vector6) : (vector11 + (Mathf.Max((float)(hit.distance - 0.5f), (float)0f) * normalized)); } return(vector11); }
public static void CalculatePitchMovement(ref Vector3 rotation, BezierPosition bezierPosition, float dt, CameraData cameraData, bool mouse = false) { float angleError = MathUtil.ClampAngleFast(-GetPitchAngle(cameraData, bezierPosition) - MathUtil.ClampAngle(rotation.x)); cameraData.pitchSpeed = GetAngularSpeed(angleError, cameraData.pitchSpeed, mouse); float num4 = cameraData.pitchSpeed * dt; if (((angleError > 0f) && (num4 > angleError)) || ((angleError < 0f) && (num4 < angleError))) { num4 = angleError; } rotation.x += num4; cameraData.pitchSpeed = MathUtil.Snap(cameraData.pitchSpeed, 0f, 0.1f); }