Beispiel #1
0
 public void StartConversationWith(CitizenAgent _recipient, double _conversationLength, bool _initiator = false)
 {
     m_recipient          = _recipient;
     m_initiator          = _initiator;
     m_conversationLength = _conversationLength;
     SwitchToState(E_States.INTERACTING);
 }
Beispiel #2
0
    void Update()
    {
        if (Input.GetMouseButtonDown(1))
        {
            RaycastHit hit;

            if (Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out hit))
            {
                if (hit.collider.transform.tag == "Citizen")
                {
                    m_followCitizen         = true;
                    m_CitizenToFollow       = hit.collider.gameObject.transform;
                    m_recipientCitizenAgent = m_CitizenToFollow.GetComponent <CitizenAgent>();
                    m_AIcontroller.SetTarget(m_CitizenToFollow.transform.position);
                }
                else
                {
                    m_followCitizen   = false;
                    m_CitizenToFollow = null;
                    m_AIcontroller.SetTarget(hit.point);
                }
            }
        }
        else if (m_followCitizen)
        {
            Debug.Log(m_CitizenToFollow.transform.position);
            m_AIcontroller.SetTarget(m_CitizenToFollow.position);

            if (!m_navMeshAgent.pathPending)
            {
                if (m_navMeshAgent.remainingDistance <= m_navMeshAgent.stoppingDistance)
                {
                    // We are near citizen
                    CitizenAgent otherCitizen = m_CitizenToFollow.GetComponent <CitizenAgent>();

                    if (otherCitizen.CanSwitchToInteracting())
                    {
                        CitizenAgent citizenAgent = GetComponent <CitizenAgent>();
                        citizenAgent.StartConversationWith(otherCitizen, 1.1, _initiator: true);
                        otherCitizen.StartConversationWith(citizenAgent, 1.1);

                        GetComponent <CitizenManager>().m_IsInteracting.Invoke(otherCitizen);
                    }
                }
            }
        }
    }
Beispiel #3
0
    private bool InitiateConversation(CitizenAgent _recipient)
    {
        // One of the participant is busy or dead :<
        if (!_recipient.CanSwitchToInteracting() || !m_citizenAgent.CanSwitchToInteracting())
        {
            return(false);
        }

        int r = rnd.Next(100);

        if (r < m_probabilityToInteract)
        {
            return(true);
        }
        else
        {
            return(false);
        }
    }
Beispiel #4
0
    public void OnPlayerInInteractivityRange(CitizenAgent _recipient)
    {
        // Keep giving a CitizenAgent or give a GameObject and dynamically retrieve the Agent (More costly)

        // Who stores the citizenInfo? -> The transmission manager
        // What does the transmission manager want function want to receive?
        //      -> Each citizen get triggered (also need to call them off after a while when ending the conversation)
        //      -> Needs to know who it's talking to

        Debug.Log(this.name + " in range with " + _recipient.name, _recipient);

        if (InitiateConversation(_recipient))
        {
            // Random length between minConversationTime and maxConversationTime
            double conversationLength = rnd.NextDouble() * (m_maxConversationTime - m_minConversationTime) + m_minConversationTime;

            m_citizenAgent.StartConversationWith(_recipient, conversationLength, _initiator: true);
            _recipient.StartConversationWith(m_citizenAgent, conversationLength);

            m_IsInteracting.Invoke(_recipient);
        }
    }
 private void StartTransmitting(CitizenAgent _recipient)
 {
     m_citizenTransmitter.InitiateTransmission(_recipient.gameObject);
     _recipient.GetComponent <TransmissionManager>().InitiateTransmission(gameObject);
 }
 private void StopTransmitting(CitizenAgent _recipient)
 {
     m_citizenTransmitter.QuitTransmission();
     _recipient.GetComponent <TransmissionManager>().QuitTransmission();
 }
 private Transform GoTalkTo(CitizenAgent m_recipient)
 {
     return(m_recipient.transform);
 }