Esempio n. 1
0
        public void boostbackStart()
        {
            //connection = new Connection(address: IPAddress.Parse("192.168.1.88"), rpcPort: 50000, streamPort: 50001);

            firstStage.Control.Throttle = 0;

            if (Startup.GetInstance().GetFlightInfo().getRocket() == "FH")
            {
                firstStage.Parts.WithTag("MainCentralSB")[0].Tag = "MainCentral";
                firstStage.Parts.WithTag("MainSecondSB")[0].Tag  = "MainSecond";
                firstStage.Parts.WithTag("MainSecondSB")[0].Tag  = "MainSecond";

                for (int i = 0; i < 6; i++)
                {
                    firstStage.Parts.WithTag("MainSB")[0].Tag = "Main";
                }
            }

            Console.WriteLine("Communication done with the first stage.");

            InitLat = landingZonePosition().Item1;
            InitLon = landingZonePosition().Item2;

            firstStage.Control.Forward = -1;
            Thread.Sleep(100);
            firstStage.Control.Forward = 0;

            boostbackBurn(firstStage, connectionFirstStage);
            EntryBurn = true;

            firstStage.AutoPilot.Disengage();
            NewEntryBurn(connectionFirstStage);
            SuicidBurn();
        }
Esempio n. 2
0
        public void stageSep()
        {
            var thrust = centerCore.centerCore.Thrust;

            while (true)
            {
                thrust = centerCore.centerCore.Thrust;
                var vesselFuel = (connection.AddStream(() => centerCore.centerCore.Resources.Amount("LiquidFuel")));
                //RTLS = 30%, ASDS = 20%, Exp = 1%
                var percentage = (20 * (9336.4 * 3 + 4668.2)) / 100;
                centerCore.centerCore.Control.Throttle = 1;

                if (vesselFuel.Get() - (4668.2 + 1167) <= percentage)
                {
                    Console.WriteLine("FH : MECO.");
                    centerCore.centerCore.Control.Throttle = 0;
                    Thread.Sleep(1500);
                    if (Startup.GetInstance().GetFlightInfo().getDragon() == true)
                    {
                        centerCore.centerCore.Parts.Decouplers[3].Decouple();
                    }
                    else
                    {
                        //firstStage.firstStage.Parts.Decouplers[1].Decouple();
                        centerCore.centerCore.Parts.WithTag("StageSep")[0].Decoupler.Decouple();
                    }
                    Console.WriteLine("FH : Stage separation.");
                    break;
                }
            }
        }
Esempio n. 3
0
        public void F1Startup()
        {
            firstStage.AutoPilot.Engage();

            firstStage.Control.Throttle = 1;
            firstStage.AutoPilot.TargetPitchAndHeading(90, Startup.GetInstance().GetFlightInfo().getHead());

            firstStage.Parts.Engines[1].Active = true;

            Console.WriteLine("FALCON 1 : Main engine startup.");
            var during = 0;
            var thrust = 0f;

            while (during <= 100)
            {
                thrust = firstStage.Parts.Engines[1].Thrust;
                during = during + 1;
            }

            if (thrust < firstStage.Parts.Engines[1].AvailableThrust)
            {
                firstStage.Control.Throttle        = 0;
                firstStage.Parts.Engines[1].Active = false;
                Console.WriteLine("FALCON 1 : Engine Abort.");
            }
            else
            {
                foreach (LaunchClamp clamp in firstStage.Parts.LaunchClamps)
                {
                    clamp.Release();
                }
                Console.WriteLine("FALCON 1 : Liftoff.");
            }
        }
Esempio n. 4
0
        public void GravityTurn2()
        {
            ariane5.AutoPilot.TargetRoll = 270;
            var Ft       = ariane5.Thrust;
            var Fw       = ariane5.Mass * ariane5.Orbit.Body.SurfaceGravity;
            var TWR      = Ft / Fw;
            var TWRstart = TWR;
            var pit      = 40f;

            while (pit > 15)
            {
                Ft  = ariane5.Thrust;
                Fw  = ariane5.Mass * ariane5.Orbit.Body.SurfaceGravity;
                TWR = Ft / Fw;

                var    difSup = ((35 * TWR) / TWRstart);
                double dif    = (difSup - 35) / TWRstart;
                float  dif2   = Convert.ToSingle(dif);
                pit = 90 - dif2;
                ariane5.AutoPilot.TargetPitch   = pit;
                ariane5.AutoPilot.TargetHeading = Startup.GetInstance().GetFlightInfo().getHead();
                ariane5.AutoPilot.TargetRoll    = 270;

                if (ariane5.Orbit.ApoapsisAltitude >= Startup.GetInstance().GetFlightInfo().getPeriapsisTarget())
                {
                    ariane5.AutoPilot.TargetPitch = 0;
                    break;
                }
            }

            ariane5.AutoPilot.TargetPitch = 10;
        }
Esempio n. 5
0
        public void waitGoodOrbit()
        {
            while (H2A.Orbit.TimeToApoapsis > 30 && H2A.Orbit.TimeToApoapsis < 50)
            {
                H2A.AutoPilot.TargetPitchAndHeading(0, Startup.GetInstance().GetFlightInfo().getHead()); H2A.Control.RCS = true; H2A.Control.Forward = 1;
            }

            while (H2A.Orbit.TimeToApoapsis > 30)
            {
                H2A.AutoPilot.TargetPitchAndHeading(0, Startup.GetInstance().GetFlightInfo().getHead());
            }

            H2A.Control.Throttle = 1;
            Console.WriteLine("HII-A : Second Engine Startup 2.");

            H2A.Control.Forward = 0;

            while (H2A.Orbit.ApoapsisAltitude < Startup.GetInstance().GetFlightInfo().getApoapsisTarget())
            {
                H2A.Control.Throttle = 1;
                H2A.AutoPilot.TargetPitchAndHeading(0, Startup.GetInstance().GetFlightInfo().getHead());
            }

            H2A.Control.Throttle = 0;
            Console.WriteLine("HII-A : Second Engine Cutoff 2.");
        }
Esempio n. 6
0
 public void SECO()
 {
     while (secondStage.Orbit.ApoapsisAltitude < Startup.GetInstance().GetFlightInfo().getPeriapsisTarget())
     {
     }
     secondStage.Control.Throttle = 0;
     Console.WriteLine("STAGE 2 : Second engine cutoff.");
     SESSECO2();
 }
Esempio n. 7
0
 public void SecondStageStartup()
 {
     secondStage.AutoPilot.Engage();
     secondStage.AutoPilot.TargetPitchAndHeading(10, Startup.GetInstance().GetFlightInfo().getHead());
     Thread.Sleep(1800);
     secondStage.Control.Throttle        = 1;
     secondStage.Parts.Engines[1].Active = true;
     Console.WriteLine("STAGE 2 : Second engine startup.");
 }
Esempio n. 8
0
        public void SESSECO2()
        {
            while (secondStage.Orbit.TimeToApoapsis > 10)
            {
            }
            secondStage.Control.Throttle = 1;
            Console.WriteLine("STAGE 2 : Second Engine Startup.");
            var pit = 0;

            while (true)
            {
                if (secondStage.Orbit.ApoapsisAltitude >= Startup.GetInstance().GetFlightInfo().getApoapsisTarget())
                {
                    if (secondStage.Orbit.TimeToApoapsis > 200)
                    {
                        pit = 10;
                    }
                    else
                    {
                        pit = -10;
                    }
                }
                else if (secondStage.Orbit.ApoapsisAltitude <= Startup.GetInstance().GetFlightInfo().getApoapsisTarget())
                {
                    if (secondStage.Orbit.TimeToApoapsis > 20)
                    {
                        pit = -10;
                    }
                    else
                    {
                        pit = 10;
                    }
                }

                if (Startup.GetInstance().GetFlightInfo().getPeriapsisTarget() == Startup.GetInstance().GetFlightInfo().getApoapsisTarget())
                {
                    if (secondStage.Orbit.PeriapsisAltitude >= Startup.GetInstance().GetFlightInfo().getPeriapsisTarget() - 2000)
                    {
                        secondStage.Control.Throttle = 0;
                        Console.WriteLine("STAGE 2 : Second Engine CutOff");
                        break;
                    }
                }
                else
                {
                    if (secondStage.Orbit.ApoapsisAltitude >= (Startup.GetInstance().GetFlightInfo().getApoapsisTarget() - 2000))
                    {
                        secondStage.Control.Throttle = 0;
                        Console.WriteLine("STAGE 2 : Second Engine CutOff");
                        break;
                    }
                }

                secondStage.AutoPilot.TargetPitchAndHeading(pit, Startup.GetInstance().GetFlightInfo().getHead());
            }
        }
Esempio n. 9
0
        public void waitGoodPe()
        {
            while (H2A.Orbit.ApoapsisAltitude < Startup.GetInstance().GetFlightInfo().getPeriapsisTarget())
            {
                H2A.AutoPilot.TargetPitchAndHeading(25, Startup.GetInstance().GetFlightInfo().getHead());
            }

            H2A.Control.Throttle = 0;
            Console.WriteLine("HII-A : Second Engine Cutoff.");
        }
