protected virtual double consumeResources() { double lowestRequestableAmount = 0.0002d; // test show that anything below 1E-05 returns 0 double fuelReceivedNormalized = 0f; double lowestResourceSupply = 1f; if (EngineIgnited) { for (int i = 0; i < resourceList.Count; i++) { double requestFuelAmount = fuelConsumptionCurve.Evaluate(getWorkDone()) * maxThrust * resourceList[i].ratio * TimeWarp.deltaTime; if (requestFuelAmount < lowestRequestableAmount) { if (requestFuelAmount <= 0f) { requestFuelAmount = 0f; } else { requestFuelAmount = lowestRequestableAmount; } } double fuelReceived = part.RequestResource(resourceList[i].ID, requestFuelAmount); //debug.debugMessage("fuel received: " + fuelReceived + " of " + requestFuelAmount); //Debug.Log("fR/rFA: " + fuelReceived / requestFuelAmount + " - clamped: " + Tools.Clamp(fuelReceived / requestFuelAmount, 0d, 1d)); resourceList[i].currentSupply = SMTools.Clamp(fuelReceived / requestFuelAmount, 0d, 1d); if (resourceList[i].currentSupply < flameoutThreshold) { cause = resourceList[i].name + " deprived"; debug.debugMessage("FO " + resourceList[i].name + " == " + resourceList[i].currentSupply + ", requested" + requestFuelAmount + " received " + fuelReceived); } else { debug.debugMessage("not FO: " + resourceList[i].name + " : " + resourceList[i].currentSupply + ", requested" + requestFuelAmount + " received " + fuelReceived); } lowestResourceSupply = Math.Min(lowestResourceSupply, resourceList[i].currentSupply); } fuelReceivedNormalized = lowestResourceSupply; if (fuelReceivedNormalized < flameoutThreshold) //&& fuelConsumptionCurve.Evaluate(finalThrustNormalized) > 0f //&& throttleThrustCurve.Evaluate(requestedThrottle) > 0f) { flameout = true; } else { flameout = false; } } return(fuelReceivedNormalized); }
public override string GetInfo() { if (showInfo) { List <string> variantList; if (textureNames.Length > 0) { variantList = SMTools.parseNames(textureNames); } else { variantList = SMTools.parseNames(mapNames); } textureDisplayList = SMTools.parseNames(textureDisplayNames); StringBuilder info = new StringBuilder(); info.AppendLine("Alternate textures available:"); if (variantList.Count == 0) { if (variantList.Count == 0) { info.AppendLine("None"); } } for (int i = 0; i < variantList.Count; i++) { if (i > textureDisplayList.Count - 1) { info.AppendLine(getTextureDisplayName(variantList[i])); } else { info.AppendLine(textureDisplayList[i]); } } info.AppendLine("\nUse the SM Next button on the right click menu or SM Paintshop in the lower right of the screen."); return(info.ToString()); } else { return(string.Empty); } }
// runs the kind of commands that would normally be in OnStart, if they have not already been run. In case a method is called upon externally, but values have not been set up yet private void initializeData() { if (!initialized) { // you can't have fuel switching without symmetry, it breaks the editor GUI. if (useFuelSwitchModule) { updateSymmetry = true; } objectList = SMTools.parseNames(objectNames, true); texList = SMTools.parseNames(textureNames, true, true, textureRootFolder); mapList = SMTools.parseNames(mapNames, true, true, textureRootFolder); textureDisplayList = SMTools.parseNames(textureDisplayNames); fuelTankSetupList = SMTools.parseIntegers(fuelTankSetups); foreach (String targetObjectName in objectList) { Transform[] targetObjectTransformArray = part.FindModelTransforms(targetObjectName); List <Material> matList = new List <Material>(); foreach (Transform t in targetObjectTransformArray) { if (t != null && t.gameObject.GetComponent <Renderer>() != null) // check for if the object even has a mesh. otherwise part list loading crashes { Material targetMat = t.gameObject.GetComponent <Renderer>().material; if (targetMat != null) { if (!matList.Contains(targetMat)) { matList.Add(targetMat); } } } } targetMats.Add(matList); } initialized = true; } }