void LateUpdate() { if (MapView.MapIsEnabled) { if (fields == null) { FieldInfo mode_f = typeof(OrbitTargeter).GetFields(BindingFlags.NonPublic | BindingFlags.Instance).FirstOrDefault(f => f.FieldType.Name.EndsWith("MenuDrawMode")); Debug.Log("MapViewFixer", "Name of FieldInfo 'mode_f' should be 'menuDrawMode'. The name is = " + mode_f?.Name); FieldInfo context_f = typeof(OrbitTargeter).GetFields(BindingFlags.NonPublic | BindingFlags.Instance).FirstOrDefault(f => f.FieldType == typeof(MapContextMenu)); Debug.Log("MapViewFixer", "Name of FieldInfo 'context_f' should be 'ContextMenu'. The name is = " + context_f?.Name); FieldInfo cast_f = typeof(OrbitTargeter).GetFields(BindingFlags.NonPublic | BindingFlags.Instance).FirstOrDefault(f => f.FieldType == typeof(OrbitRenderer.OrbitCastHit)); Debug.Log("MapViewFixer", "Name of FieldInfo 'cast_f' should be 'orbitCastHit'. The name is = " + cast_f?.Name); fields = new FieldInfo[] { mode_f, context_f, cast_f }; } if (FlightGlobals.ActiveVessel != null) { OrbitTargeter targeter = FlightGlobals.ActiveVessel.orbitTargeter; int mode = (int)fields[0].GetValue(targeter); if (mode == 2) { OrbitRendererBase.OrbitCastHit cast = (OrbitRendererBase.OrbitCastHit)fields[2].GetValue(targeter); CelestialBody body = PSystemManager.Instance.localBodies.Find(b => b.transform.name == cast.or.discoveryInfo.name.Value); if (SigmaBinary.mapViewFixerList.ContainsKey(body)) { CelestialBody body2 = PSystemManager.Instance.localBodies.Find(b => b.transform.name == SigmaBinary.mapViewFixerList[body].transform.name); ((MapContextMenu)fields[1].GetValue(targeter)).Dismiss(); MapContextMenu context = MapContextMenu.Create ( Localizer.Format(body2.displayName).LocalizeRemoveGender(), new Rect(0.5f, 0.5f, 300f, 75f), cast, () => { fields[0].SetValue(targeter, 0); fields[1].SetValue(targeter, null); }, new SetAsTarget ( body2.orbitDriver.Targetable, () => FlightGlobals.fetch.VesselTarget ), new FocusObject ( body2.orbitDriver ) ); fields[1].SetValue(targeter, context); } } } } }
// Stuff void LateUpdate() { FixZooming(); ApplyOrbitVisibility(); RDFixer(); // Remove buttons in map view for barycenters if (MapView.MapIsEnabled) { if (fields == null) { FieldInfo mode_f = typeof(OrbitTargeter).GetFields(BindingFlags.NonPublic | BindingFlags.Instance).FirstOrDefault(f => f.FieldType.IsEnum && f.FieldType.IsNested); FieldInfo context_f = typeof(OrbitTargeter).GetFields(BindingFlags.NonPublic | BindingFlags.Instance).FirstOrDefault(f => f.FieldType == typeof(MapContextMenu)); FieldInfo cast_f = typeof(OrbitTargeter).GetFields(BindingFlags.NonPublic | BindingFlags.Instance).FirstOrDefault(f => f.FieldType == typeof(OrbitRenderer.OrbitCastHit)); fields = new FieldInfo[] { mode_f, context_f, cast_f }; } if (FlightGlobals.ActiveVessel != null) { OrbitTargeter targeter = FlightGlobals.ActiveVessel.orbitTargeter; if (targeter == null) { return; } Int32 mode = (Int32)fields[0].GetValue(targeter); if (mode == 2) { OrbitRenderer.OrbitCastHit cast = (OrbitRenderer.OrbitCastHit)fields[2].GetValue(targeter); CelestialBody body = PSystemManager.Instance.localBodies.Find(b => b.name == cast.or?.discoveryInfo?.name?.Value); if (body == null) { return; } if (body.Has("barycenter") || body.Has("notSelectable")) { if (cast.driver?.Targetable == null) { return; } MapContextMenu context = MapContextMenu.Create(body.name, new Rect(0.5f, 0.5f, 300f, 50f), cast, () => { fields[0].SetValue(targeter, 0); fields[1].SetValue(targeter, null); }, new SetAsTarget(cast.driver.Targetable, () => FlightGlobals.fetch.VesselTarget)); fields[1].SetValue(targeter, context); } } } } foreach (CelestialBody body in PSystemManager.Instance.localBodies) { if (body.afg == null) { continue; } GameObject star_ = KopernicusStar.GetNearest(body).gameObject; Vector3 planet2cam = body.scaledBody.transform.position - body.afg.mainCamera.transform.position; body.afg.lightDot = Mathf.Clamp01(Vector3.Dot(planet2cam, body.afg.mainCamera.transform.position - star_.transform.position) * body.afg.dawnFactor); body.afg.GetComponent <Renderer>().material.SetFloat("_lightDot", body.afg.lightDot); } }
private void ApplyMapTargetPatches() { if (!MapView.MapIsEnabled) { return; } // Grab the needed fields for reflection if (_fields == null) { FieldInfo modeField = typeof(OrbitTargeter).GetFields(BindingFlags.NonPublic | BindingFlags.Instance) .FirstOrDefault(f => f.FieldType.IsEnum && f.FieldType.IsNested); FieldInfo contextField = typeof(OrbitTargeter).GetFields(BindingFlags.NonPublic | BindingFlags.Instance) .FirstOrDefault(f => f.FieldType == typeof(MapContextMenu)); FieldInfo castField = typeof(OrbitTargeter).GetFields(BindingFlags.NonPublic | BindingFlags.Instance) .FirstOrDefault(f => f.FieldType == typeof(OrbitRenderer.OrbitCastHit)); _fields = new[] { modeField, contextField, castField }; } // Remove buttons in map view for barycenters if (!FlightGlobals.ActiveVessel) { return; } OrbitTargeter targeter = FlightGlobals.ActiveVessel.orbitTargeter; if (!targeter) { return; } Int32 mode = (Int32)_fields[0].GetValue(targeter); if (mode != 2) { return; } OrbitRenderer.OrbitCastHit cast = (OrbitRenderer.OrbitCastHit)_fields[2].GetValue(targeter); CelestialBody body = PSystemManager.Instance.localBodies.Find(b => cast.or != null && cast.or.discoveryInfo?.name != null && b.name == cast.or.discoveryInfo.name.Value); if (!body) { return; } if (!body.Has("barycenter") && body.Get("selectable", true)) { return; } if (!cast.driver || cast.driver.Targetable == null) { return; } MapContextMenu context = MapContextMenu.Create(body.name, new Rect(0.5f, 0.5f, 300f, 50f), cast, () => { _fields[0].SetValue(targeter, 0); _fields[1].SetValue(targeter, null); }, new SetAsTarget(cast.driver.Targetable, () => FlightGlobals.fetch.VesselTarget)); _fields[1].SetValue(targeter, context); }
// Stuff void LateUpdate() { FixZooming(); ApplyOrbitVisibility(); RDFixer(); ApplyOrbitIconCustomization(); // Prevent the orbit lines from flickering PlanetariumCamera.Camera.farClipPlane = 1e14f; // Remove buttons in map view for barycenters if (MapView.MapIsEnabled) { if (fields == null) { FieldInfo mode_f = typeof(OrbitTargeter).GetFields(BindingFlags.NonPublic | BindingFlags.Instance).FirstOrDefault(f => f.FieldType.IsEnum && f.FieldType.IsNested); FieldInfo context_f = typeof(OrbitTargeter).GetFields(BindingFlags.NonPublic | BindingFlags.Instance).FirstOrDefault(f => f.FieldType == typeof(MapContextMenu)); #if !KSP131 FieldInfo cast_f = typeof(OrbitTargeter).GetFields(BindingFlags.NonPublic | BindingFlags.Instance).FirstOrDefault(f => f.FieldType == typeof(OrbitRendererBase.OrbitCastHit)); #else FieldInfo cast_f = typeof(OrbitTargeter).GetFields(BindingFlags.NonPublic | BindingFlags.Instance).FirstOrDefault(f => f.FieldType == typeof(OrbitRenderer.OrbitCastHit)); #endif fields = new FieldInfo[] { mode_f, context_f, cast_f }; } if (FlightGlobals.ActiveVessel != null) { OrbitTargeter targeter = FlightGlobals.ActiveVessel.orbitTargeter; if (targeter == null) { return; } Int32 mode = (Int32)fields[0].GetValue(targeter); if (mode == 2) { #if !KSP131 OrbitRendererBase.OrbitCastHit cast = (OrbitRendererBase.OrbitCastHit)fields[2].GetValue(targeter); #else OrbitRenderer.OrbitCastHit cast = (OrbitRenderer.OrbitCastHit)fields[2].GetValue(targeter); #endif CelestialBody body = PSystemManager.Instance.localBodies.Find(b => b.name == cast.or?.discoveryInfo?.name?.Value); if (body == null) { return; } if (body.Has("barycenter") || !body.Get("selectable", true)) { if (cast.driver?.Targetable == null) { return; } MapContextMenu context = MapContextMenu.Create(body.name, new Rect(0.5f, 0.5f, 300f, 50f), cast, () => { fields[0].SetValue(targeter, 0); fields[1].SetValue(targeter, null); }, new SetAsTarget(cast.driver.Targetable, () => FlightGlobals.fetch.VesselTarget)); fields[1].SetValue(targeter, context); } } } } foreach (CelestialBody body in PSystemManager.Instance.localBodies) { if (body.afg == null) { continue; } GameObject star_ = KopernicusStar.GetNearest(body).gameObject; Vector3 planet2cam = body.scaledBody.transform.position - body.afg.mainCamera.transform.position; body.afg.lightDot = Mathf.Clamp01(Vector3.Dot(planet2cam, body.afg.mainCamera.transform.position - star_.transform.position) * body.afg.dawnFactor); body.afg.GetComponent <Renderer>().sharedMaterial.SetFloat("_lightDot", body.afg.lightDot); } // Update the names of the presets in the settings dialog if (HighLogic.LoadedScene == GameScenes.SETTINGS) { foreach (SettingsTerrainDetail detail in Resources.FindObjectsOfTypeAll <SettingsTerrainDetail>()) { detail.displayStringValue = true; detail.stringValues = _details ?? (_details = Templates.PresetDisplayNames.ToArray()); } } }