Example #1
0
        protected ManeuverNode NextManeuverNodeForVessel(Vessel vessel)
        {
            if (vessel.flightPlanNode != null && vessel.flightPlanNode.HasNode("MANEUVER"))
            {
                ManeuverNode node = new ManeuverNode();
                node.Load(vessel.flightPlanNode.GetNode("MANEUVER"));
                return(node);
            }

            return(null);
        }
Example #2
0
        public static bool CopyNodeFromFlightPlanNode(Vessel fromVessel, int index, Vessel toVessel)
        {
            if (index < 0 ||
                index >= fromVessel.flightPlanNode.CountNodes ||
                toVessel.patchedConicSolver == null)
            {
                return(false);
            }
            var node = new ManeuverNode();

            node.Load(fromVessel.flightPlanNode.nodes[index]);
            var nodeCopy = toVessel.patchedConicSolver.AddManeuverNode(node.UT);

            nodeCopy.DeltaV = node.DeltaV;
            toVessel.patchedConicSolver.UpdateFlightPlan();
            return(true);
        }
 private bool update_maneuver_node()
 {
     Node        = null;
     NodeCB      = null;
     TargetOrbit = null;
     if (Solver != null)
     {
         if (Solver.maneuverNodes.Count <= 0)
         {
             return(false);
         }
         Node = Solver.maneuverNodes[0];
     }
     else
     {
         if (VSL.vessel.flightPlanNode.nodes.Count <= 0)
         {
             return(false);
         }
         var node = VSL.vessel.flightPlanNode.nodes[0];
         Node = new ManeuverNode();
         Node.Load(node);
         Node.patch     = new Orbit(VSL.orbit);
         Node.nextPatch =
             TrajectoryCalculator.NewOrbit(VSL.orbit, Utils.Node2OrbitalDeltaV(Node), Node.UT);
         VSL.vessel.flightPlanNode.RemoveNode(node);
     }
     NodeCB      = Node.patch.referenceBody;
     TargetOrbit = Node.nextPatch;
     update_node_deltaV();
     if (VSL.Engines.MaxDeltaV < Node.DeltaV.magnitude)
     {
         Status(Colors.Warning,
                "WARNING: there may be not enough propellant for the maneuver");
     }
     return(true);
 }
Example #4
0
            public bool UpdatePayloadNode()
            {
                maneuverValid = false;
                nodeDeltaVm   = 0;
                node          = null;
                var          now         = Planetarium.GetUniversalTime();
                ManeuverNode payloadNode = null;

                if (payload.patchedConicSolver != null &&
                    payload.patchedConicSolver.maneuverNodes.Count > 0)
                {
                    var nodes = payload.patchedConicSolver.maneuverNodes;
                    for (int i = 0, len = nodes.Count; i < len; i++)
                    {
                        if (nodes[i].UT <= now)
                        {
                            continue;
                        }
                        payloadNode = nodes[0];
                        break;
                    }
                    if (payloadNode != null)
                    {
                        node = new ManeuverNode
                        {
                            UT        = payloadNode.UT,
                            DeltaV    = payloadNode.DeltaV,
                            patch     = payload.orbit,
                            nextPatch = new Orbit(payloadNode.nextPatch)
                        };
                    }
                }
                else if (payload.flightPlanNode.CountNodes > 0)
                {
                    var nodes = payload.flightPlanNode.nodes;
                    for (int i = 0, len = nodes.Count; i < len; i++)
                    {
                        payloadNode = new ManeuverNode();
                        payloadNode.Load(nodes[0]);
                        if (payloadNode.UT <= now)
                        {
                            continue;
                        }
                        node = payloadNode;
                        break;
                    }
                    if (payloadNode != null)
                    {
                        node = payloadNode;
                        var hostNode = accelerator.vessel.patchedConicSolver.AddManeuverNode(node.UT);
                        hostNode.DeltaV = node.DeltaV;
                        accelerator.vessel.patchedConicSolver.UpdateFlightPlan();
                        node.patch     = payload.orbit;
                        node.nextPatch = hostNode.nextPatch;
                        hostNode.RemoveSelf();
                    }
                }
                if (node == null)
                {
                    accelerator.UI.AddMessage("Payload doesn't have a maneuver node.");
                    return(false);
                }
                nodeDeltaVm = node.DeltaV.magnitude;
                return(true);
            }