void enableDecoupler(IntegratedDecoupler id, ModuleToggleCrossfeed crossfeedToggleModule) { KSPActionParam kap = null; base.enabled = true; if (id.decouplerModule != null) { id.decouplerModule.SetStaging(true); id.decouplerModule.Events["ToggleStaging"].guiActiveEditor = true; // Only seen when AdvancedTweakables is enabled id.decouplerModule.Fields["ejectionForcePercent"].guiActiveEditor = true; id.decouplerModule.enabled = true; //id.decouplerModule.stagingEnabled = true; if (integratedDecoupler == DecouplerType.Enabled) { id.decouplerModule.SetStaging(true); } else { id.decouplerModule.SetStaging(false); } if (crossfeedToggleModule != null) { crossfeedToggleModule.DisableAction(kap); } // if (decouplerModule.part != null) SetToggleName(id.pmEvents); //id.pmEvents["ToggleIntegratedDecoupler"].guiName = "Integrated Decoupler"; id.decouplerModule.Events["ToggleStaging"].guiActiveEditor = true; id.decouplerModule.Events["ToggleStaging"].guiActiveEditor = false; id.part.UpdateStageability(true, true); } }
/// <summary> /// run whenever part is created (used in editor), which in the editor is as soon as part list is clicked or symmetry count increases /// </summary> void Start() { crossfeedToggleModule = part.FindModuleImplementing <ModuleToggleCrossfeed>(); if (crossfeedToggleModule == null) { Log.Info("Missing ModuleToggleCrossfeed in part: " + this.part.partInfo.title); Events["ToggleBiDirectional"].active = false; Events["ToggleBiDirectional"].guiActive = false; Events["ToggleBiDirectional"].guiActiveEditor = false; return; } isActive = true; if (crossfeedToggleModule.crossfeedStatus) { crossfeedToggleModule.ToggleEvent(); } GameEvents.onEditorShipModified.Add(onEditorShipModified); GameEvents.onVesselWasModified.Add(onVesselWasModified); #if true crossfeedToggleModule.Events["ToggleEvent"].guiActive = false; crossfeedToggleModule.Events["ToggleEvent"].active = false; crossfeedToggleModule.Actions["ToggleAction"].active = false; crossfeedToggleModule.Actions["EnableAction"].active = false; crossfeedToggleModule.Actions["DisableAction"].active = false; #endif if (!HighLogic.LoadedSceneIsEditor) { return; } zAwake(); this.part.OnEditorAttach += new Callback(UpdateOnEditorAttach); this.part.OnEditorDetach += new Callback(UpdateOnEditorDetach); if (base.part.partInfo == null || base.part.partInfo.partPrefab == null) { this.defaultCrossfeedType = FuelFlowtype.none; } if (!this.moduleIsEnabled) { CrossfeedType = defaultCrossfeedType; } }
/// <summary> /// Set the decoupler status /// </summary> /// <param name="status"></param> /// <param name="symIntegratedDecoupler"></param> void SetStatus(DecouplerType status, IntegratedDecoupler symIntegratedDecoupler) { Part counterpart = symIntegratedDecoupler.part; ModuleToggleCrossfeed symCrossfeedToggleModule = counterpart.FindModuleImplementing <ModuleToggleCrossfeed>(); symIntegratedDecoupler.integratedDecoupler = status; if (integratedDecoupler != DecouplerType.none) { enableDecoupler(symIntegratedDecoupler, symCrossfeedToggleModule); } else { disableDecoupler(symIntegratedDecoupler, symCrossfeedToggleModule); } SetEvents(status, symIntegratedDecoupler.decouplerModule, symCrossfeedToggleModule); }
void SetEvents(DecouplerType decouplerType, ModuleDecouple decouplerModule, ModuleToggleCrossfeed crossfeedToggleModule) { bool status = (decouplerType != DecouplerType.none); crossfeedToggleModule.Events["ToggleEvent"].guiActive = status; crossfeedToggleModule.Events["ToggleEvent"].active = status; crossfeedToggleModule.Actions["ToggleAction"].active = status; crossfeedToggleModule.Actions["EnableAction"].active = status; crossfeedToggleModule.Actions["DisableAction"].active = status; //crossfeedToggleModule.Actions["ToggleStaging"].active = false; #if false if (decouplerModule != null && (topNode != null || topNode01 != null || topNode02 != null)) { decouplerModule.part.UpdateStageability(true, true); } else { Log.Error("No ModuleDecouple to update"); } #endif }
void disableDecoupler(IntegratedDecoupler id, ModuleToggleCrossfeed crossfeedToggleModule) { KSPActionParam kap = null; if (id.decouplerModule != null) { id.decouplerModule.SetStaging(false); id.decouplerModule.Events["ToggleStaging"].guiActiveEditor = false; // Only seen when AdvancedTweakables is enabled id.decouplerModule.Fields["ejectionForcePercent"].guiActiveEditor = false; id.decouplerModule.enabled = false; //id.decouplerModule.stagingEnabled = false; id.SetStaging(false); if (part != null && part.Modules != null) { foreach (PartModule m in part.Modules) { if (!ReferenceEquals(m, id.decouplerModule)) { m.SetStaging(false); m.Events["ToggleStaging"].guiActiveEditor = false; } } } if (crossfeedToggleModule != null) { crossfeedToggleModule.EnableAction(kap); } //if (decouplerModule.part != null && decouplerModule.part.Events != null) //id.pmEvents["ToggleIntegratedDecoupler"].guiName = "No decoupler"; SetToggleName(id.pmEvents); id.decouplerModule.Events["ToggleStaging"].guiActiveEditor = false; id.part.UpdateStageability(true, true); } }
private string GetPartInfo(Part part) { // Rebuilding the global part stats string : string basicInfo = "<color=#acfffc>"; // Basic part stats in blue (note : added dry mass) float dryMass = part.mass + part.GetModuleMass(part.mass, ModifierStagingSituation.CURRENT); basicInfo += (part.GetResourceMass() < Single.Epsilon) ? "<b>Mass: </b>" + dryMass.ToString("0.###") + "t\n" : "<b>Mass: </b>" + (dryMass + part.GetResourceMass()).ToString("0.###") + "t (<b>Dry mass: </b>" + dryMass.ToString("0.###") + "t)\n"; basicInfo += "<b>Tolerance: </b>" + part.crashTolerance.ToString("G") + " m/s impact\n" + "<b>Tolerance: </b>" + part.gTolerance.ToString("G") + " G, " + part.maxPressure.ToString("G") + " kPA Pressure\n" + "<b>Max. Temp. Int / Skin: </b>" + part.maxTemp.ToString("G") + " / " + part.skinMaxTemp.ToString("G") + " K\n"; if (part.CrewCapacity > 0) { basicInfo += "<b>Crew capacity: </b>" + part.CrewCapacity + "\n"; } basicInfo += "</color>"; // Crossfeed info in red ModuleToggleCrossfeed mtc = part.Modules.GetModule <ModuleToggleCrossfeed>(); if (mtc != null) { basicInfo += "<color=#f3a413>"; if (mtc.toggleEditor && mtc.toggleFlight) { basicInfo += "Crossfeed toggles in Editor and Flight\n"; } else if (mtc.toggleEditor) { basicInfo += "Crossfeed toggles in Editor\n"; } else if (mtc.toggleFlight) { basicInfo += "Crossfeed toggles in Flight\n"; } basicInfo += mtc.crossfeedStatus ? "Default On\n" : "Default Off\n"; basicInfo += "</color>"; } else if (!part.fuelCrossFeed) { basicInfo += "<color=#f3a413>No fuel crossfeed</color>\n"; } // Module/resource info is in light green basicInfo += "\n<color=#b4d455>"; // Info from modules (note : revamped engine test) : string moduleInfo = ""; if (part.Modules.GetModule <MultiModeEngine>() != null) { moduleInfo += "<b>Multi-mode engine:</b>\n"; } foreach (PartModule pm in part.Modules) { if (pm is ModuleEngines) { ModuleEngines me = (ModuleEngines)pm; moduleInfo += "<b>"; moduleInfo += (me.engineType != EngineType.Generic) ? me.engineType.ToString() + " engine" : "Engine"; moduleInfo += (part.Modules.GetModule <MultiModeEngine>() != null) ? " (" + me.engineID + "):</b>\n" : ":</b>\n"; if (me.engineType == EngineType.Turbine) { moduleInfo += "<b>Stationary Thrust:</b> " + me.maxThrust.ToString("F1") + "kN\n"; } else { float ispVAC = me.atmosphereCurve.Evaluate(0.0f); float ispASL = me.atmosphereCurve.Evaluate(1.0f); float thrustASL = me.maxThrust * (ispASL / ispVAC); moduleInfo += "<b>Thrust:</b> " + me.maxThrust.ToString("F1") + " kN, <b>ISP:</b> " + ispVAC.ToString("F0") + " (Vac.)\n" + "<b>Thrust:</b> " + thrustASL.ToString("F1") + " kN, <b>ISP:</b> " + ispASL.ToString("F0") + " (ASL)\n"; } } else { IModuleInfo info = pm as IModuleInfo; if (info != null) { moduleInfo += info.GetPrimaryField(); } } } if (moduleInfo != "") { basicInfo += moduleInfo + "\n"; } // Resource list in green (note : GetInfo() doesn't have the same format as stock) foreach (PartResource pr in part.Resources) { basicInfo += "<b>" + pr.info.title + ": </b>" + pr.maxAmount.ToString("F1") + "\n"; } basicInfo += "</color>"; return(basicInfo); }