void Awake() { var audioAnchors = transform?.Find("Audio anchors"); var engineAudio = audioAnchors.transform?.Find("Engine"); var Engine_Layered = engineAudio?.Find("Engine_Layered(Clone)"); var Engine_Layered_Audio = Engine_Layered.GetComponent <LayeredAudio>(); var EngineFan_Layered = new GameObject(); EngineFan_Layered.name = "EngineFan_Layered"; EngineFan_Layered.transform.parent = engineAudio; EngineFan_Layered.transform.localPosition = Vector3.zero; EngineFan_Layered.transform.localRotation = Quaternion.identity; var train_engine_layer_fan = new GameObject(); train_engine_layer_fan.name = "train_engine_layer_fan"; train_engine_layer_fan.transform.parent = EngineFan_Layered.transform; train_engine_layer_fan.transform.localPosition = Vector3.zero; train_engine_layer_fan.transform.localRotation = Quaternion.identity; var audioSource = train_engine_layer_fan.AddComponent <AudioSource>(); audioSource.outputAudioMixerGroup = Engine_Layered_Audio.audioMixerGroup; audioSource.playOnAwake = true; audioSource.loop = true; audioSource.maxDistance = 300f; audioSource.clip = Main.fanAudioClip; audioSource.spatialBlend = 1f; audioSource.dopplerLevel = 0f; audioSource.spread = 10f; var audioLayer = new LayeredAudio.Layer(); audioLayer.name = "engine_fan"; audioLayer.volumeCurve = AnimationCurve.Linear(0f, 0f, 1f, 1f); audioLayer.usePitchCurve = false; audioLayer.inertia = 0f; audioLayer.inertialPitch = false; audioLayer.source = audioSource; audioLayer.refVelo = 0f; audioLayer.startPitch = 0.5f; var layeredAudio = EngineFan_Layered.AddComponent <LayeredAudio>(); layeredAudio.audioMixerGroup = Engine_Layered_Audio.audioMixerGroup; layeredAudio.layers = new LayeredAudio.Layer[1]; layeredAudio.layers[0] = audioLayer; layeredAudio.RandomizeTime(); layeredAudio.Reset(); layeredAudio.Play(); layeredAudio.masterVolume = 0.6f; fanAudio = layeredAudio; controller = gameObject.GetComponent <LocoControllerShunter>(); }
public static void Apply(TrainCarType carType, SoundType soundType, Config.SoundDefinition?soundDefinition, LayeredAudio audio) { var key = new DefaultKey(carType, soundType); Main.DebugLog(() => $"Loading {key}: {soundDefinition}"); var mainLayer = audio.layers[0]; if (!Defaults.ContainsKey(key)) { Defaults[key] = new AudioSettings() { clip = mainLayer.source.clip, pitch = mainLayer.startPitch, minPitch = audio.minPitch, maxPitch = audio.maxPitch, pitchCurve = mainLayer.pitchCurve, volumeCurve = mainLayer.volumeCurve, }; Main.DebugLog(() => $"Saved default settings for {key}: {Defaults[key]}"); } var defaults = Defaults[key]; if (soundDefinition == null) { audio.minPitch = defaults.minPitch !; audio.maxPitch = defaults.maxPitch !; mainLayer.source.clip = defaults.clip; mainLayer.startPitch = defaults.pitch; mainLayer.pitchCurve = defaults.pitchCurve; mainLayer.volumeCurve = defaults.volumeCurve; for (int i = 1; i < audio.layers.Length; i++) { audio.layers[i].source.mute = false; } } else { audio.minPitch = soundDefinition.minPitch ?? defaults.minPitch * defaults.pitch; audio.maxPitch = soundDefinition.maxPitch ?? defaults.maxPitch * defaults.pitch; mainLayer.source.clip = soundDefinition.filename.Map(FileAudio.Load) ?? defaults.clip; mainLayer.startPitch = 1f; mainLayer.pitchCurve = AnimationCurve.EaseInOut( 0f, soundDefinition.minPitch ?? defaults.pitchCurve.Evaluate(0), 1f, soundDefinition.maxPitch ?? defaults.pitchCurve.Evaluate(1)); mainLayer.volumeCurve = AnimationCurve.EaseInOut( 0f, soundDefinition.minVolume ?? defaults.volumeCurve.Evaluate(0), 1f, soundDefinition.maxVolume ?? defaults.volumeCurve.Evaluate(1)); for (int i = 1; i < audio.layers.Length; i++) { audio.layers[i].source.mute = true; } } }