コード例 #1
0
        public void ExecuteUserCmd(IUserCmdOwner owner, IUserCmd cmd)
        {
            _cmdSeq = cmd.Seq;
            PlayerEntity player = owner.OwnerEntity as PlayerEntity;

            if (!player.hasCameraStateNew)
            {
                return;
            }
            if (!player.hasCameraStateOutputNew)
            {
                return;
            }
            if (player.gamePlay.IsObserving())
            {
                return;
            }

            var archotRotation = player.cameraArchor.ArchorEulerAngle;
            var result         = player.cameraStateOutputNew;

            CalcuForNormal(cmd, player, archotRotation, result);

            DummyCameraMotorState.Convert(_state, player.cameraStateNew);

            CopyStateToUploadComponent(player.cameraStateNew, player.cameraStateUpload);
            player.cameraStateUpload.ArchorType = (Byte)player.cameraArchor.ArchorType;

            if (player.appearanceInterface.Appearance.IsFirstPerson && player.gamePlay.BeingObserved)
            {
                CalcuForObserving(cmd, player, archotRotation, player.thirdPersonDataForObserving.ThirdPersonData);
            }
        }
コード例 #2
0
        private void CalcuForNormal(IUserCmd cmd, PlayerEntity player, Vector3 archotRotation,
                                    CameraStateOutputNewComponent result)
        {
            DummyCameraMotorState.Convert(player.cameraStateNew, _state);

            DummyCameraMotorInput _input = (DummyCameraMotorInput)player.cameraStateNew.CameraMotorInput;

            _input.Generate(_context, player, cmd, archotRotation.y, archotRotation.x);

            for (int i = 0; i < (int)SubCameraMotorType.End; i++)
            {
                var type = (SubCameraMotorType)i;
                SetNextMotor(player, type, _state, _input);
            }

            CameraActionManager.OnAction(player, _state);

            player.cameraStateUpload.EnterActionCode = CameraActionManager.GetActionCode(CameraActionType.Enter);
            player.cameraStateUpload.LeaveActionCode = CameraActionManager.GetActionCode(CameraActionType.Leave);
            CameraActionManager.ClearActionCode();

            player.cameraStateNew.CameraMotorInput     = player.cameraStateNew.LastCameraMotorInput;
            player.cameraStateNew.LastCameraMotorInput = _input;

            CalcFinalOutput(player, (DummyCameraMotorInput)player.cameraStateNew.LastCameraMotorInput,
                            result, _state);
        }
コード例 #3
0
        private void CalcFinalOutput(PlayerEntity player, DummyCameraMotorInput input,
                                     CameraStateOutputNewComponent finalOutput, DummyCameraMotorState state)
        {
            player.cameraConfigNow.Config     = state.GetMainConfig();
            player.cameraConfigNow.PeekConfig = SingletonManager.Get <CameraConfigManager>().Config.PeekConfig;
            player.cameraConfigNow.DeadConfig = SingletonManager.Get <CameraConfigManager>().Config.DeadConfig;
            _output.Init();
            _output.ArchorPosition =
                player.cameraArchor.ArchorPosition +
                player.cameraArchor.ArchorTransitionOffsetPosition;
            _output.ArchorEulerAngle = player.cameraArchor.ArchorEulerAngle;

            for (int i = 0; i < (int)SubCameraMotorType.End; i++)
            {
                var type = (SubCameraMotorType)i;
                _output.Append(CalcSubFinalCamera(player, input, state, _motors.GetDict(type), state.Get(type),
                                                  player.time.ClientTime));
            }

            finalOutput.ArchorPosition   = _output.ArchorPosition;
            finalOutput.ArchorEulerAngle = _output.ArchorEulerAngle;
            finalOutput.ArchorOffset     = _output.ArchorOffset;
            finalOutput.ArchorPostOffset = _output.ArchorPostOffset;
            finalOutput.EulerAngle       = _output.EulerAngle;
            finalOutput.Offset           = _output.Offset;
            finalOutput.PostOffset       = _output.PostOffset;
            finalOutput.Fov  = _output.Fov;
            finalOutput.Far  = _output.Far;
            finalOutput.Near = _output.Near;

            SmoothFov(player);
        }
コード例 #4
0
 public CameraUpdateSystem(Contexts context, Motors m) : base(context)
 {
     _playerContext = context.player;
     _motors        = m;
     _state         = new DummyCameraMotorState(_motors);
     _dummyState    = new DummyCameraMotorState(_motors);
 }