Esempio n. 10
0
        public void Liftoff()
        {
            while (T4 == false)
            {
            }

            Console.WriteLine("HII-A : Ignition.");
            H2A.Parts.WithTag("First")[0].Engine.Active = true;
            H2A.Control.Throttle = 1;
            H2A.AutoPilot.Engage();
            H2A.AutoPilot.TargetHeading = Startup.GetInstance().GetFlightInfo().getHead();
            H2A.AutoPilot.TargetPitch   = 90;

            //while (T0 == false) { }
            Thread.Sleep(12000);

            if (H2A.Thrust <= 80000) //un 0 en plus
            {
                Console.WriteLine("HII-A : Engine Abort.");
                Console.WriteLine("Trust : " + H2A.Thrust);
                Console.WriteLine("Available Thrust : " + H2A.Parts.WithTag("First")[0].Engine.AvailableThrust);
                H2A.Control.Throttle = 0;
                H2A.Parts.WithTag("First")[0].Engine.Active = false;
                Hold = true;
            }
            else
            {
                try
                {
                    H2A.Parts.WithTag("Booster")[0].Engine.Active = true;
                    H2A.Parts.WithTag("Booster")[1].Engine.Active = true;
                    H2A.Parts.WithTag("Booster")[2].Engine.Active = true;
                    H2A.Parts.WithTag("Booster")[3].Engine.Active = true;
                }
                catch
                {
                    H2A.Control.Throttle = 0;
                    Console.WriteLine("HII-A : Booster Ignition Failed, Launch is abort.");
                    Hold = true;
                    while (true)
                    {
                    }
                }

                foreach (LaunchClamp clamp in H2A.Parts.LaunchClamps)
                {
                    clamp.Release();
                }
                Console.WriteLine("HII-A : Liftoff.");
                //sw.WriteLine($"[{Hour(connection.SpaceCenter().UT)}] : Liftoff");
            }
        }
Esempio n. 11
0
 public void SECO(Vessel vessel, Connection connection)
 {
     while (true)
     {
         secondStage.AutoPilot.TargetPitch = 35;
         secondStage.Control.Throttle      = 1;
         if (secondStage.Orbit.ApoapsisAltitude >= Startup.GetInstance().GetFlightInfo().getPeriapsisTarget())
         {
             secondStage.Control.Throttle = 0;
             Console.WriteLine("STAGE 2 : Second engine cutoff.");
             SESSECO2();
             //circularisation(vessel, connection);
             break;
         }
     }
 }
Esempio n. 12
0
        private void Ignition()
        {
            Console.WriteLine("Ignition");

            float aThrust = starship.AvailableThrust;

            starship.AutoPilot.Engage();
            starship.AutoPilot.TargetPitchAndHeading(90, Startup.GetInstance().GetFlightInfo().getHead());

            Raptor.Active = true;

            /*starship.Parts.Engines[1].Active = true;
            *  starship.Parts.Engines[2].Active = true;*/
            starship.Control.Throttle = ThrottleToTWR(0.1f);

            Thread.Sleep(5000);
            Console.WriteLine("Throttle Up");
            starship.Control.Throttle = ThrottleToTWR(0.8f);

            Thread.Sleep(4000);

            if (TWR() >= 0.75f)
            {
                Console.WriteLine("Liftoff");
                starship.Control.Throttle = ThrottleToTWR(1.05f);

                starship.Control.ToggleActionGroup(4);
                starship.Control.RCS = true;

                Thread.Sleep(1000);

                foreach (LaunchClamp clamp in starship.Parts.LaunchClamps)
                {
                    clamp.Release();
                }
            }
            else
            {
                Console.WriteLine($"Abort !\nThrust : {0}\nTWR : {1}", starship.Thrust, TWR());
                Raptor.Active             = false;
                starship.Control.Throttle = 0;

                Thread.Sleep(999999999);
            }
        }
Esempio n. 13
0
 public void SecondStageStartup()
 {
     secondStage.Control.RCS = true;
     secondStage.AutoPilot.Engage();
     secondStage.AutoPilot.TargetRoll = 0;
     Thread.Sleep(4000);
     secondStage.AutoPilot.TargetPitchAndHeading(35, Startup.GetInstance().GetFlightInfo().getHead());
     Thread.Sleep(4000);
     secondStage.Control.Throttle = 0.01f;
     //secondStage.Parts.Engines[0].Active = true;
     secondStage.Parts.WithTag("Second")[0].Engine.Active = true;
     Thread.Sleep(10000);
     secondStage.Control.Throttle = 0.3f;
     Thread.Sleep(5000);
     secondStage.Control.Throttle = 1;
     secondStage.Control.Forward  = 0;
     Console.WriteLine("STAGE 2 : Second engine startup.");
 }
Esempio n. 14
0
        public void Ariane5Startup(Connection connectionLink)
        {
            connection = connectionLink;

            ariane5.AutoPilot.Engage();
            ariane5.AutoPilot.TargetPitchAndHeading(90, Startup.GetInstance().GetFlightInfo().getHead());

            ariane5.Parts.WithTag("Vulcain2")[0].Engine.Active = true;

            ariane5.Control.Throttle = 1;
            Console.WriteLine("ARIANE V : Allumage Vulcain.");

            Thread.Sleep(7000);

            var thrust = ariane5.Thrust;

            if (thrust < 2000)
            {
                Console.WriteLine("ARIANE V : Engine Abort.");
                Console.WriteLine("Trust : " + thrust);
                Console.WriteLine("Available Thrust : 2100");
                ariane5.Control.Throttle = 0;
                ariane5.Parts.WithTag("Vulcain2")[0].Engine.Active = false;
            }
            else
            {
                for (int i = 0; i < 8; i++)
                {
                    ariane5.Parts.WithTag("EAP")[i].Engine.Active = true;
                }

                foreach (LaunchClamp clamp in ariane5.Parts.LaunchClamps)
                {
                    clamp.Release();
                }
                Console.WriteLine("ARIANE V : Décollage.");
            }

            Thread.Sleep(2000);
            ariane5.AutoPilot.TargetRoll = 270;

            Thread.Sleep(5000);
            ariane5.AutoPilot.TargetPitch = 85;
        }
Esempio n. 15
0
        public Tuple <Double, Double, Double> landingZonePosition()
        {
            if (Startup.GetInstance().GetFlightInfo().getLZ() == "LZ-1")
            {
                var landingZonePosition = Tuple.Create(Convert.ToDouble(28.49289896), Convert.ToDouble(-80.51653638), Convert.ToDouble(47.6120));
                return(landingZonePosition);
            }
            else if (Startup.GetInstance().GetFlightInfo().getLZ() == "LZ-2")
            {
                var landingZonePosition = Tuple.Create(Convert.ToDouble(28.493734), Convert.ToDouble(-80.519386), Convert.ToDouble(47.6120));
                return(landingZonePosition);
            }
            else if (Startup.GetInstance().GetFlightInfo().getLZ() == "OCISLY")
            {
                var landingZonePosition = Tuple.Create(droneShip.Flight(droneShip.SurfaceReferenceFrame).Latitude, droneShip.Flight(droneShip.SurfaceReferenceFrame).Longitude, droneShip.Flight(droneShip.SurfaceReferenceFrame).SurfaceAltitude + 5);
                return(landingZonePosition);
                //return null;
            }
            else if (Startup.GetInstance().GetFlightInfo().getLZ() == "LZ-4")
            {
                var landingZonePosition = Tuple.Create(Convert.ToDouble(34.7362686474572), Convert.ToDouble(-120.278871365682), Convert.ToDouble(47.6120));
                return(landingZonePosition);
            }
            else if (Startup.GetInstance().GetFlightInfo().getLZ() == "FHLZ")
            {
                var landingZonePosition = Tuple.Create(0.0, 0.0, 0.0);
                if (rocketBody == RocketBody.FH_SIDEBOOSTER_A) //LZ-1
                {
                    landingZonePosition = Tuple.Create(Convert.ToDouble(28.49289896), Convert.ToDouble(-80.51653638), Convert.ToDouble(47.6120));
                }
                else if (rocketBody == RocketBody.FH_SIDEBOOSTER_B) //LZ-2
                {
                    landingZonePosition = Tuple.Create(Convert.ToDouble(28.493734), Convert.ToDouble(-80.519386), Convert.ToDouble(47.6120));
                }
                return(landingZonePosition);
            }

            else
            {
                return(null);
            }
        }
Esempio n. 16
0
        public void stageSep()
        {
            var thrust = firstStage.firstStage.Thrust;

            while (true)
            {
                //thrust = firstStage.firstStage.Thrust;
                //var vesselFuel = (connection.AddStream(() => firstStage.firstStage.Resources.Amount("LiquidFuel")));
                //RTLS = 42%, ASDS = 33.5%, Exp = 1%
                //var percentage = (33.5 * (9336.4 * 3 + 4668.2)) / 100;
                firstStage.firstStage.Control.Throttle = 1;

                if (firstStage.firstStage.Flight(firstStage.firstStage.SurfaceReferenceFrame).TrueAirSpeed > 1320 /*RTLS = > 1320 | ASDS = > 1800*/ /*firstStage.firstStage.Thrust < 50*/)
                {
                    Console.WriteLine("FALCON 9 : MECO.");
                    firstStage.firstStage.Control.Throttle = 0;
                    firstStage.firstStage.Control.RCS      = true;
                    firstStage.firstStage.Control.ToggleActionGroup(4);
                    Thread.Sleep(1500);
                    if (Startup.GetInstance().GetFlightInfo().getDragon() == true)
                    {
                        firstStage.firstStage.Parts.Decouplers[3].Decouple();
                    }
                    else
                    {
                        //firstStage.firstStage.Parts.Decouplers[1].Decouple();

                        /*firstStage.firstStage.Parts.WithTag("SepEngine")[0].Engine.Active = true;
                        *  firstStage.firstStage.Parts.WithTag("SepEngine")[1].Engine.Active = true;
                        *  firstStage.firstStage.Parts.WithTag("SepEngine")[2].Engine.Active = true;
                        *  firstStage.firstStage.Parts.WithTag("SepEngine")[3].Engine.Active = true;*/

                        firstStage.firstStage.Control.ToggleActionGroup(7);
                        //firstStage.firstStage.Parts.WithTag("StageSep")[0].Decoupler.Decouple();
                    }
                    Console.WriteLine("FALCON 9 : Stage separation.");
                    Thread gt = new Thread(gravityTurn);
                    gt.Abort();
                    break;
                }
            }
        }
