private void departureStage2() { if (RmmUtil.IsDocked(_vessel, _departurePart)) { abortDeparture(); } else { _departureVessel = _departurePart.vessel; } if (_departureVessel.isActiveVessel) { foreach (Vessel ves in FlightGlobals.Vessels) { if (!ves.packed && ves.loaded && ves.id != _departureVessel.id) { FlightGlobals.SetActiveVessel(ves); _departureStage = 3; _nextLogicTime = Planetarium.GetUniversalTime() + 1; return; } } } else { _departureStage = 3; _nextLogicTime = Planetarium.GetUniversalTime() + 1; } }
public void StartArrival(RoutineArrivalMission mission, Vessel targetVessel) { _mission = mission; _targetVessel = targetVessel; _targetPart = RmmUtil.GetVesselPart(targetVessel, mission.flightIdArrivalDockPart); CompleteArrival = true; _nextLogicTime = Planetarium.GetUniversalTime(); _arrivalStage = 0; }
private void departureStage1() { if (RmmUtil.IsDocked(_vessel, _part)) { ModuleDockingNode DockNode = _part.Modules.OfType <ModuleDockingNode>().FirstOrDefault(); DockNode.Undock(); } _departureStage = 2; _nextLogicTime = Planetarium.GetUniversalTime() + 2; }
public void StartDeparture(RoutineDepartureMission mission, Vessel vessel) { _mission = mission; _vessel = vessel; _part = RmmUtil.GetVesselPart(vessel, mission.flightIdDepartureDockPart); _departurePart = RmmUtil.GetDockedPart(FlightGlobals.ActiveVessel, _part); CompleteDeparture = true; _nextLogicTime = Planetarium.GetUniversalTime(); _departureStage = 0; }
private void dockStage5() { RmmUtil.ToMapView(); if (RmmUtil.IsDocked(_targetVessel, _targetPart) || (_nextLogicTime < (Planetarium.GetUniversalTime() - 8))) { ScreenMessages.PostScreenMessage(_mission.VesselName + " docked", 4, ScreenMessageStyle.UPPER_CENTER); finishArrival(); } }
public override void WindowUI() { GUILayout.BeginHorizontal(); GUILayout.Label("Mission Name:", RmmStyle.Instance.LabelStyle, GUILayout.Width(100)); trackStrName = GUILayout.TextField(trackStrName, 20, RmmStyle.Instance.TextFieldStyle, GUILayout.Width(200)); GUILayout.EndHorizontal(); if (_type != 20) { GUILayout.BeginHorizontal(); GUILayout.Label("Vessel:", RmmStyle.Instance.LabelStyle, GUILayout.Width(100)); GUILayout.Label(VesselName, RmmStyle.Instance.LabelStyle, GUILayout.Width(200)); GUILayout.EndHorizontal(); } if (_type != 20) { GUILayout.BeginHorizontal(); GUILayout.Label("Price:", RmmStyle.Instance.LabelStyle, GUILayout.Width(100)); GUILayout.Label(Price.ToString(), RmmStyle.Instance.LabelStyle, GUILayout.Width(200)); GUILayout.EndHorizontal(); } GUILayout.BeginHorizontal(); GUILayout.Label("Minimum Crew:", RmmStyle.Instance.LabelStyle, GUILayout.Width(150)); GUILayout.Label(MinimumCrew.ToString(), RmmStyle.Instance.LabelStyle, GUILayout.Width(200)); GUILayout.EndHorizontal(); if (MinimumResources != null && MinimumResources.Count > 0) { GUILayout.Label("Minimum Resources:", RmmStyle.Instance.LabelStyle, GUILayout.Width(150)); GUILayout.BeginHorizontal(); GUILayout.Label("Resource", RmmStyle.Instance.LabelStyle, GUILayout.Width(150)); GUILayout.Label("Amount", RmmStyle.Instance.LabelStyle, GUILayout.Width(150)); GUILayout.EndHorizontal(); foreach (Resource resource in MinimumResources) { GUILayout.BeginHorizontal(); GUILayout.Label(RmmUtil.DisplayName(resource.Name), RmmStyle.Instance.LabelStyle, GUILayout.Width(150)); GUILayout.Label(Math.Round(resource.Amount, 2).ToString(), GUILayout.Width(150)); GUILayout.EndHorizontal(); } } GUILayout.BeginHorizontal(); if (GUILayout.Button("Start Tracking", RmmStyle.Instance.ButtonStyle, GUILayout.Width(200), GUILayout.Height(22))) { _trackingControl.StartTracking(trackStrName); } GUILayout.EndHorizontal(); }
private void DepartureCompletion() { RmmUtil.ToMapView(); RmmContract.HandleContracts(_departureVessel, false, true); if (HighLogic.CurrentGame.Mode == Game.Modes.CAREER) { Funding.Instance.AddFunds(_mission.Price + cargoFee(), TransactionReasons.VesselRecovery); } handleUnloadCrew(_departureVessel, true); _departureVessel.Unload(); _departureVessel.Die(); ScreenMessages.PostScreenMessage(_mission.VesselName + " returned to " + RmmUtil.HomeBodyName(), 4, ScreenMessageStyle.UPPER_CENTER); finishDeparture(); }
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 double cargoFee() { double fee = 0.0; if (_mission.CargoMass == 0) { return(0); } double cargoMass = _mission.CargoMass; List <string> cargoArray = RmmUtil.GetCargoArray(_departureVessel, _mission.Proppelants); orderCargoArray(ref cargoArray); foreach (String s in cargoArray) { foreach (Part p in _departureVessel.parts) { foreach (PartResource r in p.Resources) { if (r.info.name == s) { if (r.amount != 0) { if (RmmUtil.Mass(r.info.name, r.amount) <= cargoMass) { fee = fee + RmmUtil.Cost(r.info.name, r.amount); cargoMass = cargoMass - RmmUtil.Mass(r.info.name, r.amount); } else { fee = fee + ((cargoMass / RmmUtil.Mass(r.info.name, r.amount)) * RmmUtil.Cost(r.info.name, r.amount)); return(fee); } } } } } } return(fee); }
public static List <MissionResource> GetMissionResourceList(List <Part> parts) { List <MissionResource> missionResources = new List <MissionResource>(); List <string> resources = RmmUtil.DetermineResourceArray(parts); foreach (String resource in resources) { var amount = RmmUtil.ReadResource(parts, resource); if (amount != 0) { MissionResource missionResource = new MissionResource { Name = resource, Amount = amount, }; missionResources.Add(missionResource); } } return(missionResources); }
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(); } }
public override void WindowUI() { if (RoutineDepartureMission != null) { if (RoutineDepartureMission.Kind == MissionKind.Ordered) { GUILayout.BeginHorizontal(); GUILayout.Label("Order:", RmmStyle.Instance.LabelStyle, GUILayout.Width(100)); GUILayout.Label(RoutineDepartureMission.OrderId, RmmStyle.Instance.LabelStyle, GUILayout.Width(200)); GUILayout.EndHorizontal(); } GUILayout.BeginHorizontal(); GUILayout.Label("Mission:", RmmStyle.Instance.LabelStyle, GUILayout.Width(100)); GUILayout.Label(RoutineDepartureMission.Name, RmmStyle.Instance.LabelStyle, GUILayout.Width(200)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("System:", RmmStyle.Instance.LabelStyle, GUILayout.Width(100)); GUILayout.Label(RoutineDepartureMission.VesselName, RmmStyle.Instance.LabelStyle, GUILayout.Width(200)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("Return Fee:", RmmStyle.Instance.LabelStyle, GUILayout.Width(100)); GUILayout.Label(Math.Round(RoutineDepartureMission.Price).ToString(), RmmStyle.Instance.LabelStyle, GUILayout.Width(250)); GUILayout.EndHorizontal(); if (RoutineDepartureMission.CargoMass > 0) { GUILayout.BeginHorizontal(); GUILayout.Label("Cargo Fee:", RmmStyle.Instance.LabelStyle, GUILayout.Width(100)); GUILayout.Label(Math.Round(CurrentCargoFunds, 2).ToString(), RmmStyle.Instance.LabelStyle, GUILayout.Width(100)); GUILayout.EndHorizontal(); } GUILayout.BeginHorizontal(); GUILayout.Label("Duration:", RmmStyle.Instance.LabelStyle, GUILayout.Width(100)); GUILayout.Label(RmmUtil.TimeString(RoutineDepartureMission.Duration), RmmStyle.Instance.LabelStyle, GUILayout.Width(200)); GUILayout.EndHorizontal(); if (RoutineDepartureMission.Kind == MissionKind.Ordered) { GUILayout.BeginHorizontal(); GUILayout.Label("ETD:", RmmStyle.Instance.LabelStyle, GUILayout.Width(100)); GUILayout.Label(RmmUtil.TimeEtaString(RoutineDepartureMission.DepartureTime - Planetarium.GetUniversalTime()), RmmStyle.Instance.LabelStyle, GUILayout.Width(200)); GUILayout.EndHorizontal(); } if (RoutineDepartureMission.MinimumCrew > 0) { if (RoutineDepartureMission.MinimumCrew < RoutineDepartureMission.CrewCapacity) { GUILayout.BeginHorizontal(); GUILayout.Label("Minimal crew required:", RmmStyle.Instance.LabelStyle, GUILayout.Width(150)); GUILayout.Label(RoutineDepartureMission.MinimumCrew.ToString(), RmmStyle.Instance.LabelStyle, GUILayout.Width(200)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("Crew capacity:", RmmStyle.Instance.LabelStyle, GUILayout.Width(150)); GUILayout.Label(RoutineDepartureMission.CrewCapacity.ToString(), RmmStyle.Instance.LabelStyle, GUILayout.Width(200)); GUILayout.EndHorizontal(); } else { GUILayout.BeginHorizontal(); GUILayout.Label("Crew:", RmmStyle.Instance.LabelStyle, GUILayout.Width(100)); GUILayout.Label(RoutineDepartureMission.MinimumCrew.ToString(), RmmStyle.Instance.LabelStyle, GUILayout.Width(200)); GUILayout.EndHorizontal(); } } if (RoutineDepartureMission.MinimumCrew < RoutineDepartureMission.CrewCapacity) { GUILayout.BeginHorizontal(); GUILayout.Label("Current crew:", RmmStyle.Instance.LabelStyle, GUILayout.Width(100)); GUILayout.Label(CrewCount.ToString(), RmmStyle.Instance.LabelStyle, GUILayout.Width(50)); GUILayout.EndHorizontal(); } if (Resources != null && Resources.Count > 0) { GUILayout.Label("Resources:", RmmStyle.Instance.LabelStyle, GUILayout.Width(300)); GUILayout.BeginHorizontal(); GUILayout.Label("Resource", RmmStyle.Instance.LabelStyle, GUILayout.Width(150)); GUILayout.Label("Required", RmmStyle.Instance.LabelStyle, GUILayout.Width(100)); GUILayout.Label("Current", RmmStyle.Instance.LabelStyle, GUILayout.Width(100)); GUILayout.EndHorizontal(); foreach (ResourceItem resource in Resources) { GUILayout.BeginHorizontal(); GUILayout.Label(resource.Name, RmmStyle.Instance.LabelStyle, GUILayout.Width(150)); GUILayout.Label(Math.Round(resource.RequiredAmount, 2).ToString(), RmmStyle.Instance.LabelStyle, GUILayout.Width(100)); GUILayout.Label(Math.Round(resource.CurrentAmount, 2).ToString(), RmmStyle.Instance.LabelStyle, GUILayout.Width(100)); GUILayout.EndHorizontal(); } } if (RoutineDepartureMission.CargoMass > 0) { GUILayout.BeginHorizontal(); GUILayout.Label("Cargo mass:", RmmStyle.Instance.LabelStyle, GUILayout.Width(150)); GUILayout.Label(Math.Round(RoutineDepartureMission.CargoMass, 2).ToString(), RmmStyle.Instance.LabelStyle, GUILayout.Width(100)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("Current cargo mass:", RmmStyle.Instance.LabelStyle, GUILayout.Width(150)); GUILayout.Label(Math.Round(CurrentCargoMass, 2).ToString(), RmmStyle.Instance.LabelStyle, GUILayout.Width(100)); GUILayout.EndHorizontal(); } GUILayout.BeginHorizontal(); GUILayout.Label("Docking Port:", RmmStyle.Instance.LabelStyle, GUILayout.Width(100)); GUILayout.Label(strDepartureDockingPortName, RmmStyle.Instance.LabelStyle, GUILayout.Width(50)); GUILayout.EndHorizontal(); if (messages != null && messages.Count > 0) { GUILayout.Label("", RmmStyle.Instance.LabelStyle, GUILayout.Width(300)); foreach (String message in messages) { GUILayout.Label(message, RmmStyle.Instance.LabelStyle, GUILayout.Width(300)); } } if (RoutineDepartureMission.Kind == MissionKind.Potential) { if (GUILayout.Button("Order Return", RmmStyle.Instance.ButtonStyle, GUILayout.Width(300), GUILayout.Height(22))) { CheckList checkList = _routineControl.OrderDepartureMissionAllowed(); if (checkList.CheckSucces) { _routineControl.OrderDepartureMission(); base.Close(); } else { messages = checkList.Messages; } } } if (RoutineDepartureMission.Kind == MissionKind.Ordered) { if (GUILayout.Button("Cancel Return", RmmStyle.Instance.ButtonStyle, GUILayout.Width(300), GUILayout.Height(22))) { _routineControl.CancelDepartureMission(); base.Close(); } } } }
public override void WindowUI() { if (RoutineArrivalMission != null) { if (RoutineArrivalMission.Kind == MissionKind.Ordered) { GUILayout.BeginHorizontal(); GUILayout.Label("Order:", RmmStyle.Instance.LabelStyle, GUILayout.Width(100)); GUILayout.Label(RoutineArrivalMission.OrderId, RmmStyle.Instance.LabelStyle, GUILayout.Width(200)); GUILayout.EndHorizontal(); } GUILayout.BeginHorizontal(); GUILayout.Label("Mission:", RmmStyle.Instance.LabelStyle, GUILayout.Width(100)); GUILayout.Label(RoutineArrivalMission.Name, RmmStyle.Instance.LabelStyle, GUILayout.Width(200)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("System:", RmmStyle.Instance.LabelStyle, GUILayout.Width(100)); GUILayout.Label(RoutineArrivalMission.VesselName, RmmStyle.Instance.LabelStyle, GUILayout.Width(200)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("Price:", RmmStyle.Instance.LabelStyle, GUILayout.Width(100)); GUILayout.Label(Math.Round(RoutineArrivalMission.Price).ToString(), RmmStyle.Instance.LabelStyle, GUILayout.Width(250)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("Duration:", RmmStyle.Instance.LabelStyle, GUILayout.Width(100)); GUILayout.Label(RmmUtil.TimeString(RoutineArrivalMission.Duration), RmmStyle.Instance.LabelStyle, GUILayout.Width(200)); GUILayout.EndHorizontal(); if (RoutineArrivalMission.Kind == MissionKind.Ordered) { GUILayout.BeginHorizontal(); GUILayout.Label("ETA:", RmmStyle.Instance.LabelStyle, GUILayout.Width(100)); GUILayout.Label(RmmUtil.TimeEtaString(RoutineArrivalMission.ArrivalTime - Planetarium.GetUniversalTime()), RmmStyle.Instance.LabelStyle, GUILayout.Width(200)); GUILayout.EndHorizontal(); } if (RoutineArrivalMission.MinimumCrew > 0) { if (RoutineArrivalMission.MinimumCrew < RoutineArrivalMission.CrewCapacity) { GUILayout.BeginHorizontal(); GUILayout.Label("Minimal crew required:", RmmStyle.Instance.LabelStyle, GUILayout.Width(150)); GUILayout.Label(RoutineArrivalMission.MinimumCrew.ToString(), RmmStyle.Instance.LabelStyle, GUILayout.Width(200)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("Maximum crew capacity:", RmmStyle.Instance.LabelStyle, GUILayout.Width(150)); GUILayout.Label(RoutineArrivalMission.CrewCapacity.ToString(), RmmStyle.Instance.LabelStyle, GUILayout.Width(200)); GUILayout.EndHorizontal(); } else { GUILayout.BeginHorizontal(); GUILayout.Label("Crew:", RmmStyle.Instance.LabelStyle, GUILayout.Width(100)); GUILayout.Label(RoutineArrivalMission.MinimumCrew.ToString(), RmmStyle.Instance.LabelStyle, GUILayout.Width(200)); GUILayout.EndHorizontal(); } } if (RoutineArrivalMission.MinimumCrew < RoutineArrivalMission.CrewCapacity) { GUILayout.BeginHorizontal(); GUILayout.Label("Planned crew:", RmmStyle.Instance.LabelStyle, GUILayout.Width(100)); GUILayout.Label(RoutineArrivalMission.CrewCount.ToString(), RmmStyle.Instance.LabelStyle, GUILayout.Width(50)); if (RoutineArrivalMission.Kind == MissionKind.Potential) { strCrewCount = GUILayout.TextField(strCrewCount, 3, GUILayout.Width(50)); if (GUILayout.Button("set", RmmStyle.Instance.ButtonStyle, GUILayout.Width(50), GUILayout.Height(22))) { int crewCount = 0; int.TryParse(strCrewCount, out crewCount); if (RoutineArrivalMission.CrewCount < RoutineArrivalMission.MinimumCrew) { crewCount = RoutineArrivalMission.MinimumCrew; } if (RoutineArrivalMission.CrewCount > RoutineArrivalMission.CrewCapacity) { crewCount = RoutineArrivalMission.CrewCapacity; } RoutineArrivalMission.CrewCount = crewCount; } } GUILayout.EndHorizontal(); } if (!String.IsNullOrEmpty(RoutineArrivalMission.CrewSelection)) { GUILayout.Label(RoutineArrivalMission.CrewSelection, RmmStyle.Instance.LabelStyle, GUILayout.Width(300)); } if (RoutineArrivalMission.CrewCapacity > 0) { GUILayout.BeginHorizontal(); if (RoutineArrivalMission.Kind == MissionKind.Potential) { if (GUILayout.Button("set preferred crew", RmmStyle.Instance.ButtonStyle, GUILayout.Width(200), GUILayout.Height(20))) { _routineControl.CrewSelection(RoutineArrivalMission.CrewSelection); } } GUILayout.EndHorizontal(); GUILayout.Label(" ", RmmStyle.Instance.LabelStyle, GUILayout.Width(100)); } GUILayout.BeginHorizontal(); GUILayout.Label("Docking Port:", RmmStyle.Instance.LabelStyle, GUILayout.Width(100)); GUILayout.Label(strArrivalDockingPortName, RmmStyle.Instance.LabelStyle, GUILayout.Width(50)); if (RoutineArrivalMission.Kind == MissionKind.Potential) { if (GUILayout.Button("set docking port", RmmStyle.Instance.ButtonStyle, GUILayout.Width(150), GUILayout.Height(20))) { _routineControl.DockingPortSelection(RoutineArrivalMission.flightIdArrivalDockPart, this); } } GUILayout.EndHorizontal(); if (messages != null && messages.Count > 0) { GUILayout.Label("", RmmStyle.Instance.LabelStyle, GUILayout.Width(300)); foreach (String message in messages) { GUILayout.Label(message, RmmStyle.Instance.LabelStyle, GUILayout.Width(300)); } } if (RoutineArrivalMission.Kind == MissionKind.Potential) { if (GUILayout.Button("Order Launch", RmmStyle.Instance.ButtonStyle, GUILayout.Width(150), GUILayout.Height(22))) { CheckList checkList = _routineControl.OrderArrivalMissionAllowed(); if (checkList.CheckSucces) { _routineControl.OrderArrivalMission(); base.Close(); } else { messages = checkList.Messages; } } } if (RoutineArrivalMission.Kind == MissionKind.Ordered) { if (GUILayout.Button("Cancel Launch", RmmStyle.Instance.ButtonStyle, GUILayout.Width(150), GUILayout.Height(22))) { _routineControl.CancelArrivalMission(); base.Close(); } } } }