public float powerSupplyFixedMax(FNResourceSupplier pm, float power, float maxpower)
 {
     return (float) powerSupplyFixedMax (pm, (double)power,(double)maxpower);
 }
 public double powerSupplyFixedMax(FNResourceSupplier pm, double power, double maxpower)
 {
     powersupply += (power / TimeWarp.fixedDeltaTime);
     stable_supply += (maxpower / TimeWarp.fixedDeltaTime);
     if (power_supplies.ContainsKey(pm)) {
         power_supplies[pm] += (power / TimeWarp.fixedDeltaTime);
     } else {
         power_supplies.Add(pm, (power / TimeWarp.fixedDeltaTime));
     }
     return power;
 }
 public float powerSupply(FNResourceSupplier pm, float power)
 {
     return (float) powerSupply (pm,(double)power);
 }
 public double managedPowerSupplyWithMinimum(FNResourceSupplier pm, double power, double rat_min)
 {
     double power_seconds_units = power / TimeWarp.fixedDeltaTime;
     double power_min_seconds_units = power_seconds_units * rat_min;
     double managed_supply_val_add = Math.Min (power_seconds_units, Math.Max(getCurrentUnfilledResourceDemand()+getSpareResourceCapacity()/TimeWarp.fixedDeltaTime,power_min_seconds_units));
     powersupply += managed_supply_val_add;
     stable_supply += power_seconds_units;
     if (power_supplies.ContainsKey(pm)) {
         power_supplies[pm] += (power / TimeWarp.fixedDeltaTime);
     } else {
         power_supplies.Add(pm, (power / TimeWarp.fixedDeltaTime));
     }
     return managed_supply_val_add*TimeWarp.fixedDeltaTime;
 }
 public float managedPowerSupplyWithMinimum(FNResourceSupplier pm, float power, float rat_min)
 {
     return (float) managedPowerSupplyWithMinimum(pm, (double)power, (double)rat_min);
 }
 public double managedPowerSupply(FNResourceSupplier pm, double power)
 {
     return managedPowerSupplyWithMinimum (pm, power, 0);
 }
 public float managedPowerSupply(FNResourceSupplier pm, float power)
 {
     return managedPowerSupplyWithMinimum (pm, power, 0);
 }