void UpdateRelays() { IMyCubeGrid OwnGrid = AntennaBlock.GetTopMostParent() as IMyCubeGrid; RelayedReceivers.Clear(); RelayedGridsIngame.Clear(); RelayedChars.Clear(); if (Antenna == null) { RadarCore.LogError(AntennaBlock.DisplayName + ".Update10()", new Exception("Antenna == null")); } if (Antenna.BroadcastersInRange == null) { RadarCore.LogError(AntennaBlock.DisplayName + ".Update10()", new Exception("BroadcastersInRange == null")); } if (Antenna.BroadcastersInRange == null) { return; } foreach (var Receiver in Antenna.BroadcastersInRange.Select(x => x.Entity.GetComponent <MyDataReceiver>())) { TryAddRelay(Receiver); if (Receiver?.BroadcastersInRange == null) { continue; } foreach (var RelayedReceiver in Receiver.BroadcastersInRange.Select(x => x.Entity.GetComponent <MyDataReceiver>())) { TryAddRelay(RelayedReceiver); } } }
void TryAddRelay(MyDataReceiver Receiver) { if (Receiver == null) { return; } if (Receiver == Antenna) { return; } if (RelayedReceivers.Contains(Receiver)) { return; } IMyTerminalBlock ReceiverBlock = (Receiver.Entity as IMyTerminalBlock); if (ReceiverBlock != null) { if (!ReceiverBlock.HasPlayerAccess(AntennaBlock.OwnerId)) { return; } if (!ReceiverBlock.IsWorking) { return; } IMyCubeGrid Grid = ReceiverBlock.CubeGrid.GetTopMostParent() as IMyCubeGrid; if (Grid == null || Grid == AntennaGrid) { return; } RelayedReceivers.Add(Receiver); if (!RelayedGrids.Any(x => x.EntityId == Grid.EntityId)) { RelayedGrids.Add(Grid); RelayedGridsIngame.Add(MyDetectedEntityInfoHelper.Create(Grid as MyEntity, AntennaBlock.OwnerId)); } } else { IMyCharacter Char = Receiver.Entity as IMyCharacter; if (Char != null) { if (Char.IsPlayer && !Char.IsDead && AntennaBlock.HasPlayerAccess(Char.ControllerInfo.ControllingIdentityId)) { RelayedChars.Add(Char); } } } }