示例#1
0
        private static void PostfixSetVessel(SpaceTracking __instance)
        {
            if (MainSystem.NetworkState < ClientState.Connected)
            {
                return;
            }

            if (__instance.SelectedVessel != null)
            {
                if (!LockSystem.LockQuery.CanRecoverOrTerminateTheVessel(__instance.SelectedVessel.id, SettingsSystem.CurrentSettings.PlayerName))
                {
                    if (__instance.SelectedVessel.situation == Vessel.Situations.PRELAUNCH)
                    {
                        __instance.FlyButton.Lock();
                    }
                    else
                    {
                        __instance.FlyButton.Unlock();
                    }

                    __instance.DeleteButton.Lock();
                    __instance.RecoverButton.Lock();
                }
                else
                {
                    __instance.FlyButton.Unlock();
                    __instance.DeleteButton.Unlock();
                    __instance.RecoverButton.Unlock();
                }
            }
        }
示例#2
0
        private IEnumerator WaitForTrackingList()
        {
            //WaitForSeconds wait = new WaitForSeconds(0.1f);

            SpaceTracking _TrackingStation = null;

            while (_TrackingStation == null)
            {
                _TrackingStation = GameObject.FindObjectOfType <SpaceTracking>();

                if (_TrackingStation == null)
                {
                    yield return(null);
                }
            }

            processSprites(_TrackingStation);

            if (loadedPrefabs != null)
            {
                processUIPrefabs();
            }

            if (UILoaded)
            {
                loaded = true;
            }

            Tracking_Utils.TrackingLog("UI Loaded");

            Destroy(gameObject);
        }
示例#3
0
        public void OnClick()
        {
            //figure out if mod+clicked
            _includeCrew = GameSettings.MODIFIER_KEY.GetKey();
            //includeCrew = false;
            bool ctrlHeld = Input.GetKey(KeyCode.LeftControl);

            if (Input.GetKey(KeyCode.LeftShift))
            {
                OpenConvertWindow(); //convert ships to craft files
                _theButton.SetFalse();
                return;
            }

            //get the selected craft
            SpaceTracking trackingStation = (SpaceTracking)FindObjectOfType(typeof(SpaceTracking));
            Vessel        selectedVessel  = trackingStation.SelectedVessel;

            if (ctrlHeld || _includeCrew) //ctrl or modifier held
            {
                OpenImportWindow();
            }
            else if (selectedVessel != null)
            {
                ExportSelectedCraft(selectedVessel);
            }

            _theButton.SetFalse(false);
        }
示例#4
0
        private void Start()
        {
            const float WINDOW_VERTICAL_POSITION = 36;

            this.spaceTrackingScene = (SpaceTracking)UnityEngine.Object.FindObjectOfType(typeof(SpaceTracking));

            this.sideBarRect = GetSideBarRect();

            this.windowPos = new Rect(this.sideBarRect.xMax, WINDOW_VERTICAL_POSITION, 10, 10);

            this.windowStyle = new GUIStyle(HighLogic.Skin.window)
            {
                margin  = new RectOffset(),
                padding = new RectOffset(5, 5, 5, 5)
            };

            GameEvents.onGameSceneSwitchRequested.Add(this.onGameSceneSwitchRequested);
            GameEvents.onVesselDestroy.Add(this.onVesselDestroy);
            GameEvents.onVesselCreate.Add(this.onVesselCreate);

            ManeuverQueue.filterModeLabels = Enum.GetValues(typeof(FilterMode)).Cast <FilterMode>().Select(x => ManeuverQueue.LabelForFilterMode(x)).ToArray();

            this.currentMode = FilterMode.Default;

            this.render = true;
        }
