示例#1
0
        public void InterruptCharactor()
        {
            var RelatedCharState = playerEntity.stateInterface.State;

            RelatedCharState.InterruptAction();
            RelatedCharState.InterruptSwitchWeapon();
            RelatedCharState.ForceBreakSpecialReload(null);
            RelatedCharState.ForceFinishGrenadeThrow();
            PlayerStateUtil.AddPlayerState(EPlayerGameState.InterruptItem, playerEntity.gamePlay);
            if (playerEntity.hasThrowingAction)
            {
                playerEntity.throwingAction.ActionInfo.ClearState();
            }
        }
示例#2
0
        public void InterruptCharactor()
        {
            var RelatedCharState = playerEntity.stateInterface.State;

            RelatedCharState.InterruptAction();
            RelatedCharState.InterruptSwitchWeapon();
            RelatedCharState.ForceBreakSpecialReload(null);
            RelatedCharState.ForceFinishGrenadeThrow();
            playerEntity.AudioController().StopPullBoltAudio();
            PlayerStateUtil.AddPlayerState(EPlayerGameState.InterruptItem, playerEntity.gamePlay);
            if (playerEntity.hasThrowingAction)
            {
                playerEntity.throwingAction.ActionData.InternalCleanUp();
            }
        }
示例#3
0
        /// <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);
        }