private void ChargeTransformer <T>(Battery sink_transformer, List <T> source_energy_producers, ref float joules_used) where T : IEnergyProducer
 {
     if (source_energy_producers.Count > 0)
     {
         float num = Mathf.Min(sink_transformer.Capacity - sink_transformer.JoulesAvailable, sink_transformer.ChargeCapacity);
         if (!(num <= 0f))
         {
             float num2 = num;
             float num3 = 0f;
             for (int i = 0; i < source_energy_producers.Count; i++)
             {
                 T val = source_energy_producers[i];
                 if (val.JoulesAvailable > 0f)
                 {
                     float num4 = Mathf.Min(val.JoulesAvailable, num2 / (float)(source_energy_producers.Count - i));
                     val.ConsumeEnergy(num4);
                     num2 -= num4;
                     num3 += num4;
                 }
             }
             sink_transformer.AddEnergy(num3);
             joules_used += num3;
         }
     }
 }
    private bool ChargeBatteriesFromGenerator(List <Battery> sink_batteries, Generator source_generator, ref float joules_used)
    {
        float num  = source_generator.JoulesAvailable;
        float num2 = 0f;

        for (int i = 0; i < sink_batteries.Count; i++)
        {
            Battery battery = sink_batteries[i];
            if ((Object)battery != (Object)null && (Object)source_generator != (Object)null && (Object)battery.gameObject != (Object)source_generator.gameObject)
            {
                float num3 = battery.Capacity - battery.JoulesAvailable;
                if (num3 > 0f)
                {
                    float num4 = Mathf.Min(num3, num / (float)(sink_batteries.Count - i));
                    battery.AddEnergy(num4);
                    num  -= num4;
                    num2 += num4;
                }
            }
        }
        if (num2 > 0f)
        {
            source_generator.ApplyDeltaJoules(0f - num2, false);
            joules_used += num2;
            return(true);
        }
        return(false);
    }