virtual public void DoConfig(ConfigNode cfg) { // fix propellant ratios to not be rounded if (cfg.HasNode("PROPELLANT")) { foreach (ConfigNode pNode in cfg.GetNodes("PROPELLANT")) { if (pNode.HasValue("ratio")) { double dtmp; if (double.TryParse(pNode.GetValue("ratio"), out dtmp)) pNode.SetValue("ratio", (dtmp * 100.0).ToString()); } } } float heat = -1; if (cfg.HasValue("heatProduction")) // ohai amsi: allow heat production to be changed by multiplier { heat = (float)Math.Round(float.Parse(cfg.GetValue("heatProduction")) * heatMult, 0); cfg.SetValue("heatProduction", heat.ToString()); } // load throttle (for later) curThrottle = throttle; if (cfg.HasValue("throttle")) float.TryParse(cfg.GetValue("throttle"), out curThrottle); else if(cfg.HasValue("minThrust") && cfg.HasValue("maxThrust")) curThrottle = float.Parse(cfg.GetValue("minThrust")) / float.Parse(cfg.GetValue("maxThrust")); float TLMassMult = 1.0f; if (techLevel != -1) { // load techlevels TechLevel cTL = new TechLevel(); //print("For engine " + part.name + ", config " + configuration + ", max TL: " + TechLevel.MaxTL(cfg, techNodes, engineType)); cTL.Load(cfg, techNodes, engineType, techLevel); TechLevel oTL = new TechLevel(); oTL.Load(cfg, techNodes, engineType, origTechLevel); // set atmosphereCurve if (cfg.HasValue("IspSL") && cfg.HasValue("IspV")) { cfg.RemoveNode("atmosphereCurve"); ConfigNode curve = new ConfigNode("atmosphereCurve"); float ispSL, ispV; float.TryParse(cfg.GetValue("IspSL"), out ispSL); float.TryParse(cfg.GetValue("IspV"), out ispV); FloatCurve aC = new FloatCurve(); aC = Mod(cTL.atmosphereCurve, ispSL, ispV); aC.Save(curve); cfg.AddNode(curve); } // set heatProduction and dissipation if (heat > 0) { cfg.SetValue("heatProduction", MassTL(heat).ToString("0")); part.heatDissipation = 0.12f / MassTL(1.0f); } // set thrust and throttle if (cfg.HasValue(thrustRating)) { float thr; float.TryParse(cfg.GetValue(thrustRating), out thr); configMaxThrust = ThrustTL(thr); cfg.SetValue(thrustRating, configMaxThrust.ToString("0.0000")); if (cfg.HasValue("minThrust")) { float.TryParse(cfg.GetValue("minThrust"), out thr); configMinThrust = ThrustTL(thr); cfg.SetValue("minThrust", configMinThrust.ToString("0.0000")); } else { if (thrustRating.Equals("thrusterPower")) { configMinThrust = configMaxThrust * 0.5f; } else { configMinThrust = configMaxThrust; if (curThrottle > 1.0f) { if (techLevel >= curThrottle) curThrottle = 1.0f; else curThrottle = -1.0f; } if (curThrottle >= 0.0f) { curThrottle = (float)((double)curThrottle * cTL.Throttle()); configMinThrust *= curThrottle; } cfg.SetValue("minThrust", configMinThrust.ToString("0.0000")); } } curThrottle = configMinThrust / configMaxThrust; if(origMass > 0) TLMassMult = MassTL(1.0f); } } else { if(cfg.HasValue(thrustRating) && curThrottle > 0f && !cfg.HasValue("minThrust")) { configMinThrust = curThrottle * float.Parse(cfg.GetValue(thrustRating)); cfg.SetValue("minThrust", configMinThrust.ToString("0.0000")); } } // mass change if (origMass > 0) { float ftmp; configMassMult = 1.0f; if (cfg.HasValue("massMult")) if (float.TryParse(cfg.GetValue("massMult"), out ftmp)) configMassMult = ftmp; part.mass = origMass * configMassMult * massMult * TLMassMult; } // KIDS integration if(cfg.HasNode("atmosphereCurve")) { ConfigNode newCurveNode = new ConfigNode("atmosphereCurve"); FloatCurve oldCurve = new FloatCurve(); oldCurve.Load(cfg.GetNode("atmosphereCurve")); FloatCurve newCurve = Mod(oldCurve, ispSLMult, ispVMult); newCurve.Save(newCurveNode); cfg.RemoveNode("atmosphereCurve"); cfg.AddNode(newCurveNode); } }