From eac3a9e1cacc2ed59d5dc3031640f3fa1ef0f147 Mon Sep 17 00:00:00 2001 From: Sigma88 Date: Sun, 16 Jun 2019 01:02:04 +0200 Subject: [PATCH 1/8] fix fps drops --- .../SigmaDimensions/AtmosphereTopLayer.cs | 2 +- [Source]/SigmaDimensions/DebugLogger.cs | 2 +- [Source]/SigmaDimensions/PQSCityFixer.cs | 270 ++++++++++-------- .../SigmaDimensions/PQSMod_SigmaDimensions.cs | 2 +- [Source]/SigmaDimensions/SettingsLoader.cs | 2 +- [Source]/SigmaDimensions/SigmaDimensions.cs | 6 +- [Source]/SigmaDimensions/SpaceCenterFixer.cs | 52 ++-- 7 files changed, 179 insertions(+), 157 deletions(-) diff --git a/[Source]/SigmaDimensions/AtmosphereTopLayer.cs b/[Source]/SigmaDimensions/AtmosphereTopLayer.cs index 95be698..5f4704c 100644 --- a/[Source]/SigmaDimensions/AtmosphereTopLayer.cs +++ b/[Source]/SigmaDimensions/AtmosphereTopLayer.cs @@ -9,7 +9,7 @@ namespace SigmaDimensionsPlugin { [KSPAddon(KSPAddon.Startup.MainMenu, true)] - class AtmosphereTopLayer : MonoBehaviour + internal class AtmosphereTopLayer : MonoBehaviour { Ktype curve = Ktype.Exponential; diff --git a/[Source]/SigmaDimensions/DebugLogger.cs b/[Source]/SigmaDimensions/DebugLogger.cs index f6e15a3..71b79ee 100644 --- a/[Source]/SigmaDimensions/DebugLogger.cs +++ b/[Source]/SigmaDimensions/DebugLogger.cs @@ -26,7 +26,7 @@ internal static void Log(string Method, string message) } [KSPAddon(KSPAddon.Startup.MainMenu, true)] - class DebugWarning : MonoBehaviour + internal class DebugWarning : MonoBehaviour { void Start() { diff --git a/[Source]/SigmaDimensions/PQSCityFixer.cs b/[Source]/SigmaDimensions/PQSCityFixer.cs index cd98ae9..2c5b00d 100644 --- a/[Source]/SigmaDimensions/PQSCityFixer.cs +++ b/[Source]/SigmaDimensions/PQSCityFixer.cs @@ -7,90 +7,103 @@ namespace SigmaDimensionsPlugin { public class PQSCityFixer : MonoBehaviour { + double time = 0; + void Update() { - CelestialBody body = FlightGlobals.currentMainBody; - if (body == null) return; + if (HighLogic.LoadedScene != GameScenes.FLIGHT) return; - PQS pqs = body.pqsController; - if (pqs == null) return; + if (time < 0.2) + { + time += Time.deltaTime; + } + else + { + time = 0; - PQSCity city = GetComponent(); - if (city == null) return; + CelestialBody body = FlightGlobals.currentMainBody; + if (body == null) return; - // Location - Vector3 planet = body.transform.position; - Vector3 building = city.transform.position; // From body to city - Vector3 location = (building - planet).normalized; + PQS pqs = body.pqsController; + if (pqs == null) return; - // Sigma Dimensions Settings - double resize = body.Has("resize") ? body.Get("resize") : 1; - double landscape = body.Has("landscape") ? body.Get("landscape") : 1; - double resizeBuildings = body.Has("resizeBuildings") ? body.Get("resizeBuildings") : 1; + PQSCity city = GetComponent(); + if (city == null) return; - // Max distance - double maxDistance = Math.Abs(2 * pqs.mapMaxHeight); - maxDistance *= resize * landscape > 1 ? resize * landscape : 1; - maxDistance += body.Radius; + // Location + Vector3 planet = body.transform.position; + Vector3 building = city.transform.position; // From body to city + Vector3 location = (building - planet).normalized; + // Sigma Dimensions Settings + double resize = body.Has("resize") ? body.Get("resize") : 1; + double landscape = body.Has("landscape") ? body.Get("landscape") : 1; + double resizeBuildings = body.Has("resizeBuildings") ? body.Get("resizeBuildings") : 1; - RaycastHit[] hits = Physics.RaycastAll(planet + location * (float)maxDistance, -location, (float)maxDistance, LayerMask.GetMask("Local Scenery")); + // Max distance + double maxDistance = Math.Abs(2 * pqs.mapMaxHeight); + maxDistance *= resize * landscape > 1 ? resize * landscape : 1; + maxDistance += body.Radius; - for (int i = 0; i < hits?.Length; i++) - { - if (hits[i].collider?.GetComponent()) + + RaycastHit[] hits = Physics.RaycastAll(planet + location * (float)maxDistance, -location, (float)maxDistance, LayerMask.GetMask("Local Scenery")); + + for (int i = 0; i < hits?.Length; i++) { - Debug.Log("PQSCityFixer", "> Planet: " + body.transform.name); - Debug.Log("PQSCityFixer", " > PQSCity: " + city); - - // PQSCity parameters - double groundLevel = (hits[i].point - planet).magnitude - body.Radius; - Debug.Log("PQSCityFixer", " > Ground Level at Mod (RAYCAST) = " + groundLevel); - double error = pqs.GetSurfaceHeight(city.repositionRadial) - body.Radius - groundLevel; - Debug.Log("PQSCityFixer", " > Ground Level Error at Mod = " + error); - double oceanDepth = body.ocean && groundLevel < 0 ? -groundLevel : 0d; - Debug.Log("PQSCityFixer", " > Ocean Depth at Mod = " + oceanDepth); - groundLevel = body.ocean && groundLevel < 0 ? 0d : groundLevel; - Debug.Log("PQSCityFixer", " > Ground Level at Mod (NEW) = " + groundLevel); - - // Fix Altitude - if (city.repositionToSphere && !city.repositionToSphereSurface) + if (hits[i].collider?.GetComponent()) { - // Offset = Distance from the radius of the planet + Debug.Log("PQSCityFixer", "> Planet: " + body.transform.name); + Debug.Log("PQSCityFixer", " > PQSCity: " + city); + + // PQSCity parameters + double groundLevel = (hits[i].point - planet).magnitude - body.Radius; + Debug.Log("PQSCityFixer", " > Ground Level at Mod (RAYCAST) = " + groundLevel); + double error = pqs.GetSurfaceHeight(city.repositionRadial) - body.Radius - groundLevel; + Debug.Log("PQSCityFixer", " > Ground Level Error at Mod = " + error); + double oceanDepth = body.ocean && groundLevel < 0 ? -groundLevel : 0d; + Debug.Log("PQSCityFixer", " > Ocean Depth at Mod = " + oceanDepth); + groundLevel = body.ocean && groundLevel < 0 ? 0d : groundLevel; + Debug.Log("PQSCityFixer", " > Ground Level at Mod (NEW) = " + groundLevel); + + // Fix Altitude + if (city.repositionToSphere && !city.repositionToSphereSurface) + { + // Offset = Distance from the radius of the planet - Debug.Log("PQSCityFixer", " > PQSCity Original Radius Offset = " + city.repositionRadiusOffset); + Debug.Log("PQSCityFixer", " > PQSCity Original Radius Offset = " + city.repositionRadiusOffset); - double builtInOffset = city.repositionRadiusOffset - groundLevel / (resize * landscape); + double builtInOffset = city.repositionRadiusOffset - groundLevel / (resize * landscape); - Debug.Log("PQSCityFixer", " > Builtuin Offset = " + builtInOffset); + Debug.Log("PQSCityFixer", " > Builtuin Offset = " + builtInOffset); - city.repositionRadiusOffset = groundLevel + error / (resize * landscape) - (groundLevel + error - city.repositionRadiusOffset) / resizeBuildings; + city.repositionRadiusOffset = groundLevel + error / (resize * landscape) - (groundLevel + error - city.repositionRadiusOffset) / resizeBuildings; - Debug.Log("PQSCityFixer", " > PQSCity Fixed Radius Offset = " + city.repositionRadiusOffset); - } - else - { - // Offset = Distance from the surface of the planet - if (!city.repositionToSphereSurface) - { - city.repositionToSphereSurface = true; - city.repositionRadiusOffset = 0; + Debug.Log("PQSCityFixer", " > PQSCity Fixed Radius Offset = " + city.repositionRadiusOffset); } - if (!city.repositionToSphereSurfaceAddHeight) + else { - city.repositionToSphereSurfaceAddHeight = true; - city.repositionRadiusOffset = 0; + // Offset = Distance from the surface of the planet + if (!city.repositionToSphereSurface) + { + city.repositionToSphereSurface = true; + city.repositionRadiusOffset = 0; + } + if (!city.repositionToSphereSurfaceAddHeight) + { + city.repositionToSphereSurfaceAddHeight = true; + city.repositionRadiusOffset = 0; + } + + Debug.Log("PQSCityFixer", " > PQSCity Original Surface Offset = " + city.repositionRadiusOffset); + + city.repositionRadiusOffset = oceanDepth + error / (resize * landscape) - (oceanDepth + error - city.repositionRadiusOffset) / resizeBuildings; + + Debug.Log("PQSCityFixer", " > PQSCity Fixed Surface Offset = " + city.repositionRadiusOffset); } - Debug.Log("PQSCityFixer", " > PQSCity Original Surface Offset = " + city.repositionRadiusOffset); - - city.repositionRadiusOffset = oceanDepth + error / (resize * landscape) - (oceanDepth + error - city.repositionRadiusOffset) / resizeBuildings; - - Debug.Log("PQSCityFixer", " > PQSCity Fixed Surface Offset = " + city.repositionRadiusOffset); + city.Orientate(); + DestroyImmediate(this); } - - city.Orientate(); - DestroyImmediate(this); } } } @@ -98,90 +111,101 @@ void Update() public class PQSCity2Fixer : MonoBehaviour { + double time = 0; + void Update() { - CelestialBody body = FlightGlobals.currentMainBody; - if (body == null) return; + if (time < 0.2) + { + time += Time.deltaTime; + } + else + { + time = 0; - PQS pqs = body.pqsController; - if (pqs == null) return; + CelestialBody body = FlightGlobals.currentMainBody; + if (body == null) return; - PQSCity2 city = GetComponent(); - if (city == null) return; + PQS pqs = body.pqsController; + if (pqs == null) return; - // Location - Vector3 planet = body.transform.position; - Vector3 building = city.transform.position; // From body to city - Vector3 location = (building - planet).normalized; + PQSCity2 city = GetComponent(); + if (city == null) return; - // Sigma Dimensions Settings - double resize = body.Has("resize") ? body.Get("resize") : 1; - double landscape = body.Has("landscape") ? body.Get("landscape") : 1; - double resizeBuildings = body.Has("resizeBuildings") ? body.Get("resizeBuildings") : 1; + // Location + Vector3 planet = body.transform.position; + Vector3 building = city.transform.position; // From body to city + Vector3 location = (building - planet).normalized; - // Max distance - double maxDistance = Math.Abs(2 * pqs.mapMaxHeight); - maxDistance *= resize * landscape > 1 ? resize * landscape : 1; - maxDistance += body.Radius; + // Sigma Dimensions Settings + double resize = body.Has("resize") ? body.Get("resize") : 1; + double landscape = body.Has("landscape") ? body.Get("landscape") : 1; + double resizeBuildings = body.Has("resizeBuildings") ? body.Get("resizeBuildings") : 1; + // Max distance + double maxDistance = Math.Abs(2 * pqs.mapMaxHeight); + maxDistance *= resize * landscape > 1 ? resize * landscape : 1; + maxDistance += body.Radius; - RaycastHit[] hits = Physics.RaycastAll(planet + location * (float)maxDistance, -location, (float)maxDistance, LayerMask.GetMask("Local Scenery")); - for (int i = 0; i < hits?.Length; i++) - { - if (hits[i].collider?.GetComponent()) + RaycastHit[] hits = Physics.RaycastAll(planet + location * (float)maxDistance, -location, (float)maxDistance, LayerMask.GetMask("Local Scenery")); + + for (int i = 0; i < hits?.Length; i++) { - Debug.Log("PQSCity2Fixer", "> Planet: " + body.transform.name); - Debug.Log("PQSCity2Fixer", " > PQSCity2: " + city); - - // PQSCity2 parameters - double groundLevel = (hits[i].point - planet).magnitude - body.Radius; - Debug.Log("PQSCity2Fixer", " > Ground Level at Mod (RAYCAST) = " + groundLevel); - double error = pqs.GetSurfaceHeight(city.PlanetRelativePosition) - body.Radius - groundLevel; - Debug.Log("PQSCity2Fixer", " > Ground Level Error at Mod = " + error); - double oceanDepth = body.ocean && groundLevel < 0 ? -groundLevel : 0d; - Debug.Log("PQSCity2Fixer", " > Ocean Depth at Mod = " + oceanDepth); - groundLevel = body.ocean && groundLevel < 0 ? 0d : groundLevel; - Debug.Log("PQSCity2Fixer", " > Ground Level at Mod (NEW) = " + groundLevel); - - // Because, SQUAD - city.PositioningPoint.localPosition /= (float)(body.Radius + city.alt); - - // Fix Altitude - if (!city.snapToSurface) + if (hits[i].collider?.GetComponent()) { - // Alt = Distance from the radius of the planet + Debug.Log("PQSCity2Fixer", "> Planet: " + body.transform.name); + Debug.Log("PQSCity2Fixer", " > PQSCity2: " + city); + + // PQSCity2 parameters + double groundLevel = (hits[i].point - planet).magnitude - body.Radius; + Debug.Log("PQSCity2Fixer", " > Ground Level at Mod (RAYCAST) = " + groundLevel); + double error = pqs.GetSurfaceHeight(city.PlanetRelativePosition) - body.Radius - groundLevel; + Debug.Log("PQSCity2Fixer", " > Ground Level Error at Mod = " + error); + double oceanDepth = body.ocean && groundLevel < 0 ? -groundLevel : 0d; + Debug.Log("PQSCity2Fixer", " > Ocean Depth at Mod = " + oceanDepth); + groundLevel = body.ocean && groundLevel < 0 ? 0d : groundLevel; + Debug.Log("PQSCity2Fixer", " > Ground Level at Mod (NEW) = " + groundLevel); + + // Because, SQUAD + city.PositioningPoint.localPosition /= (float)(body.Radius + city.alt); + + // Fix Altitude + if (!city.snapToSurface) + { + // Alt = Distance from the radius of the planet - Debug.Log("PQSCity2Fixer", " > PQSCity2 Original Radius Offset = " + city.alt); + Debug.Log("PQSCity2Fixer", " > PQSCity2 Original Radius Offset = " + city.alt); - double builtInOffset = city.alt - groundLevel / (resize * landscape); + double builtInOffset = city.alt - groundLevel / (resize * landscape); - Debug.Log("PQSCity2Fixer", " > Builtuin Offset = " + builtInOffset); + Debug.Log("PQSCity2Fixer", " > Builtuin Offset = " + builtInOffset); - city.alt = groundLevel + error / (resize * landscape) - (groundLevel + error - city.alt) / resizeBuildings; + city.alt = groundLevel + error / (resize * landscape) - (groundLevel + error - city.alt) / resizeBuildings; - Debug.Log("PQSCity2Fixer", " > PQSCity2 Fixed Radius Offset = " + city.alt); - } - else - { - // Offset = Distance from the surface of the planet + Debug.Log("PQSCity2Fixer", " > PQSCity2 Fixed Radius Offset = " + city.alt); + } + else + { + // Offset = Distance from the surface of the planet - Debug.Log("PQSCity2Fixer", " > PQSCity2 Original Surface Offset = " + city.snapHeightOffset); + Debug.Log("PQSCity2Fixer", " > PQSCity2 Original Surface Offset = " + city.snapHeightOffset); - double newOffset = oceanDepth + error / (resize * landscape) - (oceanDepth + error - city.snapHeightOffset) / resizeBuildings; + double newOffset = oceanDepth + error / (resize * landscape) - (oceanDepth + error - city.snapHeightOffset) / resizeBuildings; - city.alt += newOffset - city.snapHeightOffset; - city.snapHeightOffset = newOffset; + city.alt += newOffset - city.snapHeightOffset; + city.snapHeightOffset = newOffset; - Debug.Log("PQSCity2Fixer", " > PQSCity2 New Surface Offset = " + city.snapHeightOffset); - } + Debug.Log("PQSCity2Fixer", " > PQSCity2 New Surface Offset = " + city.snapHeightOffset); + } - // Because, SQUAD - city.PositioningPoint.localPosition *= (float)(body.Radius + city.alt); + // Because, SQUAD + city.PositioningPoint.localPosition *= (float)(body.Radius + city.alt); - // Apply Changes and Destroy - city.Orientate(); - DestroyImmediate(this); + // Apply Changes and Destroy + city.Orientate(); + DestroyImmediate(this); + } } } } diff --git a/[Source]/SigmaDimensions/PQSMod_SigmaDimensions.cs b/[Source]/SigmaDimensions/PQSMod_SigmaDimensions.cs index 5cdaa96..8dd596b 100644 --- a/[Source]/SigmaDimensions/PQSMod_SigmaDimensions.cs +++ b/[Source]/SigmaDimensions/PQSMod_SigmaDimensions.cs @@ -109,7 +109,7 @@ void IParserEventSubscriber.PostApply(ConfigNode node) [KSPAddon(KSPAddon.Startup.Instantly, true)] - class PQSModsFixer : MonoBehaviour + internal class PQSModsFixer : MonoBehaviour { void Start() { diff --git a/[Source]/SigmaDimensions/SettingsLoader.cs b/[Source]/SigmaDimensions/SettingsLoader.cs index 4cd3fb9..8739983 100644 --- a/[Source]/SigmaDimensions/SettingsLoader.cs +++ b/[Source]/SigmaDimensions/SettingsLoader.cs @@ -8,7 +8,7 @@ namespace SigmaDimensionsPlugin { [ParserTargetExternal("Body", "SigmaDimensions", "Kopernicus")] - class SettingsLoader : BaseLoader, IParserEventSubscriber + internal class SettingsLoader : BaseLoader, IParserEventSubscriber { [ParserTarget("Resize", Optional = true)] NumericParser resize diff --git a/[Source]/SigmaDimensions/SigmaDimensions.cs b/[Source]/SigmaDimensions/SigmaDimensions.cs index 00a5220..e29ebd8 100644 --- a/[Source]/SigmaDimensions/SigmaDimensions.cs +++ b/[Source]/SigmaDimensions/SigmaDimensions.cs @@ -9,7 +9,7 @@ namespace SigmaDimensionsPlugin { [KSPAddon(KSPAddon.Startup.MainMenu, true)] - class SigmaDimensions : MonoBehaviour + internal class SigmaDimensions : MonoBehaviour { double resize = 1; double landscape = 1; @@ -80,7 +80,7 @@ void CityFixer(PQSCity city) // Add PQSCityFixer Component - PQSCityFixer fixer = city.GetComponent() ?? city.gameObject.AddComponent(); + PQSCityFixer fixer = city.gameObject.AddOrGetComponent(); // Terrain @@ -151,7 +151,7 @@ void City2Fixer(PQSCity2 city) // Add PQSCity2Fixer Component - PQSCity2Fixer fixer = city.GetComponent() ?? city.gameObject.AddComponent(); + PQSCity2Fixer fixer = city.gameObject.AddOrGetComponent(); // Terrain diff --git a/[Source]/SigmaDimensions/SpaceCenterFixer.cs b/[Source]/SigmaDimensions/SpaceCenterFixer.cs index a761694..0541d50 100644 --- a/[Source]/SigmaDimensions/SpaceCenterFixer.cs +++ b/[Source]/SigmaDimensions/SpaceCenterFixer.cs @@ -1,48 +1,46 @@ -using System; -using UnityEngine; +using UnityEngine; using Kopernicus; namespace SigmaDimensionsPlugin { - [KSPAddon(KSPAddon.Startup.FlightAndKSC, false)] - class SpaceCenterFixer : MonoBehaviour + [KSPAddon(KSPAddon.Startup.SpaceCentre, true)] + internal class LightsFixer : MonoBehaviour { void Start() { - if (!HighLogic.LoadedSceneIsFlight) + foreach (CelestialBody cb in FlightGlobals.Bodies) { - foreach (SpaceCenterCamera2 camera in Resources.FindObjectsOfTypeAll()) + if (cb?.pqsController != null) { - float resizeBuildings = (float)FlightGlobals.GetHomeBody().Get("resizeBuildings"); + if (cb.Has("resizeBuildings")) + { + float resizeBuildings = (float)cb.Get("resizeBuildings"); - camera.zoomInitial *= resizeBuildings; - camera.zoomMax *= resizeBuildings; - camera.zoomMin *= resizeBuildings; - camera.zoomSpeed *= resizeBuildings; + foreach (Light light in cb.pqsController.GetComponentsInChildren(true)) + { + UnityEngine.Debug.Log("SigmaLog: LIGHT = " + light); + light.range *= resizeBuildings; + } + } } } } + } - - bool fixLight = true; - Light light = null; - - void Update() + [KSPAddon(KSPAddon.Startup.SpaceCentre, false)] + internal class SpaceCenterFixer : MonoBehaviour + { + void Start() { - if (fixLight) + foreach (SpaceCenterCamera2 camera in Resources.FindObjectsOfTypeAll()) { - if (light == null) - { - light = Array.Find((Light[])FindObjectsOfType(typeof(Light)), o => o.name == "Spotlight" && o.tag == "KSC_Pad_Water_Tower"); - } - else - { - if (FlightGlobals.GetHomeBody().Has("resizeBuildings")) - light.range *= (float)(FlightGlobals.GetHomeBody().Get("resizeBuildings")); + float resizeBuildings = (float)FlightGlobals.GetHomeBody().Get("resizeBuildings"); - fixLight = false; - } + camera.zoomInitial *= resizeBuildings; + camera.zoomMax *= resizeBuildings; + camera.zoomMin *= resizeBuildings; + camera.zoomSpeed *= resizeBuildings; } } } From ddfaadbd8219589bf2f6ec02dfe8efcc14ef5233 Mon Sep 17 00:00:00 2001 From: Sigma88 Date: Mon, 17 Jun 2019 15:37:29 +0200 Subject: [PATCH 2/8] remove debug spam --- [Source]/SigmaDimensions/SpaceCenterFixer.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/[Source]/SigmaDimensions/SpaceCenterFixer.cs b/[Source]/SigmaDimensions/SpaceCenterFixer.cs index 0541d50..38f45e3 100644 --- a/[Source]/SigmaDimensions/SpaceCenterFixer.cs +++ b/[Source]/SigmaDimensions/SpaceCenterFixer.cs @@ -19,7 +19,6 @@ void Start() foreach (Light light in cb.pqsController.GetComponentsInChildren(true)) { - UnityEngine.Debug.Log("SigmaLog: LIGHT = " + light); light.range *= resizeBuildings; } } From 8575c4859c97d669fb90084bc64fe101d2b9a6bf Mon Sep 17 00:00:00 2001 From: Sigma88 Date: Mon, 17 Jun 2019 16:54:32 +0200 Subject: [PATCH 3/8] fix altitude calculations --- [Source]/SigmaDimensions/PQSCityFixer.cs | 91 +++++++++++++-------- [Source]/SigmaDimensions/SigmaDimensions.cs | 73 ++++++++--------- 2 files changed, 91 insertions(+), 73 deletions(-) diff --git a/[Source]/SigmaDimensions/PQSCityFixer.cs b/[Source]/SigmaDimensions/PQSCityFixer.cs index 2c5b00d..2fdac15 100644 --- a/[Source]/SigmaDimensions/PQSCityFixer.cs +++ b/[Source]/SigmaDimensions/PQSCityFixer.cs @@ -11,8 +11,6 @@ public class PQSCityFixer : MonoBehaviour void Update() { - if (HighLogic.LoadedScene != GameScenes.FLIGHT) return; - if (time < 0.2) { time += Time.deltaTime; @@ -45,7 +43,6 @@ void Update() maxDistance *= resize * landscape > 1 ? resize * landscape : 1; maxDistance += body.Radius; - RaycastHit[] hits = Physics.RaycastAll(planet + location * (float)maxDistance, -location, (float)maxDistance, LayerMask.GetMask("Local Scenery")); for (int i = 0; i < hits?.Length; i++) @@ -56,47 +53,61 @@ void Update() Debug.Log("PQSCityFixer", " > PQSCity: " + city); // PQSCity parameters + double oldGroundLevel = pqs.GetSurfaceHeight(city.repositionRadial) - body.Radius; + Debug.Log("PQSCityFixer", " > Old Ground Level at Mod (GETSURFACE) = " + oldGroundLevel); + double oldOceanOffset = body.ocean && oldGroundLevel < 0 ? oldGroundLevel : 0d; + Debug.Log("PQSCityFixer", " > Old Ocean Offset at Mod = " + oldOceanOffset); + oldGroundLevel = body.ocean && oldGroundLevel < 0 ? 0d : oldGroundLevel; + Debug.Log("PQSCityFixer", " > Old Ground Level at Mod (WITH OCEAN) = " + oldGroundLevel); + double groundLevel = (hits[i].point - planet).magnitude - body.Radius; Debug.Log("PQSCityFixer", " > Ground Level at Mod (RAYCAST) = " + groundLevel); - double error = pqs.GetSurfaceHeight(city.repositionRadial) - body.Radius - groundLevel; - Debug.Log("PQSCityFixer", " > Ground Level Error at Mod = " + error); - double oceanDepth = body.ocean && groundLevel < 0 ? -groundLevel : 0d; - Debug.Log("PQSCityFixer", " > Ocean Depth at Mod = " + oceanDepth); + double oceanOffset = body.ocean && groundLevel < 0 ? groundLevel : 0d; + Debug.Log("PQSCityFixer", " > Ocean Offset at Mod = " + oceanOffset); groundLevel = body.ocean && groundLevel < 0 ? 0d : groundLevel; - Debug.Log("PQSCityFixer", " > Ground Level at Mod (NEW) = " + groundLevel); + Debug.Log("PQSCityFixer", " > Ground Level at Mod (WITH OCEAN) = " + groundLevel); // Fix Altitude - if (city.repositionToSphere && !city.repositionToSphereSurface) + if (!city.repositionToSphere && !city.repositionToSphereSurface) + { + // Offset = Distance from the center of the planet + // THIS IS NOT POSSIBLE AS OF KSP 1.7.1 + + Debug.Log("PQSCityFixer", " > PQSCity Current Center Offset = " + city.repositionRadiusOffset); + + double builtInOffset = (city.repositionRadiusOffset - body.Radius - oldGroundLevel - oceanOffset) / resizeBuildings - (groundLevel + oceanOffset - oldGroundLevel - oldOceanOffset) / (resize * landscape); + + Debug.Log("PQSCityFixer", " > Builtin Offset = " + builtInOffset); + + city.repositionRadiusOffset = body.Radius + groundLevel + oceanOffset + builtInOffset * resizeBuildings; + + Debug.Log("PQSCityFixer", " > PQSCity Fixed Center Offset = " + city.repositionRadiusOffset); + } + else if (city.repositionToSphere && !city.repositionToSphereSurface) { // Offset = Distance from the radius of the planet - Debug.Log("PQSCityFixer", " > PQSCity Original Radius Offset = " + city.repositionRadiusOffset); + Debug.Log("PQSCityFixer", " > PQSCity Current Radius Offset = " + city.repositionRadiusOffset); - double builtInOffset = city.repositionRadiusOffset - groundLevel / (resize * landscape); + double builtInOffset = (city.repositionRadiusOffset - oldGroundLevel) / resizeBuildings - (groundLevel - oldGroundLevel) / (resize * landscape); - Debug.Log("PQSCityFixer", " > Builtuin Offset = " + builtInOffset); + Debug.Log("PQSCityFixer", " > Builtin Offset = " + builtInOffset); - city.repositionRadiusOffset = groundLevel + error / (resize * landscape) - (groundLevel + error - city.repositionRadiusOffset) / resizeBuildings; + city.repositionRadiusOffset = groundLevel + builtInOffset * resizeBuildings; Debug.Log("PQSCityFixer", " > PQSCity Fixed Radius Offset = " + city.repositionRadiusOffset); } else { // Offset = Distance from the surface of the planet - if (!city.repositionToSphereSurface) - { - city.repositionToSphereSurface = true; - city.repositionRadiusOffset = 0; - } - if (!city.repositionToSphereSurfaceAddHeight) - { - city.repositionToSphereSurfaceAddHeight = true; - city.repositionRadiusOffset = 0; - } - Debug.Log("PQSCityFixer", " > PQSCity Original Surface Offset = " + city.repositionRadiusOffset); + Debug.Log("PQSCityFixer", " > PQSCity Current Surface Offset = " + city.repositionRadiusOffset); + + double builtInOffset = city.repositionRadiusOffset / resizeBuildings - (groundLevel + oceanOffset - oldGroundLevel - oldOceanOffset) / (resize * landscape); + + Debug.Log("PQSCityFixer", " > Builtin Offset = " + builtInOffset); - city.repositionRadiusOffset = oceanDepth + error / (resize * landscape) - (oceanDepth + error - city.repositionRadiusOffset) / resizeBuildings; + city.repositionRadiusOffset = builtInOffset * resizeBuildings + groundLevel + oceanOffset - oldGroundLevel - oldOceanOffset; Debug.Log("PQSCityFixer", " > PQSCity Fixed Surface Offset = " + city.repositionRadiusOffset); } @@ -147,7 +158,6 @@ void Update() maxDistance *= resize * landscape > 1 ? resize * landscape : 1; maxDistance += body.Radius; - RaycastHit[] hits = Physics.RaycastAll(planet + location * (float)maxDistance, -location, (float)maxDistance, LayerMask.GetMask("Local Scenery")); for (int i = 0; i < hits?.Length; i++) @@ -158,12 +168,17 @@ void Update() Debug.Log("PQSCity2Fixer", " > PQSCity2: " + city); // PQSCity2 parameters + double oldGroundLevel = pqs.GetSurfaceHeight(city.PlanetRelativePosition) - body.Radius; + Debug.Log("PQSCity2Fixer", " > Old Ground Level at Mod (GETSURFACE) = " + oldGroundLevel); + double oldOceanOffset = body.ocean && oldGroundLevel < 0 ? oldGroundLevel : 0d; + Debug.Log("PQSCity2Fixer", " > Old Ocean Offset at Mod = " + oldOceanOffset); + oldGroundLevel = body.ocean && oldGroundLevel < 0 ? 0d : oldGroundLevel; + Debug.Log("PQSCity2Fixer", " > Old Ground Level at Mod (WITH OCEAN) = " + oldGroundLevel); + double groundLevel = (hits[i].point - planet).magnitude - body.Radius; Debug.Log("PQSCity2Fixer", " > Ground Level at Mod (RAYCAST) = " + groundLevel); - double error = pqs.GetSurfaceHeight(city.PlanetRelativePosition) - body.Radius - groundLevel; - Debug.Log("PQSCity2Fixer", " > Ground Level Error at Mod = " + error); - double oceanDepth = body.ocean && groundLevel < 0 ? -groundLevel : 0d; - Debug.Log("PQSCity2Fixer", " > Ocean Depth at Mod = " + oceanDepth); + double oceanOffset = body.ocean && groundLevel < 0 ? groundLevel : 0d; + Debug.Log("PQSCity2Fixer", " > Ocean Offset at Mod = " + oceanOffset); groundLevel = body.ocean && groundLevel < 0 ? 0d : groundLevel; Debug.Log("PQSCity2Fixer", " > Ground Level at Mod (NEW) = " + groundLevel); @@ -177,11 +192,11 @@ void Update() Debug.Log("PQSCity2Fixer", " > PQSCity2 Original Radius Offset = " + city.alt); - double builtInOffset = city.alt - groundLevel / (resize * landscape); + double builtInOffset = (city.alt - oldGroundLevel) / resizeBuildings - (groundLevel - oldGroundLevel) / (resize * landscape); - Debug.Log("PQSCity2Fixer", " > Builtuin Offset = " + builtInOffset); + Debug.Log("PQSCity2Fixer", " > Builtin Offset = " + builtInOffset); - city.alt = groundLevel + error / (resize * landscape) - (groundLevel + error - city.alt) / resizeBuildings; + city.alt = groundLevel + builtInOffset * resizeBuildings; Debug.Log("PQSCity2Fixer", " > PQSCity2 Fixed Radius Offset = " + city.alt); } @@ -191,12 +206,16 @@ void Update() Debug.Log("PQSCity2Fixer", " > PQSCity2 Original Surface Offset = " + city.snapHeightOffset); - double newOffset = oceanDepth + error / (resize * landscape) - (oceanDepth + error - city.snapHeightOffset) / resizeBuildings; + double builtInOffset = city.snapHeightOffset / resizeBuildings - (groundLevel + oceanOffset - oldGroundLevel - oldOceanOffset) / (resize * landscape); + + Debug.Log("PQSCity2Fixer", " > Builtin Offset = " + builtInOffset); + + double newOffset = builtInOffset * resizeBuildings + groundLevel + oceanOffset - oldGroundLevel - oldOceanOffset; + + Debug.Log("PQSCity2Fixer", " > PQSCity Fixed Surface Offset = " + newOffset); city.alt += newOffset - city.snapHeightOffset; city.snapHeightOffset = newOffset; - - Debug.Log("PQSCity2Fixer", " > PQSCity2 New Surface Offset = " + city.snapHeightOffset); } // Because, SQUAD diff --git a/[Source]/SigmaDimensions/SigmaDimensions.cs b/[Source]/SigmaDimensions/SigmaDimensions.cs index e29ebd8..d35cc59 100644 --- a/[Source]/SigmaDimensions/SigmaDimensions.cs +++ b/[Source]/SigmaDimensions/SigmaDimensions.cs @@ -45,7 +45,6 @@ void Start() } } - // All PQSCity2 mods PQSCity2[] cities2 = body.GetComponentsInChildren(true); @@ -67,7 +66,6 @@ void CityFixer(PQSCity city) // Resize the Building city.transform.localScale *= (float)resizeBuildings; - // Fix PQSCity Groups if (body.Has("PQSCityGroups")) { @@ -78,54 +76,60 @@ void CityFixer(PQSCity city) } } - // Add PQSCityFixer Component PQSCityFixer fixer = city.gameObject.AddOrGetComponent(); - // Terrain double groundLevel = body.pqsController.GetSurfaceHeight(city.repositionRadial) - body.Radius; - double oceanDepth = body.ocean && groundLevel < 0 ? -groundLevel : 0d; + Debug.Log("SigmaDimensions.CityFixer", " > Ground Level at Mod (GETSURFACE) = " + groundLevel); + double oceanOffset = body.ocean && groundLevel < 0 ? groundLevel : 0d; + Debug.Log("SigmaDimensions.CityFixer", " > Ocean Offset at Mod = " + oceanOffset); groundLevel = body.ocean && groundLevel < 0 ? 0d : groundLevel; - + Debug.Log("SigmaDimensions.CityFixer", " > Ground Level at Mod (WITH OCEAN) = " + groundLevel); // Fix Altitude - if (city.repositionToSphere && !city.repositionToSphereSurface) + if (!city.repositionToSphere && !city.repositionToSphereSurface) { - double builtInOffset = city.repositionRadiusOffset - groundLevel / (resize * landscape); + // Offset = Distance from the center of the planet + // THIS IS NOT POSSIBLE AS OF KSP 1.7.1 + + Debug.Log("SigmaDimensions.CityFixer", " > PQSCity Original Center Offset = " + city.repositionRadiusOffset); + + double builtInOffset = city.repositionRadiusOffset - (groundLevel + oceanOffset) / (resize * landscape) - body.Radius / resize; + + Debug.Log("SigmaDimensions.CityFixer", " > Builtin Offset = " + builtInOffset); - Debug.Log("SigmaDimensions.CityFixer", " > Builtuin Offset = " + builtInOffset); + city.repositionRadiusOffset = body.Radius + groundLevel + oceanOffset + builtInOffset * resizeBuildings; + Debug.Log("SigmaDimensions.CityFixer", " > PQSCity Fixed Center Offset = " + city.repositionRadiusOffset); + } + else if (city.repositionToSphere && !city.repositionToSphereSurface) + { // Offset = Distance from the radius of the planet Debug.Log("SigmaDimensions.CityFixer", " > PQSCity Original Radius Offset = " + city.repositionRadiusOffset); + double builtInOffset = city.repositionRadiusOffset - groundLevel / (resize * landscape); + + Debug.Log("SigmaDimensions.CityFixer", " > Builtin Offset = " + builtInOffset); + city.repositionRadiusOffset = groundLevel + builtInOffset * resizeBuildings; Debug.Log("SigmaDimensions.CityFixer", " > PQSCity Fixed Radius Offset = " + city.repositionRadiusOffset); } else { - if (!city.repositionToSphereSurface) - { - city.repositionToSphereSurface = true; - city.repositionRadiusOffset = 0; - } + // Offset = Distance from the surface of the planet + if (!city.repositionToSphereSurfaceAddHeight) { city.repositionToSphereSurfaceAddHeight = true; city.repositionRadiusOffset = 0; } - double builtInOffset = city.repositionRadiusOffset - oceanDepth / (resize * landscape); - - Debug.Log("SigmaDimensions.CityFixer", " > Builtuin Offset = " + builtInOffset); - - // Offset = Distance from the surface of the planet - Debug.Log("SigmaDimensions.CityFixer", " > PQSCity Original Surface Offset = " + city.repositionRadiusOffset); - city.repositionRadiusOffset = oceanDepth + builtInOffset * resizeBuildings; + city.repositionRadiusOffset *= resizeBuildings; Debug.Log("SigmaDimensions.CityFixer", " > PQSCity Fixed Surface Offset = " + city.repositionRadiusOffset); } @@ -138,7 +142,6 @@ void City2Fixer(PQSCity2 city) // Resize the Building city.transform.localScale *= (float)resizeBuildings; - // Fix PQSCity Groups if (body.Has("PQSCityGroups")) { @@ -149,45 +152,41 @@ void City2Fixer(PQSCity2 city) } } - // Add PQSCity2Fixer Component PQSCity2Fixer fixer = city.gameObject.AddOrGetComponent(); - // Terrain double groundLevel = body.pqsController.GetSurfaceHeight(city.PlanetRelativePosition) - body.Radius; - double oceanDepth = body.ocean && groundLevel < 0 ? -groundLevel : 0d; + Debug.Log("SigmaDimensions.City2Fixer", " > Ground Level at Mod (GETSURFACE) = " + groundLevel); + double oceanOffset = body.ocean && groundLevel < 0 ? groundLevel : 0d; + Debug.Log("SigmaDimensions.City2Fixer", " > Ocean Offset at Mod = " + oceanOffset); groundLevel = body.ocean && groundLevel < 0 ? 0d : groundLevel; - + Debug.Log("SigmaDimensions.City2Fixer", " > Ground Level at Mod (WITH OCEAN) = " + groundLevel); // Fix Altitude if (!city.snapToSurface) { - double builtInOffset = city.alt - groundLevel / (resize * landscape); - - Debug.Log("SigmaDimensions.City2Fixer", " > Builtuin Offset = " + builtInOffset); - // Offset = Distance from the radius of the planet Debug.Log("SigmaDimensions.City2Fixer", " > PQSCity Original Radius Offset = " + city.alt); + double builtInOffset = city.alt - groundLevel / (resize * landscape); + + Debug.Log("SigmaDimensions.City2Fixer", " > Builtin Offset = " + builtInOffset); + city.alt = groundLevel + builtInOffset * resizeBuildings; Debug.Log("SigmaDimensions.City2Fixer", " > PQSCity Fixed Radius Offset = " + city.alt); } else { - double builtInOffset = city.snapHeightOffset - oceanDepth / (resize * landscape); - - Debug.Log("SigmaDimensions.CityFixer", " > Builtuin Offset = " + builtInOffset); - // Offset = Distance from the surface of the planet - Debug.Log("SigmaDimensions.CityFixer", " > PQSCity Original Surface Offset = " + city.snapHeightOffset); + Debug.Log("SigmaDimensions.City2Fixer", " > PQSCity Original Surface Offset = " + city.snapHeightOffset); - city.snapHeightOffset = oceanDepth + builtInOffset * resizeBuildings; + city.snapHeightOffset *= resizeBuildings; - Debug.Log("SigmaDimensions.CityFixer", " > PQSCity Fixed Surface Offset = " + city.snapHeightOffset); + Debug.Log("SigmaDimensions.City2Fixer", " > PQSCity Fixed Surface Offset = " + city.snapHeightOffset); } } From ed52e994361228e243ec85aa60cb19d7b6c562a6 Mon Sep 17 00:00:00 2001 From: Sigma88 Date: Mon, 17 Jun 2019 17:21:50 +0200 Subject: [PATCH 4/8] note --- [Source]/SigmaDimensions/PQSCityFixer.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/[Source]/SigmaDimensions/PQSCityFixer.cs b/[Source]/SigmaDimensions/PQSCityFixer.cs index 2fdac15..d42bcf7 100644 --- a/[Source]/SigmaDimensions/PQSCityFixer.cs +++ b/[Source]/SigmaDimensions/PQSCityFixer.cs @@ -112,6 +112,7 @@ void Update() Debug.Log("PQSCityFixer", " > PQSCity Fixed Surface Offset = " + city.repositionRadiusOffset); } + // Apply Changes and Destroy city.Orientate(); DestroyImmediate(this); } From fc95de1b6bbc4b3522e92a9fc8c26bcfac2bd11a Mon Sep 17 00:00:00 2001 From: Sigma88 Date: Mon, 17 Jun 2019 20:50:27 +0200 Subject: [PATCH 5/8] PQSCity2 --- [Source]/SigmaDimensions/PQSCityFixer.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/[Source]/SigmaDimensions/PQSCityFixer.cs b/[Source]/SigmaDimensions/PQSCityFixer.cs index d42bcf7..47e882f 100644 --- a/[Source]/SigmaDimensions/PQSCityFixer.cs +++ b/[Source]/SigmaDimensions/PQSCityFixer.cs @@ -213,7 +213,7 @@ void Update() double newOffset = builtInOffset * resizeBuildings + groundLevel + oceanOffset - oldGroundLevel - oldOceanOffset; - Debug.Log("PQSCity2Fixer", " > PQSCity Fixed Surface Offset = " + newOffset); + Debug.Log("PQSCity2Fixer", " > PQSCity2 Fixed Surface Offset = " + newOffset); city.alt += newOffset - city.snapHeightOffset; city.snapHeightOffset = newOffset; From f0a9255c7eb6e4d49db7b1a73842dfa51b6ab082 Mon Sep 17 00:00:00 2001 From: Sigma88 Date: Mon, 17 Jun 2019 21:02:40 +0200 Subject: [PATCH 6/8] clean up code --- [Source]/SigmaDimensions/Configs.cs | 12 -- .../{ => Dimensions}/AtmosphereTopLayer.cs | 0 .../{ => Dimensions}/Compatibility.cs | 0 .../{ => Dimensions}/SigmaDimensions.cs | 0 .../LightsFixer.cs} | 17 --- .../SigmaDimensions/PQSCity/PQSCity2Fixer.cs | 117 ++++++++++++++++++ .../{ => PQSCity}/PQSCityFixer.cs | 110 ---------------- .../{ => PQSCity}/PQSCityGroupsLoader.cs | 0 .../PQSCity/SpaceCenterFixer.cs | 23 ++++ .../PQSMod/PQSMod_SigmaDimensions.cs | 104 ++++++++++++++++ .../PQSModsFixer.cs} | 101 --------------- .../SigmaDimensions/SigmaDimensions.csproj | 18 +-- 12 files changed, 254 insertions(+), 248 deletions(-) delete mode 100644 [Source]/SigmaDimensions/Configs.cs rename [Source]/SigmaDimensions/{ => Dimensions}/AtmosphereTopLayer.cs (100%) rename [Source]/SigmaDimensions/{ => Dimensions}/Compatibility.cs (100%) rename [Source]/SigmaDimensions/{ => Dimensions}/SigmaDimensions.cs (100%) rename [Source]/SigmaDimensions/{SpaceCenterFixer.cs => PQSCity/LightsFixer.cs} (56%) create mode 100644 [Source]/SigmaDimensions/PQSCity/PQSCity2Fixer.cs rename [Source]/SigmaDimensions/{ => PQSCity}/PQSCityFixer.cs (53%) rename [Source]/SigmaDimensions/{ => PQSCity}/PQSCityGroupsLoader.cs (100%) create mode 100644 [Source]/SigmaDimensions/PQSCity/SpaceCenterFixer.cs create mode 100644 [Source]/SigmaDimensions/PQSMod/PQSMod_SigmaDimensions.cs rename [Source]/SigmaDimensions/{PQSMod_SigmaDimensions.cs => PQSMod/PQSModsFixer.cs} (63%) diff --git a/[Source]/SigmaDimensions/Configs.cs b/[Source]/SigmaDimensions/Configs.cs deleted file mode 100644 index 3d3de2b..0000000 --- a/[Source]/SigmaDimensions/Configs.cs +++ /dev/null @@ -1,12 +0,0 @@ -/* -namespace SigmaDimensionsPlugin -{ - public class Configs - { - public static void ModuleManagerPostLoad() - { - UnityEngine.Debug.Log("SigmaLog: SD2"); - } - } -} -*/ diff --git a/[Source]/SigmaDimensions/AtmosphereTopLayer.cs b/[Source]/SigmaDimensions/Dimensions/AtmosphereTopLayer.cs similarity index 100% rename from [Source]/SigmaDimensions/AtmosphereTopLayer.cs rename to [Source]/SigmaDimensions/Dimensions/AtmosphereTopLayer.cs diff --git a/[Source]/SigmaDimensions/Compatibility.cs b/[Source]/SigmaDimensions/Dimensions/Compatibility.cs similarity index 100% rename from [Source]/SigmaDimensions/Compatibility.cs rename to [Source]/SigmaDimensions/Dimensions/Compatibility.cs diff --git a/[Source]/SigmaDimensions/SigmaDimensions.cs b/[Source]/SigmaDimensions/Dimensions/SigmaDimensions.cs similarity index 100% rename from [Source]/SigmaDimensions/SigmaDimensions.cs rename to [Source]/SigmaDimensions/Dimensions/SigmaDimensions.cs diff --git a/[Source]/SigmaDimensions/SpaceCenterFixer.cs b/[Source]/SigmaDimensions/PQSCity/LightsFixer.cs similarity index 56% rename from [Source]/SigmaDimensions/SpaceCenterFixer.cs rename to [Source]/SigmaDimensions/PQSCity/LightsFixer.cs index 38f45e3..dadad73 100644 --- a/[Source]/SigmaDimensions/SpaceCenterFixer.cs +++ b/[Source]/SigmaDimensions/PQSCity/LightsFixer.cs @@ -26,21 +26,4 @@ void Start() } } } - - [KSPAddon(KSPAddon.Startup.SpaceCentre, false)] - internal class SpaceCenterFixer : MonoBehaviour - { - void Start() - { - foreach (SpaceCenterCamera2 camera in Resources.FindObjectsOfTypeAll()) - { - float resizeBuildings = (float)FlightGlobals.GetHomeBody().Get("resizeBuildings"); - - camera.zoomInitial *= resizeBuildings; - camera.zoomMax *= resizeBuildings; - camera.zoomMin *= resizeBuildings; - camera.zoomSpeed *= resizeBuildings; - } - } - } } diff --git a/[Source]/SigmaDimensions/PQSCity/PQSCity2Fixer.cs b/[Source]/SigmaDimensions/PQSCity/PQSCity2Fixer.cs new file mode 100644 index 0000000..7dac6cf --- /dev/null +++ b/[Source]/SigmaDimensions/PQSCity/PQSCity2Fixer.cs @@ -0,0 +1,117 @@ +using System; +using UnityEngine; +using Kopernicus; + + +namespace SigmaDimensionsPlugin +{ + public class PQSCity2Fixer : MonoBehaviour + { + double time = 0; + + void Update() + { + if (time < 0.2) + { + time += Time.deltaTime; + } + else + { + time = 0; + + CelestialBody body = FlightGlobals.currentMainBody; + if (body == null) return; + + PQS pqs = body.pqsController; + if (pqs == null) return; + + PQSCity2 city = GetComponent(); + if (city == null) return; + + // Location + Vector3 planet = body.transform.position; + Vector3 building = city.transform.position; // From body to city + Vector3 location = (building - planet).normalized; + + // Sigma Dimensions Settings + double resize = body.Has("resize") ? body.Get("resize") : 1; + double landscape = body.Has("landscape") ? body.Get("landscape") : 1; + double resizeBuildings = body.Has("resizeBuildings") ? body.Get("resizeBuildings") : 1; + + // Max distance + double maxDistance = Math.Abs(2 * pqs.mapMaxHeight); + maxDistance *= resize * landscape > 1 ? resize * landscape : 1; + maxDistance += body.Radius; + + RaycastHit[] hits = Physics.RaycastAll(planet + location * (float)maxDistance, -location, (float)maxDistance, LayerMask.GetMask("Local Scenery")); + + for (int i = 0; i < hits?.Length; i++) + { + if (hits[i].collider?.GetComponent()) + { + Debug.Log("PQSCity2Fixer", "> Planet: " + body.transform.name); + Debug.Log("PQSCity2Fixer", " > PQSCity2: " + city); + + // PQSCity2 parameters + double oldGroundLevel = pqs.GetSurfaceHeight(city.PlanetRelativePosition) - body.Radius; + Debug.Log("PQSCity2Fixer", " > Old Ground Level at Mod (GETSURFACE) = " + oldGroundLevel); + double oldOceanOffset = body.ocean && oldGroundLevel < 0 ? oldGroundLevel : 0d; + Debug.Log("PQSCity2Fixer", " > Old Ocean Offset at Mod = " + oldOceanOffset); + oldGroundLevel = body.ocean && oldGroundLevel < 0 ? 0d : oldGroundLevel; + Debug.Log("PQSCity2Fixer", " > Old Ground Level at Mod (WITH OCEAN) = " + oldGroundLevel); + + double groundLevel = (hits[i].point - planet).magnitude - body.Radius; + Debug.Log("PQSCity2Fixer", " > Ground Level at Mod (RAYCAST) = " + groundLevel); + double oceanOffset = body.ocean && groundLevel < 0 ? groundLevel : 0d; + Debug.Log("PQSCity2Fixer", " > Ocean Offset at Mod = " + oceanOffset); + groundLevel = body.ocean && groundLevel < 0 ? 0d : groundLevel; + Debug.Log("PQSCity2Fixer", " > Ground Level at Mod (NEW) = " + groundLevel); + + // Because, SQUAD + city.PositioningPoint.localPosition /= (float)(body.Radius + city.alt); + + // Fix Altitude + if (!city.snapToSurface) + { + // Alt = Distance from the radius of the planet + + Debug.Log("PQSCity2Fixer", " > PQSCity2 Original Radius Offset = " + city.alt); + + double builtInOffset = (city.alt - oldGroundLevel) / resizeBuildings - (groundLevel - oldGroundLevel) / (resize * landscape); + + Debug.Log("PQSCity2Fixer", " > Builtin Offset = " + builtInOffset); + + city.alt = groundLevel + builtInOffset * resizeBuildings; + + Debug.Log("PQSCity2Fixer", " > PQSCity2 Fixed Radius Offset = " + city.alt); + } + else + { + // Offset = Distance from the surface of the planet + + Debug.Log("PQSCity2Fixer", " > PQSCity2 Original Surface Offset = " + city.snapHeightOffset); + + double builtInOffset = city.snapHeightOffset / resizeBuildings - (groundLevel + oceanOffset - oldGroundLevel - oldOceanOffset) / (resize * landscape); + + Debug.Log("PQSCity2Fixer", " > Builtin Offset = " + builtInOffset); + + double newOffset = builtInOffset * resizeBuildings + groundLevel + oceanOffset - oldGroundLevel - oldOceanOffset; + + Debug.Log("PQSCity2Fixer", " > PQSCity2 Fixed Surface Offset = " + newOffset); + + city.alt += newOffset - city.snapHeightOffset; + city.snapHeightOffset = newOffset; + } + + // Because, SQUAD + city.PositioningPoint.localPosition *= (float)(body.Radius + city.alt); + + // Apply Changes and Destroy + city.Orientate(); + DestroyImmediate(this); + } + } + } + } + } +} diff --git a/[Source]/SigmaDimensions/PQSCityFixer.cs b/[Source]/SigmaDimensions/PQSCity/PQSCityFixer.cs similarity index 53% rename from [Source]/SigmaDimensions/PQSCityFixer.cs rename to [Source]/SigmaDimensions/PQSCity/PQSCityFixer.cs index 47e882f..036f911 100644 --- a/[Source]/SigmaDimensions/PQSCityFixer.cs +++ b/[Source]/SigmaDimensions/PQSCity/PQSCityFixer.cs @@ -120,114 +120,4 @@ void Update() } } } - - public class PQSCity2Fixer : MonoBehaviour - { - double time = 0; - - void Update() - { - if (time < 0.2) - { - time += Time.deltaTime; - } - else - { - time = 0; - - CelestialBody body = FlightGlobals.currentMainBody; - if (body == null) return; - - PQS pqs = body.pqsController; - if (pqs == null) return; - - PQSCity2 city = GetComponent(); - if (city == null) return; - - // Location - Vector3 planet = body.transform.position; - Vector3 building = city.transform.position; // From body to city - Vector3 location = (building - planet).normalized; - - // Sigma Dimensions Settings - double resize = body.Has("resize") ? body.Get("resize") : 1; - double landscape = body.Has("landscape") ? body.Get("landscape") : 1; - double resizeBuildings = body.Has("resizeBuildings") ? body.Get("resizeBuildings") : 1; - - // Max distance - double maxDistance = Math.Abs(2 * pqs.mapMaxHeight); - maxDistance *= resize * landscape > 1 ? resize * landscape : 1; - maxDistance += body.Radius; - - RaycastHit[] hits = Physics.RaycastAll(planet + location * (float)maxDistance, -location, (float)maxDistance, LayerMask.GetMask("Local Scenery")); - - for (int i = 0; i < hits?.Length; i++) - { - if (hits[i].collider?.GetComponent()) - { - Debug.Log("PQSCity2Fixer", "> Planet: " + body.transform.name); - Debug.Log("PQSCity2Fixer", " > PQSCity2: " + city); - - // PQSCity2 parameters - double oldGroundLevel = pqs.GetSurfaceHeight(city.PlanetRelativePosition) - body.Radius; - Debug.Log("PQSCity2Fixer", " > Old Ground Level at Mod (GETSURFACE) = " + oldGroundLevel); - double oldOceanOffset = body.ocean && oldGroundLevel < 0 ? oldGroundLevel : 0d; - Debug.Log("PQSCity2Fixer", " > Old Ocean Offset at Mod = " + oldOceanOffset); - oldGroundLevel = body.ocean && oldGroundLevel < 0 ? 0d : oldGroundLevel; - Debug.Log("PQSCity2Fixer", " > Old Ground Level at Mod (WITH OCEAN) = " + oldGroundLevel); - - double groundLevel = (hits[i].point - planet).magnitude - body.Radius; - Debug.Log("PQSCity2Fixer", " > Ground Level at Mod (RAYCAST) = " + groundLevel); - double oceanOffset = body.ocean && groundLevel < 0 ? groundLevel : 0d; - Debug.Log("PQSCity2Fixer", " > Ocean Offset at Mod = " + oceanOffset); - groundLevel = body.ocean && groundLevel < 0 ? 0d : groundLevel; - Debug.Log("PQSCity2Fixer", " > Ground Level at Mod (NEW) = " + groundLevel); - - // Because, SQUAD - city.PositioningPoint.localPosition /= (float)(body.Radius + city.alt); - - // Fix Altitude - if (!city.snapToSurface) - { - // Alt = Distance from the radius of the planet - - Debug.Log("PQSCity2Fixer", " > PQSCity2 Original Radius Offset = " + city.alt); - - double builtInOffset = (city.alt - oldGroundLevel) / resizeBuildings - (groundLevel - oldGroundLevel) / (resize * landscape); - - Debug.Log("PQSCity2Fixer", " > Builtin Offset = " + builtInOffset); - - city.alt = groundLevel + builtInOffset * resizeBuildings; - - Debug.Log("PQSCity2Fixer", " > PQSCity2 Fixed Radius Offset = " + city.alt); - } - else - { - // Offset = Distance from the surface of the planet - - Debug.Log("PQSCity2Fixer", " > PQSCity2 Original Surface Offset = " + city.snapHeightOffset); - - double builtInOffset = city.snapHeightOffset / resizeBuildings - (groundLevel + oceanOffset - oldGroundLevel - oldOceanOffset) / (resize * landscape); - - Debug.Log("PQSCity2Fixer", " > Builtin Offset = " + builtInOffset); - - double newOffset = builtInOffset * resizeBuildings + groundLevel + oceanOffset - oldGroundLevel - oldOceanOffset; - - Debug.Log("PQSCity2Fixer", " > PQSCity2 Fixed Surface Offset = " + newOffset); - - city.alt += newOffset - city.snapHeightOffset; - city.snapHeightOffset = newOffset; - } - - // Because, SQUAD - city.PositioningPoint.localPosition *= (float)(body.Radius + city.alt); - - // Apply Changes and Destroy - city.Orientate(); - DestroyImmediate(this); - } - } - } - } - } } diff --git a/[Source]/SigmaDimensions/PQSCityGroupsLoader.cs b/[Source]/SigmaDimensions/PQSCity/PQSCityGroupsLoader.cs similarity index 100% rename from [Source]/SigmaDimensions/PQSCityGroupsLoader.cs rename to [Source]/SigmaDimensions/PQSCity/PQSCityGroupsLoader.cs diff --git a/[Source]/SigmaDimensions/PQSCity/SpaceCenterFixer.cs b/[Source]/SigmaDimensions/PQSCity/SpaceCenterFixer.cs new file mode 100644 index 0000000..01e64ae --- /dev/null +++ b/[Source]/SigmaDimensions/PQSCity/SpaceCenterFixer.cs @@ -0,0 +1,23 @@ +using UnityEngine; +using Kopernicus; + + +namespace SigmaDimensionsPlugin +{ + [KSPAddon(KSPAddon.Startup.SpaceCentre, false)] + internal class SpaceCenterFixer : MonoBehaviour + { + void Start() + { + foreach (SpaceCenterCamera2 camera in Resources.FindObjectsOfTypeAll()) + { + float resizeBuildings = (float)FlightGlobals.GetHomeBody().Get("resizeBuildings"); + + camera.zoomInitial *= resizeBuildings; + camera.zoomMax *= resizeBuildings; + camera.zoomMin *= resizeBuildings; + camera.zoomSpeed *= resizeBuildings; + } + } + } +} diff --git a/[Source]/SigmaDimensions/PQSMod/PQSMod_SigmaDimensions.cs b/[Source]/SigmaDimensions/PQSMod/PQSMod_SigmaDimensions.cs new file mode 100644 index 0000000..f0d6779 --- /dev/null +++ b/[Source]/SigmaDimensions/PQSMod/PQSMod_SigmaDimensions.cs @@ -0,0 +1,104 @@ +using Kopernicus.ConfigParser.Attributes; +using Kopernicus.ConfigParser.BuiltinTypeParsers; +using Kopernicus.ConfigParser.Enumerations; +using Kopernicus.ConfigParser.Interfaces; +using Kopernicus.Configuration.ModLoader; + + +namespace PQSMod_SigmaDimensions +{ + public class PQSMod_SigmaDimensions : PQSMod + { + public double Resize = 1; + public float Atmosphere = 1; + public double landscape = 1; + public float changeScatterSize = 1; + public float changeScatterDensity = 1; + public double resizeBuildings = 1; + public double groundTiling = 1; + public float atmoTopLayer = 1; + + public override void OnVertexBuildHeight(PQS.VertexBuildData data) + { + data.vertHeight = sphere.radius + (data.vertHeight - sphere.radius) * Resize * landscape; + } + } + + [RequireConfigType(ConfigType.Node)] + public class SigmaDimensions : ModLoader, IParserEventSubscriber + { + // Resize + [ParserTarget("Resize", Optional = true)] + private NumericParser Resize + { + get { return Mod.Resize; } + set { Mod.Resize = value; } + } + + // Atmosphere + [ParserTarget("Atmosphere", Optional = true)] + private NumericParser Atmosphere + { + get { return Mod.Atmosphere; } + set { Mod.Atmosphere = value; } + } + + // landscape + [ParserTarget("landscape", Optional = true)] + private NumericParser landscape + { + get { return Mod.landscape; } + set { Mod.landscape = value; } + } + + // changeScatterSize + [ParserTarget("changeScatterSize", Optional = true)] + private NumericParser changeScatterSize + { + get { return Mod.changeScatterSize; } + set { Mod.changeScatterSize = value; } + } + + // changeScatterDensity + [ParserTarget("changeScatterDensity", Optional = true)] + private NumericParser changeScatterDensity + { + get { return Mod.changeScatterDensity; } + set { Mod.changeScatterDensity = value; } + } + + // Resize + [ParserTarget("resizeBuildings", Optional = true)] + private NumericParser resizeBuildings + { + get { return Mod.resizeBuildings; } + set { Mod.resizeBuildings = value; } + } + + // groundTiling + [ParserTarget("groundTiling", Optional = true)] + private NumericParser groundTiling + { + get { return Mod.groundTiling; } + set { Mod.groundTiling = value; } + } + + // atmoTopLayer + [ParserTarget("atmoTopLayer", Optional = true)] + private NumericParser atmoTopLayer + { + get { return Mod.atmoTopLayer; } + set { Mod.atmoTopLayer = value; } + } + + void IParserEventSubscriber.Apply(ConfigNode node) + { + } + + void IParserEventSubscriber.PostApply(ConfigNode node) + { + // Always Load Last + Mod.order = int.MaxValue; + } + } +} diff --git a/[Source]/SigmaDimensions/PQSMod_SigmaDimensions.cs b/[Source]/SigmaDimensions/PQSMod/PQSModsFixer.cs similarity index 63% rename from [Source]/SigmaDimensions/PQSMod_SigmaDimensions.cs rename to [Source]/SigmaDimensions/PQSMod/PQSModsFixer.cs index 8dd596b..fb5c19e 100644 --- a/[Source]/SigmaDimensions/PQSMod_SigmaDimensions.cs +++ b/[Source]/SigmaDimensions/PQSMod/PQSModsFixer.cs @@ -1,113 +1,12 @@ using System.Reflection; using UnityEngine; using Kopernicus; -using Kopernicus.ConfigParser.Attributes; -using Kopernicus.ConfigParser.BuiltinTypeParsers; -using Kopernicus.ConfigParser.Enumerations; -using Kopernicus.ConfigParser.Interfaces; using Kopernicus.Configuration; -using Kopernicus.Configuration.ModLoader; using Debug = SigmaDimensionsPlugin.Debug; namespace PQSMod_SigmaDimensions { - public class PQSMod_SigmaDimensions : PQSMod - { - public double Resize = 1; - public float Atmosphere = 1; - public double landscape = 1; - public float changeScatterSize = 1; - public float changeScatterDensity = 1; - public double resizeBuildings = 1; - public double groundTiling = 1; - public float atmoTopLayer = 1; - - public override void OnVertexBuildHeight(PQS.VertexBuildData data) - { - data.vertHeight = sphere.radius + (data.vertHeight - sphere.radius) * Resize * landscape; - } - } - - [RequireConfigType(ConfigType.Node)] - public class SigmaDimensions : ModLoader, IParserEventSubscriber - { - // Resize - [ParserTarget("Resize", Optional = true)] - private NumericParser Resize - { - get { return Mod.Resize; } - set { Mod.Resize = value; } - } - - // Atmosphere - [ParserTarget("Atmosphere", Optional = true)] - private NumericParser Atmosphere - { - get { return Mod.Atmosphere; } - set { Mod.Atmosphere = value; } - } - - // landscape - [ParserTarget("landscape", Optional = true)] - private NumericParser landscape - { - get { return Mod.landscape; } - set { Mod.landscape = value; } - } - - // changeScatterSize - [ParserTarget("changeScatterSize", Optional = true)] - private NumericParser changeScatterSize - { - get { return Mod.changeScatterSize; } - set { Mod.changeScatterSize = value; } - } - - // changeScatterDensity - [ParserTarget("changeScatterDensity", Optional = true)] - private NumericParser changeScatterDensity - { - get { return Mod.changeScatterDensity; } - set { Mod.changeScatterDensity = value; } - } - - // Resize - [ParserTarget("resizeBuildings", Optional = true)] - private NumericParser resizeBuildings - { - get { return Mod.resizeBuildings; } - set { Mod.resizeBuildings = value; } - } - - // groundTiling - [ParserTarget("groundTiling", Optional = true)] - private NumericParser groundTiling - { - get { return Mod.groundTiling; } - set { Mod.groundTiling = value; } - } - - // atmoTopLayer - [ParserTarget("atmoTopLayer", Optional = true)] - private NumericParser atmoTopLayer - { - get { return Mod.atmoTopLayer; } - set { Mod.atmoTopLayer = value; } - } - - void IParserEventSubscriber.Apply(ConfigNode node) - { - } - - void IParserEventSubscriber.PostApply(ConfigNode node) - { - // Always Load Last - Mod.order = int.MaxValue; - } - } - - [KSPAddon(KSPAddon.Startup.Instantly, true)] internal class PQSModsFixer : MonoBehaviour { diff --git a/[Source]/SigmaDimensions/SigmaDimensions.csproj b/[Source]/SigmaDimensions/SigmaDimensions.csproj index 461a91f..5d47ad2 100644 --- a/[Source]/SigmaDimensions/SigmaDimensions.csproj +++ b/[Source]/SigmaDimensions/SigmaDimensions.csproj @@ -31,16 +31,18 @@ 4 - - - - - - + + + + + + + + - + - + From 65deb40b5ad3042740973e65e2a74d0d72d05622 Mon Sep 17 00:00:00 2001 From: Sigma88 Date: Thu, 20 Jun 2019 23:52:07 +0200 Subject: [PATCH 7/8] edit period --- .../Sigma/Dimensions/Configs/ReDimension/setDimensions.cfg | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/GameData/Sigma/Dimensions/Configs/ReDimension/setDimensions.cfg b/GameData/Sigma/Dimensions/Configs/ReDimension/setDimensions.cfg index 95cac94..21cdbe4 100644 --- a/GameData/Sigma/Dimensions/Configs/ReDimension/setDimensions.cfg +++ b/GameData/Sigma/Dimensions/Configs/ReDimension/setDimensions.cfg @@ -55,6 +55,10 @@ @Orbit { @semiMajorAxis *= #$../SigmaDimensions/Rescale$ + @period != 0.666666666666666 + @period *= #$../SigmaDimensions/Rescale$ + @period != 1.5 + @period /= #$../SigmaDimensions/Resize$ } @PostSpawnOrbit { From 56429d80de217516ca614c320cf4c701e6fd604e Mon Sep 17 00:00:00 2001 From: Sigma88 Date: Sun, 23 Jun 2019 11:46:16 +0200 Subject: [PATCH 8/8] recompile, changelog and version --- Changelog.txt | 7 +++++++ .../Dimensions/Plugins/SigmaDimensions.dll | Bin 48640 -> 50176 bytes [Source]/Distribution/SigmaDimensions.dll | Bin 48640 -> 50176 bytes [Source]/SigmaDimensions/Version.cs | 2 +- 4 files changed, 8 insertions(+), 1 deletion(-) diff --git a/Changelog.txt b/Changelog.txt index 952e6ff..ab0d515 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -1,3 +1,10 @@ +**v0.10.4** + +- Added compatibility with custom 'Orbit/period' +- Fixed performance drop in flight scene +- Fixed PQSCity and PQSCity2 altitude calculation + + **v0.10.3** - Updated to KSP 1.7.1 and Kopernicus 1.7.1-4 diff --git a/GameData/Sigma/Dimensions/Plugins/SigmaDimensions.dll b/GameData/Sigma/Dimensions/Plugins/SigmaDimensions.dll index b91ec0d6de0531e3b3bd84b46d02261798d151f8..5827c77641f9246334d98fa02a10dfd4a05e58ff 100644 GIT binary patch literal 50176 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 literal 48640 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 z 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 diff --git a/[Source]/Distribution/SigmaDimensions.dll b/[Source]/Distribution/SigmaDimensions.dll index b91ec0d6de0531e3b3bd84b46d02261798d151f8..5827c77641f9246334d98fa02a10dfd4a05e58ff 100644 GIT binary patch literal 50176 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 literal 48640 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 z zCt7XAwv{PtfHAJ2%aEo@-972v$ zmPaFL^OxhwazQK#C`$zAbtt=K)CfP&i`M*%f${=0voLb^INN2E-DuA;?U8wBnKa_l z$*aL1TQ>Uy3hY2n?dX{z&C-7cb$I;Vw56eu2hzIWopHBSXmNjqIj8bkTia@BKlo{b zoIr8h(0OvTn84hzEwdC@KCC}Df|M)k5ltT%qZt@o(AQp!w}^*`8jbB2n+qB=9eT~9 zXKCb+V_nG6bl6N96naE@IByaNYc*@#NG+&jJ6aTMjOv=j-k64(%Pg@EWd06-JNADV z$2gud_OlsK9ztQN!d{!lX6t5)awTpfuWJe44$SA^` z@Yt_lT5;x$HA9Vs=YYn$G1%9zcV=I~z8w}aj_pu+ms-$gp4g(YY)xa-+O!hb>}d*X z7nLu89&DA-F?NsGF^#VUl>bw;yzV(|+0JRFQ}0|EZ!P+AR=HYug|v7Z_C2gUwf4$c zi)SXb({emzz7lCOtZORjWTo8XP;;*5rn(yaagW(yJqWd>4i)Fh)V7FRShoBm4X>)o z2NZMo-{Gd1LISJGYPz^Ewu>Duoa=DOGIvA0wtGF``UChcC-Y>>Y=J}1xiVcxJJ@Df zKSpf1&1vCWN8-rQls3?KTV7fmO3rm8io?gq{vwNUrDSeKUB6 z6S#>FS*eJQCXC+CEM+0@V63x5?tk@+zJswcWry2$G&6gg@i^Dv@*A1kcOb`iphrxb zqby#j-vPy%;+ff(_blD)=R#|tiCgfl^H${96Yq!qAi523)WT~B%`9&3_$6-Li2hUJ zm)ua=w*;P!Wx_sGMPTez*)zI*pSumOr|f+?fz^sDuPD4WF`PX!d-GaaB>$1`QjDJ} z8vseb>ow8_{P9)1sRyrjj&sjUp&zL);aH{>G<#*`p~y=3md)^-t04)hS&6=QwdYkD zw*!herXgBhpbSZ#&oM}WF7Ch=wRLtn6xalLuY%-gL~rBt&ua}wejGjVI-}Nc+fP|) z>>Dxa9ct7i4A}_Eo9%LO?=;hq$k6L>-DN3ZRa!X|(Ax{n2T9NvmGi! zufzFJz5$%99*XOf-w7vqD(CE(bwWioDq6Ss|0{bQg^JAhMUWZIW-Z`oudu#%Bd;Rq zQRX_b9c?%=V*Y5nyHpDcVXNtdp4ggE$@X##dcn~m>y54DN#)^+Td;<^v1}R>I0|s@ zcZN}mPs8p(*=U#a(ns3d;cJnbyHWZYzXux2<6~c@b{Oqq^J!QoUc8-DtU+#zb7V=I zM)NmA=VPdrx~b*8%Q-D&C`Iuot^a5GXWATRaunr6?Rl=wX^pC-TtUt{wr)P4?sw4RB9upwy+&A2xTIwu0u9wqSvyF??jfg4zTsU1-&e%@3C; zSrG9^+c;jN^T%Ve-wxN=m?(F_ixACyr)`RYzG1GDopr(Bc$rrV?Ku~^5vi!9lqFp3 zrbb;Z&q;-Y3)~|`%7!!C3G-qjTbQ?%o#T)Sqa40;4V41BYv+Jyq`sx+bMpUo6!QF^ zlge;ej^eQAznwNH%^9|2%ykxR=gN}UA+l$8#8O~u=HtHuVm~tSl!NVDxz*_N&zt(8 zQgm;$M%eN-JCvO(_uyzhYs7zp=30lAa~(=ECv)CS>%cF&$3qzL2)vEB>2~v0yg1H+ z_fWHDYwRV%-R~tB(M2Nl9D3$Jn-4SjaE=e)RM^Aw;5cpG*bhHUs)c{0$PDy16QBIx z*NF)K*rM7ntiqN3&2+eUJ__OO1kWxXIMEh%`pXe$Z$<#I8UBEKT#s7zczgg+@Un%L zwc-o;FveLJd3-EW4xxwB+l2o3V32!NTL|{1?0q?;wp#}H1*Ze3Curt7p`o@R`SxZl zK5;hi4qNlVD)*mn?SU-t?``4@iMhk&R*?Q^M|oroJMtP|Xf@J|QCuB7VYS%c zO}e3jHi#RlGZt8!&#U#AX~qVxQJjDpvXGgEE7;Jgs};U31FiO%9>1;wu5)EL%Ft*y zYI;EQMzpyJ|Kpo|kksHwF8Yx<<75OV zXw>v`6$^!#$G{^I17CfDcKJ+5{#L)~jqT)aJ*K8ZmM7BC*1`KR(Vy4LM9{W`1PaCS zLCXd|Z$N@jt9j;Fz`>?UxtG{Z@T5{T5#SFxY%8(M3seod+m4~dcCw;C>sa?nF##G{ zLTv~a3;@^TMOr6^=CQ#;WI39@anMORmQ4WMw_69dRV3=!lY8BK?TZN?v0RFICy zc%+zbo~6f`W6;5@ZUar`EMR)o-00%D^pFWJz%v#V<i^iCVU| zpTL`N7Dys{re_WQlqFjuo>;mW2IUqqYfOPfb(zp&GrC`o>d`zc9v3sIItTbh=}@q_ zU7KpB>`x6Mj}#L7dlCYP!yU&4pJV|rkY%BOwp4iK&>R!GNmaI1RyZ5forw$O+SHtFkhHO7P)KMDuj_? z^HyaKXjp~F`ou{`*60EwW1-9RDi))<>Kw}z!)4XNbe<0n+@b6MWZ5=r%7SIr=sQf=W0%T*gA0&{^!Ys zHJ{R>Vbcd6IQR-yhgZTzsYY;0;yzx%;s{m6`_H@{V+n>K4!+18@Cx{1iTGOaU;x-{ zUSt;#o@_=GAJu5_5dI#=3L_laPL&s&3ao(D@V}s^lmu464j+D?y37p3YKPWwP3=Pb ztAyeXodH8+4=Eae7tbSi>6%uKEmT{?AUw)2c~lu`xWO!m^~8Ge0F?=c9l$S<$@hun z07Y@4zhuY9E|wkPFOdRjH!@8xoK&o*#0)^z>|=O>AICc8VdsU_Y^TZV$Kab$N2A|V z_V*?SOgsIi0X+O<^|_yy7mo)5j{1@KIVKPTg>6JJ+q?`BqL*knd&t2zhlpG}`B#JX zvds0ODac?QjbLfTfY2U_g#kca&R8cN_kZzWYqx$h4+!1=%xW!i-xc)%CXRkocw_oltBc28wE{bER?nexw%^0{VE&b z(08X@i0UXDvJ2IE9{Zs}_9jN@&QpESW7I?dIflP0^Z1ZE6gRdUn-#GWi|Tr7B!qgAFd~_tP?Jy(@w5#^C==p%!Y(3T!$Aqh zgCNSG8{#hR1m4s|3>yT%c1G=fP(&CJ+gVbZ_XSw!25$m6M_a4$DP9fA!g~vhaquB^ zd7LTm@)E4|$u*2X3!{Neas*PHA2MPvC?gv2)T+zpSqnM%VYOD5#{tr-RsKZ;q1cgV z5)5jw9tC~VOeo>n*RXxny?)U5B=8=6g3Zd$-(KL~dHiwY9eTyZ*;M!DOjrIP@Cg?ChNn@OXII}W95d%N(iL^hY|sKukzt#}T&7Vmb};w6+? zJjd9G-KEe7gP720YQp)hMq~4Dh1DijPOY`8YG=)uIS>D!v_>UE9p!R@WL-a-L6HYb(Czh?Rt3X}0g3VsZ8Xa_Eu(uaX3;_=|9M$Ni^i#(g1 z>d?la@4|Zn#dTxx`CvR}tX^s?u9}GNoE1Hs$ZvZUqtt0sR)k_d*jS8J3&9L|fV~)@ z2H(#(=z5!Lc&+<&hT_@^jePQCc`=w}PV|YcKkwx$%M;T>JAR12&l7ELUe&z$;rR#C zH=kJj$=6=h{}g(%g{NWF!o6$pj&tw+y)u#03YxQbPqVyfaEYpMRb=*GzE|Ep7+TZV z-L{`Q|Nq$U_GbzVf0pyLg|a($j|-0oACt(g>geFdh1DD6>9o8M#x35e1C3JE_O+!W zUlsI!(zlZUe^Cbi4g=9(F{W}OGe&?j-a7p4dI8_Ofzx+>w|nLwdl5C`Xo~NyZbxpt z+yUPwhl^{F=igVozdftI&B7MKKXtVy5?{(G{^|>3tP-q?aNw1d!(hHiz{iw)D~ErR zr4>JC$TxuSE{+_HsRLC(pwD>!1fzvbOy>-e{82m&6o-x3&8z0ry;!u_En(>|FEZ}_Ts}8EwAs_d_PigX@W8q0fKF-^U z!&?5$z*?l?;Fsxl%NY7_9BV)Ef%?K>ViUe1kAKHPzWn3xzY6rZCmvVfZY9$#v>W;0 zm~m9!4z1$DXs(|L9{EsN{qfwFfmfEk`wo49+d`is9eg%I27FtOXg9u}qsfzW2Ss8$ z`fl9dQ#XClUm%AoB>|3ZsJ!D%5K_9Gx*4tpRUZ}Xq{(I z{kF<@w%Gl$X7Kzu^5Bv@cjJ=fxyLn8`sU|UdA@rwFFi$b$-T~z`7Xv8D*2&u$Jebv mc{w=e+nSxwOm#c+?b_MHEL@%<>`90oV{`qV-~aC<@c#gufG@!S diff --git a/[Source]/SigmaDimensions/Version.cs b/[Source]/SigmaDimensions/Version.cs index d36d1ef..9749fed 100644 --- a/[Source]/SigmaDimensions/Version.cs +++ b/[Source]/SigmaDimensions/Version.cs @@ -6,7 +6,7 @@ namespace SigmaDimensionsPlugin [KSPAddon(KSPAddon.Startup.Instantly, true)] public class Version : MonoBehaviour { - public static readonly System.Version number = new System.Version("0.10.3"); + public static readonly System.Version number = new System.Version("0.10.4"); void Awake() {