Пример #1
0
        public void Follow(CameraFollowEvent e, CameraTargetNode cameraTargetNode, [JoinByTank] TankNode tank, [JoinAll] CameraNode cameraNode, [JoinAll] Optional <SingleNode <FollowCameraComponent> > followCameraOptionalNode)
        {
            CameraTransformDataComponent cameraTransformData = cameraNode.cameraTransformData;
            CameraOffsetConfigComponent  cameraOffsetConfig  = cameraNode.cameraOffsetConfig;
            Vector3        cameraOffset   = new Vector3(cameraOffsetConfig.XOffset, cameraOffsetConfig.YOffset, cameraOffsetConfig.ZOffset);
            BezierPosition bezierPosition = cameraNode.bezierPosition.BezierPosition;

            cameraTransformData.Data = CameraPositionCalculator.GetTargetFollowCameraTransformData(cameraTargetNode.cameraTarget.TargetObject.transform, tank.baseRenderer, tank.tankColliders.BoundsCollider.bounds.center, bezierPosition, cameraOffset);
            cameraNode.cameraRootTransform.Root.SetPositionSafe(cameraTransformData.Data.Position);
            cameraNode.cameraRootTransform.Root.SetRotationSafe(cameraTransformData.Data.Rotation);
        }
Пример #2
0
        public void UpdateGoCamera(TimeUpdateEvent evt, GoCameraNode goCameraNode, [JoinAll] CameraTargetNode cameraTargetNode)
        {
            Transform     transform     = cameraTargetNode.cameraTarget.TargetObject.transform;
            int           goCameraIndex = goCameraNode.goCamera.goCameraIndex;
            GoCameraPoint point         = goCameraNode.goCameraPointsUnity.goCameraPoints[goCameraIndex];
            Vector3       vector        = (Vector3)(transform.rotation * point.poistion);
            TransformData data          = new TransformData {
                Position = transform.position + vector,
                Rotation = Quaternion.Euler(transform.rotation.eulerAngles + point.rotation)
            };

            goCameraNode.cameraTransformData.Data = data;
            base.ScheduleEvent(ApplyCameraTransformEvent.ResetApplyCameraTransformEvent(), goCameraNode);
        }
Пример #3
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);
        }
Пример #4
0
        public void InitGoCamera(NodeAddedEvent evt, GoCameraNode goCameraNode, [JoinAll] CameraTargetNode cameraTargetNode)
        {
            int num = Random.Range(0, goCameraNode.goCameraPointsUnity.goCameraPoints.Length);

            goCameraNode.goCamera.goCameraIndex = num;
        }
Пример #5
0
        private void UpdateFollowCameraData(float deltaTime, FollowCameraNode cameraNode, CameraTargetNode targetNode, TankNode tank, MouseControlStateHolderComponent mouseControlStateHolder)
        {
            GameObject targetObject = targetNode.cameraTarget.TargetObject;

            if (targetObject != null)
            {
                CameraTransformDataComponent cameraTransformData = cameraNode.cameraTransformData;
                Transform             target         = targetObject.transform;
                FollowCameraComponent followCamera   = cameraNode.followCamera;
                BezierPosition        bezierPosition = cameraNode.bezierPosition.BezierPosition;
                CameraData            cameraData     = followCamera.cameraData;
                this.UpdateBezierPosition(bezierPosition, followCamera.verticalCameraSpeed, deltaTime, targetNode.weaponRotationControl.MouseRotationCumulativeVerticalAngle, mouseControlStateHolder.MouseVerticalInverted);
                targetNode.weaponRotationControl.MouseRotationCumulativeVerticalAngle = 0f;
                float mouseRotationCumulativeHorizontalAngle = targetNode.weaponRotationControl.MouseRotationCumulativeHorizontalAngle;
                if (Mathf.Abs(MathUtil.ClampAngle180(Vector3.Angle(target.up, Vector3.up))) > 90f)
                {
                    mouseRotationCumulativeHorizontalAngle *= -1f;
                }
                bool mouse = targetNode.weaponRotationControl.MouseRotationCumulativeHorizontalAngle != 0f;
                CameraOffsetConfigComponent cameraOffsetConfig = cameraNode.cameraOffsetConfig;
                Vector3 cameraOffset     = new Vector3(cameraOffsetConfig.XOffset, cameraOffsetConfig.YOffset, cameraOffsetConfig.ZOffset);
                Vector3 cameraCalculated = CameraPositionCalculator.CalculateCameraPosition(target, tank.baseRenderer, tank.tankColliders.BoundsCollider.bounds.center, bezierPosition, cameraData, cameraOffset, mouseRotationCumulativeHorizontalAngle);
                Vector3 rotation         = cameraTransformData.Data.Rotation.eulerAngles * 0.01745329f;
                CameraPositionCalculator.CalculatePitchMovement(ref rotation, bezierPosition, deltaTime, cameraData, mouse);
                CameraPositionCalculator.CalculateYawMovement((Vector3)(Quaternion.Euler(new Vector3(0f, mouseRotationCumulativeHorizontalAngle, 0f)) * target.forward), ref rotation, deltaTime, cameraData, mouse);
                CameraPositionCalculator.SmoothReturnRoll(ref rotation, followCamera.rollReturnSpeedDegPerSec, deltaTime);
                TransformData data4 = new TransformData {
                    Position = CameraPositionCalculator.CalculateLinearMovement(deltaTime, cameraCalculated, cameraTransformData.Data.Position, cameraData, target, mouse),
                    Rotation = Quaternion.Euler(rotation * 57.29578f)
                };
                cameraTransformData.Data = data4;
            }
        }
Пример #6
0
        public void UpdateFollowCameraData(UpdateEvent e, FollowSpectratorCameraNode cameraNode, [JoinAll] CameraTargetNode targetNode, [JoinByTank] TankNode tank, [JoinAll] SingleNode <SelfUserComponent> selfUser, [JoinByUser] SingleNode <MouseControlStateHolderComponent> mouseControlStateHolderNode)
        {
            this.UpdateFollowCameraData(e.DeltaTime, cameraNode, targetNode, tank, mouseControlStateHolderNode.component);
            ApplyCameraTransformEvent eventInstance = ApplyCameraTransformEvent.ResetApplyCameraTransformEvent();

            eventInstance.PositionSmoothingRatio = SPECTATOR_FOLLOW_CAMERA_POSITION_SMOOTHING_RATIO;
            eventInstance.RotationSmoothingRatio = SPECTATOR_FOLLOW_CAMERA_ROTATION_RATIO;
            eventInstance.DeltaTime = e.DeltaTime;
            base.ScheduleEvent(eventInstance, cameraNode);
        }
Пример #7
0
 public void UpdateFollowCameraData(UpdateEvent e, FollowCameraNode cameraNode, [JoinAll] CameraTargetNode targetNode, [JoinByTank] TankNode tank, [JoinAll] SingleNode <SelfTankComponent> selfTank, [JoinByUser] SingleNode <MouseControlStateHolderComponent> mouseControlStateHolderNode)
 {
     this.UpdateFollowCameraData(e.DeltaTime, cameraNode, targetNode, tank, mouseControlStateHolderNode.component);
     base.ScheduleEvent(ApplyCameraTransformEvent.ResetApplyCameraTransformEvent(), cameraNode);
 }