Move zero g volume to Volumes

This commit is contained in:
Nick 2022-10-10 13:35:47 -04:00
parent d8bae23644
commit 00a1cd2a16
6 changed files with 62 additions and 36 deletions

View File

@ -11,15 +11,15 @@ namespace NewHorizons.Builder.Atmosphere
{ {
var innerRadius = config.Base.surfaceSize; var innerRadius = config.Base.surfaceSize;
GameObject volumesGO = new GameObject("Volumes"); var volumesGO = new GameObject("Volumes");
volumesGO.SetActive(false); volumesGO.SetActive(false);
volumesGO.transform.parent = planetGO.transform; volumesGO.transform.parent = planetGO.transform;
GameObject rulesetGO = new GameObject("Ruleset"); var rulesetGO = new GameObject("Ruleset");
rulesetGO.SetActive(false); rulesetGO.SetActive(false);
rulesetGO.transform.parent = volumesGO.transform; rulesetGO.transform.parent = volumesGO.transform;
SphereShape SS = rulesetGO.AddComponent<SphereShape>(); var SS = rulesetGO.AddComponent<SphereShape>();
SS.SetCollisionMode(Shape.CollisionMode.Volume); SS.SetCollisionMode(Shape.CollisionMode.Volume);
SS.SetLayer(Shape.Layer.Sector); SS.SetLayer(Shape.Layer.Sector);
SS.layerMask = -1; SS.layerMask = -1;
@ -28,7 +28,7 @@ namespace NewHorizons.Builder.Atmosphere
rulesetGO.AddComponent<OWTriggerVolume>(); rulesetGO.AddComponent<OWTriggerVolume>();
PlanetoidRuleset PR = rulesetGO.AddComponent<PlanetoidRuleset>(); var PR = rulesetGO.AddComponent<PlanetoidRuleset>();
PR._altitudeFloor = innerRadius; PR._altitudeFloor = innerRadius;
PR._altitudeCeiling = sphereOfInfluence; PR._altitudeCeiling = sphereOfInfluence;
PR._shuttleLandingRadius = sphereOfInfluence; PR._shuttleLandingRadius = sphereOfInfluence;
@ -37,7 +37,7 @@ namespace NewHorizons.Builder.Atmosphere
rulesetGO.AddComponent<AntiTravelMusicRuleset>(); rulesetGO.AddComponent<AntiTravelMusicRuleset>();
EffectRuleset ER = rulesetGO.AddComponent<EffectRuleset>(); var ER = rulesetGO.AddComponent<EffectRuleset>();
ER._type = EffectRuleset.BubbleType.Underwater; ER._type = EffectRuleset.BubbleType.Underwater;
var gdRuleset = SearchUtilities.Find("GiantsDeep_Body/Sector_GD/Volumes_GD/RulesetVolumes_GD").GetComponent<EffectRuleset>(); var gdRuleset = SearchUtilities.Find("GiantsDeep_Body/Sector_GD/Volumes_GD/RulesetVolumes_GD").GetComponent<EffectRuleset>();
@ -50,32 +50,6 @@ namespace NewHorizons.Builder.Atmosphere
} }
ER._cloudMaterial = cloudMaterial; 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>();
sphereCollider.radius = 1;
sphereCollider.isTrigger = true;
var owCollider = zeroGObject.AddComponent<OWCollider>();
owCollider._parentBody = owrb;
owCollider._collider = sphereCollider;
var triggerVolume = zeroGObject.AddComponent<OWTriggerVolume>();
triggerVolume._owCollider = owCollider;
var zeroGVolume = zeroGObject.AddComponent<ZeroGVolume>();
zeroGVolume._attachedBody = owrb;
zeroGVolume._triggerVolume = triggerVolume;
zeroGVolume._inheritable = true;
zeroGVolume._priority = 1;
}
volumesGO.transform.position = planetGO.transform.position; volumesGO.transform.position = planetGO.transform.position;
rulesetGO.SetActive(true); rulesetGO.SetActive(true);
volumesGO.SetActive(true); volumesGO.SetActive(true);

View File

@ -0,0 +1,17 @@
using NewHorizons.External.Modules;
using UnityEngine;
namespace NewHorizons.Builder.Volumes
{
public static class PriorityVolumeBuilder
{
public static TVolume Make<TVolume>(GameObject planetGO, Sector sector, VolumesModule.PriorityVolumeInfo info) where TVolume : PriorityVolume
{
var volume = VolumeBuilder.Make<TVolume>(planetGO, sector, info);
volume.SetPriority(info.priority);
return volume;
}
}
}

View File

@ -78,6 +78,13 @@ namespace NewHorizons.Builder.Volumes
VolumeBuilder.Make<InsulatingVolume>(go, sector, insulatingVolume); VolumeBuilder.Make<InsulatingVolume>(go, sector, insulatingVolume);
} }
} }
if (config.Volumes.zeroGravityVolumes != null)
{
foreach (var zeroGravityVolume in config.Volumes.zeroGravityVolumes)
{
PriorityVolumeBuilder.Make<ZeroGVolume>(go, sector, zeroGravityVolume);
}
}
} }
} }
} }

View File

@ -415,6 +415,19 @@ namespace NewHorizons.External.Configs
if (ring.curve != null) ring.scaleCurve = ring.curve; 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();
}
} }
} }
} }

View File

@ -81,11 +81,6 @@ namespace NewHorizons.External.Modules
/// </summary> /// </summary>
public float surfaceSize; public float surfaceSize;
/// <summary>
/// Radius of the zero gravity volume. This will make it so no gravity from any planet will affect you. Useful for satellites.
/// </summary>
public float zeroGravityRadius;
/// <summary> /// <summary>
/// Optional. You can force this planet's gravity to be felt over other gravity/zero-gravity sources by increasing this number. /// Optional. You can force this planet's gravity to be felt over other gravity/zero-gravity sources by increasing this number.
/// </summary> /// </summary>
@ -120,6 +115,9 @@ namespace NewHorizons.External.Modules
[Obsolete("SphereOfInfluence is deprecated, please use soiOverride instead")] [Obsolete("SphereOfInfluence is deprecated, please use soiOverride instead")]
public float sphereOfInfluence; public float sphereOfInfluence;
[Obsolete("zeroGravityRadius is deprecated, please use Volumes->ZeroGravityVolumes instead")]
public float zeroGravityRadius;
#endregion Obsolete #endregion Obsolete
} }
} }

View File

@ -55,6 +55,12 @@ namespace NewHorizons.External.Modules
/// </summary> /// </summary>
public VolumeInfo[] reverbVolumes; public VolumeInfo[] reverbVolumes;
/// <summary>
/// Add zero-gravity volumes to this planet.
/// Good for surrounding planets which are using a static position to stop the player being pulled away.
/// </summary>
public PriorityVolumeInfo[] zeroGravityVolumes;
[JsonObject] [JsonObject]
public class VolumeInfo public class VolumeInfo
{ {
@ -79,6 +85,17 @@ namespace NewHorizons.External.Modules
public string rename; public string rename;
} }
[JsonObject]
public class PriorityVolumeInfo : VolumeInfo
{
/// <summary>
/// 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.
/// </summary>
[DefaultValue(1)]
public int priority = 1;
}
[JsonObject] [JsonObject]
public class RevealVolumeInfo : VolumeInfo public class RevealVolumeInfo : VolumeInfo
{ {