private void AddSignalPacket(SignalPacket packet) { List <SignalPacket> list; if (!m_SignalsLastFrame.TryGetValue(packet.Signal, out list)) { m_SignalsLastFrame[packet.Signal] = list = new List <SignalPacket>(); } list.Add(packet); }
public bool Send([NotNull] Component sender, int signal, object data = null) { if (sender == null) { throw new ArgumentNullException("sender"); } SignalPacket signalPacket = new SignalPacket { Data = data, Sender = sender, Signal = signal }; AddSignalPacket(signalPacket); if (!ReceiverLookup.ContainsKey(signal)) { signalPacket.NoReceivers = true; return(false); } List <ISignalReceiver> receivers = ReceiverLookup[signal].ToList(); if (receivers.Any(r => r == null)) { receivers = ReceiverLookup[signal] = receivers.Where(r => r != null).ToList(); } #if XDEBUG XDebug.Log(sender, "{0} --[ {1} ]--> {2}", sender.name + ":" + sender.GetType().Name, Signal.LookupName(signal), receivers.AggregateString(", ") + (data != null ? " (" + data + ")" : "")); #endif receivers.ForEach(r => { if (r != null) { r.Receive(sender, data); } }); return(true); }