Exemple #1
0
        public override bool Execute(FlightComputer f, FlightCtrlState fcs)
        {
            if (mAbort)
            {
                Mode   = FlightMode.Off;
                mAbort = false;
            }

            switch (Mode)
            {
            case FlightMode.Off:
                break;

            case FlightMode.KillRot:
                FlightCore.HoldOrientation(fcs, f, Orientation * Quaternion.AngleAxis(90, Vector3.left));
                break;

            case FlightMode.AttitudeHold:
                FlightCore.HoldAttitude(fcs, f, Frame, Attitude, Orientation);
                break;

            case FlightMode.AltitudeHold:
                break;
            }

            return(false);
        }
Exemple #2
0
        public override bool Execute(FlightComputer f, FlightCtrlState fcs)
        {
            if (RemainingDelta > 0)
            {
                var forward     = Node.GetBurnVector(f.Vessel.orbit).normalized;
                var up          = (f.SignalProcessor.Body.position - f.SignalProcessor.Position).normalized;
                var orientation = Quaternion.LookRotation(forward, up);
                FlightCore.HoldOrientation(fcs, f, orientation);

                double thrustToMass = (FlightCore.GetTotalThrust(f.Vessel) / f.Vessel.GetTotalMass());
                if (thrustToMass == 0.0)
                {
                    EngineActivated = false;
                    return(false);
                }

                EngineActivated  = true;
                fcs.mainThrottle = 1.0f;
                RemainingTime    = RemainingDelta / thrustToMass;
                RemainingDelta  -= thrustToMass * TimeWarp.deltaTime;
                return(false);
            }
            f.Enqueue(AttitudeCommand.Off(), true, true, true);
            return(true);
        }