/// <summary> /// 角色是否可以移动和旋转 /// </summary> /// <param name="player"></param> /// <returns></returns> public static bool CanPlayerMove(PlayerEntity player) { if ((player.hasCharacterContoller && !player.characterContoller.Value.enabled) || (player.hasThirdPersonAnimator && player.thirdPersonAnimator.UnityAnimator.applyRootMotion)) { return(false); } if (player.IsOnVehicle() || PlayerStateUtil.HasPlayerState(EPlayerGameState.NotMove, player.gamePlay)) { return(false); } if (player.gamePlay.IsLifeState(EPlayerLifeState.Dead)) { return(false); } return(true); }
public void Update() { playerStates.Clear(); if (!_playerEntity.hasStateInterface) { return; } var gamePlay = _playerEntity.gamePlay; switch ((EPlayerLifeState)gamePlay.LifeState) { case EPlayerLifeState.Dead: playerStates.Add(EPlayerState.Dead); break; case EPlayerLifeState.Dying: playerStates.Add(EPlayerState.Dying); break; } if (_playerEntity.hasPlayerGameState) { switch (_playerEntity.playerGameState.CurrentPlayerLifeState) { case PlayerLifeStateEnum.Reborn: case PlayerLifeStateEnum.Dead: playerStates.Add(EPlayerState.Dead); break; } } var playerStateSource = _playerEntity.stateInterface.State; playerStates.Add(ActionToState(playerStateSource.GetActionState())); playerStates.Add(ActionToState(playerStateSource.GetNextActionState())); playerStates.Add(KeepActionToState(playerStateSource.GetActionKeepState())); playerStates.Add(LeanToState(playerStateSource.GetCurrentLeanState())); playerStates.Add(MoveToState(playerStateSource.GetCurrentMovementState())); playerStates.Add(MoveToState(playerStateSource.GetNextMovementState())); var poseState = playerStateSource.GetCurrentPostureState(); var nextPoseState = playerStateSource.GetNextPostureState(); playerStates.Add(PostureToState(poseState)); if (poseState != nextPoseState && LegalTransition(poseState, nextPoseState)) { playerStates.Add(EPlayerState.PostureTrans); } if (_playerEntity.hasOxygenEnergyInterface && _playerEntity.oxygenEnergyInterface.Oxygen.InSightDebuffState) { playerStates.Add(EPlayerState.RunDebuff); } if (_playerEntity.hasCameraStateNew && _playerEntity.cameraStateNew.FreeNowMode == (int)ECameraFreeMode.On) { playerStates.Add(EPlayerState.CameraFree); } if (IsPlayerOnAir()) { playerStates.Add(EPlayerState.OnAir); } if (gamePlay.IsSave) { playerStates.Add(EPlayerState.Rescue); } var move = playerStates.Contains(EPlayerState.Run) || playerStates.Contains(EPlayerState.Sprint) || playerStates.Contains(EPlayerState.Walk); if (move) { playerStates.Add(EPlayerState.Move); } if (playerStates.Contains(EPlayerState.Prone) && move) { playerStates.Add(EPlayerState.ProneMove); } if (_playerEntity.characterBone.IsWeaponRotState) { playerStates.Add(EPlayerState.WeaponRotState); } if (PlayerStateUtil.HasUIState(EPlayerUIState.PaintOpen, gamePlay)) { playerStates.Add(EPlayerState.PaintDisc); } var throwingData = _playerEntity.throwingAction.ActionData; throwingData.IsThrowing = throwingData.IsThrowing && (playerStates.Contains(EPlayerState.Grenade)); if (throwingData.IsThrowing) { playerStates.Add(EPlayerState.GrenadeThrow); } if (PlayerStateUtil.HasPlayerState(EPlayerGameState.TurnOver, _playerEntity.gamePlay)) { playerStates.Add(EPlayerState.FinalPosing); } playerStates.Remove(EPlayerState.None); }