コード例 #1
0
        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
        }
コード例 #2
0
 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");
         }
     }
 }
コード例 #3
0
        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);
            }
        }
コード例 #4
0
        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);
        }
コード例 #5
0
 // 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));
 }
コード例 #6
0
        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);
        }
コード例 #7
0
        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);
        }
コード例 #8
0
        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
        }
コード例 #9
0
 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");
     }
 }
コード例 #10
0
        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);
        }
コード例 #11
0
        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
        }