Esempio n. 17
0
        public void GravityTurn()
        {
            ariane5.AutoPilot.TargetRoll = 270;
            var Ft       = ariane5.Thrust;
            var Fw       = ariane5.Mass * ariane5.Orbit.Body.SurfaceGravity;
            var TWR      = Ft / Fw;
            var TWRstart = TWR;
            var pit      = 85f;

            while (pit > 15)
            {
                Ft  = ariane5.Thrust;
                Fw  = ariane5.Mass * ariane5.Orbit.Body.SurfaceGravity;
                TWR = Ft / Fw;

                var    difSup = ((90 * TWR) / TWRstart);
                double dif    = (difSup - 90) / TWRstart;
                float  dif2   = Convert.ToSingle(dif);
                pit = 90 - dif2 - 5;
                ariane5.AutoPilot.TargetPitch   = pit;
                ariane5.AutoPilot.TargetHeading = Startup.GetInstance().GetFlightInfo().getHead();
                ariane5.AutoPilot.TargetRoll    = 270;

                if (ariane5.Orbit.ApoapsisAltitude >= Startup.GetInstance().GetFlightInfo().getPeriapsisTarget())
                {
                    ariane5.AutoPilot.TargetPitch = 0;
                    break;
                }

                var vesselFuel = (connection.AddStream(() => ariane5.Resources.Amount("SolidFuel")));
                if (vesselFuel.Get() < 40)
                {
                    Thread.Sleep(5000);
                    ariane5.AutoPilot.TargetPitch = 15;
                    break;
                }
            }

            ariane5.AutoPilot.TargetPitch = 10;
        }
Esempio n. 18
0
        public void GravityTurn()
        {
            double BoosterMass = 21000;
            bool   Booster     = false;
            double FirstTWR    = H2A.Parts.WithTag("First")[0].Engine.AvailableThrust / H2A.Mass;

            //sw.WriteLine($"[{Hour(connection.SpaceCenter().UT)}] : Gravity turn start");

            while (true)
            {
                double Thrust = H2A.Parts.WithTag("First")[0].Engine.AvailableThrust;
                double Mass   = H2A.Mass - BoosterMass * 2;
                double TWR    = Thrust / Mass;

                double Pitch = (TWR * 85) / FirstTWR;
                Pitch = 90 - ((Pitch - 90) / 2.3);

                if (BoosterSep == true && Booster == false)
                {
                    Thread.Sleep(1000);
                    BoosterMass = 0;
                    Booster     = true;
                }

                H2A.AutoPilot.TargetPitch   = Convert.ToSingle(Pitch);
                H2A.AutoPilot.TargetHeading = Startup.GetInstance().GetFlightInfo().getHead();
                H2A.AutoPilot.TargetRoll    = 0;

                if (H2A.AutoPilot.TargetPitch <= 35)
                {
                    H2A.AutoPilot.TargetPitch = 35;
                    break;
                }
            }

            H2A.AutoPilot.TargetPitch = 40;
            Console.WriteLine("HII-A : Gravity Turn ended.");
            //sw.WriteLine($"[{Hour(connection.SpaceCenter().UT)}] : Gravity turn end");
        }
Esempio n. 19
0
        private void Assent()
        {
            double pastAp = starship.Orbit.ApoapsisAltitude - InitAlt;

            while (starship.Flight(starship.Orbit.Body.ReferenceFrame).VerticalSpeed > 0 || starship.Flight(starship.SurfaceReferenceFrame).SurfaceAltitude < Startup.GetInstance().GetFlightInfo().getMaxAltitude())
            {
                double Ap = starship.Orbit.ApoapsisAltitude - InitAlt;

                float TWRTarget;

                if (Ap >= Startup.GetInstance().GetFlightInfo().getMaxAltitude())
                {
                    TWRTarget = 0.6f;
                }
                else
                {
                    TWRTarget = 1.2f;
                }

                if (starship.Flight(starship.SurfaceReferenceFrame).SurfaceAltitude >= Startup.GetInstance().GetFlightInfo().getMaxAltitude())
                {
                    TWRTarget = 0.4f;
                    starship.Control.Throttle = TWRTarget;
                    break;
                }

                TWRTarget = ThrottleToTWR(TWRTarget);
                if (TWRTarget < 0.001f)
                {
                    TWRTarget = 0.001f;
                }

                starship.Control.Throttle = TWRTarget;

                starship.AutoPilot.TargetHeading = (float)RetroHead();
                starship.AutoPilot.TargetPitch   = 90 - ((float)PitchRetro() / 4f);
            }
        }
Esempio n. 20
0
        public StarshipHopperEvent(Vessel vessel, Connection connectionLink)
        {
            connection = connectionLink;
            starship   = new StarshipHopper(vessel, RocketBody.F9_FIRST_STAGE);

            foreach (Vessel vesselTarget in connection.SpaceCenter().Vessels)
            {
                if (Startup.GetInstance().GetFlightInfo().getDragon() == false)
                {
                    if (vesselTarget.Name.Equals("Starship Hopper") && vesselTarget.Type.Equals(VesselType.Probe))
                    {
                        starship.starship      = vesselTarget;
                        starship.starship.Name = "Starship Hopper";
                        Console.WriteLine("STARSHIP : Starship Hopper accisition signal.");
                        break;
                    }
                }
            }

            starship.StarshipStartup(connection);

            Console.ReadKey();
        }
Esempio n. 21
0
 public void fairingSep()
 {
     while (true)
     {
         if (Startup.GetInstance().GetFlightInfo().getOrion() == true)
         {
             if (secondStage.Flight(null).MeanAltitude > 60000)
             {
                 secondStage.Control.ToggleActionGroup(5);
                 Console.WriteLine("STAGE 2 : Solar protection separation.");
                 Thread.Sleep(5000);
                 secondStage.Control.ToggleActionGroup(9);
                 Console.WriteLine("STAGE 2 : LES Jettison.");
                 break;
             }
         }
         else if (Startup.GetInstance().GetFlightInfo().getDragon() == false)
         {
             if (secondStage.Flight(null).MeanAltitude > 100000)
             {
                 secondStage.Control.ToggleActionGroup(5);
                 Console.WriteLine("STAGE 2 : Fairing separation.");
                 break;
             }
         }
         else
         {
             if (secondStage.Flight(null).MeanAltitude > 45000)
             {
                 secondStage.Control.ToggleActionGroup(5);
                 Console.WriteLine("STAGE 2 : Nose cone sep.");
                 break;
             }
         }
     }
 }
