Exemplo n.º 1
0
    public override void Start()
    {
        base.Start();

        if (debugOnly)
        {
            if (GetComponent <Fighter>())
            {
                Debug.LogError("Fighter Script found on PlayerAI");
            }

            if (GetComponent <EnemyAI>())
            {
                Debug.LogError("EnemyAI Script found on PlayerAI");
            }

            if (GetComponent <InputHandler>())
            {
                Debug.LogError("InputHandler Script found on PlayerAI");
            }
        }

        cc       = GetComponent <PlayerController2D>();
        AIStates = new PlayerAIStates();
    }
Exemplo n.º 2
0
    // Update is called once per frame
    void Update()
    {
        UpdateEdgeDetection();

        if (recentlyAttacked && lockMovement != true)
        {
            print("recovery time set: " + recoveryTimer);
            recoveryTime = 0;
            lockMovement = true;
        }
        else if (recentlyAttacked)
        {
            print("recovering");
            recoveryTime += Time.deltaTime;

            if (recoveryTime > recoveryTimer)
            {
                print("recovered");
                lockMovement = recentlyAttacked = false;
            }
        }


        switch (AIStates)
        {
        case PlayerAIStates.Idle:
            // Recieves no inputs
            // insert timer
            AIStates = PlayerAIStates.Walking;
            break;

        case PlayerAIStates.Walking:
            Move();
            if (wallDetected)
            {
                if (cc.m_Grounded)
                {
                    jump = true;
                }
            }
            break;
        }



        if (!lockMovement)
        {
            Move();
        }
    }
Exemplo n.º 3
0
    /// <summary>
    /// Updates state machine actual state, and starts everything needed.
    /// </summary>
    /// <param name="newState">State to change to.</param>
    public void ChangeState(PlayerAIStates newState)
    {
        if (controlledLocally && actualState == newState)
        {
            return;
        }

        if ((actualState == PlayerAIStates.AttackingPlayer || actualState == PlayerAIStates.AttackingTower ||
             actualState == PlayerAIStates.Fleeing) && newState != PlayerAIStates.Fleeing)
        {
            this.GetComponent <Rigidbody>().velocity = Vector3.zero;
            playerManager.StopShooting();
        }

        actualState = newState;

        navMeshAgent.stoppingDistance = 0;
        switch (actualState)
        {
        case PlayerAIStates.None:
            target      = null;
            targetPanel = null;
            break;

        case PlayerAIStates.Moving:
            movementDirectionCounter = maxMovementDirectionTime;
            playerManager.ChangeState(PlayerStates.Moving);
            break;

        case PlayerAIStates.MovingToPanel:
            navMeshAgent.SetDestination(targetPanel.transform.position);
            break;

        case PlayerAIStates.OcuppyingPanel:
            playerManager.StopMoving();
            occupyingPanelCounter = 1;
            break;

        case PlayerAIStates.AttackingPlayer:
        case PlayerAIStates.AttackingTower:
            navMeshAgent.stoppingDistance = 7;
            navMeshAgent.SetDestination(enemyTower.transform.position);
            playerManager.StopMoving();
            playerManager.StartShoot();
            attackMovementCounter = maxAttackMovementTime;
            break;
        }
    }
    /// <summary>
    /// Updates state machine actual state, and starts everything needed.
    /// </summary>
    /// <param name="newState">State to change to.</param>
    public void ChangeState(PlayerAIStates newState)
    {
        if (controlledLocally && actualState == newState) return;

        if ((actualState == PlayerAIStates.AttackingPlayer || actualState == PlayerAIStates.AttackingTower
             || actualState == PlayerAIStates.Fleeing) && newState != PlayerAIStates.Fleeing)
        {
            this.GetComponent<Rigidbody>().velocity = Vector3.zero;
            playerManager.StopShooting();
        }

        actualState = newState;

        navMeshAgent.stoppingDistance = 0;
        switch (actualState)
        {
            case PlayerAIStates.None:
                target = null;
                targetPanel = null;
                break;
            case PlayerAIStates.Moving:
                movementDirectionCounter = maxMovementDirectionTime;
                playerManager.ChangeState(PlayerStates.Moving);
                break;
            case PlayerAIStates.MovingToPanel:
                navMeshAgent.SetDestination(targetPanel.transform.position);
                break;
            case PlayerAIStates.OcuppyingPanel:
                playerManager.StopMoving();
                occupyingPanelCounter = 1;
                break;
            case PlayerAIStates.AttackingPlayer:
            case PlayerAIStates.AttackingTower:
                navMeshAgent.stoppingDistance = 7;
                navMeshAgent.SetDestination(enemyTower.transform.position);
                playerManager.StopMoving();
                playerManager.StartShoot();
                attackMovementCounter = maxAttackMovementTime;
                break;
        }
    }