From 00a1cd2a16f784a7e7b4f0bd0752f4b02e70ff47 Mon Sep 17 00:00:00 2001 From: Nick Date: Mon, 10 Oct 2022 13:35:47 -0400 Subject: [PATCH] Move zero g volume to Volumes --- .../Builder/Atmosphere/VolumesBuilder.cs | 36 +++---------------- .../Builder/Volumes/PriorityVolumeBuilder.cs | 17 +++++++++ .../Builder/Volumes/VolumesBuildManager.cs | 7 ++++ NewHorizons/External/Configs/PlanetConfig.cs | 13 +++++++ NewHorizons/External/Modules/BaseModule.cs | 8 ++--- NewHorizons/External/Modules/VolumesModule.cs | 17 +++++++++ 6 files changed, 62 insertions(+), 36 deletions(-) create mode 100644 NewHorizons/Builder/Volumes/PriorityVolumeBuilder.cs diff --git a/NewHorizons/Builder/Atmosphere/VolumesBuilder.cs b/NewHorizons/Builder/Atmosphere/VolumesBuilder.cs index ceb9b758..bbc96013 100644 --- a/NewHorizons/Builder/Atmosphere/VolumesBuilder.cs +++ b/NewHorizons/Builder/Atmosphere/VolumesBuilder.cs @@ -11,15 +11,15 @@ namespace NewHorizons.Builder.Atmosphere { var innerRadius = config.Base.surfaceSize; - GameObject volumesGO = new GameObject("Volumes"); + var volumesGO = new GameObject("Volumes"); volumesGO.SetActive(false); volumesGO.transform.parent = planetGO.transform; - GameObject rulesetGO = new GameObject("Ruleset"); + var rulesetGO = new GameObject("Ruleset"); rulesetGO.SetActive(false); rulesetGO.transform.parent = volumesGO.transform; - SphereShape SS = rulesetGO.AddComponent(); + var SS = rulesetGO.AddComponent(); SS.SetCollisionMode(Shape.CollisionMode.Volume); SS.SetLayer(Shape.Layer.Sector); SS.layerMask = -1; @@ -28,7 +28,7 @@ namespace NewHorizons.Builder.Atmosphere rulesetGO.AddComponent(); - PlanetoidRuleset PR = rulesetGO.AddComponent(); + var PR = rulesetGO.AddComponent(); PR._altitudeFloor = innerRadius; PR._altitudeCeiling = sphereOfInfluence; PR._shuttleLandingRadius = sphereOfInfluence; @@ -37,7 +37,7 @@ namespace NewHorizons.Builder.Atmosphere rulesetGO.AddComponent(); - EffectRuleset ER = rulesetGO.AddComponent(); + var ER = rulesetGO.AddComponent(); ER._type = EffectRuleset.BubbleType.Underwater; var gdRuleset = SearchUtilities.Find("GiantsDeep_Body/Sector_GD/Volumes_GD/RulesetVolumes_GD").GetComponent(); @@ -50,32 +50,6 @@ namespace NewHorizons.Builder.Atmosphere } ER._cloudMaterial = cloudMaterial; - if (config.Base.zeroGravityRadius != 0) - { - var zeroGObject = new GameObject("ZeroGVolume"); - zeroGObject.transform.parent = volumesGO.transform; - zeroGObject.transform.localPosition = Vector3.zero; - zeroGObject.transform.localScale = Vector3.one * config.Base.zeroGravityRadius; - zeroGObject.layer = LayerMask.NameToLayer("BasicEffectVolume"); - - var sphereCollider = zeroGObject.AddComponent(); - sphereCollider.radius = 1; - sphereCollider.isTrigger = true; - - var owCollider = zeroGObject.AddComponent(); - owCollider._parentBody = owrb; - owCollider._collider = sphereCollider; - - var triggerVolume = zeroGObject.AddComponent(); - triggerVolume._owCollider = owCollider; - - var zeroGVolume = zeroGObject.AddComponent(); - zeroGVolume._attachedBody = owrb; - zeroGVolume._triggerVolume = triggerVolume; - zeroGVolume._inheritable = true; - zeroGVolume._priority = 1; - } - volumesGO.transform.position = planetGO.transform.position; rulesetGO.SetActive(true); volumesGO.SetActive(true); diff --git a/NewHorizons/Builder/Volumes/PriorityVolumeBuilder.cs b/NewHorizons/Builder/Volumes/PriorityVolumeBuilder.cs new file mode 100644 index 00000000..13aeb430 --- /dev/null +++ b/NewHorizons/Builder/Volumes/PriorityVolumeBuilder.cs @@ -0,0 +1,17 @@ +using NewHorizons.External.Modules; +using UnityEngine; + +namespace NewHorizons.Builder.Volumes +{ + public static class PriorityVolumeBuilder + { + public static TVolume Make(GameObject planetGO, Sector sector, VolumesModule.PriorityVolumeInfo info) where TVolume : PriorityVolume + { + var volume = VolumeBuilder.Make(planetGO, sector, info); + + volume.SetPriority(info.priority); + + return volume; + } + } +} diff --git a/NewHorizons/Builder/Volumes/VolumesBuildManager.cs b/NewHorizons/Builder/Volumes/VolumesBuildManager.cs index 9b13db4f..429650c4 100644 --- a/NewHorizons/Builder/Volumes/VolumesBuildManager.cs +++ b/NewHorizons/Builder/Volumes/VolumesBuildManager.cs @@ -78,6 +78,13 @@ namespace NewHorizons.Builder.Volumes VolumeBuilder.Make(go, sector, insulatingVolume); } } + if (config.Volumes.zeroGravityVolumes != null) + { + foreach (var zeroGravityVolume in config.Volumes.zeroGravityVolumes) + { + PriorityVolumeBuilder.Make(go, sector, zeroGravityVolume); + } + } } } } diff --git a/NewHorizons/External/Configs/PlanetConfig.cs b/NewHorizons/External/Configs/PlanetConfig.cs index af007f48..dd5eff12 100644 --- a/NewHorizons/External/Configs/PlanetConfig.cs +++ b/NewHorizons/External/Configs/PlanetConfig.cs @@ -415,6 +415,19 @@ namespace NewHorizons.External.Configs if (ring.curve != null) ring.scaleCurve = ring.curve; } } + + if (Base.zeroGravityRadius != 0f) + { + Volumes ??= new VolumesModule(); + Volumes.zeroGravityVolumes ??= new VolumesModule.PriorityVolumeInfo[0]; + + Volumes.zeroGravityVolumes = Volumes.zeroGravityVolumes.Append(new VolumesModule.PriorityVolumeInfo() + { + priority = 1, + rename = "ZeroGVolume", + radius = Base.zeroGravityRadius + }).ToArray(); + } } } } \ No newline at end of file diff --git a/NewHorizons/External/Modules/BaseModule.cs b/NewHorizons/External/Modules/BaseModule.cs index 5558c8dd..338f3c05 100644 --- a/NewHorizons/External/Modules/BaseModule.cs +++ b/NewHorizons/External/Modules/BaseModule.cs @@ -81,11 +81,6 @@ namespace NewHorizons.External.Modules /// public float surfaceSize; - /// - /// Radius of the zero gravity volume. This will make it so no gravity from any planet will affect you. Useful for satellites. - /// - public float zeroGravityRadius; - /// /// Optional. You can force this planet's gravity to be felt over other gravity/zero-gravity sources by increasing this number. /// @@ -120,6 +115,9 @@ namespace NewHorizons.External.Modules [Obsolete("SphereOfInfluence is deprecated, please use soiOverride instead")] public float sphereOfInfluence; + [Obsolete("zeroGravityRadius is deprecated, please use Volumes->ZeroGravityVolumes instead")] + public float zeroGravityRadius; + #endregion Obsolete } } \ No newline at end of file diff --git a/NewHorizons/External/Modules/VolumesModule.cs b/NewHorizons/External/Modules/VolumesModule.cs index 9211f495..5791dd9a 100644 --- a/NewHorizons/External/Modules/VolumesModule.cs +++ b/NewHorizons/External/Modules/VolumesModule.cs @@ -55,6 +55,12 @@ namespace NewHorizons.External.Modules /// public VolumeInfo[] reverbVolumes; + /// + /// Add zero-gravity volumes to this planet. + /// Good for surrounding planets which are using a static position to stop the player being pulled away. + /// + public PriorityVolumeInfo[] zeroGravityVolumes; + [JsonObject] public class VolumeInfo { @@ -79,6 +85,17 @@ namespace NewHorizons.External.Modules public string rename; } + [JsonObject] + public class PriorityVolumeInfo : VolumeInfo + { + /// + /// The priority for this volume's effects to be applied. + /// Ex, a player in a gravity volume with priority 0, and zero-gravity volume with priority 1, will feel zero gravity. + /// + [DefaultValue(1)] + public int priority = 1; + } + [JsonObject] public class RevealVolumeInfo : VolumeInfo {