public void StartConversationWith(CitizenAgent _recipient, double _conversationLength, bool _initiator = false) { m_recipient = _recipient; m_initiator = _initiator; m_conversationLength = _conversationLength; SwitchToState(E_States.INTERACTING); }
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); } } } } }
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); } }
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); }