コード例 #5
0
        protected override void ExecWhenObserving(PlayerEntity player, IUserCmd cmd)
        {
            var observedPlayer = player.observeCamera.ObservedPlayer;

            if (observedPlayer != null)
            {
                DummyCameraMotorInput _input = (DummyCameraMotorInput)observedPlayer.cameraStateNew.CameraMotorInput;
                if (_input == null)
                {
                    _input = new DummyCameraMotorInput();
                }
                _input.FakeForObserve(observedPlayer);

                DummyCameraMotorState.Convert(observedPlayer.cameraStateNew, _state);

                observedPlayer.cameraStateNew.CameraMotorInput     = observedPlayer.cameraStateNew.LastCameraMotorInput;
                observedPlayer.cameraStateNew.LastCameraMotorInput = _input;

                var result = observedPlayer.cameraStateOutputNew;
                CalcFinalOutput(observedPlayer, (DummyCameraMotorInput)observedPlayer.cameraStateNew.LastCameraMotorInput,
                                result, _state);

                DummyCameraMotorState.Convert(_state, observedPlayer.cameraStateNew);
            }

            RestoreSelfPlayer(player);
        }
コード例 #6
0
        private void CalcFinalOutput(PlayerEntity player, DummyCameraMotorInput input,
                                     CameraStateOutputNewComponent finalOutput, DummyCameraMotorState state)
        {
            _output.Init();
            _output.ArchorPosition =
                player.cameraArchor.ArchorPosition +
                player.cameraArchor.ArchorTransitionOffsetPosition;
            _output.ArchorEulerAngle = player.cameraArchor.ArchorEulerAngle;

            for (int i = 0; i < (int)SubCameraMotorType.End; i++)
            {
                var type = (SubCameraMotorType)i;
                _output.Append(CalcSubFinalCamera(player, input, state, _motors.GetDict(type), state.Get(type),
                                                  player.time.ClientTime));
            }

            finalOutput.ArchorPosition   = _output.ArchorPosition;
            finalOutput.ArchorEulerAngle = _output.ArchorEulerAngle;
            finalOutput.ArchorOffset     = _output.ArchorOffset;
            finalOutput.ArchorPostOffset = _output.ArchorPostOffset;
            finalOutput.EulerAngle       = _output.EulerAngle;
            finalOutput.Offset           = _output.Offset;
            finalOutput.PostOffset       = _output.PostOffset;
            finalOutput.Fov  = _output.Fov;
            finalOutput.Far  = _output.Far;
            finalOutput.Near = _output.Near;
            finalOutput.NeedDetectDistance = !_output.ForbidDetect;

            SmoothFov(player, input.GetViewConfig());
        }
コード例 #7
0
 public CameraUpdateSystem(Contexts context, Motors m)
 {
     _context         = context;
     _vehicleContext  = context.vehicle;
     _freeMoveContext = context.freeMove;
     _playerContext   = context.player;
     _motors          = m;
     _state           = new DummyCameraMotorState(_motors);
     _dummyState      = new DummyCameraMotorState(_motors);
 }
コード例 #8
0
        private void CalcuForObserving(IUserCmd cmd, PlayerEntity player, Vector3 archotRotation,
                                       CameraStateOutputNewComponent result)
        {
            DummyCameraMotorState.Convert(player.cameraStateNew, _dummyState);
            _dummyState.Dict[(int)SubCameraMotorType.View].NowMode  = (byte)ECameraViewMode.ThirdPerson;
            _dummyState.Dict[(int)SubCameraMotorType.View].LastMode = (byte)ECameraViewMode.FirstPerson;
            DummyCameraMotorInput _input = (DummyCameraMotorInput)player.cameraStateNew.CameraMotorInput;

            _input.Generate(_context, player, cmd, archotRotation.y, archotRotation.x);
            CalcFinalOutput(player, _input, result, _dummyState);
            result.ArchorPosition = player.thirdPersonDataForObserving.ThirdPersonArchorPosition;
        }
コード例 #9
0
 public CameraUpdateSystem(Contexts context, Motors m)
 {
     _context         = context;
     _vehicleContext  = context.vehicle;
     _freeMoveContext = context.freeMove;
     _playerContext   = context.player;
     _motors          = m;
     _state           = new DummyCameraMotorState(_motors);
     foreach (SubCameraMotorType value in Enum.GetValues(typeof(SubCameraMotorType)))
     {
         _subCameraMotorTypeArray.Add(value);
     }
 }
