private EReturnStatus KingWander()
    {
        bool recalculateWandering = true;

        if (m_currentState == EAIStates.KING_WANDERING)
        {
            if (m_navMeshAgent.remainingDistance > km_distanceToStopWandering)
            {
                recalculateWandering = false;
            }
        }

        if (recalculateWandering)
        {
            if (SetARandomPointOnMavMesh(km_wanderRange))
            {
                m_currentState = EAIStates.KING_WANDERING;
            }
            else
            {
                m_currentState = EAIStates.KING_SEARCHING_PATH;
            }
        }

        return(EReturnStatus.SUCCESS);
    }
Beispiel #2
0
 public void reduceHealth(float amountToReduce)
 {
     m_health -= amountToReduce;
     if (checkDead() == true)
     {
         currentAIState = EAIStates.dead;
     }
 }
Beispiel #3
0
 private void idle()
 {
     if (GameManager.instance.Player != null)
     {
         if (canHear() || CanSee(GameManager.instance.Player))
         {
             currentAIState = EAIStates.chase;
         }
     }
 }
    private EReturnStatus RunAwayFromClosestPlayer()
    {
        if (m_currentState == EAIStates.KING_FOLLOWING_PATH)
        {
            if (m_navMeshAgent.remainingDistance > km_distanceToStopWandering * 2f)
            {
                return(EReturnStatus.SUCCESS);
            }
            else
            {
                m_currentState = EAIStates.KING_SEARCHING_PATH;
            }
        }

        bool someoneInFrontOfMe = Physics.Raycast(transform.position, transform.forward, km_iminentDangerDistance, m_taggingIdentifier.attackLayer);
        bool someoneBehindMe    = Physics.Raycast(transform.position, -transform.forward, km_iminentDangerDistance, m_taggingIdentifier.attackLayer);
        bool someoneToMyRight   = Physics.Raycast(transform.position, transform.right, km_iminentDangerDistance, m_taggingIdentifier.attackLayer);
        bool someoneToMyLeft    = Physics.Raycast(transform.position, -transform.right, km_iminentDangerDistance, m_taggingIdentifier.attackLayer);

        List <Vector3> possibleDirections = new List <Vector3> {
            transform.forward,
            -transform.forward,
            transform.right,
            -transform.right
        };

        if (someoneInFrontOfMe)
        {
            possibleDirections.Remove(transform.forward);
        }

        if (someoneBehindMe)
        {
            possibleDirections.Remove(-transform.forward);
        }

        if (someoneToMyRight)
        {
            possibleDirections.Remove(transform.right);
        }

        if (someoneToMyLeft)
        {
            possibleDirections.Remove(-transform.right);
        }

        if (possibleDirections.Count > 0)
        {
            RunToThisDirection(possibleDirections[Random.Range(0, possibleDirections.Count)]);
            m_currentState = EAIStates.KING_FOLLOWING_PATH;
            return(EReturnStatus.SUCCESS);
        }

        return(KingWander());
    }
    private EReturnStatus ChaseKing()
    {
        if (m_navMeshAgent.isOnNavMesh)
        {
            m_navMeshAgent.SetDestination(m_playerCurrentlyBeingFollowed.position + m_playerCurrentlyBeingFollowed.forward);
            m_currentState = EAIStates.NOT_KING_CHASING_KING;
            return(EReturnStatus.SUCCESS);
        }

        return(EReturnStatus.FAILURE);
    }
    private EReturnStatus NotKingWanderRandomly()
    {
        if (SetARandomPointOnMavMesh(km_wanderRange))
        {
            m_currentState = EAIStates.NOT_KING_WANDERING;
            return(EReturnStatus.SUCCESS);
        }

        m_currentState = EAIStates.NOT_KING_RECALCULATING_PATH;

        return(EReturnStatus.SUCCESS);
    }
Beispiel #7
0
 private void chase()
 {
     if (target != null)
     {
         Vector3 DirectiontoMove = target.position - transform.position;
         DirectiontoMove.Normalize();
         transform.position += DirectiontoMove * movementSpeed * Time.deltaTime;
         if (GameManager.instance.Player != null)
         {
             if (!(canHear() || CanSee(GameManager.instance.Player)))
             {
                 currentAIState = EAIStates.idle;
             }
         }
     }
 }
    private EReturnStatus CollectPowerUp()
    {
        if (m_navMeshAgent.isOnNavMesh)
        {
            m_navMeshAgent.SetDestination(m_powerUpBoxesInDistance[Random.Range(0, m_powerUpBoxesInDistance.Count)].gameObject.transform.position);

            if (!m_taggingIdentifier.AmIKing())
            {
                m_currentState = EAIStates.NOT_KING_CHASING_POWERUP;
            }
            else
            {
                m_currentState = EAIStates.KING_CHASING_POWERUP;
            }

            return(EReturnStatus.SUCCESS);
        }

        return(EReturnStatus.FAILURE);
    }
Beispiel #9
0
 // Start is called before the first frame update
 void Start()
 {
     currentAIState = EAIStates.idle;
     GameManager.instance.currentEnemies.Add(this.gameObject);
 }