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; } } }
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; } }
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"); }
//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"); }
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(); } }