diff --git a/NewHorizons/Builder/Volumes/VisorEffects/VisorFrostEffectVolumeBuilder.cs b/NewHorizons/Builder/Volumes/VisorEffects/VisorFrostEffectVolumeBuilder.cs new file mode 100644 index 00000000..139e09f9 --- /dev/null +++ b/NewHorizons/Builder/Volumes/VisorEffects/VisorFrostEffectVolumeBuilder.cs @@ -0,0 +1,18 @@ +using NewHorizons.External.Modules; +using UnityEngine; + +namespace NewHorizons.Builder.Volumes +{ + public static class VisorFrostEffectVolumeBuilder + { + public static VisorFrostEffectVolume Make(GameObject planetGO, Sector sector, VolumesModule.VisorEffectModule.FrostEffectVolumeInfo info) + { + var volume = PriorityVolumeBuilder.Make(planetGO, sector, info); + + volume._frostRate = info.frostRate; + volume._maxFrost = info.maxFrost; + + return volume; + } + } +} diff --git a/NewHorizons/Builder/Volumes/VisorEffects/VisorRainEffectVolumeBuilder.cs b/NewHorizons/Builder/Volumes/VisorEffects/VisorRainEffectVolumeBuilder.cs new file mode 100644 index 00000000..eebc7bc4 --- /dev/null +++ b/NewHorizons/Builder/Volumes/VisorEffects/VisorRainEffectVolumeBuilder.cs @@ -0,0 +1,18 @@ +using NewHorizons.External.Modules; +using UnityEngine; + +namespace NewHorizons.Builder.Volumes +{ + public static class VisorRainEffectVolumeBuilder + { + public static VisorRainEffectVolume Make(GameObject planetGO, Sector sector, VolumesModule.VisorEffectModule.RainEffectVolumeInfo info) + { + var volume = PriorityVolumeBuilder.Make(planetGO, sector, info); + + volume._dropletRate = info.dropletRate; + volume._streakRate = info.streakRate; + + return volume; + } + } +} diff --git a/NewHorizons/Builder/Volumes/VolumesBuildManager.cs b/NewHorizons/Builder/Volumes/VolumesBuildManager.cs index ecd1c5e3..cddff16c 100644 --- a/NewHorizons/Builder/Volumes/VolumesBuildManager.cs +++ b/NewHorizons/Builder/Volumes/VolumesBuildManager.cs @@ -123,6 +123,23 @@ namespace NewHorizons.Builder.Volumes } } } + if (config.Volumes.visorEffects != null) + { + if (config.Volumes.visorEffects.frostEffectVolumes != null) + { + foreach (var frostEffectVolume in config.Volumes.visorEffects.frostEffectVolumes) + { + VisorFrostEffectVolumeBuilder.Make(go, sector, frostEffectVolume); + } + } + if (config.Volumes.visorEffects.rainEffectVolumes != null) + { + foreach (var rainEffectVolume in config.Volumes.visorEffects.rainEffectVolumes) + { + VisorRainEffectVolumeBuilder.Make(go, sector, rainEffectVolume); + } + } + } } } } diff --git a/NewHorizons/External/Modules/VolumesModule.cs b/NewHorizons/External/Modules/VolumesModule.cs index b2e132db..118407ad 100644 --- a/NewHorizons/External/Modules/VolumesModule.cs +++ b/NewHorizons/External/Modules/VolumesModule.cs @@ -81,6 +81,11 @@ namespace NewHorizons.External.Modules /// public PriorityVolumeInfo[] zeroGravityVolumes; + /// + /// Add visor effect volumes to this planet. + /// + public VisorEffectModule visorEffects; + [JsonObject] public class VolumeInfo { @@ -426,6 +431,53 @@ namespace NewHorizons.External.Modules /// public VolumeInfo[] safetyVolumes; } + + [JsonObject] + public class VisorEffectModule + { + /// + /// Add visor frost effect volumes to this planet. This is the ghost matter effect. + /// + public FrostEffectVolumeInfo[] frostEffectVolumes; + + /// + /// Add visor rain effect volumes to this planet. You can see this on Giant's Deep. + /// + public RainEffectVolumeInfo[] rainEffectVolumes; + + [JsonObject] + public class FrostEffectVolumeInfo : PriorityVolumeInfo + { + /// + /// The rate at which the frost effect will get stronger + /// + [DefaultValue(0.1f)] + public float frostRate = 0.1f; + + /// + /// The maximum strength of frost this volume can give + /// + [Range(0f, 1f)] + [DefaultValue(0.5f)] + public float maxFrost = 0.5f; + } + + [JsonObject] + public class RainEffectVolumeInfo : PriorityVolumeInfo + { + /// + /// The rate at which the rain droplet effect will happen + /// + [DefaultValue(0.1f)] + public float dropletRate = 10f; + + /// + /// The rate at which the rain streak effect will happen + /// + [DefaultValue(1f)] + public float streakRate = 1f; + } + } } [JsonConverter(typeof(StringEnumConverter))]