Esempio n. 22
0
        public Falcon9Event(Vessel vessel, Connection connectionLink, Connection connectionFirstStageLink)
        {
            connection           = connectionLink;
            connectionFirstStage = connectionFirstStageLink;
            firstStage           = new F9FirstStage(vessel, RocketBody.F9_FIRST_STAGE);
            var Falcon9 = firstStage;

            Console.WriteLine("Second Stage accisition signal.");

            Console.WriteLine("First Stage accisition signal.");

            Console.WriteLine("Loading...");
            //Task.Run(LoadSupervisor);
            //while (FalconSupervisor.Instance == null) { Thread.Sleep(1000); }
            Console.WriteLine("Loaded !");

            Task.Run(() => {
                while (true)
                {
                    FalconSupervisor.Execute(() =>
                    {
                        try
                        {
                            #region FirstStageThrust
                            FalconSupervisor.Instance.lb_PowerCentral.Text = Math.Round(firstStage.firstStage.Parts.WithTag("MainCentral")[0].Engine.Thrust).ToString() + "kN";
                            FalconSupervisor.Instance.lb_PowerSecond1.Text = Math.Round(firstStage.firstStage.Parts.WithTag("MainSecond")[1].Engine.Thrust).ToString() + "kN";
                            FalconSupervisor.Instance.lb_PowerSecond0.Text = Math.Round(firstStage.firstStage.Parts.WithTag("MainSecond")[0].Engine.Thrust).ToString() + "kN";
                            FalconSupervisor.Instance.lb_PowerMain1.Text   = Math.Round(firstStage.firstStage.Parts.WithTag("Main")[1].Engine.Thrust).ToString() + "kN";
                            FalconSupervisor.Instance.lb_PowerMain2.Text   = Math.Round(firstStage.firstStage.Parts.WithTag("Main")[2].Engine.Thrust).ToString() + "kN";
                            FalconSupervisor.Instance.lb_PowerMain3.Text   = Math.Round(firstStage.firstStage.Parts.WithTag("Main")[3].Engine.Thrust).ToString() + "kN";
                            FalconSupervisor.Instance.lb_PowerMain4.Text   = Math.Round(firstStage.firstStage.Parts.WithTag("Main")[4].Engine.Thrust).ToString() + "kN";
                            FalconSupervisor.Instance.lb_PowerMain5.Text   = Math.Round(firstStage.firstStage.Parts.WithTag("Main")[5].Engine.Thrust).ToString() + "kN";
                            FalconSupervisor.Instance.lb_PowerMain0.Text   = Math.Round(firstStage.firstStage.Parts.WithTag("Main")[0].Engine.Thrust).ToString() + "kN";
                            #endregion

                            #region CenterEngine
                            if (firstStage.firstStage.Parts.WithTag("MainCentral")[0].Engine.Thrust > 0 && firstStage.firstStage.Parts.WithTag("MainCentral")[0].Engine.Thrust < 700000)
                            {
                                FalconSupervisor.Instance.pb_CenterEngine.Image = Image.FromFile("C:/Users/Utilisateur/Documents/SpaceX Computer/SpaceXComputer/SpaceXComputer/SpaceX/Falcon 9/Engine-Yellow.png");
                            }
                            else if (firstStage.firstStage.Parts.WithTag("MainCentral")[0].Engine.Thrust > 0 && firstStage.firstStage.Parts.WithTag("MainCentral")[0].Engine.Thrust >= 700000)
                            {
                                FalconSupervisor.Instance.pb_CenterEngine.Image = Image.FromFile("C:/Users/Utilisateur/Documents/SpaceX Computer/SpaceXComputer/SpaceXComputer/SpaceX/Falcon 9/Engine-Green.png");
                            }
                            else
                            {
                                FalconSupervisor.Instance.pb_CenterEngine.Image = Image.FromFile("C:/Users/Utilisateur/Documents/SpaceX Computer/SpaceXComputer/SpaceXComputer/SpaceX/Falcon 9/Engine-Red.png");
                            }
                            #endregion

                            #region SecondsEngines
                            if (firstStage.firstStage.Parts.WithTag("MainSecond")[0].Engine.Thrust > 0 && firstStage.firstStage.Parts.WithTag("MainSecond")[0].Engine.Thrust < 700000)
                            {
                                FalconSupervisor.Instance.pb_Second0.Image = Image.FromFile("C:/Users/Utilisateur/Documents/SpaceX Computer/SpaceXComputer/SpaceXComputer/SpaceX/Falcon 9/Engine-Yellow.png");
                            }
                            else if (firstStage.firstStage.Parts.WithTag("MainSecond")[0].Engine.Thrust > 0 && firstStage.firstStage.Parts.WithTag("MainSecond")[0].Engine.Thrust >= 700000)
                            {
                                FalconSupervisor.Instance.pb_Second0.Image = Image.FromFile("C:/Users/Utilisateur/Documents/SpaceX Computer/SpaceXComputer/SpaceXComputer/SpaceX/Falcon 9/Engine-Green.png");
                            }
                            else
                            {
                                FalconSupervisor.Instance.pb_Second0.Image = Image.FromFile("C:/Users/Utilisateur/Documents/SpaceX Computer/SpaceXComputer/SpaceXComputer/SpaceX/Falcon 9/Engine-Red.png");
                            }

                            if (firstStage.firstStage.Parts.WithTag("MainSecond")[1].Engine.Thrust > 0 && firstStage.firstStage.Parts.WithTag("MainSecond")[1].Engine.Thrust < 700000)
                            {
                                FalconSupervisor.Instance.pb_Second1.Image = Image.FromFile("C:/Users/Utilisateur/Documents/SpaceX Computer/SpaceXComputer/SpaceXComputer/SpaceX/Falcon 9/Engine-Yellow.png");
                            }
                            else if (firstStage.firstStage.Parts.WithTag("MainSecond")[1].Engine.Thrust > 0 && firstStage.firstStage.Parts.WithTag("MainSecond")[1].Engine.Thrust >= 700000)
                            {
                                FalconSupervisor.Instance.pb_Second1.Image = Image.FromFile("C:/Users/Utilisateur/Documents/SpaceX Computer/SpaceXComputer/SpaceXComputer/SpaceX/Falcon 9/Engine-Green.png");
                            }
                            else
                            {
                                FalconSupervisor.Instance.pb_Second1.Image = Image.FromFile("C:/Users/Utilisateur/Documents/SpaceX Computer/SpaceXComputer/SpaceXComputer/SpaceX/Falcon 9/Engine-Red.png");
                            }
                            #endregion

                            #region MainEngines
                            if (firstStage.firstStage.Parts.WithTag("Main")[0].Engine.Thrust > 0 && firstStage.firstStage.Parts.WithTag("Main")[0].Engine.Thrust < 700000)
                            {
                                FalconSupervisor.Instance.pb_Main0.Image = Image.FromFile("C:/Users/Utilisateur/Documents/SpaceX Computer/SpaceXComputer/SpaceXComputer/SpaceX/Falcon 9/Engine-Yellow.png");
                            }
                            else if (firstStage.firstStage.Parts.WithTag("Main")[0].Engine.Thrust > 0 && firstStage.firstStage.Parts.WithTag("Main")[0].Engine.Thrust >= 700000)
                            {
                                FalconSupervisor.Instance.pb_Main0.Image = Image.FromFile("C:/Users/Utilisateur/Documents/SpaceX Computer/SpaceXComputer/SpaceXComputer/SpaceX/Falcon 9/Engine-Green.png");
                            }
                            else
                            {
                                FalconSupervisor.Instance.pb_Main0.Image = Image.FromFile("C:/Users/Utilisateur/Documents/SpaceX Computer/SpaceXComputer/SpaceXComputer/SpaceX/Falcon 9/Engine-Red.png");
                            }

                            if (firstStage.firstStage.Parts.WithTag("Main")[1].Engine.Thrust > 0 && firstStage.firstStage.Parts.WithTag("Main")[1].Engine.Thrust < 700000)
                            {
                                FalconSupervisor.Instance.pb_Main1.Image = Image.FromFile("C:/Users/Utilisateur/Documents/SpaceX Computer/SpaceXComputer/SpaceXComputer/SpaceX/Falcon 9/Engine-Yellow.png");
                            }
                            else if (firstStage.firstStage.Parts.WithTag("Main")[1].Engine.Thrust > 0 && firstStage.firstStage.Parts.WithTag("Main")[1].Engine.Thrust >= 700000)
                            {
                                FalconSupervisor.Instance.pb_Main1.Image = Image.FromFile("C:/Users/Utilisateur/Documents/SpaceX Computer/SpaceXComputer/SpaceXComputer/SpaceX/Falcon 9/Engine-Green.png");
                            }
                            else
                            {
                                FalconSupervisor.Instance.pb_Main1.Image = Image.FromFile("C:/Users/Utilisateur/Documents/SpaceX Computer/SpaceXComputer/SpaceXComputer/SpaceX/Falcon 9/Engine-Red.png");
                            }

                            if (firstStage.firstStage.Parts.WithTag("Main")[2].Engine.Thrust > 0 && firstStage.firstStage.Parts.WithTag("Main")[2].Engine.Thrust < 700000)
                            {
                                FalconSupervisor.Instance.pb_Main2.Image = Image.FromFile("C:/Users/Utilisateur/Documents/SpaceX Computer/SpaceXComputer/SpaceXComputer/SpaceX/Falcon 9/Engine-Yellow.png");
                            }
                            else if (firstStage.firstStage.Parts.WithTag("Main")[2].Engine.Thrust > 0 && firstStage.firstStage.Parts.WithTag("Main")[2].Engine.Thrust >= 700000)
                            {
                                FalconSupervisor.Instance.pb_Main2.Image = Image.FromFile("C:/Users/Utilisateur/Documents/SpaceX Computer/SpaceXComputer/SpaceXComputer/SpaceX/Falcon 9/Engine-Green.png");
                            }
                            else
                            {
                                FalconSupervisor.Instance.pb_Main2.Image = Image.FromFile("C:/Users/Utilisateur/Documents/SpaceX Computer/SpaceXComputer/SpaceXComputer/SpaceX/Falcon 9/Engine-Red.png");
                            }

                            if (firstStage.firstStage.Parts.WithTag("Main")[3].Engine.Thrust > 0 && firstStage.firstStage.Parts.WithTag("Main")[3].Engine.Thrust < 700000)
                            {
                                FalconSupervisor.Instance.pb_Main3.Image = Image.FromFile("C:/Users/Utilisateur/Documents/SpaceX Computer/SpaceXComputer/SpaceXComputer/SpaceX/Falcon 9/Engine-Yellow.png");
                            }
                            else if (firstStage.firstStage.Parts.WithTag("Main")[3].Engine.Thrust > 0 && firstStage.firstStage.Parts.WithTag("Main")[3].Engine.Thrust >= 700000)
                            {
                                FalconSupervisor.Instance.pb_Main3.Image = Image.FromFile("C:/Users/Utilisateur/Documents/SpaceX Computer/SpaceXComputer/SpaceXComputer/SpaceX/Falcon 9/Engine-Green.png");
                            }
                            else
                            {
                                FalconSupervisor.Instance.pb_Main3.Image = Image.FromFile("C:/Users/Utilisateur/Documents/SpaceX Computer/SpaceXComputer/SpaceXComputer/SpaceX/Falcon 9/Engine-Red.png");
                            }

                            if (firstStage.firstStage.Parts.WithTag("Main")[4].Engine.Thrust > 0 && firstStage.firstStage.Parts.WithTag("Main")[4].Engine.Thrust < 700000)
                            {
                                FalconSupervisor.Instance.pb_Main4.Image = Image.FromFile("C:/Users/Utilisateur/Documents/SpaceX Computer/SpaceXComputer/SpaceXComputer/SpaceX/Falcon 9/Engine-Yellow.png");
                            }
                            else if (firstStage.firstStage.Parts.WithTag("Main")[4].Engine.Thrust > 0 && firstStage.firstStage.Parts.WithTag("Main")[4].Engine.Thrust >= 700000)
                            {
                                FalconSupervisor.Instance.pb_Main4.Image = Image.FromFile("C:/Users/Utilisateur/Documents/SpaceX Computer/SpaceXComputer/SpaceXComputer/SpaceX/Falcon 9/Engine-Green.png");
                            }
                            else
                            {
                                FalconSupervisor.Instance.pb_Main4.Image = Image.FromFile("C:/Users/Utilisateur/Documents/SpaceX Computer/SpaceXComputer/SpaceXComputer/SpaceX/Falcon 9/Engine-Red.png");
                            }

                            if (firstStage.firstStage.Parts.WithTag("Main")[5].Engine.Thrust > 0 && firstStage.firstStage.Parts.WithTag("Main")[5].Engine.Thrust < 700000)
                            {
                                FalconSupervisor.Instance.pb_Main5.Image = Image.FromFile("C:/Users/Utilisateur/Documents/SpaceX Computer/SpaceXComputer/SpaceXComputer/SpaceX/Falcon 9/Engine-Yellow.png");
                            }
                            else if (firstStage.firstStage.Parts.WithTag("Main")[5].Engine.Thrust > 0 && firstStage.firstStage.Parts.WithTag("Main")[5].Engine.Thrust >= 700000)
                            {
                                FalconSupervisor.Instance.pb_Main5.Image = Image.FromFile("C:/Users/Utilisateur/Documents/SpaceX Computer/SpaceXComputer/SpaceXComputer/SpaceX/Falcon 9/Engine-Green.png");
                            }
                            else
                            {
                                FalconSupervisor.Instance.pb_Main5.Image = Image.FromFile("C:/Users/Utilisateur/Documents/SpaceX Computer/SpaceXComputer/SpaceXComputer/SpaceX/Falcon 9/Engine-Red.png");
                            }
                            #endregion



                            FalconSupervisor.Instance.lb_Debug.Text = "Speed : " + Math.Round(firstStage.firstStage.Flight(firstStage.firstStage.SurfaceReferenceFrame).TrueAirSpeed).ToString();
                        }
                        catch
                        {
                        }
                    });

                    Thread.Sleep(200);
                }
            });

            //Thread.Sleep(5000);

            foreach (Vessel vesselTarget in connection.SpaceCenter().Vessels)
            {
                if (Startup.GetInstance().GetFlightInfo().getDragon() == false)
                {
                    if (vesselTarget.Name.Contains("Dragon SpX-C2") && vesselTarget.Type.Equals(VesselType.Probe))
                    {
                        firstStage.firstStage      = vesselTarget;
                        firstStage.firstStage.Name = "Falcon 9 Full";
                        Console.WriteLine("FALCON 9 : Falcon 9 accisition signal.");
                        break;
                    }
                }
                else if (Startup.GetInstance().GetFlightInfo().getDragon() == true)
                {
                    if (vesselTarget.Name.Equals("Falcon 9 Dragon COTS-1") && vesselTarget.Type.Equals(VesselType.Probe))
                    {
                        firstStage.firstStage      = vesselTarget;
                        firstStage.firstStage.Name = "Falcon 9 Dragon";
                        Console.WriteLine("FALCON 9 : Falcon 9 accisition signal.");
                        break;
                    }
                }
            }

            if (Startup.GetInstance().GetFlightInfo().getLZ() == "OCISLY")
            {
                droneShip = new F9FirstStage(vessel, RocketBody.OCISLY);
                foreach (Vessel vesselTarget in connectionFirstStage.SpaceCenter().Vessels)
                {
                    if (vesselTarget.Name.Contains("Of Course I Still Love You") && vesselTarget.Type.Equals(VesselType.Relay))
                    {
                        firstStage.droneShip      = vesselTarget;
                        firstStage.droneShip.Name = "Of Course I Still Love You";
                        Console.WriteLine("FIRST STAGE : OCISLY accisition signal.");
                        Console.WriteLine($"Lat = {firstStage.droneShip.Flight(firstStage.droneShip.SurfaceReferenceFrame).Latitude} | Long = {firstStage.droneShip.Flight(firstStage.droneShip.SurfaceReferenceFrame).Longitude}");
                        //break;
                    }
                }
            }

            Falcon9.F9Startup(connection, connectionFirstStageLink);

            /*Thread Abort = new Thread(FlightAbort);
             * Abort.Start();*/

            while (firstStage.firstStage.Flight(null).SurfaceAltitude < 100)
            {
                Thread.Sleep(100);
            }

            Thread GravityTurn = new Thread(gravityTurn);
            GravityTurn.Start();
            stageSep();

            foreach (Vessel vesselTargetFirst in connectionFirstStage.SpaceCenter().Vessels)
            {
                if (vesselTargetFirst.Name.Contains("Falcon 9") && vesselTargetFirst.Name.Contains("") && vesselTargetFirst.Type.Equals(VesselType.Probe))
                {
                    secondStage            = new F9SecondStage(vessel, RocketBody.F9_SECOND_STAGE);
                    firstStage.secondStage = secondStage;
                    secondStage.secondStage.Control.Forward = 1;
                    secondStage.secondStage.Name            = "F9 Second Stage";
                    secondStage.rocketBody = RocketBody.F9_SECOND_STAGE;
                    Console.WriteLine("FALCON 9 : Second Stage as configured.");
                }
            }


            firstStage.switchToSecondStage = true;

            /*foreach (Vessel vesselTargetSecond in connection.SpaceCenter().Vessels)
             * {
             *  if (Startup.GetInstance().GetFlightInfo().getDragon() == false)
             *  {
             *      if (vesselTargetSecond.Name.Equals("Falcon 9 Block 6.1") && vesselTargetSecond.Type.Equals(VesselType.Probe))
             *      {
             *          secondStage.secondStage = vesselTargetSecond;
             *          secondStage.secondStage.Name = "Falcon 9 Second Stage";
             *          Console.WriteLine("FALCON 9 : Second stage accisition signal.");
             *          break;
             *      }
             *  }
             *  else if (Startup.GetInstance().GetFlightInfo().getDragon() == true)
             *  {
             *      if (vesselTargetSecond.Name.Equals("Falcon 9 Dragon COTS-1") && vesselTargetSecond.Type.Equals(VesselType.Probe))
             *      {
             *          secondStage.secondStage = vesselTargetSecond;
             *          secondStage.secondStage.Name = "Falcon 9 Second Stage";
             *          Console.WriteLine("FALCON 9 : Second stage accisition signal.");
             *          break;
             *      }
             *  }
             * }*/
            foreach (Vessel vesselTargetFirst in connectionFirstStage.SpaceCenter().Vessels)
            {
                if (vesselTargetFirst.Name.Contains("Falcon 9") && vesselTargetFirst.Name.Contains("Sonde") && vesselTargetFirst.Type.Equals(VesselType.Probe))
                {
                    firstStage.firstStage      = vesselTargetFirst;
                    firstStage.firstStage.Name = "F9 First Stage";
                    firstStage.rocketBody      = RocketBody.F9_FIRST_STAGE;
                    Console.WriteLine("FALCON 9 : First Stage as configured.");
                }
            }

            if (Startup.GetInstance().GetFlightInfo().getLZ() == "OCISLY")
            {
                droneShip = new F9FirstStage(vessel, RocketBody.OCISLY);
                foreach (Vessel vesselTarget in connectionFirstStage.SpaceCenter().Vessels)
                {
                    if (vesselTarget.Name.Contains("Of Course I Still Love You") && vesselTarget.Type.Equals(VesselType.Relay))
                    {
                        firstStage.droneShip      = vesselTarget;
                        firstStage.droneShip.Name = "Of Course I Still Love You";
                        Console.WriteLine("FIRST STAGE : OCISLY accisition signal.");
                        break;
                    }
                }
            }
            //connectionFirstStage = new Connection(address: IPAddress.Parse("192.168.1.88"), rpcPort: 50000, streamPort: 50001);
            firstStage.ConnectionF91stStage(connection);
            Thread Boostback = new Thread(firstStage.boostbackStart);
            //Boostback.Start();
            secondStage.SecondStageStartup();
            Thread FairingSep = new Thread(secondStage.fairingSep);
            FairingSep.Start();
            secondStage.SECO(vessel, connection);
            secondStage.satSep();

            Console.WriteLine("Stop ?");
            while (Console.ReadLine() != "stop")
            {
            }
        }
