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/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 { diff --git a/GameData/Sigma/Dimensions/Plugins/SigmaDimensions.dll b/GameData/Sigma/Dimensions/Plugins/SigmaDimensions.dll index b91ec0d..5827c77 100644 Binary files a/GameData/Sigma/Dimensions/Plugins/SigmaDimensions.dll and b/GameData/Sigma/Dimensions/Plugins/SigmaDimensions.dll differ diff --git a/[Source]/Distribution/SigmaDimensions.dll b/[Source]/Distribution/SigmaDimensions.dll index b91ec0d..5827c77 100644 Binary files a/[Source]/Distribution/SigmaDimensions.dll and b/[Source]/Distribution/SigmaDimensions.dll differ 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/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/AtmosphereTopLayer.cs b/[Source]/SigmaDimensions/Dimensions/AtmosphereTopLayer.cs similarity index 99% rename from [Source]/SigmaDimensions/AtmosphereTopLayer.cs rename to [Source]/SigmaDimensions/Dimensions/AtmosphereTopLayer.cs index 95be698..5f4704c 100644 --- a/[Source]/SigmaDimensions/AtmosphereTopLayer.cs +++ b/[Source]/SigmaDimensions/Dimensions/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/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 87% rename from [Source]/SigmaDimensions/SigmaDimensions.cs rename to [Source]/SigmaDimensions/Dimensions/SigmaDimensions.cs index 00a5220..d35cc59 100644 --- a/[Source]/SigmaDimensions/SigmaDimensions.cs +++ b/[Source]/SigmaDimensions/Dimensions/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; @@ -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.GetComponent() ?? city.gameObject.AddComponent(); - + 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.GetComponent() ?? city.gameObject.AddComponent(); - + 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); } } diff --git a/[Source]/SigmaDimensions/PQSCity/LightsFixer.cs b/[Source]/SigmaDimensions/PQSCity/LightsFixer.cs new file mode 100644 index 0000000..dadad73 --- /dev/null +++ b/[Source]/SigmaDimensions/PQSCity/LightsFixer.cs @@ -0,0 +1,29 @@ +using UnityEngine; +using Kopernicus; + + +namespace SigmaDimensionsPlugin +{ + [KSPAddon(KSPAddon.Startup.SpaceCentre, true)] + internal class LightsFixer : MonoBehaviour + { + void Start() + { + foreach (CelestialBody cb in FlightGlobals.Bodies) + { + if (cb?.pqsController != null) + { + if (cb.Has("resizeBuildings")) + { + float resizeBuildings = (float)cb.Get("resizeBuildings"); + + foreach (Light light in cb.pqsController.GetComponentsInChildren(true)) + { + light.range *= 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/PQSCity/PQSCityFixer.cs b/[Source]/SigmaDimensions/PQSCity/PQSCityFixer.cs new file mode 100644 index 0000000..036f911 --- /dev/null +++ b/[Source]/SigmaDimensions/PQSCity/PQSCityFixer.cs @@ -0,0 +1,123 @@ +using System; +using UnityEngine; +using Kopernicus; + + +namespace SigmaDimensionsPlugin +{ + public class PQSCityFixer : 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; + + PQSCity 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("PQSCityFixer", "> Planet: " + body.transform.name); + 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 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 (WITH OCEAN) = " + groundLevel); + + // Fix Altitude + 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 Current Radius Offset = " + city.repositionRadiusOffset); + + double builtInOffset = (city.repositionRadiusOffset - oldGroundLevel) / resizeBuildings - (groundLevel - oldGroundLevel) / (resize * landscape); + + Debug.Log("PQSCityFixer", " > Builtin Offset = " + builtInOffset); + + city.repositionRadiusOffset = groundLevel + builtInOffset * resizeBuildings; + + Debug.Log("PQSCityFixer", " > PQSCity Fixed Radius Offset = " + city.repositionRadiusOffset); + } + else + { + // Offset = Distance from the surface of the planet + + 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 = builtInOffset * resizeBuildings + groundLevel + oceanOffset - oldGroundLevel - oldOceanOffset; + + Debug.Log("PQSCityFixer", " > PQSCity Fixed Surface Offset = " + city.repositionRadiusOffset); + } + + // 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/PQSCityFixer.cs b/[Source]/SigmaDimensions/PQSCityFixer.cs deleted file mode 100644 index cd98ae9..0000000 --- a/[Source]/SigmaDimensions/PQSCityFixer.cs +++ /dev/null @@ -1,189 +0,0 @@ -using System; -using UnityEngine; -using Kopernicus; - - -namespace SigmaDimensionsPlugin -{ - public class PQSCityFixer : MonoBehaviour - { - void Update() - { - CelestialBody body = FlightGlobals.currentMainBody; - if (body == null) return; - - PQS pqs = body.pqsController; - if (pqs == null) return; - - PQSCity 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("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); - - double builtInOffset = city.repositionRadiusOffset - groundLevel / (resize * landscape); - - Debug.Log("PQSCityFixer", " > Builtuin Offset = " + builtInOffset); - - 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; - } - 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); - } - - city.Orientate(); - DestroyImmediate(this); - } - } - } - } - - public class PQSCity2Fixer : MonoBehaviour - { - void Update() - { - 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 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); - - double builtInOffset = city.alt - groundLevel / (resize * landscape); - - Debug.Log("PQSCity2Fixer", " > Builtuin Offset = " + builtInOffset); - - 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 Original Surface Offset = " + city.snapHeightOffset); - - double newOffset = oceanDepth + error / (resize * landscape) - (oceanDepth + error - city.snapHeightOffset) / resizeBuildings; - - city.alt += newOffset - city.snapHeightOffset; - city.snapHeightOffset = newOffset; - - Debug.Log("PQSCity2Fixer", " > PQSCity2 New Surface Offset = " + city.snapHeightOffset); - } - - // Because, SQUAD - city.PositioningPoint.localPosition *= (float)(body.Radius + city.alt); - - // Apply Changes and Destroy - city.Orientate(); - DestroyImmediate(this); - } - } - } - } -} 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 62% rename from [Source]/SigmaDimensions/PQSMod_SigmaDimensions.cs rename to [Source]/SigmaDimensions/PQSMod/PQSModsFixer.cs index 5cdaa96..fb5c19e 100644 --- a/[Source]/SigmaDimensions/PQSMod_SigmaDimensions.cs +++ b/[Source]/SigmaDimensions/PQSMod/PQSModsFixer.cs @@ -1,115 +1,14 @@ 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)] - 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.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 - - - - - - + + + + + + + + - + - + diff --git a/[Source]/SigmaDimensions/SpaceCenterFixer.cs b/[Source]/SigmaDimensions/SpaceCenterFixer.cs deleted file mode 100644 index a761694..0000000 --- a/[Source]/SigmaDimensions/SpaceCenterFixer.cs +++ /dev/null @@ -1,49 +0,0 @@ -using System; -using UnityEngine; -using Kopernicus; - - -namespace SigmaDimensionsPlugin -{ - [KSPAddon(KSPAddon.Startup.FlightAndKSC, false)] - class SpaceCenterFixer : MonoBehaviour - { - void Start() - { - if (!HighLogic.LoadedSceneIsFlight) - { - 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; - } - } - } - - - bool fixLight = true; - Light light = null; - - void Update() - { - if (fixLight) - { - 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")); - - fixLight = false; - } - } - } - } -} 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() {