public IEnumerator <bool> Run() { while (true) { // Get Position Position = Entity.GetPosition(); yield return(true); // Get Entities Targets.Clear(); List <long> entities = MyVisualScriptLogicProvider.GetEntitiesInSphere(Position, Config.Instance.Radius); foreach (long entityId in entities) { if (entityId == Entity.EntityId) { continue; } IMyEntity entity = MyVisualScriptLogicProvider.GetEntityById(entityId); if (entity is IMyBatteryBlock) { IMyBatteryBlock bat = entity as IMyBatteryBlock; if (bat.IsSameConstructAs(Battery)) { continue; } if (!bat.Enabled) { continue; } if (bat.ChargeMode == Sandbox.ModAPI.Ingame.ChargeMode.Discharge) { continue; } Target targ = new Target() { IBattery = bat, Distance = (float)Vector3D.Distance(entity.GetPosition(), Position) }; targ.Loss = targ.Distance * Config.Instance.LossPercentPerM; Targets.Add(targ); } } yield return(true); yield return(true); } }
public Battery(Program parent, string batteries = "") { // Find batteries: lBatteries = new List <IMyBatteryBlock>(); if (batteries != string.Empty) { IMyBlockGroup group = parent.GridTerminalSystem.GetBlockGroupWithName(batteries); if (group == null) { IMyBatteryBlock block = parent.GridTerminalSystem.GetBlockWithName(batteries) as IMyBatteryBlock; if (block != null && block.IsSameConstructAs(parent.Me)) { lBatteries.Add(block); } } else { group.GetBlocksOfType(lBatteries, x => x.IsSameConstructAs(parent.Me)); } } else { parent.GridTerminalSystem.GetBlocksOfType(lBatteries, x => x.IsSameConstructAs(parent.Me)); } MaxPower = 0.0f; if (lBatteries.Count == 0) { throw new Exception($"No blocks found with argument: '{batteries}'"); } else { foreach (IMyBatteryBlock block in lBatteries) { MaxPower += block.MaxStoredPower; } } parent.Echo($"Batteries found: {lBatteries.Count}"); Update(); }