private void BoneUpdate(PlayerEntity player)
        {
            var appearanceP1  = player.appearanceInterface.FirstPersonAppearance;
            var characterBone = player.characterBoneInterface.CharacterBone;

            _fsmOutputs.ResetOutput();
            characterBone.Execute(_fsmOutputs.AddOutput);
            _fsmOutputs.SetOutput(player);

            if (!SharedConfig.IsServer)
            {
                FollowRotHelper.Player = player;
                var rotParam = new FollowRotParam
                {
                    CameraFreeYaw     = player.cameraStateNew.FreeYaw,
                    CameraFreeNowMode = player.cameraStateNew.FreeNowMode,
                    CameraEulerAngle  = player.cameraFinalOutputNew.EulerAngle,
                    ClientTime        = player.time.ClientTime
                };
                characterBone.PreUpdate(rotParam, player.characterBoneInterface.CharacterBone);
                characterBone.SyncTo(player.characterBone);
            }

            var animator    = player.thirdPersonAnimator.UnityAnimator;
            var state       = player.stateInterface.State;
            var postureType = ThirdPersonAppearanceUtils.GetPosture(state);
            var action      = player.stateInterface.State.GetActionState();
            var keepAction  = player.stateInterface.State.GetActionKeepState();
            var posture     = player.stateInterface.State.GetCurrentPostureState();

            CodeRigBoneParam param = new CodeRigBoneParam
            {
                PitchAmplitude         = player.orientation.Pitch - player.orientation.WeaponPunchPitch * 2,
                OverlayAnimationWeight = animator.GetLayerWeight(NetworkAnimatorLayer.PlayerUpperBodyOverlayLayer),
                PostureWhenOverlay     = postureType,
                IsSight = state.GetActionKeepState() == ActionKeepInConfig.Sight || state.GetNextActionKeepState() == ActionKeepInConfig.Sight,
                SightHorizontalShift = appearanceP1.SightShift.Buff * player.firstPersonAppearance.SightHorizontalShift,
                SightVerticalShift   = appearanceP1.SightShift.Buff * player.firstPersonAppearance.SightVerticalShift,
                SightShiftBuff       = player.oxygenEnergyInterface.Oxygen.SightShiftBuff,
                IKActive             = IKFilter.FilterPlayerIK(action, keepAction, posture),
                HeadPitch            = player.characterBone.PitchHeadAngle,
                HeadYaw        = player.characterBone.RotHeadAngle,
                HandPitch      = player.characterBone.PitchHandAngle,
                HeadRotProcess = player.characterBone.HeadRotProcess,
                IsHeadRotCW    = player.characterBone.IsHeadRotCW,
                WeaponPitch    = player.characterBone.WeaponPitch,
                IsServer       = SharedConfig.IsServer
            };

            characterBone.Update(param);
            if (!SharedConfig.IsServer)
            {
                characterBone.WeaponRotUpdate(param);
            }
        }
        private void BoneUpdate(PlayerEntity player)
        {
            var characterBone = player.characterBoneInterface.CharacterBone;

            _fsmOutputs.ResetOutput();
            characterBone.Execute(_fsmOutputs.AddOutput);
            _fsmOutputs.SetOutput(player);

            if (!SharedConfig.IsServer)
            {
                FollowRotHelper.Player = player;
                var rotParam = new FollowRotParam
                {
                    CameraFreeYaw     = player.cameraStateNew.FreeYaw,
                    CameraFreeNowMode = player.cameraStateNew.FreeNowMode,
                    CameraEulerAngle  = player.cameraFinalOutputNew.EulerAngle,
                    ClientTime        = player.time.ClientTime
                };
                characterBone.PreUpdate(rotParam, player.characterBoneInterface.CharacterBone, _deltaTime);
                characterBone.SyncTo(player.characterBone);
            }

            var animator    = player.thirdPersonAnimator.UnityAnimator;
            var state       = player.stateInterface.State;
            var action      = player.stateInterface.State.GetActionState();
            var nextAction  = player.stateInterface.State.GetNextActionState();
            var keepAction  = player.stateInterface.State.GetActionKeepState();
            var posture     = player.stateInterface.State.GetCurrentPostureState();
            var nextPosture = player.stateInterface.State.GetNextPostureState();
            var movement    = player.stateInterface.State.GetCurrentMovementState();
            var postureType = ThirdPersonAppearanceUtils.GetPosture(posture);

            UpdateOffsetData(player);

            var param = new CodeRigBoneParam
            {
                PitchAmplitude         = player.orientation.Pitch - player.orientation.AccPunchPitchValue * 2,
                OverlayAnimationWeight = animator.GetLayerWeight(NetworkAnimatorLayer.PlayerUpperBodyOverlayLayer),
                PostureWhenOverlay     = postureType,
                IsSight              = state.GetActionKeepState() == ActionKeepInConfig.Sight || state.GetNextActionKeepState() == ActionKeepInConfig.Sight,
                IsIntoSight          = state.GetNextActionKeepState() == ActionKeepInConfig.Sight,
                SightHorizontalShift = /*appearanceP1.SightShift.Buff * */ player.firstPersonAppearance.SightHorizontalShift,
                SightVerticalShift   = /*appearanceP1.SightShift.Buff * */ player.firstPersonAppearance.SightVerticalShift,
                SightShiftBuff       = player.oxygenEnergyInterface.Oxygen.SightShiftBuff,
                IKActive             = IKFilter.FilterPlayerIk(action, nextAction, keepAction, posture, nextPosture, movement),
                HeadPitch            = player.characterBone.PitchHeadAngle,
                HeadYaw              = player.characterBone.RotHeadAngle,
                CurrentHandPitch     = player.characterBone.CurrentPitchHandAngle,
                WeaponRot            = player.characterBone.WeaponRot,
                IsFire   = action == ActionInConfig.Fire,
                IsServer = SharedConfig.IsServer,

                FirstPersonPositionOffset = player.characterBone.FirstPersonPositionOffset,
                FirstPersonRotationOffset = player.characterBone.FirstPersonRotationOffset,
                FirstPersonSightOffset    = player.characterBone.FirstPersonSightOffset
            };

            //     DebugUtil.MyLog("SightVerticalShift:"+param.SightVerticalShift + "||SightVerticalShift:"+param.SightVerticalShift);

            if (!SharedConfig.IsServer)
            {
                characterBone.WeaponRotUpdate(param, _deltaTime);
            }
            else
            {
                characterBone.WeaponRotPlayback(param);
            }
            characterBone.Update(param);
        }