using System.Collections; using System.Collections.Generic; using UnityEngine; namespace Invector { [vClassHeader("Message Sender", "Requires a vMessageReceiver to receive messages.", openClose = false)] public class vMessageSender : vMonoBehaviour { [System.Serializable] public class vMessage { public string name; public string message; [vHelpBox("- sendByTrigger (You can use vSimpleTrigger to verify the Player and Send messages using Events by calling the 'OnTrigger' method")] public bool sendByTrigger; public List defaultReceivers; } [System.Serializable] public class vGlobalMessage { public string name; public string message; } public List messages; public List globalMessages; /// /// Send a message to default receiver of the target message /// /// index of message list public virtual void SendToDefaultReceiver(int messageIndex) { vMessage _message = messages.Count > 0 && messageIndex < messages.Count ? messages[messageIndex] : null; if (_message != null) for (int i = 0; i < _message.defaultReceivers.Count; i++) if (_message.defaultReceivers[i]) _message.defaultReceivers[i].Send(_message.name, _message.message); } /// /// Send a message to default receiver of the target message /// /// name of message in message list public virtual void SendToDefaultReceiver(string messageName) { var _messages = messages.FindAll(m => m.name.Equals(messageName)); if (_messages != null && _messages.Count > 0) { for (int i = 0; i < _messages.Count; i++) { for (int a = 0; a < _messages[i].defaultReceivers.Count; a++) if (_messages[i].defaultReceivers[a]) _messages[i].defaultReceivers[a].Send(_messages[i].name, _messages[i].message); } } } /// /// Send a message to default receiver of the target message /// /// index of message list public virtual void SendToParentReceiver(int messageIndex) { var receiver = GetComponentInParent(); if (!receiver) return; vMessage _message = messages.Count > 0 && messageIndex < messages.Count ? messages[messageIndex] : null; if (_message != null) { receiver.Send(_message.name, _message.message); } } /// /// Send a message to default receiver of the target message /// /// name of message in message list public virtual void SendToParentReceiver(string messageName) { var receiver = GetComponentInParent(); if (!receiver) return; var _messages = messages.FindAll(m => m.name.Equals(messageName)); if (_messages != null && _messages.Count > 0) { for (int i = 0; i < _messages.Count; i++) { receiver.Send(_messages[i].name, _messages[i].message); } } } /// /// Send a message to target receiver /// /// index of message list /// target receiver public virtual void Send(GameObject target, int messageIndex) { if (target) return; var _receiver = target.GetComponent(); if (!_receiver) return; vMessage _message = messages.Count > 0 && messageIndex < messages.Count ? messages[messageIndex] : null; if (_message != null) _receiver.Send(_message.name, _message.message); } /// /// Send a message to target receiver /// /// index of message list /// target receiver public virtual void Send(Collider target, int messageIndex) { if (target) return; Send(target.gameObject, messageIndex); } /// /// Send a message to target receiver /// /// index of message list /// target receiver public virtual void Send(Transform target, int messageIndex) { if (target) return; Send(target.gameObject, messageIndex); } /// /// Send a message to target receiver /// /// name of message in message list /// target receiver public virtual void Send(GameObject target, string messageName) { if (target) return; var _receiver = target.GetComponent(); if (!_receiver) return; var _messages = messages.FindAll(m => m.name.Equals(messageName)); if (_messages != null && _messages.Count > 0) { for (int i = 0; i < _messages.Count; i++) { _receiver.Send(_messages[i].name, _messages[i].message); } } } /// /// Send messages defined as . /// Call this function using vSimpleTrigger event or similar /// /// target Receiver public virtual void Send(Collider target, string messageName) { if (!target) return; Send(target.gameObject, messageName); } /// /// Send messages defined as . /// Call this function using vSimpleTrigger event or similar /// /// target Receiver public virtual void Send(Transform target, string messageName) { if (!target) return; Send(target.gameObject, messageName); } /// /// Send all message to default receiver /// public virtual void SendAllToDefaultReceiver() { if (messages != null && messages.Count > 0) { for (int i = 0; i < messages.Count; i++) { for (int a = 0; a < messages[i].defaultReceivers.Count; a++) if (messages[i].defaultReceivers[a]) messages[i].defaultReceivers[a].Send(messages[i].name, messages[i].message); } } } /// /// Send all message to target receiver /// /// target receiver public virtual void SendAll(GameObject target) { if (!target) return; var _receiver = target.GetComponent(); if (!_receiver) return; for (int i = 0; i < messages.Count; i++) _receiver.Send(messages[i].name, messages[i].message); } /// /// Send messages defined as . /// Call this function using vSimpleTrigger event or similar /// /// target Receiver public virtual void OnTrigger(Collider target) { if (!target) return; var _receiver = target.gameObject.GetComponent(); if (!_receiver) return; for (int i = 0; i < messages.Count; i++) if (messages[i].sendByTrigger) _receiver.Send(messages[i].name, messages[i].message); } /// /// Send message to global receivers /// /// Message name public virtual void SendGlobal(string messageName) { var _messages = globalMessages.FindAll(m => m.name.Equals(messageName)); for (int i = 0; i < _messages.Count; i++) { vMessageReceiver.SendGlobal(_messages[i].name, _messages[i].message); } } /// /// Send message to global receivers /// /// Index of Message public virtual void SendGlobal(int messageIndex) { vGlobalMessage _message = globalMessages.Count > 0 && messageIndex < globalMessages.Count ? globalMessages[messageIndex] : null; if (_message != null) { vMessageReceiver.SendGlobal(_message.name, _message.message); } } } }