public static bool HasActiveOrIdleEngineOrTankDescendant(Part p, List<int> tankResources)
{
if ((p.State == PartStates.ACTIVE || p.State == PartStates.IDLE)
&& p.IsEngine() && !p.IsSepratron() && p.EngineHasFuel())
{
return true; // TODO: properly check if ModuleEngines is active
}
if ((p is FuelTank) && (((FuelTank)p).fuel > 0)) return true;
if (!p.IsSepratron())
{
for (int i = 0; i < p.Resources.Count; i++)
{
PartResource r = p.Resources[i];
if (r.amount > 0 && r.info.name != "ElectricCharge" && tankResources.Contains(r.info.id))
{
return true;
}
}
}
for (int i = 0; i < p.children.Count; i++)
{
if (HasActiveOrIdleEngineOrTankDescendant(p.children[i], tankResources))
{
return true;
}
}
return false;
}