Esempio n. 23
0
        public void Assent()
        {
            grassHopper.AutoPilot.Engage();
            grassHopper.AutoPilot.TargetPitchAndHeading(90, 90);

            Merlin.Active = true;
            grassHopper.Control.Throttle = ThrottleToTWR(0.80f);

            Thread.Sleep(4000);

            /*if (TWR() < 0.75)
             * {
             *  Console.WriteLine($"TWR = {TWR()} (0.74 required for liftoff)");
             *  Merlin.Active = false;
             *  grassHopper.Control.Throttle = 0;
             *  Console.WriteLine("Abort");
             * }
             * else
             * {*/
            Console.WriteLine("Liftoff");
            grassHopper.Control.Throttle = ThrottleToTWR(1.10f);
            //}

            Thread.Sleep(10000);
            grassHopper.AutoPilot.TargetPitchAndHeading(90f, 90);
            grassHopper.Control.Gear = false;

            while (grassHopper.Flight(grassHopper.SurfaceReferenceFrame).SurfaceAltitude - InitAlt < Startup.GetInstance().GetFlightInfo().getMaxAltitude())
            {
                grassHopper.Control.Throttle = ThrottleToTWR(1.20f);
                grassHopper.AutoPilot.TargetPitchAndHeading(89.5f, 120);
            }

            grassHopper.Control.RCS = true;
            //GuidanceEvent();

            AngleLimit = LimitOfAngle(grassHopper.Flight(grassHopper.SurfaceReferenceFrame).SurfaceAltitude - InitAlt, Distance(InitLat, ImpactPos().Item1, InitLon, ImpactPos().Item2));

            while ((grassHopper.Flight(grassHopper.Orbit.Body.ReferenceFrame).VerticalSpeed > 0))
            {
                grassHopper.Control.Throttle = ThrottleToTWR(0.0f);
            }
        }