示例#5
0
        private IEnumerator WaitForTrackingStation()
        {
            while (_TrackingStation == null)
            {
                var tracking = FindObjectsOfType <SpaceTracking>();

                if (tracking != null)
                {
                    for (int i = 0; i < tracking.Length; i++)
                    {
                        SpaceTracking space = tracking[i];

                        if (space == null)
                        {
                            continue;
                        }

                        _TrackingStation = space;
                    }
                }

                if (_TrackingStation == null)
                {
                    yield return(null);
                }
            }

            _ListParent = _TrackingStation.listContainer.parent;

            FindScrollRect();

            StartCoroutine(WaitForCamera());

            AdjustUITransforms();

            StartCoroutine(AttachSortHeader());

            _VesselToggleGroup = Instantiate(_TrackingStation.listToggleGroup);

            _OldTrackingList = _TrackingStation.listContainer.gameObject;

            _NewTrackingList = Instantiate(_OldTrackingList);

            _ReorderableList = _OldTrackingList.transform.parent.gameObject.AddComponent <ReorderableList>();
            _ReorderableList.Init(_NewTrackingList.GetComponent <LayoutGroup>(), _NewTrackingList.GetComponent <RectTransform>());
            _ReorderableList.SortType = (int)_CurrentMode;

            _NewTrackingList.transform.SetParent(_ListParent, false);

            _TrackingStation.listContainer.SetParent(null, false);

            _TrackingStation.tglTrackedObjects.onValueChanged.AddListener(new UnityAction <bool>(OnVesselListToggle));

            _OrderedBodyList = OrderBodies();
            _OrderedTypeList = OrderTypes();

            Tracking_Utils.TrackingLog("Tracking Station Processed");
        }
        internal static void SetCurrentFlightStates()
        {
            if (HighLogic.CurrentGame != null)
            {
                KACWorkerGameState.CurrentSaveGameName = HighLogic.CurrentGame.Title;
            }
            else
            {
                KACWorkerGameState.CurrentSaveGameName = "";
            }

            try { KACWorkerGameState.CurrentTime.UT = Planetarium.GetUniversalTime(); }
            catch (Exception) { }
            //if (Planetarium.fetch!=null)KACWorkerGameState.CurrentTime.UT = Planetarium.GetUniversalTime();

            try
            {
                if (KACWorkerGameState.CurrentGUIScene == GameScenes.FLIGHT && FlightGlobals.ActiveVessel != null)
                {
                    KACWorkerGameState.CurrentVessel       = FlightGlobals.ActiveVessel;
                    KACWorkerGameState.CurrentSOIBody      = CurrentVessel.mainBody;
                    KACWorkerGameState.CurrentVesselTarget = CurrentVessel.targetObject;
                }
                else if (KACWorkerGameState.CurrentGUIScene == GameScenes.TRACKSTATION)
                {
                    SpaceTracking     st = (SpaceTracking)KACSpaceCenter.FindObjectOfType(typeof(SpaceTracking));
                    PlanetariumCamera c  = PlanetariumCamera.fetch;
                    if (c.target != null && c.target.type == MapObject.ObjectType.Vessel)
                    {
                        KACWorkerGameState.CurrentVessel       = c.target.vessel;
                        KACWorkerGameState.CurrentSOIBody      = CurrentVessel.mainBody;
                        KACWorkerGameState.CurrentVesselTarget = CurrentVessel.targetObject;
                    }
                    else
                    {
                        KACWorkerGameState.CurrentVessel       = null;
                        KACWorkerGameState.CurrentSOIBody      = null;
                        KACWorkerGameState.CurrentVesselTarget = null;
                    }
                }
                //else if (KACWorkerGameState.CurrentGUIScene == GameScenes.TRACKSTATION &&
                //        MapView.MapCamera.target.type == MapObject.MapObjectType.VESSEL)
                //{
                //    KACWorkerGameState.CurrentVessel = MapView.MapCamera.target.vessel;
                //    KACWorkerGameState.CurrentSOIBody = CurrentVessel.mainBody;
                //    KACWorkerGameState.CurrentVesselTarget = CurrentVessel.targetObject;
                //}
                else
                {
                    KACWorkerGameState.CurrentVessel       = null;
                    KACWorkerGameState.CurrentSOIBody      = null;
                    KACWorkerGameState.CurrentVesselTarget = null;
                }
            }
            catch (Exception)
            {
            }
        }
        internal static void RequestCameraFocus(Vessel vessel)
        {
            SpaceTracking spaceTracking = (SpaceTracking)Object.FindObjectOfType(typeof(SpaceTracking));

            MethodInfo method = spaceTracking.GetType()
                                .GetMethod("RequestVessel", BindingFlags.NonPublic | BindingFlags.Instance);

            method.Invoke(spaceTracking, new object[] { vessel });
        }
        internal static void TrackingSwitchToVessel(Vessel vessel)
        {
            SpaceTracking spaceTracking = (SpaceTracking)Object.FindObjectOfType(typeof(SpaceTracking));

            MethodInfo method = spaceTracking.GetType()
                                .GetMethod("FlyVessel", BindingFlags.NonPublic | BindingFlags.Instance);

            method.Invoke(spaceTracking, new object[] { vessel });
        }
