Beispiel #1
0
    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);
    }