Esempio n. 24
0
        public Startup()
        {
            CommandFire.FireRegistery();

            instance   = this;
            flightInfo = new FlightInfo();
            //connection = new Connection(address: IPAddress.Parse("127.0.0.1"), rpcPort: 50000, streamPort: 50001); // Tester ::1
            Console.WriteLine("Falcon is in startup");

            int conNumber = 1;

            while (connection == null)
            {
                Console.WriteLine($"Connection tentative {conNumber}");
                conNumber += 1;

                try
                {
                    connection = new Connection(name: "UbuntuComputer", address: IPAddress.Parse("192.168.1.88"), rpcPort: 50000, streamPort: 50001);
                }
                catch
                {
                    Thread.Sleep(1000);
                }
            }

            //connectionFirstStage = new Connection(address: IPAddress.Parse("192.168.1.88"), rpcPort: 50000, streamPort: 50001);

            connectionFirstStage = connection;

            Console.WriteLine("Program startup in 5 seconds...");
            //Thread.Sleep(5000);

            if (Startup.GetInstance().GetFlightInfo().getMultiPhaseDragon() == true)
            {
                using (connection)
                {
                    var krpc        = connection.KRPC();
                    var spaceCenter = connection.SpaceCenter();
                    spacexEvent = new DragonEvent(spaceCenter.ActiveVessel, connection);
                }
            }
            else if (Startup.GetInstance().GetFlightInfo().getJustLandingBurn())
            {
                var krpc        = connection.KRPC();
                var spaceCenter = connection.SpaceCenter();
                spacexEvent = new LandingBurnEvent(spaceCenter.ActiveVessel, connection);
            }
            else if (Startup.GetInstance().GetFlightInfo().getDragonV2() == true)
            {
                var krpc        = connection.KRPC();
                var spaceCenter = connection.SpaceCenter();
                spacexEvent = new DragonV2Event(spaceCenter.ActiveVessel, connection);
            }
            else if (GetFlightInfo().getHyperloop() == true)
            {
                var krpc        = connection.KRPC();
                var spaceCenter = connection.SpaceCenter();
                spacexEvent = new Hyperloop(spaceCenter.ActiveVessel, connection);
            }
            else if (Startup.GetInstance().GetFlightInfo().getRocket() == "FH")
            {
                var krpc        = connection.KRPC();
                var spaceCenter = connection.SpaceCenter();
                spacexEvent = new FalconheavyEvent(spaceCenter.ActiveVessel, connection);
            }
            else if (Startup.GetInstance().GetFlightInfo().getRocket() == "A5")
            {
                var krpc        = connection.KRPC();
                var spaceCenter = connection.SpaceCenter();
                spacexEvent = new Ariane5Event(spaceCenter.ActiveVessel, connection);
            }
            else if (Startup.GetInstance().GetFlightInfo().getRocket() == "F9RDev")
            {
                var krpc        = connection.KRPC();
                var spaceCenter = connection.SpaceCenter();
                spacexEvent = new F9RDevEvent(spaceCenter.ActiveVessel, connection);
            }
            else if (Startup.GetInstance().GetFlightInfo().getRocket() == "H2A")
            {
                var krpc        = connection.KRPC();
                var spaceCenter = connection.SpaceCenter();
                spacexEvent = new H2AEvent(spaceCenter.ActiveVessel, connection);
            }
            else
            {
                var krpc        = connection.KRPC();
                var spaceCenter = connection.SpaceCenter();
                spacexEvent = new Falcon9Event(spaceCenter.ActiveVessel, connection, connectionFirstStage);
            }
        }
Esempio n. 25
0
        public void abortEngage()
        {
            var intAp  = dragonV2.Orbit.ApoapsisAltitude;
            var intPit = 90 - 15;

            dragonV2.AutoPilot.Engage();
            dragonV2.AutoPilot.TargetHeading = Startup.GetInstance().GetFlightInfo().getHead();
            dragonV2.AutoPilot.TargetPitch   = intPit;

            dragonV2.Parts.WithTag("Draco")[0].Engine.Active = true;
            dragonV2.Parts.WithTag("Draco")[1].Engine.Active = true;
            dragonV2.Parts.WithTag("Draco")[2].Engine.Active = true;
            dragonV2.Parts.WithTag("Draco")[3].Engine.Active = true;

            while (dragonV2.Orbit.ApoapsisAltitude < intAp + 700)
            {
                dragonV2.Control.Throttle = 1;
            }

            while (/*dragonV2.Orbit.ApoapsisAltitude < intAp + 10000 || */ dragonV2.Thrust > 100)
            {
                dragonV2.Control.Throttle = 1;
            }

            dragonV2.Control.Throttle = 0;
            dragonV2.AutoPilot.Disengage();
            dragonV2.Control.SAS     = true;
            dragonV2.Control.SASMode = SASMode.Prograde;
            Thread.Sleep(1000);
            dragonV2.Control.SASMode = SASMode.Prograde;

            while (dragonV2.Orbit.TimeToApoapsis > 5)
            {
            }

            dragonV2.Parts.WithTag("DragonTrunk")[0].Decoupler.Decouple();
            dragonV2.Control.SAS = false;
            dragonV2.Parts.WithTag("Drogue")[0].Parachute.Deploy();
            dragonV2.Parts.WithTag("Drogue")[1].Parachute.Deploy();

            while (dragonV2.Flight(dragonV2.SurfaceReferenceFrame).SurfaceAltitude > 1500 && dragonV2.Flight(dragonV2.SurfaceReferenceFrame).MeanAltitude > 1500)
            {
            }

            dragonV2.Parts.WithTag("Chute")[0].Parachute.Deploy();
            dragonV2.Parts.WithTag("Chute")[1].Parachute.Deploy();
            dragonV2.Parts.WithTag("Chute")[2].Parachute.Deploy();
            dragonV2.Parts.WithTag("Chute")[3].Parachute.Deploy();

            /*var drogues = dragonV2.Parts.WithTag("Drogue");
             * for (int i = 0; i <2; i++)
             * {
             *  var modules = drogues[i].Modules;
             *  for (int j = 0; j < 2; j++)
             *  {
             *      var m = modules[j];
             *      if (m.Name == "ModuleParachute")
             *      {
             *          m.TriggerEvent("Cut Parachute");
             *      }
             *  }
             * }*/

            dragonV2.Control.ToggleActionGroup(0);
        }
Esempio n. 26
0
        public void FHStartup(Connection connectionLink)
        {
            connection = connectionLink;
            //centerCore.Control.ToggleActionGroup(7);
            centerCore.AutoPilot.Engage();

            centerCore.Control.Throttle = 1;
            centerCore.AutoPilot.TargetPitchAndHeading(90, Startup.GetInstance().GetFlightInfo().getHead());

            //Boosters ignition
            centerCore.Parts.WithTag("MainCentralSB")[0].Engine.Active = true;
            centerCore.Parts.WithTag("MainSecondSB")[0].Engine.Active  = true;
            centerCore.Parts.WithTag("MainSecondSB")[1].Engine.Active  = true;
            centerCore.Parts.WithTag("MainCentralSB")[1].Engine.Active = true;
            centerCore.Parts.WithTag("MainSecondSB")[2].Engine.Active  = true;
            centerCore.Parts.WithTag("MainSecondSB")[3].Engine.Active  = true;
            for (int i = 0; i < 12; i++)
            {
                centerCore.Parts.WithTag("MainSB")[i].Engine.Active = true;
            }

            Thread.Sleep(500);

            //Centercore ignition
            centerCore.Parts.WithTag("MainCentral")[0].Engine.ThrustLimit = 0.80f;
            centerCore.Parts.WithTag("MainSecond")[0].Engine.ThrustLimit  = 0.8f;
            centerCore.Parts.WithTag("MainSecond")[1].Engine.ThrustLimit  = 0.8f;
            centerCore.Parts.WithTag("MainCentral")[0].Engine.Active      = true;
            centerCore.Parts.WithTag("MainSecond")[0].Engine.Active       = true;
            centerCore.Parts.WithTag("MainSecond")[1].Engine.Active       = true;
            for (int i = 0; i < 6; i++)
            {
                centerCore.Parts.WithTag("Main")[i].Engine.ThrustLimit = 0.8f;
                centerCore.Parts.WithTag("Main")[i].Engine.Active      = true;
            }


            Console.WriteLine("FIRST STAGE : Main engine startup.");
            float thrust;

            thrust = centerCore.Parts.Engines[1].Thrust;
            Thread.Sleep(5500);

            thrust = centerCore.Thrust;
            if (thrust < 19400)
            {
                Console.WriteLine("FIRST STAGE : Engine Abort.");
                Console.WriteLine("Trust : " + thrust);
                Console.WriteLine("Available Thrust : " + centerCore.AvailableThrust);
                centerCore.Control.Throttle        = 0;
                centerCore.Parts.Engines[2].Active = false;
                centerCore.Parts.WithTag("MainCentral")[0].Engine.Active   = false;
                centerCore.Parts.WithTag("MainSecond")[0].Engine.Active    = false;
                centerCore.Parts.WithTag("MainSecond")[1].Engine.Active    = false;
                centerCore.Parts.WithTag("MainCentralSB")[0].Engine.Active = false;
                centerCore.Parts.WithTag("MainSecondSB")[0].Engine.Active  = false;
                centerCore.Parts.WithTag("MainSecondSB")[1].Engine.Active  = false;
                centerCore.Parts.WithTag("MainCentralSB")[1].Engine.Active = false;
                centerCore.Parts.WithTag("MainSecondSB")[2].Engine.Active  = false;
                centerCore.Parts.WithTag("MainSecondSB")[3].Engine.Active  = false;
                for (int i = 0; i < 6; i++)
                {
                    centerCore.Parts.WithTag("Main")[i].Engine.Active = false;
                }
                for (int i = 0; i < 12; i++)
                {
                    centerCore.Parts.WithTag("MainSB")[i].Engine.Active = false;
                }
            }
            else if (Startup.GetInstance().GetFlightInfo().getStaticFire() == true)
            {
                Console.WriteLine("Static Fire...");
                Thread.Sleep(7000);
                Console.WriteLine("FIRST STAGE : Static Fire ended.");
                Console.WriteLine("Trust : " + thrust);
                Console.WriteLine("Available Thrust : " + centerCore.AvailableThrust);
                centerCore.Control.Throttle        = 0;
                centerCore.Parts.Engines[2].Active = false;
                centerCore.Parts.WithTag("MainCentral")[0].Engine.Active   = false;
                centerCore.Parts.WithTag("MainSecond")[0].Engine.Active    = false;
                centerCore.Parts.WithTag("MainSecond")[1].Engine.Active    = false;
                centerCore.Parts.WithTag("MainCentralSB")[0].Engine.Active = false;
                centerCore.Parts.WithTag("MainSecondSB")[0].Engine.Active  = false;
                centerCore.Parts.WithTag("MainSecondSB")[1].Engine.Active  = false;
                centerCore.Parts.WithTag("MainCentralSB")[1].Engine.Active = false;
                centerCore.Parts.WithTag("MainSecondSB")[2].Engine.Active  = false;
                centerCore.Parts.WithTag("MainSecondSB")[3].Engine.Active  = false;
                for (int i = 0; i < 6; i++)
                {
                    centerCore.Parts.WithTag("Main")[i].Engine.Active = false;
                }
                for (int i = 0; i < 12; i++)
                {
                    centerCore.Parts.WithTag("MainSB")[i].Engine.Active = false;
                }
            }
            else
            {
                foreach (LaunchClamp clamp in centerCore.Parts.LaunchClamps)
                {
                    clamp.Release();
                    //centerCore.Control.ToggleActionGroup(8);
                }
                Console.WriteLine("CENTER CORE : Liftoff.");
            }
        }