示例#9
0
        public void NewRecoveryFunctionTrackingStation()
        {
            selectedVessel = null;
            SpaceTracking trackingStation = (SpaceTracking)FindObjectOfType(typeof(SpaceTracking));

            selectedVessel = trackingStation.SelectedVessel;

            if (selectedVessel == null)
            {
                Debug.Log("[KCT] Error! No Vessel selected.");
                return;
            }



            bool sph = (selectedVessel.IsRecoverable && selectedVessel.IsClearToSave() == ClearToSaveStatus.CLEAR);

            string reqTech = KCT_PresetManager.Instance.ActivePreset.generalSettings.VABRecoveryTech;
            bool   vab     =
                selectedVessel.IsRecoverable &&
                selectedVessel.IsClearToSave() == ClearToSaveStatus.CLEAR &&
                (selectedVessel.situation == Vessel.Situations.PRELAUNCH ||
                 string.IsNullOrEmpty(reqTech) ||
                 ResearchAndDevelopment.GetTechnologyState(reqTech) == RDTech.State.Available);

            int cnt = 2;

            if (sph)
            {
                cnt++;
            }
            if (vab)
            {
                cnt++;
            }

            DialogGUIBase[] options = new DialogGUIBase[cnt];
            cnt = 0;
            if (sph)
            {
                options[cnt++] = new DialogGUIButton("Recover to SPH", RecoverToSPH);
            }
            if (vab)
            {
                options[cnt++] = new DialogGUIButton("Recover to VAB", RecoverToVAB);
            }
            options[cnt++] = new DialogGUIButton("Normal recovery", DoNormalRecovery);
            options[cnt]   = new DialogGUIButton("Cancel", Cancel);

            MultiOptionDialog diag = new MultiOptionDialog("scrapVesselPopup", "Do you want KCT to do the recovery?", "Recover Vessel", null, options: options);

            PopupDialog.SpawnPopupDialog(new Vector2(0.5f, 0.5f), new Vector2(0.5f, 0.5f), diag, false, HighLogic.UISkin);
        }
示例#10
0
 private static void SetVesselActiveInTS(Vessel vTarget)
 {
     if (KACWorkerGameState.CurrentGUIScene == GameScenes.TRACKSTATION)
     {
         try
         {
             SpaceTracking st = (SpaceTracking)KACSpaceCenter.FindObjectOfType(typeof(SpaceTracking));
             st.SetVessel(vTarget, true);
         }
         catch (Exception ex)
         {
             LogFormatted("Unable to set vessel as active in Tracking station:\r\n{0}", ex.Message);
         }
     }
 }
示例#11
0
        private void NewRecoveryFunctionTrackingStation()
        {
            Vessel selectedVessel = null;

            SpaceTracking trackingStation = (SpaceTracking)FindObjectOfType(typeof(SpaceTracking));

            selectedVessel = trackingStation.SelectedVessel;

            if (selectedVessel == null)
            {
                Debug.Log("!!Error! No Vessel selected.");
                return;
            }

            NewRecoveryFunction(selectedVessel);
        }
