private void onEditorVariantApplied(Part part, PartVariant variant) { // This should never be called in flight, but somehow it was, so just // have a check to be safe if (HighLogic.LoadedSceneIsFlight) { return; } if (part != base.part || part == null) { return; } if (variant == null || variant.DisplayName == null) { return; } ModSegSRBs.GetExtraInfo(variant, ref this.part.segmentHeight, ref this.part.segmentWidth); RecalculateFuelAndMass(); var f = GetMaxThrust(); if (baseEngine != null) { baseEngine.ScheduleSegmentUpdate("MSSRB_Fuel_Segment.onEditorVariantApplied", 5); } #if true MonoUtilities.RefreshContextWindows(part); #else MonoUtilities.RefreshPartContextWindow(part); #endif }
void Start() { Log.Info("Start"); if (HighLogic.LoadedSceneIsEditor || HighLogic.LoadedSceneIsFlight) { techPartResearched = ModSegSRBs.PartAvailable(ModSegSRBs.PPTechName); Log.Info("Start, techPartResearched(" + ModSegSRBs.PPTechName + "): " + techPartResearched); if (!techPartResearched) { // remove the fuel since it isn't being used if (this.part != null) { PartResourceList prl = this.part.Resources; if (prl.Contains(ModSegSRBs.SeparatronFuel)) { part.RemoveResource(ModSegSRBs.SeparatronFuel); } } if (HighLogic.LoadedScene != GameScenes.LOADING && HighLogic.LoadedScene != GameScenes.EDITOR) { Log.Info(ModSegSRBs.PPTechName + ", not researched yet"); part.RemoveModule(this); } } else { Log.Info(ModSegSRBs.PPTechName + " researched"); } } }
public void Start() { Log.Info("Start"); part.RestoreVariant(); if (HighLogic.LoadedSceneIsEditor) { RecalculateFuelAndMass(); GameEvents.onVariantApplied.Add(onEditorVariantApplied); if (baseEngine != null) { baseEngine.ScheduleSegmentUpdate("MSSRB_Fuel_Segment.Start"); } } else { propAmt = burnablePropAmt = 0; Events["TriggerSegmentFailureEvent"].active = HighLogic.CurrentGame.Parameters.CustomParams <MSSRB_1>().devMode; Actions["TriggerSegmentFailureAction"].active = HighLogic.CurrentGame.Parameters.CustomParams <MSSRB_1>().devMode; } if (part != null) { ModSegSRBs.GetExtraInfo(this.part.baseVariant, ref part.segmentHeight, ref part.segmentWidth); } }
public override void OnStart(StartState stat) { if (HighLogic.LoadedSceneIsEditor) { if (!ModSegSRBs.PartAvailable(ModSegSRBs.ParachuteTechName)) { Events["DisableParachute"].guiActiveEditor = false; disableParachute = true; } if (!ModSegSRBs.PartAvailable(ModSegSRBs.MFCTechName)) { Events["DisableMFC"].guiActiveEditor = false; disableMFC = true; } Log.Info("OnStart, (" + ModSegSRBs.PPTechName + "): " + ModSegSRBs.PartAvailable(ModSegSRBs.PPTechName)); if (!ModSegSRBs.PartAvailable(ModSegSRBs.PPTechName)) { Events["DisablePP"].guiActiveEditor = false; disablePP = true; } } part.RestoreVariant(); base.OnStart(stat); }
// Amount of fuel is directly dependent on the volume of the attached segments // for cylinder shape: V = pi * r^2 * h // for circular truncated cone: 1/3 *pi * h (r1^2 + r1*r2 r2^2) public double MaxSolidFuel() { if (part == null) { return(0); } Log.Info("MaxSolidFuel, segment Width, Height: " + part.segmentWidth + ", " + part.segmentHeight); return(ModSegSRBs.MaxSolidFuel(part.segmentWidth, part.segmentHeight)); }
public string GetSelectedVariant() { ModulePartVariants mpv = Modules.GetModule <ModulePartVariants>(); ModSegSRBs.GetExtraInfo(mpv.SelectedVariant, ref segmentHeight, ref segmentWidth); Log.Info("Variant height, width: " + segmentHeight + ", " + segmentWidth); return(mpv.SelectedVariant.Name); }
public float GetModuleCost(float defaultCost, ModifierStagingSituation sit) { float cost = 0; float chute = 0; float MFT = 0; float PP = 0; if (part == null) { return(0); } if (!disableParachute && ModSegSRBs.PartAvailable(ModSegSRBs.ParachuteTechName)) { chute = 422; if (part.segmentWidth > 0.725) { chute = 1688; } if (part.segmentWidth > 1.35) { chute = 3798; } if (part.segmentWidth > 1.975) { chute = 6752; } } if (!disableMFC && ModSegSRBs.PartAvailable(ModSegSRBs.MFCTechName)) { MFT = 300; } if (!disablePP && ModSegSRBs.PartAvailable(ModSegSRBs.PPTechName)) { PP = 9; if (part.segmentWidth > 0.725) { PP = 75; } if (part.segmentWidth > 1.35) { PP = 600; } if (part.segmentWidth > 1.975) { PP = 4800; } } cost = chute + MFT + PP; return(cost); }
private void onEditorVariantApplied(Part part, PartVariant variant) { if (part != base.part) { return; } ModSegSRBs.GetExtraInfo(variant, ref this.part.segmentHeight, ref this.part.segmentWidth); ScheduleSegmentUpdate("onEditorVariantApplied"); #if true MonoUtilities.RefreshContextWindows(part); #else MonoUtilities.RefreshPartContextWindow(part); #endif }
void Start() { techPartResearched = ModSegSRBs.PartAvailable(ModSegSRBs.ParachuteTechName); if (!techPartResearched) { if (HighLogic.LoadedScene != GameScenes.LOADING) { Log.Info(ModSegSRBs.ParachuteTechName + ", not researched yet"); part.RemoveModule(this); } } else { Log.Info(ModSegSRBs.ParachuteTechName + "researched"); } }
public float GetModuleCost(float defaultCost, ModifierStagingSituation sit) { Log.Info("GetModuleCost, part.partInfo.title: " + this.part.partInfo.title + ", part.name: " + part.name); Log.Info("GetModuleCost, defaultCost: " + defaultCost); Log.Info("Propellant, amt/maxAmt: " + part.Resources[ModSegSRBs.Propellant].amount + "/" + part.Resources[ModSegSRBs.Propellant].maxAmount); Log.Info("BurnablePropellant, amt/maxAmt: " + part.Resources[ModSegSRBs.BurnablePropellant].amount + "/" + part.Resources[ModSegSRBs.BurnablePropellant].maxAmount); Log.Info("AbortedPropellant, amt/maxAmt: " + part.Resources[ModSegSRBs.AbortedPropellant].amount + "/" + part.Resources[ModSegSRBs.AbortedPropellant].maxAmount); if (part.partInstantiatedFlag == null) { //static internal void GetExtraInfo(PartVariant variant, ref float segmentHeight, ref float segmentWidth) } float rc; float fuelCost = 0; float segmentHeight = 0, segmentWidth = 0; if (part == null) { rc = ModSegSRBs.GetSegmentCost(defaultCost, segmentWidth, segmentHeight, part, 0, ref fuelCost); } else { rc = ModSegSRBs.GetSegmentCost(defaultCost, part.segmentWidth, part.segmentHeight, part, (float)MaxSolidFuel(), ref fuelCost); } Log.Info("GetModuleCost, rc: " + rc); #if false if (part.partInstantiatedFlag == null) { Log.Info("this.part is null"); rc -= fuelCost; } #endif return(rc); }
public void Start() { Log.Info("Start"); part.RestoreVariant(); #if false SetThrustCurve(grainName, null); #endif Events["TriggerEngineFailureEvent"].active = HighLogic.CurrentGame.Parameters.CustomParams <MSSRB_1>().devMode; Actions["TriggerEngineFailureAction"].active = HighLogic.CurrentGame.Parameters.CustomParams <MSSRB_1>().devMode; #if false foreach (var e in Events) { Log.Info("Event: " + e.name + ", guiName = " + e.guiName); } foreach (var a in Actions) { Log.Info("Action: " + a.name + ", guiName: " + a.guiName); } foreach (var f in Fields) { Log.Info("Field: " + f.name + ", guiName: " + f.guiName); } #endif Fields["independentThrottle"].guiActive = Fields["independentThrottle"].guiActiveEditor = false; Fields["thrustPercentage"].guiActive = Fields["thrustPercentage"].guiActiveEditor = false; origAtmosphereCurve = atmosphereCurve; PartResourceDefinition prd = PartResourceLibrary.Instance.GetDefinition(ModSegSRBs.Propellant); density = prd.density; densityInverse = 1.0 / prd.density; fuelFlowMultiplier = densityInverse * Planetarium.fetch.fixedDeltaTime; phl = PartHighlighter.CreatePartHighlighter(); if (phl) { highlightID = phl.CreateHighlightList(); } if (highlightID >= 0) { UpdateHighlightColors(); } PartModuleList pml = part.Modules; if (pml.Contains("MSSRB_Fuel_Segment")) { MSSRB_Fuel_Segment moduleFuelSegment = pml["MSSRB_Fuel_Segment"] as MSSRB_Fuel_Segment; part.segmentWidth = moduleFuelSegment.part.segmentWidth; } else { Log.Info("MSSRB_Engine, missing MSSRB_Fuel_Segment"); } foreach (var p in propellants) { if (p.name == ModSegSRBs.BurnablePropellant) { break; } burnablePropIndx++; } foreach (var p in propellants) { if (p.name == ModSegSRBs.Propellant) { break; } propIndx++; } ModSegSRBs.GetExtraInfo(part.baseVariant, ref part.segmentHeight, ref part.segmentWidth); switch (HighLogic.LoadedScene) { case GameScenes.EDITOR: GameEvents.onEditorPartPicked.Add(onEditorPartPicked); GameEvents.onEditorPartPlaced.Add(onEditorPartPlaced); GameEvents.onEditorPartDeleted.Add(onEditorPartDeleted); GameEvents.onVariantApplied.Add(onEditorVariantApplied); ScheduleSegmentUpdate("Start"); break; case GameScenes.FLIGHT: failureChance = HighLogic.CurrentGame.Parameters.CustomParams <MSSRB_1>().failureChance; if (this.vessel.situation <= Vessel.Situations.PRELAUNCH) { UpdateSegments(); foreach (var s in segments) { /* PartModuleList */ pml = s.part.Modules; MSSRB_Fuel_Segment moduleFuelSegment = pml["MSSRB_Fuel_Segment"] as MSSRB_Fuel_Segment; PartResourceList prl = s.part.Resources; if (prl.Contains(ModSegSRBs.Propellant)) { //Log.Info("Segment: " + s.part.partInfo.title + " contains Propellant"); prl[ModSegSRBs.Propellant].amount = moduleFuelSegment.MaxSolidFuel(); } if (prl.Contains(ModSegSRBs.BurnablePropellant)) { prl[ModSegSRBs.BurnablePropellant].amount = 0; //prl[ModSegSRBs.BurnablePropellant].amount = moduleFuelSegment.MaxSolidFuel(); //Log.Info("Segment: " + s.part.partInfo.title + " contains BurnablePropellant"); } } } break; } // switch }