void LateUpdate() { Vector3 previousPos = transform.position; if (Input.GetKey(KeyCode.KeypadPlus)) { Scaler.Scale += 0.1f; } if (Input.GetKey(KeyCode.KeypadMinus)) { Scaler.Scale -= 0.1f; } if (CurrentCameraMode == CameraMode.Free) { savedScale = Scaler.Scale; } if (Input.GetKey(KeyCode.Mouse1)) { float rotationX = Input.GetAxis("Mouse X") * 1f; transform.Rotate(0, rotationX, 0); float rotationY = Input.GetAxis("Mouse Y") * 1f; transform.Rotate(-rotationY, 0, 0); if (Input.GetKey(KeyCode.LeftControl)) { float rotationZ = Input.GetAxis("Mouse X") * 1f; transform.Rotate(0, 0, rotationZ); } float speed = translationSpeed * Scaler.Scale; if (Input.GetKey(KeyCode.LeftShift)) { speed = translationSpeed * Scaler.Scale * 10; } if (Input.GetKey(KeyCode.A)) { transform.Translate(-speed, 0, 0); } if (Input.GetKey(KeyCode.D)) { transform.Translate(speed, 0, 0); } if (Input.GetKey(KeyCode.S)) { transform.Translate(0, 0, -speed); } if (Input.GetKey(KeyCode.W)) { transform.Translate(0, 0, speed); } if (Input.GetKey(KeyCode.Q)) { transform.Translate(0, -speed, 0); } if (Input.GetKey(KeyCode.E)) { transform.Translate(0, speed, 0); } targetPosition = transform.position + transform.forward * currentZoom; targetRotation.x = transform.eulerAngles.y; targetRotation.y = transform.eulerAngles.x; targetRotation.z = transform.eulerAngles.z; } else if (orbitActive) { float xDelta = Input.GetAxis("Mouse X") * xSpeed * 0.01f; float yDelta = Input.GetAxis("Mouse Y") * ySpeed * 0.02f; if (xDelta != 0 || yDelta != 0) { //rotationCooldown = 0.5f; if (Input.GetKey(KeyCode.Space) || Input.GetKey(KeyCode.Mouse2)) { targetRotation.x += xDelta; targetRotation.y -= yDelta; } } if (rotationCooldown > 0) { rotationCooldown -= Time.deltaTime; } else { smoothStartOrbitTime += Time.deltaTime; smoothStartOrbitTime = Mathf.Clamp01(smoothStartOrbitTime); targetRotation.x += 0.02f * smoothStartOrbitTime; targetRotation.y += 0.02f * smoothStartOrbitTime; } Quaternion rotation; //Debug.Log("currentTravelTime: " + currentTravelTime + ", targetTravelTime: " + targetTravelTime); if (currentTravelTime < targetTravelTime) { Vector3 direction = targetPosition * Scaler.Scale - Camera.mainCamera.transform.position; direction.Normalize(); rotation = Quaternion.LookRotation(direction); targetRotation.x = rotation.eulerAngles.y; targetRotation.y = rotation.eulerAngles.x; targetRotation.z = rotation.eulerAngles.z; } else { rotation = Quaternion.Euler(targetRotation.y, targetRotation.x, targetRotation.z); startPosition = transform.position; startRotation = transform.rotation; } currentZoom = Mathf.Clamp(currentZoom - Input.GetAxis("Mouse ScrollWheel") * zoomSpeed, zoomDistanceMin, zoomDistanceMax); Vector3 negDistance = new Vector3(0.0f, 0.0f, -currentZoom); Vector3 position = rotation * negDistance + targetPosition * Scaler.Scale; bool wasTraveling = currentTravelTime < targetTravelTime; currentTravelTime += Time.deltaTime; bool isTraveling = currentTravelTime < targetTravelTime; if (wasTraveling && isTraveling == false) { if (_ActiveStar != null) { Sun.CreateSolarSystem(_ActiveStar); } } float percent = 1; if (targetTravelTime > 0) { percent = currentTravelTime / targetTravelTime; } if (percent > 1) { percent = 1; } transform.position = Vector3.Slerp(startPosition, position, Mathf.SmoothStep(0, 1, percent)); if (isTraveling) { Scaler.Scale = Mathf.SmoothStep(startScale, targetScale, percent); } if (targetTravelTime > 0) { percent = currentTravelTime / (targetTravelTime * 0.5f); } if (percent > 1) { percent = 1; } transform.rotation = Quaternion.Slerp(startRotation, rotation, Mathf.SmoothStep(0, 1, percent)); } GuiManager.Speed = Vector3.Distance(previousPos, transform.position) * (1 / Scaler.Scale); }