示例#12
0
        //Called once when the scene starts
        new public void Start()
        {
            base.Start(); //Call Start() in the parent class
            //Get the MonoBehaviour that controls the buttons at the top of the screen
            SpaceTracking trackingStation = (SpaceTracking)FindObjectOfType(typeof(SpaceTracking));

            if (trackingStation != null)
            {
                //back up the original function. We'll call that when we're within range
                originalCallback = trackingStation.RecoverButton.onClick;

                //Override the original function with ours, which checks the distance.
                trackingStation.RecoverButton.onClick = new Button.ButtonClickedEvent();
                trackingStation.RecoverButton.onClick.AddListener(NewRecoveryFunctionTrackingStation);
            }
        }
示例#13
0
        public void ConvertToKomet(Vessel asteroid)
        {
            //Set name
            asteroid.vesselName = "Kmt. " + ModuleKomet.CreateKometName(Planetarium.GetUniversalTime());
            if (asteroid.rootPart != null)
            {
                asteroid.rootPart.initialVesselName = asteroid.vesselName;
            }
            Log("New komet " + asteroid.vesselName + " discovered!");

            //Generate a random orbit for the komet.
            Orbit orbit = Orbit.CreateRandomOrbitAround(Planetarium.fetch.Sun, kometMinAltitude, kometMaxAltitude);

            //Komets have eccentric orbits, let's randomize the eccentricity and such.
            orbit.eccentricity = UnityEngine.Random.Range(eccentricityMin, eccentricityMax);

            //Initial komets are easier to reach..
            if (!KerbalKometScenario.Instance.GetStartingKometsFlag())
            {
                orbit.inclination         = UnityEngine.Random.Range(0, 90f);
                orbit.LAN                 = UnityEngine.Random.Range(0, 360f);
                orbit.argumentOfPeriapsis = UnityEngine.Random.Range(0, 360f);
            }
            double orbitTime = UnityEngine.Random.Range(0, (float)orbit.GetTimeToPeriapsis());

            //Set the orbit
            asteroid.orbit.SetOrbit(orbit.inclination, orbit.eccentricity, orbit.semiMajorAxis, orbit.LAN, orbit.argumentOfPeriapsis, orbit.meanAnomalyAtEpoch, orbitTime, Planetarium.fetch.Sun);

            //Hack: Astroids appear to spawn unloaded, and they don't appear to have any part modules when they first show up. To get around this, register the komet in the komet registry.
            //When the asteroid comes into physics range, we'll flip it to a komet.
            if (KerbalKometScenario.Instance.IsKometRegistered(asteroid.vesselName) == false)
            {
                KerbalKometScenario.Instance.RegisterKomet(asteroid.vesselName);
            }

            //Send out a press release
            if (KerbalKometSettings.SendPressRelease)
            {
                sendPressRelease(asteroid);
            }

            //Automatically track the new komet.
            if (KerbalKometSettings.AutoTrackKomets)
            {
                SpaceTracking.StartTrackingObject(asteroid);
            }
        }
