Exemple #1
0
        async public Task PerformMovement(int nextNodeID)
        {
            Vector3 nextLocation = pathService.GetNodeLocation(nextNodeID);

            if (pathService.CheckIfTeleportable(playerNodeID, nextNodeID))
            {
                pathService.HighlightTeleportNodes(nextNodeID);
            }
            //else {
            //    pathService.UnhighlightTeleportableNodes();
            //}

            await MoveToLocation(nextLocation);

            playerNodeID = nextNodeID;


            if (interactableService.CheckForInteractable(nextNodeID))
            {
                IInteractableController interactableController = interactableService.ReturnInteractableController(nextNodeID);
                PerformInteractableAction(interactableController);
            }
            if (IsGameFinished())
            {
                playerService.FireLevelFinishedSignal();
            }
            else if (GetPlayerState() != PlayerStates.WAIT_FOR_INPUT)
            {
                gameService.ChangeToEnemyState();
            }
        }
Exemple #2
0
        async private Task NewWaitForTask(IInteractableController _interactableController, PlayerStates playerState)
        {
            int nodeID;

            while (stateMachine.GetPlayerState() == this.currentStateType)
            {
                nodeID = playerService.GetTargetNode();
                if (nodeID != -1)
                {
                    //bool inRange = playerService.CheckForRange(nodeID);
                    bool inRange = _interactableController.CanTakeAction(playerService.GetPlayerNodeID(), nodeID);
                    if (inRange)
                    {
                        stateMachine.ChangePlayerState(playerState, PlayerStates.NONE);
                        _interactableController.TakeAction(nodeID);
                        stateMachine.ChangePlayerState(PlayerStates.END_TURN, PlayerStates.NONE);

                        playerService.ChangeToEnemyState();
                        break;
                    }
                    else
                    {
                        await new WaitForEndOfFrame();
                    }
                }
                else
                {
                    await new WaitForEndOfFrame();
                }
            }
        }
Exemple #3
0
 async public Task OnStateEnter(PlayerStates playerStates = PlayerStates.NONE, IInteractableController controller = null)
 {
     playerView.PlayAnimation(currentStateType);
     if (controller != null && playerStates != PlayerStates.NONE)
     {
         await new WaitForEndOfFrame();
     }
 }
Exemple #4
0
        async public Task ChangePlayerState(PlayerStates _state, PlayerStates stateToChange, IInteractableController interactableController = null)
        {
            previousState = currentState;
            if (previousState != null)
            {
                previousState.OnStateExit();
            }
            switch (_state)
            {
            case PlayerStates.AMBUSH:
                currentState = new PlayerAmbushState(playerView, this, playerService);

                break;

            case PlayerStates.DISGUISE:
                currentState = new PlayerDisguiseState(playerView, this, playerService);

                break;

            case PlayerStates.IDLE:
                currentState = new PlayerIdleState(playerView, this, playerService);

                break;

            case PlayerStates.SHOOTING:
                currentState = new PlayerShootingState(playerView, this, playerService);
                break;

            case PlayerStates.UNLOCK_DOOR:
                currentState = new PlayerDoorUnlock(playerView, this, playerService);
                break;

            case PlayerStates.WAIT_FOR_INPUT:
                currentState = new PlayerWaitingForInputState(playerView, this, playerService);
                break;

            case PlayerStates.THROWING:
                currentState = new PlayerThrowingState(playerView, this, playerService);
                break;

            case PlayerStates.END_TURN:
                currentState = new PlayerEndTurnState(playerView, this, playerService);
                break;

            case PlayerStates.INTERMEDIATE_MOVE:
                currentState = new PlayerIntermediateMoveState(playerView, this, playerService);
                break;

            default:
                currentState = new PlayerIdleState(playerView, this, playerService);
                break;
            }
            if (interactableController != null && stateToChange != PlayerStates.NONE)
            {
                await currentState.OnStateEnter(stateToChange, interactableController);
            }
            else
            {
                await currentState.OnStateEnter();
            }
        }
Exemple #5
0
 async public Task OnStateEnter(PlayerStates playerStates = PlayerStates.NONE, IInteractableController controller = null)
 {
     if (controller != null && playerStates != PlayerStates.NONE)
     {
         await new WaitForEndOfFrame();
     }
 }
Exemple #6
0
 async public Task ChangePlayerState(PlayerStates _state, PlayerStates stateToChange, IInteractableController interactableController = null)
 {
     await playerStateMachine.ChangePlayerState(_state, stateToChange, interactableController);
 }
Exemple #7
0
        async public void PerformInteractableAction(IInteractableController _interactableController)
        {
            int nodeID = playerService.GetTargetNode();

            switch (_interactableController.GetInteractablePickup())
            {
            case InteractablePickup.AMBUSH_PLANT:
                await ChangePlayerState(PlayerStates.AMBUSH, PlayerStates.NONE);

                _interactableController.TakeAction(playerNodeID);
                break;

            case InteractablePickup.BONE:
                pathService.ShowThrowableNodes(playerNodeID);
                playerService.SetTargetTap(-1);
                await ChangePlayerState(PlayerStates.WAIT_FOR_INPUT, PlayerStates.THROWING, _interactableController);

                break;

            case InteractablePickup.BREIFCASE:
                await ChangePlayerState(PlayerStates.IDLE, PlayerStates.NONE);

                _interactableController.TakeAction(playerNodeID);
                await new WaitForEndOfFrame();
                break;

            case InteractablePickup.COLOR_KEY:
                await ChangePlayerState(PlayerStates.IDLE, PlayerStates.NONE);

                _interactableController.TakeAction(playerNodeID);

                break;

            case InteractablePickup.DUAL_GUN:
                await ChangePlayerState(PlayerStates.IDLE, PlayerStates.NONE);

                _interactableController.TakeAction(playerNodeID);

                break;

            case InteractablePickup.GUARD_DISGUISE:
                await ChangePlayerState(PlayerStates.DISGUISE, PlayerStates.NONE);

                _interactableController.TakeAction(playerNodeID);

                break;

            case InteractablePickup.SNIPER_GUN:
                playerService.SetTargetTap(-1);
                currentPlayerView.PlayAnimation(PlayerStates.SHOOTING);
                await ChangePlayerState(PlayerStates.WAIT_FOR_INPUT, PlayerStates.SHOOTING, _interactableController);

                break;

            case InteractablePickup.STONE:
                pathService.ShowThrowableNodes(playerNodeID);
                playerService.SetTargetTap(-1);
                await ChangePlayerState(PlayerStates.WAIT_FOR_INPUT, PlayerStates.THROWING, _interactableController);

                break;

            case InteractablePickup.TRAP_DOOR:
                playerService.SetTargetTap(-1);
                await ChangePlayerState(PlayerStates.WAIT_FOR_INPUT, PlayerStates.UNLOCK_DOOR, _interactableController);

                break;
            }
            await new WaitForEndOfFrame();
        }