Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
 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);
     }
 }
Exemplo n.º 3
0
        // 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;
            }
        }