示例#14
0
        protected void Start()
        {
            const float WINDOW_VERTICAL_POSITION = 36;

            this.pluginConfiguration.load();

            if (MapViewFiltering.vesselTypeFilter != MapViewFiltering.VesselTypeFilter.All)
            {
                ManeuverQueue.savedFilterState = MapViewFiltering.vesselTypeFilter;
            }
            else
            {
                ManeuverQueue.savedFilterState = (MapViewFiltering.VesselTypeFilter) this.pluginConfiguration.GetValue(ManeuverQueue.configurationFiltersKey, (int)MapViewFiltering.VesselTypeFilter.All);
            }

            this.pluginConfiguration.SetValue(ManeuverQueue.configurationFiltersKey, (int)MapViewFiltering.VesselTypeFilter.All);
            this.pluginConfiguration.save();

            this.spaceTrackingScene = (SpaceTracking)UnityEngine.Object.FindObjectOfType(typeof(SpaceTracking));

            this.sideBarRect = GetSideBarRect();

            this.windowPos = new Rect(this.sideBarRect.xMax, WINDOW_VERTICAL_POSITION, 10, 10);

            this.windowStyle = new GUIStyle(HighLogic.Skin.window)
            {
                margin  = new RectOffset(),
                padding = new RectOffset(5, 5, 5, 5)
            };

            GameEvents.onGameSceneSwitchRequested.Add(this.onGameSceneSwitchRequested);

            GameEvents.onVesselDestroy.Add(this.onVesselDestroy);
            GameEvents.onVesselCreate.Add(this.onVesselCreate);
            GameEvents.onKnowledgeChanged.Add(this.onKnowledgeChanged);
            GameEvents.OnMapViewFiltersModified.Add(this.onMapViewFiltersModified);

            ManeuverQueue.filterModeLabels = Enum.GetValues(typeof(FilterMode)).Cast <FilterMode>().Where(
                x => x != FilterMode.Undefined).Select(
                x => ManeuverQueue.LabelForFilterMode(x)).ToArray();

            this.currentMode = (FilterMode)this.pluginConfiguration.GetValue(ManeuverQueue.configurationModeKey, (int)FilterMode.Default);

            this.render = true;
        }
        private static bool PrefixFlyVessel(SpaceTracking __instance)
        {
            if (MainSystem.NetworkState < ClientState.Connected)
            {
                return(true);
            }

            var vessel = __instance.SelectedVessel;

            if (vessel != null && vessel.situation == Vessel.Situations.PRELAUNCH)
            {
                if (!LockSystem.LockQuery.CanRecoverOrTerminateTheVessel(vessel.id, SettingsSystem.CurrentSettings.PlayerName))
                {
                    return(false);
                }
            }

            return(true);
        }
示例#16
0
        public new void Start()
        {
            base.Start();
            if (KCT_GUI.PrimarilyDisabled)
            {
                return;
            }

            KCTDebug.Log("KCT_Flight, Start");
            SpaceTracking trackingStation = UnityEngine.Object.FindObjectOfType <SpaceTracking>();

            if (trackingStation != null)
            {
                originalCallback = trackingStation.RecoverButton.onClick;
                flyCallback      = trackingStation.FlyButton.onClick;

                trackingStation.RecoverButton.onClick = new Button.ButtonClickedEvent();
                trackingStation.RecoverButton.onClick.AddListener(NewRecoveryFunctionTrackingStation);
            }
        }
 static Vessel CurrentVessel()
 {
     if (HighLogic.LoadedScene == GameScenes.FLIGHT && FlightGlobals.ActiveVessel != null)
     {
         return(FlightGlobals.ActiveVessel);
     }
     else if (HighLogic.LoadedScene == GameScenes.TRACKSTATION)
     {
         SpaceTracking st = (SpaceTracking)FindObjectOfType(typeof(SpaceTracking));
         if (st.mainCamera.target != null && st.mainCamera.target.type == MapObject.MapObjectType.VESSEL)
         {
             return(st.mainCamera.target.vessel);
         }
         else
         {
             return(null);
         }
     }
     return(null);
 }
示例#18
0
        public void OnClick()
        {
            //figure out if mod+clicked
            //includeCrew = GameSettings.MODIFIER_KEY.GetKey(); //TODO: Reenable when fixed
            includeCrew = false;
            bool ctrlHeld = Input.GetKey(KeyCode.LeftControl);

            if (Input.GetKey(KeyCode.LeftShift))
            {
                OpenConvertWindow(); //convert ships to craft files
                theButton.SetFalse();
                return;
            }

            //get the selected craft
            SpaceTracking trackingStation = (SpaceTracking)FindObjectOfType(typeof(SpaceTracking));
            Vessel        selectedVessel  = trackingStation.SelectedVessel;

            //1.2 made this non-private
            //foreach (FieldInfo f in trackingStation.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Instance))
            //{
            //    if (f.FieldType == typeof(Vessel))
            //    {
            //        //FYI: the first one (0) is the currently selected vessel
            //        //The second one (1) is the one that the mouse is hovering over
            //        selectedVessel = f.GetValue(trackingStation) as Vessel;
            //        break;
            //    }
            //}

            if (ctrlHeld || includeCrew) //ctrl or modifier held
            {
                OpenImportWindow();
            }
            else if (selectedVessel != null)
            {
                ExportSelectedCraft(selectedVessel);
            }

            theButton.SetFalse(false);
        }
