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(); } }