private void HandleMenuWindow()
        {
            if (_menuWindow == null)
            {
                return;
            }
            if (!WindowManager.IsOpen(_menuWindow))
            {
                CancelMenu();
                return;
            }

            if (RmmUtil.AllowedBody(FlightGlobals.ActiveVessel.mainBody.name) &&
                (RmmUtil.IsPreLaunch(FlightGlobals.ActiveVessel) || FlightGlobals.ActiveVessel.situation == Vessel.Situations.ORBITING))
            {
                _menuWindow.TrackingEnabled = true;
            }
            else
            {
                _menuWindow.TrackingEnabled = false;
            }

            if (RmmUtil.AllowedBody(FlightGlobals.ActiveVessel.mainBody.name) &&
                FlightGlobals.ActiveVessel.situation == Vessel.Situations.ORBITING)
            {
                _menuWindow.RoutineArrivalEnabled       = true;
                _menuWindow.RoutineDepartureEnabled     = true;
                _menuWindow.RegisterDockingPortsEnabled = true;
            }
            else
            {
                _menuWindow.RoutineArrivalEnabled   = false;
                _menuWindow.RoutineDepartureEnabled = false;
            }
        }
Exemple #2
0
        private void setModule()
        {
            if (commercialvehiclemode && commercialvehicleOfferingLoaded)
            {
                Events["setAutoDepart"].guiActive = true;
            }
            else
            {
                Events["setAutoDepart"].guiActive = false;
            }
            if ((RmmUtil.IsPreLaunch(vessel) && !trackingActive && IsDockingPort()) || (returnMission && !trackingActive))
            {
                Events["tracking"].guiActive = true;
            }
            else
            {
                Events["tracking"].guiActive = false;
            }

            if (PortCode == "" && vessel.situation == Vessel.Situations.ORBITING && RmmUtil.AllowedBody(vessel.mainBody.name) && IsDockingPort())
            {
                Events["register"].guiActive = true;
            }
            else
            {
                Events["register"].guiActive = false;
            }
        }