示例#19
0
        private static void SetVesselActiveInTS(Vessel vTarget)
        {
            if (KACWorkerGameState.CurrentGUIScene == GameScenes.TRACKSTATION)
            {
                try
                {
                    SpaceTracking st = (SpaceTracking)KACSpaceCenter.FindObjectOfType(typeof(SpaceTracking));

                    //st.GetType().GetMethods(BindingFlags.NonPublic | BindingFlags.Instance).ToList().ForEach(
                    //    mi=>LogFormatted("Method-{0}-{1}",mi.Name,mi.IsPrivate));

                    MethodInfo setvesselMethod = st.GetType().GetMethod("SetVessel", BindingFlags.NonPublic | BindingFlags.Instance);

                    setvesselMethod.Invoke(st, new object[] { vTarget, true });
                }
                catch (Exception ex)
                {
                    LogFormatted("Unable to set vessel as active in Tracking station:\r\n{0}", ex.Message);
                }
            }
        }
        private static void PostfixSetVessel(SpaceTracking __instance)
        {
            if (MainSystem.NetworkState < ClientState.Connected)
            {
                return;
            }

            if (__instance.SelectedVessel != null)
            {
                if (!LockSystem.LockQuery.CanRecoverOrTerminateTheVessel(__instance.SelectedVessel.id, SettingsSystem.CurrentSettings.PlayerName))
                {
                    if (__instance.SelectedVessel.situation == Vessel.Situations.PRELAUNCH)
                    {
                        __instance.FlyButton.Lock();
                    }
                    else
                    {
                        __instance.FlyButton.Unlock();
                    }

                    __instance.DeleteButton.Lock();
                    __instance.RecoverButton.Lock();
                }
                //Check if vessel is landed or splashed on kerbin. Otherwise lock the recover button.
                else if (__instance.SelectedVessel.LandedOrSplashed == false || __instance.SelectedVessel.mainBody.bodyName.ToLower() != "kerbin")
                {
                    __instance.FlyButton.Unlock();
                    __instance.DeleteButton.Unlock();
                    __instance.RecoverButton.Lock();
                }
                else
                {
                    __instance.FlyButton.Unlock();
                    __instance.DeleteButton.Unlock();
                    __instance.RecoverButton.Unlock();
                }
            }
        }
示例#21
0
        private void processSprites(SpaceTracking tracking)
        {
            var prefab = tracking.listItemPrefab;

            if (prefab == null)
            {
                return;
            }

            prefab.gameObject.AddOrGetComponent <Tracking_WidgetListener>();

            _iconPrefab = prefab.iconSprite;

            Selectable toggle = prefab.toggle.GetComponent <Selectable>();

            if (toggle == null)
            {
                return;
            }

            _normalSprite   = toggle.image.sprite;
            _hoverSprite    = toggle.spriteState.highlightedSprite;
            _activeSprite   = toggle.spriteState.pressedSprite;
            _inactiveSprite = toggle.spriteState.disabledSprite;

            var images = prefab.GetComponentsInChildren <Image>();

            if (images == null || images.Length < 2)
            {
                return;
            }

            _backgroundSprite = images[images.Length - 2].sprite;

            _checkmarkSprite = ((Image)prefab.toggle.graphic).sprite;
        }
示例#22
0
        new public void Start()
        {
            base.Start();

            st = (SpaceTracking)FindObjectOfType(typeof(SpaceTracking));
        }