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