예제 #1
0
 private void logreport()
 {
     LoggerRmm.Error("Rmm at stage " + _arrivalStage + " and can not find vessel " + tempID + ". the vessels i can find are:");
     foreach (Vessel ve in FlightGlobals.Vessels)
     {
         LoggerRmm.Error(ve.vesselName);
     }
     LoggerRmm.Error("--test run");
     foreach (Vessel ve in FlightGlobals.Vessels)
     {
         if (ve.vesselName == tempID)
         {
             LoggerRmm.Error("test 1");
             transactionVessel = ve;
             LoggerRmm.Error("test 2");
             transactionVessel.vesselName = _mission.VesselName;
             LoggerRmm.Error("test 3");
             placeVesselForRendezvous(transactionVessel, _targetVessel);
             LoggerRmm.Error("test 4");
             _nextLogicTime = Planetarium.GetUniversalTime();
             _arrivalStage  = 4;
             return;
         }
     }
 }
        public void HandleDepartureCompletion()
        {
            if (!CompleteDeparture)
            {
                return;
            }
            if (!HighLogic.LoadedSceneIsFlight)
            {
                return;
            }
            if (_nextLogicTime == 0 || _nextLogicTime > Planetarium.GetUniversalTime())
            {
                return;
            }

            if (_departureStage == 0)
            {
                if (_vessel != null && _part != null && _departurePart != null)
                {
                    _departureStage   = 1;
                    CompleteDeparture = true;
                    _nextLogicTime    = Planetarium.GetUniversalTime();
                }
                else
                {
                    abortDeparture();
                }
            }

            if (_vessel.packed || !_vessel.loaded)
            {
                _nextLogicTime = Planetarium.GetUniversalTime();
                return;
            }

            if (CompleteDeparture)
            {
                switch (_departureStage)
                {
                case 1:
                    LoggerRmm.Debug("st1");
                    departureStage1();
                    break;

                case 2:
                    LoggerRmm.Debug("st2");
                    departureStage2();
                    break;

                case 3:
                    LoggerRmm.Debug("st3");
                    departureStage3();
                    break;
                }
            }
        }
예제 #3
0
        private void dockStage2()
        {
            RmmUtil.ToMapView();
            LoggerRmm.Debug("st2.1");
            ProtoVessel ProtoFlightVessel = loadVessel(_mission.FolderPath);

            LoggerRmm.Debug("st2.2");
            if (ProtoFlightVessel == null)
            {
                abortArrival(); return;
            }
            LoggerRmm.Debug("st2.3");
            if (loadVesselForRendezvous(ProtoFlightVessel, _targetVessel))
            {
                LoggerRmm.Debug("st2.4");
                _nextLogicTime = Planetarium.GetUniversalTime();
                _arrivalStage  = 3;
            }
        }
예제 #4
0
        private void SaveMission()
        {
            XmlDocument doc  = new XmlDocument();
            XmlElement  root = doc.CreateElement("Mission");

            doc.AppendChild(root);
            XmlNode missionNode = doc.FirstChild;

            if (Info != null)
            {
                XmlNode node = doc.ImportNode(SerializeObjectToXmlNode(Info), true);
                missionNode.AppendChild(node);
            }

            if (Launch != null)
            {
                XmlNode node = doc.ImportNode(SerializeObjectToXmlNode(Launch), true);
                missionNode.AppendChild(node);
            }

            if (Arrival != null)
            {
                XmlNode node = doc.ImportNode(SerializeObjectToXmlNode(Arrival), true);
                missionNode.AppendChild(node);
            }
            if (Departure != null)
            {
                XmlNode node = doc.ImportNode(SerializeObjectToXmlNode(Departure), true);
                missionNode.AppendChild(node);
            }
            foreach (MissionLanding landing in Landings)
            {
                XmlNode node = doc.ImportNode(SerializeObjectToXmlNode(landing), true);
                missionNode.AppendChild(node);
            }

            doc.Save(RmmUtil.GamePath + Path.DirectorySeparatorChar + FolderPath + Path.DirectorySeparatorChar + MISSION_FILE);

            LoggerRmm.Debug("here 45");
        }
