Beispiel #1
0
        static void CalculateAntennaRecievers(this IMyRadioAntenna antenna, IMyRadioAntenna source, HashSet <IMyEntity> alreadyChecked, HashSet <IMyEntity> result, bool allowEnemy)
        {
            if (!antenna.IsWorking || !antenna.IsBroadcasting)
            {
                return;
            }
            var sp       = new BoundingSphereD(antenna.GetPosition(), antenna.Radius);
            var entities = MyAPIGateway.Entities.GetEntitiesInSphere(ref sp);
            var lst      = new List <IMySlimBlock>();

            foreach (var ent in entities)
            {
                if (!alreadyChecked.Add(ent))
                {
                    continue;
                }
                ;
                if (ent is IMyCharacter)
                {
                    if (!allowEnemy)
                    {
                        var pl = MyAPIGateway.Players.GetPlayerControllingEntity(ent);
                        if (pl != null && source.GetUserRelationToOwner(pl.IdentityId) != MyRelationsBetweenPlayerAndBlock.Enemies)
                        {
                            result.Add(ent);
                        }
                    }
                    else
                    {
                        result.Add(ent);
                    }
                }
                else
                {
                    var grid = ent as IMyCubeGrid;
                    if (grid != null)
                    {
                        lst.Clear();
                        grid.GetBlocks(lst, b => b.FatBlock is IMyRadioAntenna);
                        foreach (var ant in lst.Select(c => c.FatBlock as IMyRadioAntenna))
                        {
                            ant.CalculateAntennaRecievers(source, alreadyChecked, result, allowEnemy);
                        }
                    }
                }
            }
        }