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); }
public void reduceHealth(float amountToReduce) { m_health -= amountToReduce; if (checkDead() == true) { currentAIState = EAIStates.dead; } }
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); }
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); }
// Start is called before the first frame update void Start() { currentAIState = EAIStates.idle; GameManager.instance.currentEnemies.Add(this.gameObject); }