예제 #5
0
        //Thanks to sarbian's Kerbal Crew Manifest for showing all this crew handling stuff
        private void handleLoadCrew(Vessel ves, int crewCount, int minCrew, string crewSelection)
        {
            if (ves.GetCrewCapacity() < crewCount)
            {
                crewCount = ves.GetCrewCapacity();
            }
            LoggerRmm.Debug("st4.32");

            string[] prefCrewNames = GetPreferredCrewNames(crewSelection);
            LoggerRmm.Debug("st4.33");
            foreach (Part p in ves.parts)
            {
                if (p.CrewCapacity > p.protoModuleCrew.Count)
                {
                    for (int i = 0; i < p.CrewCapacity && crewCount > 0; i++)
                    {
                        bool added = false;

                        //tourist
                        if (minCrew <= 0)
                        {
                            foreach (String name in prefCrewNames)
                            {
                                if (!added)
                                {
                                    foreach (ProtoCrewMember cr in HighLogic.CurrentGame.CrewRoster.Tourist)
                                    {
                                        if (name == cr.name && cr.rosterStatus == ProtoCrewMember.RosterStatus.Available)
                                        {
                                            if (AddCrew(p, cr))
                                            {
                                                crewCount = crewCount - 1;
                                                added     = true;
                                            }
                                        }
                                    }
                                }
                            }
                        }

                        //preferred crew
                        foreach (String name in prefCrewNames)
                        {
                            if (!added)
                            {
                                foreach (ProtoCrewMember cr in HighLogic.CurrentGame.CrewRoster.Crew)
                                {
                                    if (name == cr.name && cr.rosterStatus == ProtoCrewMember.RosterStatus.Available)
                                    {
                                        if (AddCrew(p, cr))
                                        {
                                            crewCount = crewCount - 1;
                                            minCrew   = minCrew - 1;
                                            added     = true;
                                        }
                                    }
                                }
                            }
                        }
                        //next crew or new crew
                        //print("one crew start");
                        //print("crew" + kerbal.name);
                        if (!added)
                        {
                            ProtoCrewMember crew = null;
                            crew = HighLogic.CurrentGame.CrewRoster.GetNextAvailableKerbal();
                            if (crew != null)
                            {
                                if (AddCrew(p, crew))
                                {
                                    crewCount = crewCount - 1;
                                    minCrew   = minCrew - 1;
                                    added     = true;
                                }
                            }
                        }
                    }
                }
            }
            ves.SpawnCrew();
            LoggerRmm.Debug("st4.35");
        }
예제 #6
0
        private void dockStage4()
        {
            RmmUtil.ToMapView();
            Part placePort = new Part();

            // int portNumber = 0;
            foreach (Part p in transactionVessel.parts)
            {
                if (p.flightID == missionFlightIDDockPart)
                {
                    placePort = p;
                }
                foreach (PartModule pm in p.Modules)
                {
                    //if (pm.GetType() == typeof(ModuleDockingNode))
                    //{
                    //    RMMModule ComOffMod = p.Modules.OfType<RMMModule>().FirstOrDefault();
                    //    if (ComOffMod.trackingPrimary == true)
                    //    {
                    //        placePort = p;
                    //        if (missionOffering.ReturnEnabled)
                    //        {
                    //            ComOffMod.commercialvehiclemode = true;
                    //            ComOffMod.commercialvehicleFolderName = missionOffering.FolderPath;
                    //            ComOffMod.commercialvehiclePartCount = (float)RmmUtil.CountVesselParts(transactionVessel);
                    //            ComOffMod.trackingPrimary = false;
                    //        }
                    //    }
                    //    portNumber = portNumber + 1;
                    //
                    //    ComOffMod.trackingActive = false;
                    //    ComOffMod.returnMission = false;
                    //    ComOffMod.trackMissionId = "";
                    //    ComOffMod.PortCode = "";
                    //}

                    // empty all science
                    if (pm.GetType() == typeof(ModuleScienceContainer))
                    {
                        ModuleScienceContainer moduleScienceContainer = (ModuleScienceContainer)pm;
                        var scienceDatas = moduleScienceContainer.GetData();
                        for (int i = 0; i < scienceDatas.Count(); i++)
                        {
                            moduleScienceContainer.RemoveData(scienceDatas[i]);
                        }
                    }
                }
            }
            transactionVessel.targetObject = null;
            handleLoadCrew(transactionVessel, _mission.CrewCount, _mission.MinimumCrew, _mission.CrewSelection);
            RmmContract.HandleContracts(transactionVessel, true, false);
            LoggerRmm.Debug("st4.5" + RmmUtil.IsDocked(_targetVessel, _targetPart) + checkDockingPortCompatibility(placePort, _targetPart));
            if (!RmmUtil.IsDocked(_targetVessel, _targetPart) && checkDockingPortCompatibility(placePort, _targetPart))
            {
                LoggerRmm.Debug("st4.6");
                placeVesselForDock(transactionVessel, placePort, _targetVessel, _targetPart, RmmUtil.GetDockingDistance(placePort));
                LoggerRmm.Debug("st4.7");
                _nextLogicTime = Planetarium.GetUniversalTime();
                _arrivalStage  = 5;
            }
            else
            {
                ScreenMessages.PostScreenMessage(_mission.VesselName + " rendezvoused", 4, ScreenMessageStyle.UPPER_CENTER);
                finishArrival();
            }
        }