コード例 #10
0
        public void ExecuteUserCmd(IUserCmdOwner owner, IUserCmd cmd)
        {
            _cmdSeq = cmd.Seq;
            PlayerEntity player = owner.OwnerEntity as PlayerEntity;

            if (!player.hasCameraStateNew)
            {
                return;
            }
            if (!player.hasCameraStateOutputNew)
            {
                return;
            }

            DummyCameraMotorState.Convert(player.cameraStateNew, _state);
            DummyCameraMotorInput _input = (DummyCameraMotorInput)player.cameraStateNew.CameraMotorInput;
            var archotRotation           = player.cameraArchor.ArchorEulerAngle;

            _input.Generate(player, cmd, archotRotation.y, archotRotation.x);

            //if (_input.IsChange(player.cameraStateNew.LastCameraMotorInput))
            {
                foreach (SubCameraMotorType i in _subCameraMotorTypeArray)
                {
                    var type = i;
                    SetNextMotor(player, type, _state, _input);
                }
            }

            CameraActionManager.OnAction(player, _state);

            player.cameraStateUpload.EnterActionCode = CameraActionManager.GetActionCode(CameraActionType.Enter);
            player.cameraStateUpload.LeaveActionCode = CameraActionManager.GetActionCode(CameraActionType.Leave);
            CameraActionManager.ClearActionCode();

            player.cameraStateNew.CameraMotorInput     = player.cameraStateNew.LastCameraMotorInput;
            player.cameraStateNew.LastCameraMotorInput = _input;

            CalcFinalOutput(player, (DummyCameraMotorInput)player.cameraStateNew.LastCameraMotorInput,
                            player.cameraStateOutputNew);
            DummyCameraMotorState.Convert(_state, player.cameraStateNew);

            CopyStateToUploadComponent(player.cameraStateNew, player.cameraStateUpload);
            player.cameraStateUpload.ArchorType = (Byte)player.cameraArchor.ArchorType;
        }
コード例 #11
0
        protected override void ExecWhenNormal(PlayerEntity player, IUserCmd cmd)
        {
            _cmdSeq = cmd.Seq;

            if (!player.hasCameraStateNew)
            {
                return;
            }
            if (!player.hasCameraStateOutputNew)
            {
                return;
            }

            var archotRotation = player.cameraArchor.ArchorEulerAngle;
            var result         = player.cameraStateOutputNew;

            CalcuForNormal(cmd, player, archotRotation, result);

            DummyCameraMotorState.Convert(_state, player.cameraStateNew);

            CopyStateToUploadComponent(player.cameraStateNew, player.cameraStateUpload);
            player.cameraStateUpload.ArchorType = (Byte)player.cameraArchor.ArchorType;
        }
コード例 #12
0
        private void CalcuForNormal(IUserCmd cmd, PlayerEntity player, CameraStateOutputNewComponent result)
        {
            DummyCameraMotorState.Convert(player.cameraStateNew, _state);

            DummyCameraMotorInput _input = (DummyCameraMotorInput)player.cameraStateNew.CameraMotorInput;

            _input.Generate(player, cmd, _state, LockView);

            if (!HasConfigInitialed(_input))
            {
                return;
            }

            for (int i = 0; i < (int)SubCameraMotorType.End; i++)
            {
                var type = (SubCameraMotorType)i;
                SetNextMotor(player, type, _state, _input);
            }

            HandleAction(player);

            _motors.ActionManager.ClearActionCode();

            player.cameraStateNew.CameraMotorInput     = player.cameraStateNew.LastCameraMotorInput;
            player.cameraStateNew.LastCameraMotorInput = _input;

            player.cameraConfigNow.Config     = _input.GetPoseConfig(_state.GetMainMotor().NowMode);
            player.cameraConfigNow.PeekConfig = _input.GetPeekConfig();
            player.cameraConfigNow.DeadConfig = _input.GetDeadConfig();

            CalcFinalOutput(player, (DummyCameraMotorInput)player.cameraStateNew.LastCameraMotorInput,
                            result, _state);

            DummyCameraMotorState.Convert(_state, player.cameraStateNew);
            player.cameraStateNew.CanFire =
                !_state.IsFree() && _input.GetPoseConfig(player.cameraStateNew.MainNowMode).CanFire;
        }
コード例 #13
0
 public ServerPostCameraUpdateSystem(Contexts context)
 {
     _context       = context;
     _playerContext = context.player;
     _state         = new DummyCameraMotorState(_motors);
 }