hellbound/Assets/Sources/Feel/MMTools/Tools/MMAudio/MMSoundManager/MMSoundManagerPlayOptions.cs

127 lines
6.3 KiB
C#
Raw Permalink Normal View History

2021-11-26 11:16:25 +03:00
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Audio;
namespace MoreMountains.Tools
{
/// <summary>
/// A class used to store options for MMSoundManager play
/// </summary>
[Serializable]
public struct MMSoundManagerPlayOptions
{
/// the track on which to play the sound
public MMSoundManager.MMSoundManagerTracks MmSoundManagerTrack;
/// the location at which to position the sound
public Vector3 Location;
/// whether or not the sound should loop
public bool Loop;
/// the volume at which to play the sound
public float Volume;
/// the ID of the sound, useful to find that sound again later
public int ID;
/// whether or not to fade the sound when playing it
public bool Fade;
/// the initial volume of the sound, before the fade
public float FadeInitialVolume;
/// the duration of the fade, in seconds
public float FadeDuration;
/// the tween to use when fading the sound
public MMTweenType FadeTween;
/// whether or not the sound should persist over scene transitions
public bool Persistent;
/// an AudioSource to use if you don't want to pick one from the pool
public AudioSource RecycleAudioSource;
/// an audiogroup to use if you don't want to play on any of the preset tracks
public AudioMixerGroup AudioGroup;
/// The pitch of the audio source.
public float Pitch;
/// Pans a playing sound in a stereo way (left or right). This only applies to sounds that are Mono or Stereo.
public float PanStereo;
/// Sets how much this AudioSource is affected by 3D spatialisation calculations (attenuation, doppler etc). 0.0 makes the sound full 2D, 1.0 makes it full 3D.
public float SpatialBlend;
/// whether or not this sound should play in solo mode over its destination track. If yes, all other sounds on that track will be muted when this sound starts playing
public bool SoloSingleTrack;
/// whether or not this sound should play in solo mode over all other tracks. If yes, all other tracks will be muted when this sound starts playing
public bool SoloAllTracks;
/// if in any of the solo modes, AutoUnSoloOnEnd will unmute the track(s) automatically once that sound stops playing
public bool AutoUnSoloOnEnd;
/// Bypass effects (Applied from filter components or global listener filters).
public bool BypassEffects;
/// When set global effects on the AudioListener will not be applied to the audio signal generated by the AudioSource. Does not apply if the AudioSource is playing into a mixer group.
public bool BypassListenerEffects;
/// When set doesn't route the signal from an AudioSource into the global reverb associated with reverb zones.
public bool BypassReverbZones;
/// Sets the priority of the AudioSource.
public int Priority;
/// The amount by which the signal from the AudioSource will be mixed into the global reverb associated with the Reverb Zones.
public float ReverbZoneMix;
/// Sets the Doppler scale for this AudioSource.
public float DopplerLevel;
/// Sets the spread angle (in degrees) of a 3d stereo or multichannel sound in speaker space.
public int Spread;
/// Sets/Gets how the AudioSource attenuates over distance.
public AudioRolloffMode RolloffMode;
/// Within the Min distance the AudioSource will cease to grow louder in volume.
public float MinDistance;
/// (Logarithmic rolloff) MaxDistance is the distance a sound stops attenuating at.
public float MaxDistance;
/// <summary>
/// A default set of options, meant to suit most common cases.
/// When using options, it's a good idea to start with that and override only what you need to.
///
/// Example :
///
/// MMSoundManagerPlayOptions options = MMSoundManagerPlayOptions.Default;
/// options.Loop = Loop;
/// options.Location = Vector3.zero;
/// options.MmSoundManagerTrack = MMSoundManager.MMSoundManagerTracks.Music;
///
/// MMSoundManagerSoundPlayEvent.Trigger(SoundClip, options);
///
/// Here we initialize a new local options set, override its loop, location and track settings, and call a play event using it
///
/// </summary>
public static MMSoundManagerPlayOptions Default
{
get
{
MMSoundManagerPlayOptions defaultOptions = new MMSoundManagerPlayOptions();
defaultOptions.MmSoundManagerTrack = MMSoundManager.MMSoundManagerTracks.Sfx;
defaultOptions.Location = Vector3.zero;
defaultOptions.Loop = false;
defaultOptions.Volume = 1.0f;
defaultOptions.ID = 0;
defaultOptions.Fade = false;
defaultOptions.FadeInitialVolume = 0f;
defaultOptions.FadeDuration = 1f;
defaultOptions.FadeTween = null;
defaultOptions.Persistent = false;
defaultOptions.RecycleAudioSource = null;
defaultOptions.AudioGroup = null;
defaultOptions.Pitch = 1f;
defaultOptions.PanStereo = 0f;
defaultOptions.SpatialBlend = 0.0f;
defaultOptions.SoloSingleTrack = false;
defaultOptions.SoloAllTracks = false;
defaultOptions.AutoUnSoloOnEnd = false;
defaultOptions.BypassEffects = false;
defaultOptions.BypassListenerEffects = false;
defaultOptions.BypassReverbZones = false;
defaultOptions.Priority = 128;
defaultOptions.ReverbZoneMix = 1f;
defaultOptions.DopplerLevel = 1f;
defaultOptions.Spread = 0;
defaultOptions.RolloffMode = AudioRolloffMode.Logarithmic;
defaultOptions.MinDistance = 1f;
defaultOptions.MaxDistance = 500f;
return defaultOptions;
}
}
}
}