protected bool consume_energy()
 {
     if (ShuttingOff)
     {
         consumption_rate = 0;
     }
     else if (SelfSustaining && Rate >= MinimumRate)
     {
         consumption_rate = 1;
     }
     else
     {
         socket.RequestTransfer(CurrentEnergyDemand * TimeWarp.fixedDeltaTime);
         if (!socket.TransferResource())
         {
             return(false);
         }
         consumption_rate = socket.Ratio;
         if (consumption_rate < MinimumRate)
         {
             Utils.Message("Not enough energy");
             socket.Clear();
         }
     }
     update_rate(Mathf.Min(consumption_rate, next_rate));
     return(true);
 }