public override Status Run() { for (int i = 0; i < globalBlackboard.guardBlackboards.Length; i++) { if (globalBlackboard.guardBlackboards[i] == guardBlackboard) { continue; } // Loop through all AI seeing if any are close if (guardBlackboard.GetDistance(globalBlackboard.guardBlackboards[i].GetPosition()) < 5f) { // If a guard is close, and in conversation if (globalBlackboard.guardBlackboards[i].GetGuardState() == GuardBlackboard.GuardState.conversing) { Debug.Log("Converse"); // If the AI is conversing with another agent, move on and reset timers if (globalBlackboard.guardBlackboards[i].converseAgent != this.guardBlackboard.gameObject) { guardBlackboard.SetTriedToConverse(true); return(Status.FAILURE); } } guardBlackboard.converseAgent = globalBlackboard.guardBlackboards[i].gameObject; return(Status.SUCCESS); } } return(Status.FAILURE); }
public override Status Run() { // Stop the agent and cause them to look at each other, and update their state m_agent.isStopped = true; m_guardBlackboard.SetGuardState(GuardBlackboard.GuardState.conversing); if (m_guardBlackboard.GetGuardState() == GuardBlackboard.GuardState.conversing) { m_guardBlackboard.gameObject.transform.LookAt(m_guardBlackboard.converseAgent.gameObject.transform); } // Perform some kind of action if (m_guardBlackboard.GetFinishedConversation() == false) { Debug.Log("Starting Coroutine for " + m_guardBlackboard.gameObject.name); m_guardBlackboard.StartCoroutine("ConversationWait", 4); } // If the conversation is finished resume on path if (m_guardBlackboard.GetFinishedConversation() == true) { Debug.Log(m_guardBlackboard.thisObject.name + " returned to patrolling"); m_agent.isStopped = false; m_agent.destination = m_guardBlackboard.m_destination; m_guardBlackboard.SetGuardState(GuardBlackboard.GuardState.patrolling); m_guardBlackboard.converseAgent = null; m_guardBlackboard.SetTriedToConverse(true); m_guardBlackboard.SetFinishedConversation(false); return(Status.SUCCESS); } return(Status.RUNNING); }