Esempio n. 1
0
        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);
                }
            }
        }
Esempio n. 2
0
        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);
                    }
                }
            }
        }