public override void Jettison() { if (_targetDecoupler == null || !_targetDecoupler || !(_targetDecoupler is IStageSeparator)) { return; } ModuleDecouple decouple = _targetDecoupler as ModuleDecouple; if (decouple != null) { decouple.ejectionForce *= 5; decouple.Decouple(); } else { ((ModuleAnchoredDecoupler)_targetDecoupler).ejectionForce *= 5; ((ModuleAnchoredDecoupler)_targetDecoupler).Decouple(); } if (BDArmorySetup.Instance.ActiveWeaponManager != null) { BDArmorySetup.Instance.ActiveWeaponManager.UpdateList(); } }
bool CheckForEnginePlate(Part parent, Part checking) { // The following code is designed to deal with the new engine plates in MakingHistory, which have embedded // decouplers which work on the stage below ModuleDecouple md = null; // First, if this is an engineplate, do not treat it as a decoupler if (checking.Modules.Contains("ModuleDynamicNodes") && checking.Modules.Contains("ModuleDecouple")) { md = checking.Modules.GetModule <ModuleDecouple>(); if (md.isEnginePlate) { // If the parent IS an engineplate, get the module and use it later if (parent.Modules.Contains("ModuleDynamicNodes") && parent.Modules.Contains("ModuleDecouple")) { pm = parent.Modules.GetModule <ModuleDecouple>(); } else { pm = null; } } return(md.isEnginePlate); } return(false); }
public override void OnStart(StartState state) { Debug.Log(string.Format("{0} ModulePebkacLesEscape.OnStart", _myModTag)); _escapeEngine = GetEscapeEngine(); _escapeDecoupler = GetEscapeDecoupler(); base.OnStart(state); }
public static bool IsUnfiredDecoupler(this Part p) { for (int i = 0; i < p.Modules.Count; i++) { PartModule m = p.Modules[i]; ModuleDecouple mDecouple = m as ModuleDecouple; if (mDecouple != null) { if (!mDecouple.isDecoupled) { return(true); } break; } ModuleAnchoredDecoupler mAnchoredDecoupler = m as ModuleAnchoredDecoupler; if (mAnchoredDecoupler != null) { if (!mAnchoredDecoupler.isDecoupled) { return(true); } break; } if (m.ClassName == "ProceduralFairingDecoupler") { return(true); } } return(false); }
public override void OnStart(StartState state) { base.OnStart(state); multiModeEngine = this.part.FindModuleImplementing <MultiModeEngine>(); if (multiModeEngine != null) { multiModeEngine.Fields["mode"].guiActiveEditor = false; multiModeEngine.Fields["mode"].guiActive = false; multiModeEngine.Events["DisableAutoSwitch"].guiActive = false; multiModeEngine.Events["DisableAutoSwitch"].guiActiveEditor = false; multiModeEngine.Events["EnableAutoSwitch"].guiActive = false; multiModeEngine.Events["EnableAutoSwitch"].guiActiveEditor = false; multiModeEngine.Events["ModeEvent"].guiActive = false; multiModeEngine.Events["ModeEvent"].guiActiveEditor = false; } decoupler = this.part.FindModuleImplementing <ModuleDecouple>(); if (decoupler != null) { decoupler.isEnabled = false; decoupler.enabled = false; decoupler.stagingEnabled = false; } }
// Used to find when decouplers fire public void onVesselStageSeparate(EventReport report) { //Debug.Log("handling separation"); Part part = report.origin; if (part.vessel.vesselType == VesselType.Debris) { foreach (PartModule module in part.Modules) { if (module.moduleName.Contains("ModuleDecouple")) { ModuleDecouple md = module as ModuleDecouple; ejectionForceTotal += md.ejectionForce; } else if (module.moduleName.Contains("ModuleAnchoredDecoupler")) { ModuleAnchoredDecoupler md = module as ModuleAnchoredDecoupler; ejectionForceTotal += md.ejectionForce; } ejectionForceTotal = Mathf.Clamp(ejectionForceTotal, 0, maxDecoupleForce); } } }
public override void OnStart(StartState state) { decouple = part.FindModuleImplementing <ModuleDecouple>(); if (decouple == null) { Debug.LogError($"[ProceduralParts] No ModuleDecouple found on {part}"); isEnabled = enabled = false; return; } if (HighLogic.LoadedSceneIsEditor) { Fields[nameof(isOmniDecoupler)].guiActiveEditor = string.IsNullOrEmpty(separatorTechRequired) || ResearchAndDevelopment.GetTechnologyState(separatorTechRequired) == RDTech.State.Available; if (ejectionImpulse < float.Epsilon || float.IsNaN(ejectionImpulse)) { ejectionImpulse = decouple.ejectionForce * ImpulsePerForceUnit; } (Fields[nameof(ejectionImpulse)].uiControlEditor as UI_FloatEdit).maxValue = maxImpulse; } else if (HighLogic.LoadedSceneIsFlight) { if (float.IsNaN(ejectionImpulse)) { ejectionImpulse = 0; } decouple.isOmniDecoupler = isOmniDecoupler; decouple.ejectionForce = ejectionImpulse / TimeWarp.fixedDeltaTime; GameEvents.onTimeWarpRateChanged.Add(OnTimeWarpRateChanged); } }
protected void setupDecoupler() { ModuleDecouple decoupler = this.part.FindModuleImplementing <ModuleDecouple>(); if (!decoupler) { return; } if (decouplerEnabled) { Events["ToggleDecouplerEnabled"].guiName = "Disable Decoupler"; this.part.stagingOn = true; decoupler.enabled = true; decoupler.isEnabled = true; decoupler.Events["ToggleStaging"].Invoke(); decoupler.stagingEnabled = true; } else { Events["ToggleDecouplerEnabled"].guiName = "Enable Decoupler"; decoupler.Events["ToggleStaging"].Invoke(); decoupler.stagingEnabled = false; decoupler.enabled = false; decoupler.isEnabled = false; } }
public static bool IsUnfiredDecoupler(this Part p) { foreach (PartModule m in p.Modules) { ModuleDecouple mDecouple = m as ModuleDecouple; if (mDecouple != null) { if (!mDecouple.isDecoupled) { return(true); } break; } ModuleAnchoredDecoupler mAnchoredDecoupler = m as ModuleAnchoredDecoupler; if (mAnchoredDecoupler != null) { if (!mAnchoredDecoupler.isDecoupled) { return(true); } break; } } return(false); }
private ModuleDecouple GetDecouple() { ModuleDecouple d = null; d = part.FindModuleImplementing <ModuleDecouple>(); return(d); }
internal Decoupler (Part part) { this.part = part; decoupler = part.InternalPart.Module<ModuleDecouple> (); anchoredDecoupler = part.InternalPart.Module<ModuleAnchoredDecoupler> (); if (decoupler == null && anchoredDecoupler == null) throw new ArgumentException ("Part does not have a ModuleDecouple or ModuleAnchoredDecouple PartModule"); }
private bool FindDecoupler() { if (decouple == null) { decouple = part.Modules["ModuleDecouple"] as ModuleDecouple; } return(decouple != null); }
public void Start() { animationStates = SetUpAnimation(animationName, this.part); //if (part.stagingIcon == "") // part.stagingIcon = "DECOUPLER_HOR"; List <ModuleDecouple> decouplers = new List <ModuleDecouple>(); decouplers = this.GetComponents <ModuleDecouple>().ToList(); foreach (ModuleDecouple d in decouplers) { if (d.explosiveNodeID == decouplerNodeID) { decoupler = d; decoupler.Actions["DecoupleAction"].active = false; decoupler.Events["Decouple"].active = false; decoupler.Events["ToggleStaging"].active = false; } else if (payloadDecouplerNodeID != "" && d.explosiveNodeID == payloadDecouplerNodeID) { payloadDecoupler = d; payloadDecoupler.Actions["DecoupleAction"].guiName = "Decouple Payload"; payloadDecoupler.Fields["ejectionForcePercent"].guiName = "Force Percent (Payload)"; } } if (decoupler == null) { Debug.LogErrorFormat("[{0}] A '{1}' node decoupler was not found.", moduleID, decouplerNodeID); } if (payloadDecouplerNodeID != "" && payloadDecoupler == null) { Debug.LogErrorFormat("[{0}] A '{1}' node decoupler was not found.", moduleID, payloadDecouplerNodeID); } if (HighLogic.LoadedSceneIsFlight) { decoupled = decoupler != null && decoupler.isDecoupled; if (payloadDecoupler != null) { payloadDecoupler.isEnabled = decoupled; } } foreach (AnimationState anim in animationStates) { if (decoupled) { anim.normalizedTime = 1f; } else { anim.normalizedTime = 0f; } } Events["ToggleAnimationEditor"].guiName = editorGUIName; }
public override void OnStart(StartState state) { if (!HighLogic.LoadedSceneIsFlight) { return; } decoupler = part.FindModuleImplementing <ModuleDecouple>(); }
private void decoupleByModule(int index) { ModuleDecouple d = (ModuleDecouple)part.Modules[index]; if (!d.isDecoupled) { d.Decouple(); } }
private bool FindDecoupler() { ROLLog.debug("Finding Decoupler..."); if (decouple == null) { decouple = part.Modules["ModuleDecouple"] as ModuleDecouple; } return(decouple != null); }
internal Decoupler(Part part) { this.part = part; decoupler = part.InternalPart.Module <ModuleDecouple> (); anchoredDecoupler = part.InternalPart.Module <ModuleAnchoredDecoupler> (); if (decoupler == null && anchoredDecoupler == null) { throw new ArgumentException("Part is not a decoupler"); } }
public override void OnStart(StartState state) { List <ModuleEngines> engines = part.FindModulesImplementing <ModuleEngines>(); foreach (ModuleEngines e in engines) { if (e.engineID == _escapeEngineID) { _escapeEngine = e; } else if (e.engineID == _pitchEngineID) { _pitchEngine = e; } else if (e.engineID == _jettisonEngineID) { _jettisonEngine = e; } foreach (BaseAction a in e.Actions) { a.active = false; } foreach (BaseField f in e.Fields) { f.guiActive = false; f.guiActiveEditor = false; } foreach (BaseEvent ev in e.Events) { ev.guiActive = false; ev.guiActiveEditor = false; } } if (hasPitchControl) { // set up the variables used to shift aerodynamics _maxFuel = part.Resources["SolidFuel"].maxAmount; _origComOffset = part.CoMOffset; _origColOffset = part.CoLOffset; // set up the variables used by code for simming the canards _deployAnimation = GetDeployAnimation(); _liftingSurface = GetLiftingSurface(); } // get the decoupler _lesDecoupler = part.FindModuleImplementing <ModuleDecouple>(); if (_lesDecoupler == null) { Debug.LogError(string.Format("{0}: {1}: {2}", _myModTag, part.name, "Did not find a decoupler on the LES!")); } }
private void updateDecouplerForce() { ModuleDecouple dc = part.GetComponent <ModuleDecouple>(); if (dc != null) { dc.ejectionForce = forcePerKg * (modifiedMass * 1000f); dc.Fields["ejectionForce"].guiName = "Ejection Force"; dc.Fields["ejectionForce"].guiActiveEditor = true; } }
public override void OnLoad(ConfigNode node) { base.OnLoad(node); decoupler = this.part.Modules.OfType <ModuleDecouple>().Single(); for (int i = 0; i < part.Modules.Count; i++) { PartModule fx = part.Modules[i]; } }
public override bool oneTimeActivation() { if (decoupler != null) { return(decoupler.isDecoupled); } else { decoupler = this.part.Modules.OfType <ModuleDecouple>().Single(); return(false); } }
private void SetModuleDecouple() { ModuleDecouple decoupler = module as ModuleDecouple; if (decoupler == null) { return; } EjectionForce = decoupler.ejectionForce; IsOmniDecoupler = decoupler.isOmniDecoupler; }
private void SetModuleDecouple() { ModuleDecouple decoupler = module as ModuleDecouple; if (decoupler == null) { return; } EjectionForce = decoupler.ejectionForce; IsOmniDecoupler = decoupler.isOmniDecoupler; IsStageEnabled = decoupler.stagingEnabled; }
private void decoupleByModule(int index) { ModuleDecouple d = part.Modules[index] as ModuleDecouple; if (d == null) { MonoBehaviour.print("ERROR: No decoupler found at module index: " + index); } else if (!d.isDecoupled) { d.Decouple(); } }
public void Start() { animationStates = SetUpAnimation(animationName, this.part); //if (part.stagingIcon == "") // part.stagingIcon = "DECOUPLER_HOR"; List <ModuleDecouple> decouplers = new List <ModuleDecouple>(); decouplers = this.GetComponents <ModuleDecouple>().ToList(); foreach (ModuleDecouple d in decouplers) { if (d.explosiveNodeID == decouplerNodeID) { decoupler = d; decoupler.Actions["DecoupleAction"].active = false; decoupler.Events["Decouple"].active = false; decoupler.Events["ToggleStaging"].active = false; if (HighLogic.LoadedSceneIsFlight && decoupler.ExplosiveNode.attachedPart != null) { animPosition = 0; animSpeed = 0; } } else if (payloadDecouplerNodeID != "" && d.explosiveNodeID == payloadDecouplerNodeID) { payloadDecoupler = d; payloadDecoupler.Events["Decouple"].guiName = "Decouple Payload"; payloadDecoupler.Actions["DecoupleAction"].guiName = "Decouple Payload"; payloadDecoupler.Fields["ejectionForcePercent"].guiName = "Force Percent (Payload)"; if (HighLogic.LoadedSceneIsFlight) { payloadDecoupler.isEnabled = animPosition >= waitForAnimation; } } } //if (decoupler == null) // Debug.LogErrorFormat("[{0}] A '{1}' node decoupler was not found.", moduleID, decouplerNodeID); //if (payloadDecouplerNodeID != "" && payloadDecoupler == null) // Debug.LogErrorFormat("[{0}] A '{1}' node decoupler was not found.", moduleID, payloadDecouplerNodeID); SetAnimation(animPosition, 0); if (animSpeed != 0) { PlayAnimation(animSpeed); } Events["Decouple"].active = animPosition == 0; Events["Decouple"].guiName = flightGUIName; Actions["DecoupleAction"].guiName = flightGUIName; Events["ToggleAnimationEditor"].guiName = editorGUIName; }
public void Start() { animationStates = SetUpAnimation(animationName, this.part); //if (part.stagingIcon == "") // part.stagingIcon = "DECOUPLER_HOR"; List <ModuleDecouple> decouplers = new List <ModuleDecouple>(); decouplers = this.GetComponents <ModuleDecouple>().ToList(); foreach (ModuleDecouple d in decouplers) { if (d.explosiveNodeID == decouplerNodeID) { decoupler = d; } else if (payloadDecouplerNodeID != "" && d.explosiveNodeID == payloadDecouplerNodeID) { payloadDecoupler = d; } } if (decoupler == null) { Debug.LogErrorFormat("[{0}] A '{1}' node decoupler was not found.", moduleID, decouplerNodeID); } if (payloadDecouplerNodeID != "" && payloadDecoupler == null) { Debug.LogErrorFormat("[{0}] A '{1}' node decoupler was not found.", moduleID, payloadDecouplerNodeID); } if (HighLogic.LoadedSceneIsFlight) { decoupled = decoupler != null && decoupler.isDecoupled; if (payloadDecoupler != null) { payloadDecoupler.isEnabled = decoupled; } } foreach (AnimationState anim in animationStates) { if (decoupled) { anim.normalizedTime = 1f; } else { anim.normalizedTime = 0f; } } }
public override void OnStart(StartState state) { decouple = GetDecouple(); minimumCrew = 0; decouple.staged = false; decouple.stagingEnabled = false; if (HighLogic.LoadedSceneIsFlight) { part.force_activate(); mine = GetMine(); } base.OnStart(state); }
public void Start() { engineModule = part.GetComponent <ModuleEngines>(); ModuleDecouple[] decouplers = part.GetComponents <ModuleDecouple>(); foreach (ModuleDecouple dc in decouplers) { if (dc != this) { decoupler = dc; break; } } updateEngineThrust(); updateShielding(); }
private static bool IsEnginePlate(Part thePart) { ModuleDecouple mdec = thePart.GetModule <ModuleDecouple>(); if (mdec != null && mdec.IsStageable()) { ModuleDynamicNodes mdyn = thePart.GetModule <ModuleDynamicNodes>(); if (mdyn != null) { return(true); } } return(false); }
public void Start() { engineModule = part.GetComponent <ModuleEngines>(); ModuleDecouple[] decouplers = part.GetComponents <ModuleDecouple>(); foreach (ModuleDecouple dc in decouplers) { if (dc != this) { decoupler = dc; break; } } updateEngineThrust(); updateShielding(); Events[nameof(ToggleStaging)].advancedTweakable = false; decoupler.Events[nameof(ToggleStaging)].advancedTweakable = false; }
/// <summary> /// Called when the part is started by Unity. /// </summary> public override void OnStart(StartState state) { base.OnStart(state); if (HighLogic.LoadedSceneIsFlight) { GameEvents.onStageActivate.Add(new EventData<int>.OnEvent(DetermineFailure)); decoupler = part.Modules.OfType<ModuleDecouple>().FirstOrDefault<ModuleDecouple>(); if (!decoupler) { aDecoupler = part.Modules.OfType<ModuleAnchoredDecoupler>().FirstOrDefault<ModuleAnchoredDecoupler>(); } if (decoupler) { if (failure != "") { decoupler.isDecoupled = true; } decoupler.Events["Decouple"].active = false; decoupler.Actions["DecoupleAction"].active = false; } else if (aDecoupler) { if (failure != "") { aDecoupler.isDecoupled = true; } aDecoupler.Events["Decouple"].active = false; aDecoupler.Actions["DecoupleAction"].active = false; } else { Logger.DebugError("Part \"" + part.partName + "\" contains neither a decouple or anchored decoupler module!"); return; } Fields["reliability"].guiActive = false; } }
public void Start() { engineModule = part.GetComponent<ModuleEngines>(); ModuleDecouple[] decouplers = part.GetComponents<ModuleDecouple>(); foreach (ModuleDecouple dc in decouplers) { if (dc != this) { decoupler = dc; break; } } updateEngineThrust(); updateShielding(); }
private void FindDecoupler() { decouple = part.Modules["ModuleDecouple"] as ModuleDecouple; }
public void Start() { animationStates = SetUpAnimation(animationName, this.part); //if (part.stagingIcon == "") // part.stagingIcon = "DECOUPLER_HOR"; List<ModuleDecouple> decouplers = new List<ModuleDecouple>(); decouplers = this.GetComponents<ModuleDecouple>().ToList(); foreach (ModuleDecouple d in decouplers) { if (d.explosiveNodeID == decouplerNodeID) { decoupler = d; decoupler.Actions["DecoupleAction"].active = false; decoupler.Events["Decouple"].active = false; decoupler.Events["ToggleStaging"].active = false; } else if (payloadDecouplerNodeID != "" && d.explosiveNodeID == payloadDecouplerNodeID) { payloadDecoupler = d; payloadDecoupler.Actions["DecoupleAction"].guiName = "Decouple Payload"; payloadDecoupler.Fields["ejectionForcePercent"].guiName = "Force Percent (Payload)"; } } if (decoupler == null) Debug.LogErrorFormat("[{0}] A '{1}' node decoupler was not found.", moduleID, decouplerNodeID); if (payloadDecouplerNodeID != "" && payloadDecoupler == null) Debug.LogErrorFormat("[{0}] A '{1}' node decoupler was not found.", moduleID, payloadDecouplerNodeID); if (HighLogic.LoadedSceneIsFlight) { decoupled = decoupler != null && decoupler.isDecoupled; if (payloadDecoupler != null) payloadDecoupler.isEnabled = decoupled; } foreach (AnimationState anim in animationStates) { if (decoupled) { anim.normalizedTime = 1f; } else { anim.normalizedTime = 0f; } } Events["ToggleAnimationEditor"].guiName = editorGUIName; }
private bool FindDecoupler() { if(decouple == null) decouple = part.Modules["ModuleDecouple"] as ModuleDecouple; return decouple != null; }
protected void setupGUI() { //Hide seat GUI seat = this.part.FindModuleImplementing<KerbalSeat>(); seat.Events["BoardSeat"].guiActive = false; seat.Events["BoardSeat"].guiActiveEditor = false; seat.Events["BoardSeat"].guiActiveUnfocused = false; //Hide probe command GUI wingCommander = this.part.FindModuleImplementing<ModuleCommand>(); wingCommander.Events["MakeReference"].guiActive = false; wingCommander.Events["MakeReference"].guiActiveUnfocused = false; wingCommander.Events["RenameVessel"].guiActive = false; //Hide decoupler GUI decoupler = this.part.FindModuleImplementing<ModuleDecouple>(); decoupler.Events["Decouple"].guiActive = false; decoupler.Events["Decouple"].guiActiveEditor = false; decoupler.Events["Decouple"].guiActiveUnfocused = false; //Hide MultiModeEngine toggle button multiModeEngine = this.part.FindModuleImplementing<MultiModeEngine>(); multiModeEngine.Events["ModeEvent"].guiActive = false; multiModeEngine.Events["ModeEvent"].guiActiveEditor = false; multiModeEngine.Events["ModeEvent"].guiActiveUnfocused = false; //Hide the Close Intake button. ModuleResourceIntake intake = this.part.FindModuleImplementing<ModuleResourceIntake>(); intake.Events["Deactivate"].guiActive = false; //Hide RCS GUI ModuleRCS rcs = this.part.FindModuleImplementing<ModuleRCS>(); rcs.Fields["realISP"].guiActive = false; rcs.Events["Disable"].guiActive = false; //Hide hover engine gui hoverEngine = this.part.FindModuleImplementing<WBIMultiEngineHover>(); hoverEngine.SetGUIVisible(false); //Set fuel type resourceSwitcher = this.part.FindModuleImplementing<WBIResourceSwitcher>(); resourceSwitcher.Fields["shortName"].guiName = "Fuel Type"; }