public override void ReceiveSignal(SignalStrength strength, ISignalMessage message = null) { if (doorSwitch != null) { doorSwitch.RunDoorController(); Respond(Emitter); return; } Emitter.SignalFailed(); }
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(); } }
public void SendSignal(SignalEmitter emitter, SignalType type, SignalDataSO signalDataSo, ISignalMessage signalMessage = 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); } } }
private IEnumerator DelayedSignalRecevie(float waitTime, SignalReceiver receiver, SignalStrength strength, ISignalMessage signalMessage = null) { yield return(WaitFor.Seconds(waitTime)); if (receiver.gameObject == null) { //In case the object despawns before the signal reaches it yield break; } receiver.ReceiveSignal(strength, signalMessage); }
/// <summary> /// Logic to do when /// </summary> public abstract void ReceiveSignal(SignalStrength strength, ISignalMessage message = null);
public override void ReceiveSignal(SignalStrength strength, ISignalMessage message = null) { radio.BroadcastToNearbyTiles = !radio.BroadcastToNearbyTiles; }