public EngineModule(Program p) : base(p)
 {
     tsToggle = (tf) => SetEnabledAbsToggle(GetThrustBlocks(tf, Pgm, Me, Pgm.GetShipController()));
     tsEnable = (tf, on) => SetEnabled(GetThrustBlocks(tf, Pgm, Me, Pgm.GetShipController()), on);
     tsPower  = (tf, modifier) => {
         var lst = GetThrustBlocks(tf, Pgm, Me, Pgm.GetShipController());
         if (0 != modifier && 0 < lst.Count)
         {
             var current = 0f;
             foreach (var b in lst)
             {
                 current += (b as IMyThrust).ThrustOverridePercentage;
             }
             if (100f == modifier)
             {
                 modifier = 0 < current ? 0 : 1;                             // Toggle between 0% and 100% thrust
             }
             else
             {
                 modifier = MathHelper.Clamp((current / lst.Count) + Math.Sign(modifier) * 0.1f, 0, 1);                             // Inc./dec. thrust by 10%
             }
         }
         SetThrustAbsPct(lst, modifier);
     };
 }
Exemplo n.º 2
0
            public void Refresh(OutputPanel _lcds, IMyShipController _sc = null)
            {
                sc   = _sc ?? Pgm.GetShipController(MultiMix_UsedBlocks);
                lcds = _lcds;

                lcds.SetFont("Monospace", 1.25f);
                lcds.SetAlign(2);
            }
            public void Refresh(OutputPanel _lcd, AlignModule _align, IMyShipController _sc = null)
            {
                lcd   = _lcd;
                align = _align;
                sc    = _sc ?? Pgm.GetShipController(MultiMix_UsedBlocks);

                RefreshThrustsList(_align?.RocketMode ?? false);

                hydrogenTanks.Clear();

                if (null != downCamera)
                {
                    downCamera.EnableRaycast = false;
                }

                downCamera = null;
                parachute  = null;

                IMyGasTank      hb = null;
                IMyBatteryBlock bb = null;
                IMyCameraBlock  cb = null;
                IMyParachute    pb = null;

                GatherBlocks(Pgm
                             , a => SameGrid(Me, a) && !NameContains(a, MultiMix_IgnoreBlocks)
                             , b => { if (ToType(b, ref hb) && hb.IsWorking && SubtypeContains(hb, "Hydrogen"))
                                      {
                                          hydrogenTanks.Add(hb); return(false);
                                      }
                                      return(true); }
                             , c => { if (ToType(c, ref bb) && bb.IsWorking)
                                      {
                                          batteries.Add(bb); return(false);
                                      }
                                      return(true); }
                             , d => { if (ToType(d, ref cb) && cb.IsWorking && NameContains(cb, "Down"))
                                      {
                                          downCamera = cb; cb.EnableRaycast = true; return(false);
                                      }
                                      return(true); }
                             , e => { if (ToType(e, ref pb) && pb.IsWorking)
                                      {
                                          parachute = pb; return(false);
                                      }
                                      return(true); }
                             );

                if (null == stateMachine)
                {
                    SetRunState(false);
                }
            }
Exemplo n.º 4
0
            IEnumerable <int> DoDescend()
            {
                var rc = Pgm.GetShipController();

                if (null == rc)
                {
                    yield break;
                }

                rc.DampenersOverride = false;
                yield return(100);

                rc = Pgm.GetShipController();
                if (null != rc)
                {
                    rc.DampenersOverride = true;
                }
            }
Exemplo n.º 5
0
            public void Refresh(AscendDecendModule _asc, IMyShipController _sc = null)
            {
                asc = _asc;
                sc  = _sc ?? Pgm.GetShipController(MultiMix_UsedBlocks);

                gyros.Clear();

                IMyGyro g = null;

                GatherBlocks(Pgm
                             , a => SameGrid(Me, a) && !NameContains(a, MultiMix_IgnoreBlocks)
                             , b => { if (ToType(b, ref g) && g.IsWorking)
                                      {
                                          gyros.Add(g); return(false);
                                      }
                                      return(true); }
                             );

                maxYaw = (0 < gyros.Count ? gyros[0].GetMaximum <float>("Yaw") : 0);
            }
            public void AddMenu(MenuManager menuMgr)
            {
                if (1 > GetThrustBlocks(ThrustFlags.All, Pgm, Me).Count)
                {
                    return;                     // No thrusters found
                }
                const int p = 16;               // padding
                MenuItem  tt;

                menuMgr.Add(
                    tt = Menu("Engine/Thrust settings").Add(
                        Menu(() => GetText(1, "All Thrusters", p))
                        .Collect(this)
                        .Enter("toggleEngines", () => tsToggle(ThrustFlags.All))
                        .Left(() => tsEnable(ThrustFlags.All, true))
                        .Right(() => tsEnable(ThrustFlags.All, false)),
                        Menu("Engine types").Add(
                            Menu(() => GetText(1, "Atmospheric", p + 0))
                            .Collect(this)
                            .Enter("toggleAtmos", () => tsToggle(ThrustFlags.Atmospheric))
                            .Left(() => tsEnable(ThrustFlags.Atmospheric, true))
                            .Right(() => tsEnable(ThrustFlags.Atmospheric, false)),
                            Menu(() => GetText(1, "Ion", p + 8))
                            .Collect(this)
                            .Enter("toggleIon", () => tsToggle(ThrustFlags.Ion))
                            .Left(() => tsEnable(ThrustFlags.Ion, true))
                            .Right(() => tsEnable(ThrustFlags.Ion, false)),
                            Menu(() => GetText(1, "Hydrogen", p + 2))
                            .Collect(this)
                            .Enter("toggleHydro", () => tsToggle(ThrustFlags.Hydrogen))
                            .Left(() => tsEnable(ThrustFlags.Hydrogen, true))
                            .Right(() => tsEnable(ThrustFlags.Hydrogen, false))
                            )
                        )
                    );

                if (null == Pgm.GetShipController())
                {
                    menuMgr.WarningText += "\n ShipController missing. Some features unavailable!";
                }
                else
                {
                    MenuItem md  = Menu("Directions");
                    MenuItem mo  = Menu("Override thrust");
                    int[]    pad = new[] { p + 2, p + 1, p + 3, p + 1, p + 2, p + 0 };

                    int i = 0;
                    foreach (string txt in Pgm.DIRECTIONS)
                    {
                        ThrustFlags tf = (ThrustFlags)(1 << i);
                        int         j  = i++;
                        md.Add(
                            Menu(() => GetText(1, txt, pad[j]))
                            .Collect(this)
                            .Enter("toggle" + txt, () => tsToggle(tf))
                            .Left(() => tsEnable(tf, true))
                            .Right(() => tsEnable(tf, false))
                            );
                        mo.Add(
                            Menu(() => GetText(2, txt, pad[j]))
                            .Collect(this)
                            .Enter("thrust" + txt, () => tsPower(tf, 100f))
                            .Left(() => tsPower(tf, -1))
                            .Right(() => tsPower(tf, 1))
                            .Back(() => tsPower(tf, 0))
                            );
                    }

                    tt.Add(md, mo);
                }
            }