public void UpdateCamera(TimeUpdateEvent e, SpectatorTransitionCameraNode transitionCameraNode, [JoinAll] Optional <SingleNode <CameraTargetComponent> > target) { CameraSaveData cameraSaveData = transitionCameraNode.transitionCamera.CameraSaveData; if ((cameraSaveData.Type == CameraType.Free) || target.IsPresent()) { UpdateCamera(e.DeltaTime, transitionCameraNode); ApplyCameraTransformEvent eventInstance = ApplyCameraTransformEvent.ResetApplyCameraTransformEvent(); eventInstance.PositionSmoothingRatio = SPECTATOR_TRANSITION_CAMERA_POSITION_SMOOTHING_RATIO; eventInstance.RotationSmoothingRatio = SPECTATOR_TRANSITION_CAMERA_ROTATION_SMOOTHING_RATIO; eventInstance.DeltaTime = e.DeltaTime; base.ScheduleEvent(eventInstance, transitionCameraNode); if (transitionCameraNode.transitionCamera.TransitionComplete) { CameraType type = cameraSaveData.Type; if (type == CameraType.Follow) { transitionCameraNode.bezierPosition.BezierPosition.SetBaseRatio(cameraSaveData.FollowCameraBezierPositionRatio); transitionCameraNode.bezierPosition.BezierPosition.SetRatioOffset(cameraSaveData.FollowCameraBezierPositionRatioOffset); transitionCameraNode.cameraESM.Esm.ChangeState <CameraStates.CameraFollowState>(); } else if (type == CameraType.MouseOrbit) { MouseOrbitCameraComponent mouseOrbitCamera = transitionCameraNode.cameraESM.Esm.ChangeState <CameraStates.CameraOrbitState>().mouseOrbitCamera; mouseOrbitCamera.distance = cameraSaveData.MouseOrbitDistance; mouseOrbitCamera.targetRotation = cameraSaveData.MouseOrbitTargetRotation; } else if (type == CameraType.Free) { transitionCameraNode.cameraESM.Esm.ChangeState <CameraStates.CameraFreeState>(); } } } }
public unsafe void UpdateMouseOrbitCamera(TimeUpdateEvent evt, OrbitCameraNode cameraNode, [JoinAll] CameraTargetNode targetNode) { float deltaTime = evt.DeltaTime; MouseOrbitCameraComponent mouseOrbitCamera = cameraNode.mouseOrbitCamera; Vector3 eulerAngles = mouseOrbitCamera.targetRotation.eulerAngles; float num2 = 1f; if (InputManager.CheckAction(SpectatorCameraActions.SlowMovement)) { num2 = MouseOrbitCameraConstants.ROTATION_SLOW_RATIO; } float num3 = MouseOrbitCameraConstants.X_ROTATION_SPEED * deltaTime; float num4 = MouseOrbitCameraConstants.Y_ROTATION_SPEED * deltaTime; Vector3 *vectorPtr1 = &eulerAngles; vectorPtr1->x -= (InputManager.GetUnityAxis(UnityInputConstants.MOUSE_Y) * num3) * num2; Vector3 *vectorPtr2 = &eulerAngles; vectorPtr2->y += (InputManager.GetUnityAxis(UnityInputConstants.MOUSE_X) * num4) * num2; mouseOrbitCamera.targetRotation = Quaternion.Euler(MouseOrbitCameraUtils.NormalizeEuler(eulerAngles)); mouseOrbitCamera.distance *= Mathf.Pow(3f, -InputManager.GetUnityAxis(UnityInputConstants.MOUSE_SCROLL_WHEEL)); mouseOrbitCamera.distance = Mathf.Clamp(mouseOrbitCamera.distance, MouseOrbitCameraConstants.MIN_DISTANCE, MouseOrbitCameraConstants.MAX_DISTANCE); Vector3 position = targetNode.cameraTarget.TargetObject.transform.position; TransformData data = new TransformData { Position = MouseOrbitCameraUtils.GetClippedPosition(position, position + (mouseOrbitCamera.targetRotation * new Vector3(0f, 0f, -mouseOrbitCamera.distance)), MouseOrbitCameraConstants.MAX_DISTANCE), Rotation = mouseOrbitCamera.targetRotation }; cameraNode.cameraTransformData.Data = data; ApplyCameraTransformEvent eventInstance = ApplyCameraTransformEvent.ResetApplyCameraTransformEvent(); eventInstance.PositionSmoothingRatio = MouseOrbitCameraConstants.POSITION_SMOOTHING_SPEED; eventInstance.RotationSmoothingRatio = MouseOrbitCameraConstants.ROTATION_SMOOTHING_SPEED; eventInstance.DeltaTime = deltaTime; base.ScheduleEvent(eventInstance, cameraNode); }