private static void WindowGUI(int windowID) { GUILayout.BeginVertical(); template.name = GUILayout.TextField(template.name); GUILayout.BeginHorizontal(); GUILayout.BeginVertical(); GUILayout.Label("Latitude", GUILayout.Width(68)); GUILayout.Label("Longitude", GUILayout.Width(68)); GUILayout.EndVertical(); GUILayout.Space(4); string val; float floatVal; GUILayout.BeginVertical(); val = GUILayout.TextField(latitude, GUILayout.Width(140)); if (float.TryParse(val, out floatVal)) { latitude = val; recalcAltitude = true; } val = GUILayout.TextField(longitude, GUILayout.Width(140)); if (float.TryParse(val, out floatVal)) { longitude = val; recalcAltitude = true; } GUILayout.EndVertical(); GUILayout.Space(4); GUILayout.BeginVertical(); if (GUILayout.Button(Util.GetContractIcon(template.id, template.seed), GUILayout.Width(40), GUILayout.Height(40))) { showIconPicker = !showIconPicker; selectedIcon = Array.IndexOf(icons, icons.Where(c => c.tooltip == template.id).First()); selectedColor = Array.IndexOf(seeds, template.seed); if (selectedIcon == -1) { selectedIcon = 0; } if (selectedColor == -1) { selectedColor = 0; } } GUILayout.EndVertical(); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Space(80); if (GUILayout.Toggle(useTerrainHeight, new GUIContent("Use terrain height for altitude", "Automatically set the altitude to ground level.")) != useTerrainHeight) { useTerrainHeight = !useTerrainHeight; recalcAltitude = true; } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("Altitude", GUILayout.Width(72)); val = GUILayout.TextField(altitude, useTerrainHeight ? disabledText : GUI.skin.textField, GUILayout.Width(140)); if (!useTerrainHeight && float.TryParse(val, out floatVal)) { altitude = val; } GUILayout.EndHorizontal(); if (HighLogic.LoadedScene == GameScenes.FLIGHT) { if (GUILayout.Button(new GUIContent("Use Active Vessel Location", "Set the location parameters to that of the currently active vessel."))) { latitude = FlightGlobals.ActiveVessel.latitude.ToString(); longitude = FlightGlobals.ActiveVessel.longitude.ToString(); altitude = FlightGlobals.ActiveVessel.altitude.ToString(); recalcAltitude = true; } } if (HighLogic.LoadedScene == GameScenes.FLIGHT && MapView.MapIsEnabled || HighLogic.LoadedScene == GameScenes.TRACKSTATION) { string label = mapLocationMode ? "Cancel Set Location" : "Set Location on Map"; if (GUILayout.Button(new GUIContent(label, "Set the location by clicking on the map."))) { mapLocationMode = !mapLocationMode; } } else { mapLocationMode = false; } GUILayout.BeginHorizontal(); bool save = GUILayout.Button("Save"); bool apply = GUILayout.Button("Apply"); bool cancel = GUILayout.Button("Cancel"); if (save || apply) { template.latitude = double.Parse(latitude); template.longitude = double.Parse(longitude); template.height = Util.WaypointHeight(template, targetBody); template.altitude = double.Parse(altitude) - template.height; if (windowMode == WindowMode.Add) { CustomWaypoints.AddWaypoint(template); selectedWaypoint = template; template = new Waypoint(); } else { selectedWaypoint.id = template.id; selectedWaypoint.name = template.name; selectedWaypoint.latitude = template.latitude; selectedWaypoint.longitude = template.longitude; selectedWaypoint.altitude = template.altitude; selectedWaypoint.height = template.height; selectedWaypoint.seed = template.seed; } } if (save || cancel) { windowMode = WindowMode.None; } else if (apply) { EditWaypoint(selectedWaypoint); } GUILayout.EndHorizontal(); GUILayout.EndVertical(); GUI.DragWindow(); if (useTerrainHeight && recalcAltitude) { recalcAltitude = false; altitude = Util.TerrainHeight(double.Parse(latitude), double.Parse(longitude), targetBody).ToString(); } WaypointManager.Instance.SetToolTip(windowID - typeof(WaypointManager).FullName.GetHashCode()); }