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); }