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); } } }
public override void UpdateBeforeSimulation10() { try { UpdateRelays(); AntennaBlock.RefreshCustomInfo(); } catch (Exception Scrap) { RadarCore.LogError(AntennaBlock.DisplayName + ".Update10().General", Scrap); } }
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); } } } }
void GetAntennae() { List <IMyRadioAntenna> AntennaeBlocks = new List <IMyRadioAntenna>(); Term.GetBlocksOfType(AntennaeBlocks); Antennae = new HashSet <AntennaComms>(); foreach (var AntennaBlock in AntennaeBlocks) { AntennaComms Antenna = AntennaBlock.GetComponent <AntennaComms>(); if (Antenna != null) { Antennae.Add(Antenna); } } }
public override void UpdateOnceBeforeFrame() { if (AntennaBlock.CubeGrid.Physics == null) { NeedsUpdate |= MyEntityUpdateEnum.BEFORE_NEXT_FRAME; return; } NeedsUpdate |= MyEntityUpdateEnum.EACH_10TH_FRAME; if (AntennaBlock is IMyRadioAntenna && !InitedRadioAntennaControls) { InitRadioAntennaControls(); } if (AntennaBlock is IMyLaserAntenna && !InitedLaserAntennaControls) { InitLaserAntennaControls(); } SyncAllowReceive = new AutoSet <bool>(Entity, "Receive", true); Load(); AntennaBlock.AppendingCustomInfo += AntennaBlock_AppendingCustomInfo; AntennaBlock.OnMarkForClose += AntennaBlock_OnMarkForClose; AntennaGrid = AntennaBlock.GetTopMostParent() as IMyCubeGrid; RadarCore.SaveRegister(Save); }
private void AntennaBlock_AppendingCustomInfo(IMyTerminalBlock Block, StringBuilder Info) { AntennaComms CommComp = Block.GetComponent <AntennaComms>(); if (CommComp == null) { return; } Info.AppendLine($"Relays ({CommComp.RelayedReceivers.Count}):"); foreach (var Relayed in CommComp.RelayedReceivers.OrderBy(x => Vector3D.DistanceSquared(AntennaBlock.GetPosition(), x.Broadcaster.Entity.GetPosition()))) { IMyTerminalBlock RelayBlock = Relayed.Entity as IMyTerminalBlock; IMyCharacter RelayedChar = Relayed.Entity as IMyCharacter; if (RelayBlock != null) { Info.AppendLine($"{RelayBlock.CustomName} on {RelayBlock.CubeGrid.DisplayName} ({Math.Round(Vector3D.Distance(Block.GetPosition(), RelayBlock.GetPosition()))}m)"); } else if (RelayedChar != null) { Info.AppendLine($"{RelayedChar.DisplayName} ({Math.Round(Vector3D.Distance(Block.GetPosition(), RelayBlock.GetPosition()))}m)"); } } }