diff --git a/NewHorizons/Builder/Atmosphere/VolumesBuilder.cs b/NewHorizons/Builder/Atmosphere/VolumesBuilder.cs index f4e7e17c..12ccc732 100644 --- a/NewHorizons/Builder/Atmosphere/VolumesBuilder.cs +++ b/NewHorizons/Builder/Atmosphere/VolumesBuilder.cs @@ -1,4 +1,4 @@ -using NewHorizons.External.Configs; +using NewHorizons.External.Configs; using UnityEngine; namespace NewHorizons.Builder.Atmosphere { @@ -6,7 +6,7 @@ namespace NewHorizons.Builder.Atmosphere { private static readonly int FogColor = Shader.PropertyToID("_FogColor"); - public static void Make(GameObject planetGO, PlanetConfig config, float sphereOfInfluence) + public static void Make(GameObject planetGO, OWRigidbody owrb, PlanetConfig config, float sphereOfInfluence) { var innerRadius = config.Base.surfaceSize; @@ -48,6 +48,32 @@ 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/External/Modules/BaseModule.cs b/NewHorizons/External/Modules/BaseModule.cs index b0e81c1a..27858633 100644 --- a/NewHorizons/External/Modules/BaseModule.cs +++ b/NewHorizons/External/Modules/BaseModule.cs @@ -81,6 +81,11 @@ 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; + #region Obsolete [Obsolete("IsSatellite is deprecated, please use ShowMinimap instead")] diff --git a/NewHorizons/Handlers/PlanetCreationHandler.cs b/NewHorizons/Handlers/PlanetCreationHandler.cs index 1cb8f3d2..b79e5116 100644 --- a/NewHorizons/Handlers/PlanetCreationHandler.cs +++ b/NewHorizons/Handlers/PlanetCreationHandler.cs @@ -313,7 +313,7 @@ namespace NewHorizons.Handlers MarkerBuilder.Make(go, body.Config.name, body.Config); } - VolumesBuilder.Make(go, body.Config, sphereOfInfluence); + VolumesBuilder.Make(go, owRigidBody, body.Config, sphereOfInfluence); if (body.Config.FocalPoint != null) { diff --git a/NewHorizons/Schemas/body_schema.json b/NewHorizons/Schemas/body_schema.json index 3badb0eb..cc33cc0e 100644 --- a/NewHorizons/Schemas/body_schema.json +++ b/NewHorizons/Schemas/body_schema.json @@ -451,6 +451,11 @@ "type": "number", "description": "A scale height used for a number of things. Should be the approximate radius of the body.", "format": "float" + }, + "zeroGravityRadius": { + "type": "number", + "description": "Radius of the zero gravity sphere. This sphere will make gravity no longer affect you while you are inside it. Useful for satellites.", + "format": "float" } } },