Esempio n. 1
0
        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>();
                    }
                }
            }
        }
Esempio n. 2
0
        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);
        }