Esempio n. 27
0
        public void circularisation(Vessel vessel, Connection connection)
        {
            var ut = connection.AddStream(() => connection.SpaceCenter().UT);

            secondStage.AutoPilot.Engage();

            /*foreach (Vessel v in connection.SpaceCenter().Vessels)
             * {
             *  if (v.Name == "Polar Constellation 1")
             *  {
             *      connection.SpaceCenter().TargetVessel = v;
             *  }
             * }*/



            // --- Correction d'inclinaison au niveau de l'équateur.

            /*var longitude = connection.AddStream(() => secondStage.Flight(secondStage.SurfaceReferenceFrame).Longitude);
             * var utn = connection.SpaceCenter().UT + 10f;
             * while (secondStage.Orbit.Body.LatitudeAtPosition(secondStage.Orbit.PositionAt(utn, secondStage.SurfaceReferenceFrame), secondStage.SurfaceReferenceFrame) > 1)
             * {
             *  utn = utn + 10;
             * }
             * var ut_an = utn;
             *
             * var nodeSpeed = secondStage.Orbit.OrbitalSpeedAt(ut_an);
             * var orbit = secondStage.Orbit;
             * double i = Startup.GetInstance().GetFlightInfo().getInclination() - secondStage.Orbit.Inclination;
             * double v = nodeSpeed;
             * //double v = orbit.Speed;
             * double normal = v * Math.Sin(i);
             * double prograde = v * Math.Cos(i) - v;
             * var ut_node = connection.SpaceCenter().UT + ut_an;
             * var deltaV = normal + prograde;
             * //var deltaV = 2 * nodeSpeed * Math.Sin((i2 - i1) / 2);
             *
             * var node = secondStage.Control.AddNode(ut_node, normal: Convert.ToSingle(normal), prograde: Convert.ToSingle(prograde));
             *
             * var ISP = secondStage.Parts.WithTag("Second")[0].Engine.SpecificImpulse;
             * var P = secondStage.Parts.WithTag("Second")[0].Engine.AvailableThrust;
             * var F = P * 4;
             * var Isp = ISP * 9.82;
             * var m0 = secondStage.Mass;
             * var m1 = m0 / Math.Exp(deltaV / Isp);
             * var flowRate = F / Isp;
             * var burnTime = (m0 - m1) / flowRate;
             *
             * secondStage.AutoPilot.ReferenceFrame = node.ReferenceFrame;
             * secondStage.AutoPilot.TargetDirection = Tuple.Create(0.0, 1.0, 0.0);
             * secondStage.AutoPilot.Wait();
             *
             * /*Console.WriteLine("Ready for burn ?");
             * while (Console.ReadLine() != "true") { }*/

            /*while (ut_an - ut.Get() - (Math.Abs(burnTime) / 2.0) > 2)
             * {
             * }
             *
             * secondStage.Control.Throttle = 1;
             * Console.WriteLine("STAGE 2 : SES-2.");
             *
             * System.Threading.Thread.Sleep((int)((Math.Abs(burnTime) - 0.1) * 1000));
             *
             * if (secondStage.Orbit.LongitudeOfAscendingNode <= 0)
             * {
             *  while (secondStage.Orbit.LongitudeOfAscendingNode <= 0 - 1) { }
             * }
             * else
             * {
             *  while (secondStage.Orbit.LongitudeOfAscendingNode >= 0 + 1) { }
             * }
             *
             * node.Remove();*/

            var mu     = secondStage.Orbit.Body.GravitationalParameter;
            var r      = secondStage.Orbit.Apoapsis;
            var a1     = secondStage.Orbit.SemiMajorAxis;
            var SMA    = ((Startup.GetInstance().GetFlightInfo().getApoapsisTarget() + 600000) + (Startup.GetInstance().GetFlightInfo().getPeriapsisTarget() + 600000)) / 2;
            var a2     = SMA;
            var v1     = Math.Sqrt(mu * ((2.0 / r) - (1.0 / a1)));
            var v2     = Math.Sqrt(mu * ((2.0 / r) - (1.0 / a2)));
            var deltaV = v2 - v1;
            var node   = secondStage.Control.AddNode(ut.Get() + secondStage.Orbit.TimeToApoapsis, prograde: (float)deltaV);

            var F        = secondStage.AvailableThrust;
            var Isp      = secondStage.SpecificImpulse * 9.82;
            var m0       = secondStage.Mass;
            var m1       = m0 / Math.Exp(deltaV / Isp);
            var flowRate = F / Isp;
            var burnTime = (m0 - m1) / flowRate;

            secondStage.AutoPilot.ReferenceFrame  = node.ReferenceFrame;
            secondStage.AutoPilot.TargetDirection = Tuple.Create(0.0, 1.0, 0.0);
            //secondStage.AutoPilot.Wait();

            var timeToApoapsis = connection.AddStream(() => secondStage.Orbit.TimeToApoapsis);

            while (timeToApoapsis.Get() - (burnTime / 2.0) > 0)
            {
            }
            secondStage.Control.Throttle = 1;
            Console.WriteLine("STAGE 2 : SES-2.");
            System.Threading.Thread.Sleep((int)((burnTime - 0.1) * 1000));
            //secondStage.Control.Throttle = 0.3f;

            /*var remainingBurn = connection.AddStream(() => node.RemainingBurnVector(node.ReferenceFrame));
             * while (remainingBurn.Get().Item1 > 0)
             * {
             * }*/
            if (Startup.GetInstance().GetFlightInfo().getApoapsisTarget() == Startup.GetInstance().GetFlightInfo().getPeriapsisTarget())
            {
                while (secondStage.Orbit.PeriapsisAltitude <= Startup.GetInstance().GetFlightInfo().getApoapsisTarget() - 500)
                {
                }
            }
            else
            {
                while (secondStage.Orbit.ApoapsisAltitude <= Startup.GetInstance().GetFlightInfo().getApoapsisTarget() - 500)
                {
                }
            }
            secondStage.Control.Throttle = 0;
            Console.WriteLine("STAGE 2 : SECO-2.");
            node.Remove();
        }
