/// <summary> /// Adds a message to the queue /// </summary> /// <param name="msg">Message to add in the queue</param> public void Queue(Message msg) { List<IEventHandler> listeners; _eventListenersMap.TryGetValue(msg.Event.EventHash, out listeners); if (listeners == null) return; _queueList[_activeQueue].Enqueue(msg); }
/// <summary> /// Sends a message immediately to concerned listeners /// </summary> /// <param name="msg">Message to send</param> public void Trigger(Message msg) { List<IEventHandler> listeners; _eventListenersMap.TryGetValue(msg.Event.EventHash, out listeners); if ((listeners == null) || (listeners.Count == 0)) return; for (int i = 0; i < listeners.Count; i++) listeners[i].HandleEvent(msg); }
/// <summary> /// Sends a message to indicate that something must be show on the screen /// </summary> /// <param name="message">Message to show</param> /// <param name="args">Extra parameters</param> private void ShowMessage(string message, params object[] args) { MessageInfo info = new MessageInfo(message, args); Message msg = new Message(EventTypeConstant.ShowMessageEvent, info); _mediator.Queue(msg); }
/// <summary> /// Sends a message to indicate that a game object is dead /// </summary> /// <param name="id">Game object id</param> private void SendDeathMessage(int id) { DeathInfo info = new DeathInfo(id); Message msg = new Message(EventTypeConstant.DeathEvent, info); _mediator.Queue(msg); }
/// <summary> /// Called when the mediator send a message to this class /// </summary> /// <param name="msg">Message</param> public void HandleEvent(Message msg) { if (msg.Event == EventTypeConstant.DamageEvent) { DamageInfo info = msg.Payload as DamageInfo; if(info == null) throw new Exception(); DoDamage(info.GameObjectId, info.Damage); } }
/// <summary> /// Sends a message that indicates the poison deals damage /// </summary> /// <param name="id">Game object id</param> /// <param name="damage">Quantity of damage</param> private void SendDamage(int id, int damage) { DamageInfo damageInfo = new DamageInfo(id, damage); Message msg = new Message(EventTypeConstant.DamageEvent, damageInfo); _mediator.Queue(msg); }