public void SendSignal(SignalEmitter emitter, SignalType type, SignalDataSO signalDataSo, ISignalMessage signalMessage = null)
        {
            Receivers.Remove(null);

            foreach (SignalReceiver receiver in Receivers)
            {
                if (receiver.SignalTypeToReceive != type)
                {
                    continue;
                }

                if (receiver.Frequency.IsBetween(signalDataSo.MinMaxFrequancy.x, signalDataSo.MinMaxFrequancy.y) == false)
                {
                    continue;
                }
                if (receiver.ListenToEncryptedData == false && MatchingEncryption(receiver, emitter) == false)
                {
                    continue;
                }

                if (receiver.SignalTypeToReceive == SignalType.PING && receiver.Emitter == emitter)
                {
                    if (signalDataSo.UsesRange)
                    {
                        SignalStrengthHandler(receiver, emitter, signalDataSo); break;
                    }
                    receiver.ReceiveSignal(SignalStrength.HEALTHY, signalMessage);
                    break;
                }
                //TODO (Max) : Radio signals should be sent to relays and servers.
                if (receiver.SignalTypeToReceive == SignalType.RADIO && AreOnTheSameFrequancy(receiver, emitter))
                {
                    if (signalDataSo.UsesRange)
                    {
                        SignalStrengthHandler(receiver, emitter, signalDataSo, signalMessage); continue;
                    }
                    receiver.ReceiveSignal(SignalStrength.HEALTHY, signalMessage);
                    continue;
                }
                //Bounced radios always have a limited range.
                if (receiver.SignalTypeToReceive == SignalType.BOUNCED && AreOnTheSameFrequancy(receiver, emitter))
                {
                    SignalStrengthHandler(receiver, emitter, signalDataSo, signalMessage);
                }
            }
        }
        public void SendSignal(SignalEmitter emitter, SignalType type, SignalDataSO signalDataSo)
        {
            foreach (SignalReceiver receiver in Receivers)
            {
                if (receiver.SignalTypeToReceive != type)
                {
                    return;
                }

                if (receiver.Frequency.IsBetween(signalDataSo.MinMaxFrequancy.x, signalDataSo.MinMaxFrequancy.y) == false)
                {
                    return;
                }

                if (receiver.SignalTypeToReceive == SignalType.PING && receiver.Emitter == emitter)
                {
                    if (signalDataSo.UsesRange)
                    {
                        SignalStrengthHandler(receiver, emitter, signalDataSo); break;
                    }
                    receiver.ReceiveSignal(SignalStrength.HEALTHY);
                    break;
                }
                //TODO (Max) : Radio signals should be sent to relays and servers.
                if (receiver.SignalTypeToReceive == SignalType.RADIO && AreOnTheSameFrequancy(receiver, emitter))
                {
                    if (signalDataSo.UsesRange)
                    {
                        SignalStrengthHandler(receiver, emitter, signalDataSo); continue;
                    }
                    receiver.ReceiveSignal(SignalStrength.HEALTHY);
                    continue;
                }
                //Bounced radios always have a limited range.
                if (receiver.SignalTypeToReceive == SignalType.BOUNCED && AreOnTheSameFrequancy(receiver, emitter))
                {
                    SignalStrengthHandler(receiver, emitter, signalDataSo);
                }
            }
        }
        private void SignalStrengthHandler(SignalReceiver receiver, SignalEmitter emitter, SignalDataSO signalDataSo, ISignalMessage signalMessage = null)
        {
            SignalStrength strength = GetStrength(receiver, emitter, signalDataSo.SignalRange);

            if (strength == SignalStrength.HEALTHY)
            {
                receiver.ReceiveSignal(strength, signalMessage);
            }
            if (strength == SignalStrength.TOOFAR)
            {
                emitter.SignalFailed();
            }


            if (strength == SignalStrength.DELAYED)
            {
                StartCoroutine(DelayedSignalRecevie(receiver.DelayTime, receiver, strength, signalMessage));
                return;
            }
            if (strength == SignalStrength.WEAK)
            {
                Random chance = new Random();
                if (DMMath.Prob(chance.Next(0, 100)))
                {
                    StartCoroutine(DelayedSignalRecevie(receiver.DelayTime, receiver, strength, signalMessage));
                }
                emitter.SignalFailed();
            }
        }