Esempio n. 28
0
        public void SESSECO2()
        {
            secondStage.AutoPilot.TargetPitchAndHeading(0, 47);
            while (secondStage.Orbit.TimeToApoapsis > 50)
            {
            }
            secondStage.Control.RCS     = true;
            secondStage.Control.Forward = 1;
            while (secondStage.Orbit.TimeToApoapsis > 30)
            {
            }
            secondStage.Control.Throttle = 1;
            Console.WriteLine("STAGE 2 : Second Engine Startup.");
            var   pit      = 0;
            float throttle = 1;

            Thread.Sleep(10000);

            while (true)
            {
                float head = 47;

                if (Startup.GetInstance().GetFlightInfo().getPeriapsisTarget() != Startup.GetInstance().GetFlightInfo().getApoapsisTarget())
                {
                }
                else
                {
                    if (secondStage.Orbit.ApoapsisAltitude >= Startup.GetInstance().GetFlightInfo().getApoapsisTarget())
                    {
                        if (secondStage.Orbit.TimeToApoapsis > 200)
                        {
                            pit = -5;
                        }
                        else
                        {
                            pit = 5;
                        }
                    }
                    else if (secondStage.Orbit.ApoapsisAltitude <= Startup.GetInstance().GetFlightInfo().getApoapsisTarget())
                    {
                        if (secondStage.Orbit.TimeToApoapsis > 20)
                        {
                            pit = 5;
                        }
                        else
                        {
                            pit = -5;
                        }
                    }

                    if (secondStage.Orbit.PeriapsisAltitude < 0)
                    {
                        throttle = 1;
                    }
                    else
                    {
                        var Peri = Convert.ToSingle(secondStage.Orbit.PeriapsisAltitude);

                        throttle = Convert.ToSingle(((1 * Startup.GetInstance().GetFlightInfo().getPeriapsisTarget()) / Peri) / 10);
                    }

                    secondStage.AutoPilot.TargetPitchAndHeading(pit, head);
                    secondStage.Control.Throttle = throttle + 0.1f;
                }

                secondStage.Control.Throttle = throttle;

                if (Startup.GetInstance().GetFlightInfo().getPeriapsisTarget() == Startup.GetInstance().GetFlightInfo().getApoapsisTarget() || secondStage.Thrust == 0)
                {
                    if (secondStage.Orbit.PeriapsisAltitude >= Startup.GetInstance().GetFlightInfo().getPeriapsisTarget() - 2000)
                    {
                        secondStage.Control.Throttle = 0;
                        Console.WriteLine("STAGE 2 : Second Engine CutOff");
                        break;
                    }
                }
                else
                {
                    if (secondStage.Orbit.ApoapsisAltitude >= (Startup.GetInstance().GetFlightInfo().getApoapsisTarget() - 2000) || secondStage.Thrust == 0 /* && secondStage.Orbit.PeriapsisAltitude > Startup.GetInstance().GetFlightInfo().getPeriapsisTarget() - 70000*/)
                    {
                        secondStage.Control.Throttle = 0;
                        Console.WriteLine("STAGE 2 : Second Engine CutOff");
                        break;
                    }
                }

                secondStage.AutoPilot.TargetPitchAndHeading(pit, Startup.GetInstance().GetFlightInfo().getHead());
            }

            secondStage.Control.Forward = 0;
        }
Esempio n. 29
0
        public void boostbackBurn(Vessel firstStage, Connection connectionFirstStage)
        {
            Console.WriteLine("Falcon 9 first stage accisition signal.");
            firstStage.AutoPilot.Engage();
            firstStage.AutoPilot.TargetRoll = 0;

            firstStage.Control.Pitch = 1;
            firstStage.Control.Up    = 1;

            Thread.Sleep(40);

            firstStage.Control.RCS = true;
            firstStage.AutoPilot.Engage();

            firstStage.AutoPilot.TargetPitchAndHeading(90, Startup.GetInstance().GetFlightInfo().getHeadDesorbitation());
            try
            {
                for (int i = 0; i < 6; i++)
                {
                    firstStage.Parts.WithTag("Main")[i].Engine.Active = false;
                }
            }
            catch
            {
                firstStage.Control.ToggleActionGroup(1);
            }


            firstStage.Parts.WithTag("MainCentral")[0].Engine.Active = true;
            firstStage.Parts.WithTag("MainSecond")[0].Engine.Active  = true;
            firstStage.Parts.WithTag("MainSecond")[1].Engine.Active  = true;

            //while (firstStage.AutoPilot.RollError >= 10) { firstStage.AutoPilot.TargetRoll = 0; }
            //firstStage.AutoPilot.AttenuationAngle = 0;
            firstStage.Control.Pitch = 1;
            firstStage.Control.Up    = 1;
            Thread.Sleep(8000); //F9 = 20000 | FH = 5000

            firstStage.Control.Up = 0;
            //while (firstStage.AutoPilot.HeadingError > 45) { }
            Thread.Sleep(1000);
            firstStage.AutoPilot.TargetRoll = 180;
            firstStage.Control.Up           = 0;
            firstStage.Control.Pitch        = 0;
            firstStage.Control.Forward      = 1;
            Thread.Sleep(400);
            firstStage.Control.Forward  = 0;
            firstStage.Control.Throttle = 0.1f;
            bool   impact  = connection.Trajectories().HasImpact();
            double latLand = firstStage.connection.Trajectories().ImpactPos().Item1;

            firstStage.AutoPilot.TargetPitchAndHeading(5, Startup.GetInstance().GetFlightInfo().getHeadDesorbitation() - (Convert.ToSingle(latLand) - Convert.ToSingle(landingZonePosition().Item1)));
            Thread.Sleep(2000);
            firstStage.Control.Throttle = 1;
            //while (firstStage.AutoPilot.PitchError > 30) { /*firstStage.Control.Pitch = 1;*/ }

            /*firstStage.Control.Pitch = 0;
             * firstStage.Control.Up = 0;
             * while (firstStage.AutoPilot.HeadingError > 17) { }*/
            firstStage.AutoPilot.Disengage();
            firstStage.AutoPilot.Engage();

            firstStage.AutoPilot.TargetPitchAndHeading(5, Startup.GetInstance().GetFlightInfo().getHeadDesorbitation() - (Convert.ToSingle(latLand) - Convert.ToSingle(landingZonePosition().Item1)));

            Console.WriteLine("FIRST STAGE : Boostback burn started. " + rocketBody);
            firstStage.Control.Throttle = 1;
            firstStage.Control.RCS      = false;

            while (connection.Trajectories().ImpactPos().Item2 > landingZonePosition().Item2)
            {
                firstStage.Control.Throttle = 1;
                firstStage.AutoPilot.TargetPitchAndHeading(5, Startup.GetInstance().GetFlightInfo().getHeadDesorbitation() - (Convert.ToSingle(latLand) - Convert.ToSingle(landingZonePosition().Item1)));
            }

            firstStage.Control.Throttle = 0;
            Console.WriteLine("FIRST STAGE : Boostback burn shutdown." + rocketBody);
            firstStage.Control.RCS    = false;
            firstStage.Control.Brakes = true;
        }
Esempio n. 30
0
        public void F9Startup(Connection connectionLink, Connection connectionFirstStageLink)
        {
            connection           = connectionLink;
            connectionFirstStage = connectionFirstStageLink;
            firstStage.AutoPilot.Engage();

            firstStage.Control.Throttle = 0;
            firstStage.AutoPilot.TargetPitchAndHeading(90, Startup.GetInstance().GetFlightInfo().getHead());

            /*for (int i = 1; i < 10; i++)
             * {
             *  firstStage.Parts.Engines[i].Active = true;
             * }*/

            bool T = false;

            /*while (T == false)
             * {
             *  double hour = VHour - DateTime.Now.Hour;
             *  double minute = VMinute - DateTime.Now.Minute;
             *  double second = VSecond - DateTime.Now.Second;
             *
             *  second = second + VSecond - 1;
             *
             *  if (hour <= 0 && minute <= 0 && second <= 7) { T = true; }
             * }*/

            Thread Corrections = new Thread(ControlCorrection);
            //Corrections.Start();

            Thread Rec = new Thread(FlightRecord);

            //Rec.Start();

            firstStage.Control.Throttle = 1;
            firstStage.Parts.WithTag("MainCentral")[0].Engine.Active = true;
            firstStage.Parts.WithTag("MainSecond")[0].Engine.Active  = true;
            firstStage.Parts.WithTag("MainSecond")[1].Engine.Active  = true;
            for (int i = 0; i < 6; i++)
            {
                firstStage.Parts.WithTag("Main")[i].Engine.Active = true;
            }


            Console.WriteLine("FIRST STAGE : Main engine startup.");
            //var during = 0;
            float thrust;

            thrust = firstStage.Parts.Engines[1].Thrust;
            firstStage.Control.Throttle = 0.1f;
            Thread.Sleep(3000);
            firstStage.Control.Throttle = 1;
            Thread.Sleep(3000);
            thrust = firstStage.Thrust;
            if ((thrust * 100) / firstStage.AvailableThrust < 50)
            {
                Console.WriteLine("FIRST STAGE : Engine Abort.");
                Console.WriteLine("Trust : " + thrust);
                Console.WriteLine("Available Thrust : " + firstStage.AvailableThrust);
                firstStage.Control.Throttle        = 0;
                firstStage.Parts.Engines[2].Active = false;
                firstStage.Parts.WithTag("MainCentral")[0].Engine.Active = false;
                firstStage.Parts.WithTag("MainSecond")[0].Engine.Active  = false;
                firstStage.Parts.WithTag("MainSecond")[1].Engine.Active  = false;
                for (int i = 0; i < 6; i++)
                {
                    firstStage.Parts.WithTag("Main")[i].Engine.Active = false;
                }
                firstStage.Control.Lights = false;
            }
            else if (Startup.GetInstance().GetFlightInfo().getStaticFire() == true)
            {
                Thread.Sleep(7000);
                Console.WriteLine("FIRST STAGE : Static Fire ended.");
                Console.WriteLine("Trust : " + thrust);
                Console.WriteLine("Available Thrust : " + firstStage.AvailableThrust);
                firstStage.Control.Throttle        = 0;
                firstStage.Parts.Engines[2].Active = false;
                firstStage.Parts.WithTag("MainCentral")[0].Engine.Active = false;
                firstStage.Parts.WithTag("MainSecond")[0].Engine.Active  = false;
                firstStage.Parts.WithTag("MainSecond")[1].Engine.Active  = false;
                for (int i = 0; i < 6; i++)
                {
                    firstStage.Parts.WithTag("Main")[i].Engine.Active = false;
                }
            }
            else
            {
                firstStage.Control.ToggleActionGroup(6);
                foreach (LaunchClamp clamp in firstStage.Parts.LaunchClamps)
                {
                    clamp.Release();
                }

                Console.WriteLine("FIRST STAGE : Liftoff.");
            }
        }