diff --git a/NewHorizons/Builder/Props/AudioVolumeBuilder.cs b/NewHorizons/Builder/Props/AudioVolumeBuilder.cs new file mode 100644 index 00000000..91d1d3f6 --- /dev/null +++ b/NewHorizons/Builder/Props/AudioVolumeBuilder.cs @@ -0,0 +1,45 @@ +using NewHorizons.External.Modules; +using NewHorizons.Utility; +using OWML.Common; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using UnityEngine; +using Logger = NewHorizons.Utility.Logger; + +namespace NewHorizons.Builder.Props +{ + public static class AudioVolumeBuilder + { + public static AudioVolume Make(GameObject planetGO, Sector sector, PropModule.AudioVolumeInfo info, IModBehaviour mod) + { + var go = new GameObject("AudioVolume"); + go.SetActive(false); + + go.transform.parent = sector?.transform ?? planetGO.transform; + go.transform.position = planetGO.transform.TransformPoint(info.position != null ? (Vector3)info.position : Vector3.zero); + go.layer = LayerMask.NameToLayer("AdvancedEffectVolume"); + + var audioSource = go.AddComponent(); + + var owAudioSource = go.AddComponent(); + owAudioSource._audioSource = audioSource; + owAudioSource.loop = true; + AudioUtilities.SetAudioClip(owAudioSource, info.audio, mod); + + var audioVolume = go.AddComponent(); + + var shape = go.AddComponent(); + shape.radius = info.radius; + + var owTriggerVolume = go.AddComponent(); + owTriggerVolume._shape = shape; + + go.SetActive(true); + + return audioVolume; + } + } +} diff --git a/NewHorizons/Builder/Props/PropBuildManager.cs b/NewHorizons/Builder/Props/PropBuildManager.cs index 76123765..f4b8cf34 100644 --- a/NewHorizons/Builder/Props/PropBuildManager.cs +++ b/NewHorizons/Builder/Props/PropBuildManager.cs @@ -198,6 +198,13 @@ namespace NewHorizons.Builder.Props { SingularityBuilder.Make(go, sector, go.GetComponent(), config, singularity); } + } + if (config.Props.audioVolumes != null) + { + foreach (var audioVolume in config.Props.audioVolumes) + { + AudioVolumeBuilder.Make(go, sector, audioVolume, mod); + } } } } diff --git a/NewHorizons/External/Modules/PropModule.cs b/NewHorizons/External/Modules/PropModule.cs index d0db2bf4..4655821b 100644 --- a/NewHorizons/External/Modules/PropModule.cs +++ b/NewHorizons/External/Modules/PropModule.cs @@ -83,6 +83,11 @@ namespace NewHorizons.External.Modules /// public SingularityModule[] singularities; + /// + /// Add audio volumes to this planet + /// + public AudioVolumeInfo[] audioVolumes; + [JsonObject] public class ScatterInfo { @@ -713,5 +718,24 @@ namespace NewHorizons.External.Modules /// [DefaultValue(1f)] public float probability = 1f; } + + [JsonObject] + public class AudioVolumeInfo + { + /// + /// The location of this audio volume. Optional (will default to 0,0,0). + /// + public MVector3 position; + + /// + /// The radius of this audio volume + /// + public float radius; + + /// + /// The radius of this audio volume + /// + public string audio; + } } } \ No newline at end of file