/// <summary> /// Adds the Message Handler as listener to a specific event in the Message Manager. /// </summary> /// <param name="rListener">MessageHandler that needs to listen to the event.</param> /// <param name="eType">Event that the listener needs to listen to.</param> public void AddListener(AF_MessageHandler rListener, AF_Message.MsgType eType) { // check if the input values are valid if (rListener != null && eType != AF_Message.MsgType.NONE && eType != AF_Message.MsgType.COUNT) { // check if the event that need to be listened is already in the registry if (m_dictEventListenersRegistry.ContainsKey(eType)) { // check if the listener is not already registered to the event if (!m_dictEventListenersRegistry [eType].Contains(rListener)) { m_dictEventListenersRegistry [eType].Add(rListener); } else if (Debug.isDebugBuild) { Debug.LogError("Add Listener: listener already added for the event " + eType); } } // otherwise I will create a new entry for the event in the registry and add the listener else { m_dictEventListenersRegistry.Add(eType, new List <AF_MessageHandler> () { rListener }); } } else if (Debug.isDebugBuild) { Debug.LogError("Add Listener: some value is invalid. Can't add listener."); } }
/// <summary> /// Registers this listener to the manager on a single event. /// </summary> /// <param name="eventToListen">Event to listen.</param> public void RegisterToManager(AF_Message.MsgType in_eEventToListen) { if (in_eEventToListen != AF_Message.MsgType.NONE && in_eEventToListen != AF_Message.MsgType.COUNT) { AF_MessageManager.Instance.AddListener(this, in_eEventToListen); } else if (Debug.isDebugBuild) { Debug.LogWarning("Parameter passed \"eventToListen\" has some invalid values."); } }
/// <summary> /// Clears all messages of a certain type from the handler's messages. /// </summary> /// <param name="msgType">Messages type to be removed from the handler's messages.</param> /// <returns>Numbers of messages found and removed.</returns> public int ClerMessagesOfType(AF_Message.MsgType msgType) { int iDeletedMessagesCount = 0; foreach (AF_Message msg in MessagesToConsume) { if (msg.Type == msgType) { MessagesToConsume.Remove(msg); iDeletedMessagesCount++; } } return(iDeletedMessagesCount); }
/// <summary> /// Removes the listener from an event's registry. /// </summary> /// <param name="rListener">Listener to remove.</param> /// <param name="eType">Event from whom the listener will be removed.</param> public void RemoveListenerFromEvent(AF_MessageHandler rListener, AF_Message.MsgType eType) { // check if the registry contains that event if (m_dictEventListenersRegistry.ContainsKey(eType)) { // perform the check to see if the listener exists if (m_dictEventListenersRegistry [eType].Contains(rListener)) { // and remove it m_dictEventListenersRegistry [eType].Remove(rListener); } } else if (Debug.isDebugBuild) { Debug.LogWarning("Remove listener: a listener asked to be removed from the event " + eType + " but the event is not in the registry."); } }
/// <summary> /// Checks if there is a message of a certain type, returns it and removes it from the handler's messages. /// </summary> /// <param name="msgType">Type of message to search.</param> /// <returns>Message object. This should be casted based on the type to get all the needed info.</returns> public AF_Message ReceiveMessage(AF_Message.MsgType msgType) { AF_Message msgToReturn = null; if (MessagesToConsume.Count > 0) { foreach (AF_Message msg in MessagesToConsume) { if (msg.Type == msgType) { msgToReturn = msg; MessagesToConsume.Remove(msg); break; } } } return(msgToReturn); }
/// <summary> /// Constructor for message that includes 2 Vector3 values. /// </summary> /// <param name="msgType">Message Type.</param> /// <param name="value_1">Vector 3 Value 1 to include in the message.</param> /// <param name="value_2">Vector 3 Value 2 to include in the message.</param> /// <param name="sender">MsgHandler of the toy that is sending the message.</param> public AF_MessageVector3(AF_Message.MsgType msgType, Vector3 value_1, Vector3 value_2, AF_MessageHandler sender) : this(msgType, value_1, sender) { this.Value_2 = value_2; }
/// <summary> /// Constructor for Vector3 message. /// </summary> /// <param name="msgType">Message Type.</param> /// <param name="value_1">Vector 3 Value to include in the message.</param> /// <param name="sender">MsgHandler of the toy that is sending the message.</param> public AF_MessageVector3(AF_Message.MsgType msgType, Vector3 value_1, AF_MessageHandler sender) : base(msgType, sender) { Value_1 = value_1; Value_2 = Vector3.zero; }
/// <summary> /// Message including a generic type of object to send. /// </summary> /// <param name="msgType">Message Type.</param> /// <param name="genericObject">Object included in the message.</param> /// <param name="sender">Actor's ID that is sending the message.</param> public AF_MessageGenericObject(AF_Message.MsgType msgType, object genericObject, AF_MessageHandler sender) : base(msgType, sender) { GenericObject = genericObject; }
/// <summary> /// Class for message that include an Object ID. /// </summary> /// <param name="msgType">Message Type.</param> /// <param name="objectHitID">Object ID included in the message.</param> /// <param name="sender">Actor's ID that is sending the message.</param> public AF_MessageObjectID(AF_Message.MsgType msgType, int objectHitID, AF_MessageHandler sender) : base(msgType, sender) { ObjectHitID = objectHitID; }