Exemple #3
0
        public override void OnFixedUpdate()
        {
            if (!HighLogic.LoadedSceneIsFlight)
            {
                return;
            }
            if (_nextLogicTime == 0 || _nextLogicTime > Planetarium.GetUniversalTime())
            {
                return;
            }
            if (vessel.packed || !vessel.loaded)
            {
                _nextLogicTime = Planetarium.GetUniversalTime() + 1;
                return;
            }

            if (vessel.situation == Vessel.Situations.ORBITING && RmmUtil.AllowedBody(vessel.mainBody.name) && _registrationEnabled)
            {
                if (!_registrationAllowed)
                {
                    _registrationAllowed = true;
                    _refreshedRequired   = true;
                }
            }
            else
            {
                if (_registrationAllowed)
                {
                    _registrationAllowed = false;
                    _refreshedRequired   = true;
                }
            }

            if (vessel.situation == Vessel.Situations.ORBITING && RmmUtil.AllowedBody(vessel.mainBody.name) && _trackingEnabled)
            {
                if (!_trackingAllowed)
                {
                    _trackingAllowed   = true;
                    _refreshedRequired = true;
                }
            }
            else
            {
                if (_trackingAllowed)
                {
                    _trackingAllowed   = false;
                    _refreshedRequired = true;
                }
            }

            if (_refreshedRequired)
            {
                RefreshModule();
            }

            _nextLogicTime = Planetarium.GetUniversalTime() + 10;
        }
        void onToggleOn()
        {
            Menu();

            // Add docking port modules
            if (RmmUtil.AllowedBody(FlightGlobals.ActiveVessel.mainBody.name) && FlightGlobals.ActiveVessel.situation == Vessel.Situations.ORBITING)
            {
                RmmDockingPortModule.AddToVessel(FlightGlobals.ActiveVessel);
            }
        }
 public void RegisterDockingPortsOption()
 {
     if (!RmmUtil.AllowedBody(FlightGlobals.ActiveVessel.mainBody.name))
     {
         return;
     }
     if (FlightGlobals.ActiveVessel.situation == Vessel.Situations.ORBITING)
     {
         EnableDockingPortRegistration();
     }
 }
 public void RoutineDepartureOption()
 {
     if (!RmmUtil.AllowedBody(FlightGlobals.ActiveVessel.mainBody.name))
     {
         return;
     }
     if (FlightGlobals.ActiveVessel.situation == Vessel.Situations.ORBITING)
     {
         _routineControl.RoutineDepartureOverview(_menuWindow);
     }
 }
        private bool ToolBarButtonVisible()
        {
            if (RmmUtil.IsPreLaunch(FlightGlobals.ActiveVessel) ||
                (FlightGlobals.ActiveVessel.situation == Vessel.Situations.ORBITING &&
                 RmmUtil.AllowedBody(FlightGlobals.ActiveVessel.mainBody.name) &&
                 RmmUtil.HasDockingPorts(FlightGlobals.ActiveVessel)) ||
                RmmUtil.IsTrackingActive(FlightGlobals.ActiveVessel))
            {
                return(true);
            }

            return(false);
        }
        public void StartTrackingOption()
        {
            if (!RmmUtil.AllowedBody(FlightGlobals.ActiveVessel.mainBody.name))
            {
                return;
            }

            if (!RmmUtil.IsTrackingActive(FlightGlobals.ActiveVessel) && RmmUtil.IsPreLaunch(FlightGlobals.ActiveVessel))
            {
                _trackingControl.CreateLaunchTracking(FlightGlobals.ActiveVessel);
            }

            if (FlightGlobals.ActiveVessel.situation == Vessel.Situations.ORBITING)
            {
                EnableDepartureTracking();
            }
        }
        private static bool handleContractsForCrew(Vessel vessel, bool arrive, bool depart, ProtoCrewMember crew)
        {
            //print("handling crew");
            foreach (Contract con in Contracts.ContractSystem.Instance.Contracts)
            {
                if (con.ContractState == Contract.State.Active)
                {
                    if (ReferenceEquals(con.GetType(), typeof(FinePrint.Contracts.TourismContract)))
                    {
                        for (int i = 0; i < con.ParameterCount; i++)
                        {
                            ContractParameter conpara1 = con.GetParameter(i);
                            if (ReferenceEquals(conpara1.GetType(), typeof(FinePrint.Contracts.Parameters.KerbalTourParameter)) && conpara1.State != Contracts.ParameterState.Complete)
                            {
                                FinePrint.Contracts.Parameters.KerbalTourParameter ktp = (FinePrint.Contracts.Parameters.KerbalTourParameter)conpara1;

                                if (crew.name == ktp.kerbalName)
                                {
                                    // complete destinations parameters on arrive for kerbals on vessel
                                    if (arrive)
                                    {
                                        for (int u = 0; u < conpara1.ParameterCount; u++)
                                        {
                                            ContractParameter conpara2 = conpara1.GetParameter(u);
                                            if (ReferenceEquals(conpara2.GetType(), typeof(FinePrint.Contracts.Parameters.KerbalDestinationParameter)) && conpara2.State != Contracts.ParameterState.Complete)
                                            {
                                                FinePrint.Contracts.Parameters.KerbalDestinationParameter kds = (FinePrint.Contracts.Parameters.KerbalDestinationParameter)conpara2;

                                                if (RmmUtil.AllowedBody(vessel.mainBody.name))
                                                {
                                                    if (RmmUtil.HomeBody(kds.targetBody.name) && (kds.targetType == FlightLog.EntryType.Orbit || kds.targetType == FlightLog.EntryType.Suborbit))
                                                    {
                                                        //print("complete1");
                                                        CompleteContractParameter(kds);
                                                        return(false);
                                                    }
                                                }
                                                if (RmmUtil.AllowedBody(vessel.mainBody.name) && !RmmUtil.HomeBody(vessel.mainBody.name))
                                                {
                                                    if (kds.targetBody.name == vessel.mainBody.name && (kds.targetType == FlightLog.EntryType.Orbit || kds.targetType == FlightLog.EntryType.Flyby))
                                                    {
                                                        //print("complete2");
                                                        CompleteContractParameter(kds);
                                                        return(false);
                                                    }
                                                }
                                            }
                                        }
                                    }

                                    // complete kerbaltour parameters on depart which have all their destinations completed
                                    if (depart)
                                    {
                                        if (conpara1.State != Contracts.ParameterState.Complete)
                                        {
                                            bool allDestinationsSucceeded = true;
                                            for (int u = 0; u < conpara1.ParameterCount; u++)
                                            {
                                                ContractParameter conpara2 = conpara1.GetParameter(u);
                                                if (conpara2.State != Contracts.ParameterState.Complete)
                                                {
                                                    allDestinationsSucceeded = false;
                                                }
                                            }
                                            if (depart && allDestinationsSucceeded)
                                            {
                                                //print("complete3");
                                                CompleteContractParameter(ktp);
                                                HighLogic.CurrentGame.CrewRoster.Remove(crew);
                                                return(false);
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            return(true);
        }
        public void handleTrackingPrimary()
        {
            switch (trackingStatus)
            {
            case "Launch":
                if (vessel.situation == Vessel.Situations.FLYING ||
                    vessel.situation == Vessel.Situations.SUB_ORBITAL ||
                    vessel.situation == Vessel.Situations.ORBITING)
                {
                    trackLaunch();
                }
                break;

            case "Departure":
                foreach (Part p in vessel.parts)
                {
                    if (p.flightID == trackPort && !RmmUtil.IsDocked(vessel, p))
                    {
                        trackDeparture();
                    }
                }
                break;

            case "Underway":
                updatePartCount();
                updateCrewCount();
                updateMaxCrewCount();

                // check for arrival
                if (_mission.Info.Type == 10)
                {
                    if (vessel.situation == Vessel.Situations.ORBITING && RmmUtil.AllowedBody(vessel.mainBody.name))
                    {
                        foreach (Part p in vessel.parts)
                        {
                            ModuleDockingNode dockingModule = p.Modules.OfType <ModuleDockingNode>().FirstOrDefault();
                            if (dockingModule != null)
                            {
                                Part dockedPart = RmmUtil.GetDockedPart(vessel, p);
                                if (dockedPart != null && !Mission.PartIsMissionPart(dockedPart, _mission.Launch.Parts))
                                {
                                    trackArrival(p);
                                    return;
                                }
                            }
                        }
                    }
                }

                // make snapshot of vessel
                if (_mission.Info.Type == 10)
                {
                    if (vessel.situation == Vessel.Situations.ORBITING && RmmUtil.AllowedBody(vessel.mainBody.name))
                    {
                        // don't make snapshot when the vessel is in the process of docking. It leaves the docking port in the wrong state.
                        bool isAnyPartDocking = false;
                        foreach (Part p in vessel.parts)
                        {
                            ModuleDockingNode dockingModule = p.Modules.OfType <ModuleDockingNode>().FirstOrDefault();
                            if (dockingModule != null && RmmUtil.IsDocking(p))
                            {
                                isAnyPartDocking = true;
                            }
                        }

                        if (!isAnyPartDocking)
                        {
                            TakeVesselSnapShot();
                        }
                    }
                }

                // check for landing
                if (_mission.Info.Type == 10 || _mission.Info.Type == 20)
                {
                    if ((vessel.situation == Vessel.Situations.LANDED || vessel.situation == Vessel.Situations.SPLASHED) && RmmUtil.HomeBody(vessel.mainBody.name))
                    {
                        if (landedTime == 0.0)
                        {
                            landedTime        = Planetarium.GetUniversalTime();
                            landedLatitude    = vessel.latitude;
                            landedLongitude   = vessel.longitude;
                            landedTimeMessage = 0;
                        }
                    }

                    if (landedTime > 0.0)
                    {
                        // Check still landed
                        if (!(vessel.situation == Vessel.Situations.LANDED || vessel.situation == Vessel.Situations.SPLASHED) || !RmmUtil.HomeBody(vessel.mainBody.name))
                        {
                            landedTime        = 0.0;
                            landedLatitude    = 0.0;
                            landedLongitude   = 0.0;
                            landedTimeMessage = 0;
                        }
                        // Check not moved
                        else if (RmmUtil.GetDistanceBetweenPoints(landedLatitude, landedLongitude, vessel.latitude, vessel.longitude, vessel.mainBody.Radius) > 2)
                        {
                            landedTime        = 0.0;
                            landedLatitude    = 0.0;
                            landedLongitude   = 0.0;
                            landedTimeMessage = 0;
                        }
                        // Countdown
                        else if (Planetarium.GetUniversalTime() - landedTime > 0.0 && Planetarium.GetUniversalTime() - landedTime < 10)
                        {
                            if (Planetarium.GetUniversalTime() - landedTime > landedTimeMessage + 1.0)
                            {
                                landedTimeMessage = landedTimeMessage + 1;
                                ScreenMessages.PostScreenMessage("landing confirmation " + (10 - landedTimeMessage).ToString() + " seconds", 1, ScreenMessageStyle.UPPER_CENTER);
                            }
                        }
                        // Landed
                        else if (Planetarium.GetUniversalTime() - landedTime > 10)
                        {
                            TrackLanding();
                            return;
                        }
                    }
                }

                if (RmmUtil.CountVesselParts(vessel) > trackPartCount)
                {
                    trackAbort("vessel has joined with non mission vessel");
                }

                if (RmmUtil.AstronautCrewCount(vessel) > trackCrew)
                {
                    trackAbort("crew has been added to vessel");
                }

                updateTrackingVars(vessel);

                break;
            }
        }