public CheckList Allowed(Vessel vessel) { var checkList = new CheckList(); checkList.Check(Valid(), "invalid mission departure mission"); if (!checkList.CheckSucces) { return(checkList); } checkList.Check(AllowedVessel(vessel), "vessel not allowed"); if (!checkList.CheckSucces) { return(checkList); } List <Part> departureParts = RmmUtil.GetDockedParts(vessel, RmmUtil.GetDockedPart(vessel, RmmUtil.GetVesselPart(vessel, flightIdDepartureDockPart))); checkList.Check(departureParts != null, "no docked vessel on docking port"); if (!checkList.CheckSucces) { return(checkList); } checkList.Check(RmmUtil.AstronautCrewCount(departureParts) >= _mission.Departure.Crew, "not enough crew"); int crewCapacity = 0; foreach (MissionLanding missionLanding in _mission.Landings) { crewCapacity += missionLanding.CrewCapacity; } checkList.Check(RmmUtil.AstronautCrewCount(departureParts) <= crewCapacity, "too many crew"); foreach (MissionResource missionResource in _mission.Departure.Resources) { if (!_mission.Departure.Proppellants.Contains(missionResource.Name)) { continue; } checkList.Check(RmmUtil.ReadResource(departureParts, missionResource.Name) >= (missionResource.Amount * 0.99), "insufficient " + missionResource.Name); } double vesselCargoMass = 0; List <MissionResource> vesselResources = MissionResource.GetMissionResourceList(departureParts); foreach (MissionResource vesselResource in vesselResources) { if (Proppelants.Contains(vesselResource.Name)) { continue; } vesselCargoMass += RmmUtil.Mass(vesselResource.Name, vesselResource.Amount); } LoggerRmm.Debug(vesselCargoMass + " " + CargoMass); checkList.Check((vesselCargoMass * 0.99) <= CargoMass, "too much cargomass"); return(checkList); }
public CheckList AllowedVessel(Vessel vessel) { var checkList = new CheckList(); checkList.Check(Valid(), "invalid mission departure mission"); if (!checkList.CheckSucces) { return(checkList); } checkList.Check(AllowedLocation(vessel), "location not allowed"); Structure structure = Structure.GetDockedStructure(vessel, RmmUtil.GetDockedPart(vessel, RmmUtil.GetVesselPart(vessel, flightIdDepartureDockPart))); checkList.Check(structure != null, "no docked structure detected on docking port"); if (!checkList.CheckSucces) { return(checkList); } checkList.Check(_mission.Departure.Structure.Equal(structure), "docked structure unequal to tracked structure"); return(checkList); }
public void RoutineDepartureDetail(string missiondId, uint flightIdDepartureDockPart, IWindow parent = null) { CancelRoutineDepartureDetail(); _routineDepartureDetailWindow = new RoutineDepartureDetailWindow(this); WindowManager.Open(_routineDepartureDetailWindow, parent: parent); RoutineDepartureMission routineDepartureMission = null; foreach (Mission mission in _missions) { if (mission.Info == null) { continue; } if (mission.Info.Type != 20) { continue; } if (mission.MissionId == missiondId) { routineDepartureMission = RoutineMission.AssemblePotentialRoutineMission <RoutineDepartureMission>(mission); routineDepartureMission.flightIdDepartureDockPart = flightIdDepartureDockPart; if (!routineDepartureMission.AllowedVessel(FlightGlobals.ActiveVessel).CheckSucces) { continue; } } } _routineDepartureDetailWindow.RoutineDepartureMission = routineDepartureMission; _routineDepartureDetailWindow.DepartureParts = RmmUtil.GetDockedParts(FlightGlobals.ActiveVessel, RmmUtil.GetDockedPart(FlightGlobals.ActiveVessel, RmmUtil.GetVesselPart(FlightGlobals.ActiveVessel, flightIdDepartureDockPart))); }