public static AntennaTarget LoadFromConfig(ConfigNode node, RealAntenna ra) { var go = AntennaTargetManager.AcquireTarget(ra); foreach (var del in go.GetComponents <AntennaTarget>()) { Destroy(del); } AntennaTarget t = null; string n = string.Empty; if (node.TryGetValue("name", ref n)) { if (n.Equals(TargetMode.BodyLatLonAlt.ToString())) { t = go.AddComponent <AntennaTargetLatLonAlt>(); } else if (n.Equals(TargetMode.Vessel.ToString())) { t = go.AddComponent <AntennaTargetVessel>(); } else if (n.Equals(TargetMode.AzEl.ToString())) { t = go.AddComponent <AntennaTargetAzEl>(); } else if (n.Equals(TargetMode.OrbitRelative.ToString())) { t = go.AddComponent <AntennaTargetOrbitRelative>(); } t?.Load(node); } return(t); }
void GUIDisplay(int windowID) { Vessel parentVessel = (antenna?.ParentNode as RACommNode)?.ParentVessel; GUILayout.BeginVertical(HighLogic.Skin.box); GUILayout.Label($"Vessel: {parentVessel?.name ?? "None"}"); GUILayout.Label($"Antenna: {antenna.Name}"); GUILayout.Label($"Band: {antenna.RFBand.name} Power: {antenna.TxPower}dBm"); GUILayout.Label($"Target: {antenna.Target}"); GUILayout.EndVertical(); GUILayout.Space(7); GUILayout.BeginVertical(HighLogic.Skin.box); GUILayout.BeginHorizontal(); if (GUILayout.Button($"Target Mode: {targetMode.displayName}")) { targetMode = GetNextTargetMode(); } showTargetModeInfo = GUILayout.Toggle(showTargetModeInfo, "ⓘ", HighLogic.Skin.button, GUILayout.ExpandWidth(false), GUILayout.Height(20)); GUILayout.EndHorizontal(); if (showTargetModeInfo) { GUILayout.Label(targetMode.hint, GUILayout.ExpandWidth(true)); if (GameDatabase.Instance.GetTexture(targetMode.texture, false) is Texture2D tex) { GUILayout.Box(tex, GUILayout.Height(200), GUILayout.Width(200)); } } GUILayout.EndVertical(); GUILayout.Space(7); GUILayout.BeginVertical(HighLogic.Skin.box); var sortIcon = GetSortIcon(sortMode); if (targetMode.mode == TargetMode.Vessel) { GUILayout.BeginHorizontal(); foreach (var vType in TextureTools.vesselTypes) { if (TextureTools.filterTextures.TryGetValue(vType, out Texture2D tex)) { TextureTools.filterStates[vType] = GUILayout.Toggle(TextureTools.filterStates[vType], tex, HighLogic.Skin.button, GUILayout.Height(iconSize.y), GUILayout.Width(iconSize.x)); } } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label(targetMode.text, GUILayout.ExpandWidth(true)); HandleSortMode(sortIcon, parentVessel); GUILayout.EndHorizontal(); scrollVesselPos = GUILayout.BeginScrollView(scrollVesselPos, GUILayout.Height(200), GUILayout.ExpandWidth(true)); foreach (Vessel v in vessels) { if (TextureTools.filterStates.TryGetValue(v.vesselType, out bool show) && show && GUILayout.Button(v.name)) { var x = new ConfigNode(AntennaTarget.nodeName); x.AddValue("name", $"{TargetMode.Vessel}"); x.AddValue("vesselId", v.id); antenna.Target = AntennaTarget.LoadFromConfig(x, antenna); } } GUILayout.EndScrollView(); } if (targetMode.mode == TargetMode.BodyCenter) { GUILayout.BeginHorizontal(); GUILayout.Label(targetMode.text, GUILayout.ExpandWidth(true)); HandleSortMode(sortIcon); GUILayout.EndHorizontal(); scrollBodyPos = GUILayout.BeginScrollView(scrollBodyPos, GUILayout.Height(200), GUILayout.ExpandWidth(true)); foreach (CelestialBody body in FlightGlobals.Bodies) { if (GUILayout.Button(body.name)) { var x = new ConfigNode(AntennaTarget.nodeName); x.AddValue("name", $"{AntennaTarget.TargetMode.BodyLatLonAlt}"); x.AddValue("bodyName", body.name); x.AddValue("latLonAlt", new Vector3(0, 0, (float)-body.Radius)); antenna.Target = AntennaTarget.LoadFromConfig(x, antenna); } } GUILayout.EndScrollView(); } if (targetMode.mode == TargetMode.BodyLatLonAlt) { GUILayout.BeginVertical(); GUILayout.BeginHorizontal(); GUILayout.Label("Lat"); sLat = GUILayout.TextField(sLat, 4); GUILayout.Label("Lon"); sLon = GUILayout.TextField(sLon, 4); GUILayout.Label("Alt"); sAlt = GUILayout.TextField(sAlt, 15); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label(targetMode.text, GUILayout.ExpandWidth(true)); HandleSortMode(sortIcon); GUILayout.EndHorizontal(); scrollBodyPos = GUILayout.BeginScrollView(scrollBodyPos, GUILayout.Height(200), GUILayout.ExpandWidth(true)); foreach (CelestialBody body in FlightGlobals.Bodies) { if (GUILayout.Button(body.name)) { var x = new ConfigNode(AntennaTarget.nodeName); if (float.TryParse(sLat, out float flat) && float.TryParse(sLon, out float flon) && float.TryParse(sAlt, out float falt)) { x.AddValue("name", $"{AntennaTarget.TargetMode.BodyLatLonAlt}"); x.AddValue("bodyName", body.name); x.AddValue("latLonAlt", new Vector3(flat, flon, falt)); antenna.Target = AntennaTarget.LoadFromConfig(x, antenna); } } } GUILayout.EndScrollView(); GUILayout.EndVertical(); } if (targetMode.mode == TargetMode.AzEl) { GUILayout.BeginHorizontal(); GUILayout.Label("Azimuth"); sAzimuth = GUILayout.TextField(sAzimuth, 4); GUILayout.Label("Elevation"); sElevation = GUILayout.TextField(sElevation, 4); GUILayout.EndHorizontal(); if (GUILayout.Button("Apply")) { var x = new ConfigNode(AntennaTarget.nodeName); if (float.TryParse(sAzimuth, out float azimuth) && float.TryParse(sElevation, out float elevation)) { azimuth = Mathf.Clamp(azimuth, 0, 360); elevation = Mathf.Clamp(elevation, -90, 90); x.AddValue("name", $"{AntennaTarget.TargetMode.AzEl}"); x.AddValue("vesselId", parentVessel?.id); x.AddValue("azimuth", azimuth); x.AddValue("elevation", elevation); antenna.Target = AntennaTarget.LoadFromConfig(x, antenna); } } } if (targetMode.mode == TargetMode.OrbitRelative) { GUILayout.BeginHorizontal(); GUILayout.Label("Deflection"); sForward = GUILayout.TextField($"{deflection}", 5); GUILayout.Label("Elevation"); sElevation = GUILayout.TextField(sElevation, 4); GUILayout.EndHorizontal(); float.TryParse(sForward, out deflection); deflection = GUILayout.HorizontalSlider(deflection, -180, 180); if (GUILayout.Button("Apply")) { var x = new ConfigNode(AntennaTarget.nodeName); if (float.TryParse(sElevation, out float elevation)) { deflection = Mathf.Clamp(deflection, -360, 360); elevation = Mathf.Clamp(elevation, -90, 90); x.AddValue("name", $"{AntennaTarget.TargetMode.OrbitRelative}"); x.AddValue("vesselId", parentVessel?.id); x.AddValue("forward", deflection); x.AddValue("elevation", elevation); antenna.Target = AntennaTarget.LoadFromConfig(x, antenna); } } } GUILayout.EndVertical(); GUILayout.Space(15); if (GUILayout.Button("Close")) { Destroy(this); } GUI.DragWindow(); }