/// <summary> /// Play the specified sound and follow a given target Transform while playing. /// Returns a reference to the SoundyController that is playing the sound. /// Returns null if no sound is found. /// </summary> /// <param name="databaseName"> The sound category </param> /// <param name="soundName"> Sound Name of the sound </param> /// <param name="followTarget"> The target transform that the sound will follow while playing </param> public static SoundyController Play(string databaseName, string soundName, Transform followTarget) { if (!s_initialized) { s_instance = Instance; } if (Database == null) { return(null); } if (soundName.Equals(NO_SOUND)) { return(null); } SoundGroupData soundGroupData = Database.GetAudioData(databaseName, soundName); if (soundGroupData == null) { return(null); } if (Instance.DebugComponent) { DDebug.Log("Play '" + databaseName + "' / '" + soundName + "' SoundGroupData and follow the '" + followTarget.name + "' GameObject", Instance); } return(soundGroupData.Play(followTarget, Database.GetSoundDatabase(databaseName).OutputAudioMixerGroup)); }
/// <summary> Sorts the entire database by sound name </summary> /// <param name="performUndo"> Record changes? </param> /// <param name="saveAssets"> Write all unsaved asset changes to disk? </param> public void Sort(bool performUndo, bool saveAssets = false) { if (performUndo) { UndoRecord(UILabels.SortDatabase); } Database = Database.OrderBy(data => data.SoundName).ToList(); //remove the 'No Sound' entry wherever it is SoundGroupData noSoundSoundGroupData = null; foreach (SoundGroupData audioData in Database) { if (!audioData.SoundName.Equals(SoundyManager.NO_SOUND)) { continue; } noSoundSoundGroupData = audioData; Database.Remove(audioData); break; } if (noSoundSoundGroupData != null) { Database.Insert(0, noSoundSoundGroupData); //insert back the 'No Sound' entry at the top } UpdateSoundNames(false); SetDirty(saveAssets); }
/// <summary> /// Play the specified sound at the given position. /// Returns a reference to the SoundyController that is playing the sound. /// Returns null if no sound is found. /// </summary> /// <param name="databaseName"> The sound category </param> /// <param name="soundName"> Sound Name of the sound </param> /// <param name="position"> The position from where this sound will play from </param> public static SoundyController Play(string databaseName, string soundName, Vector3 position) { if (!s_initialized) { s_instance = Instance; } if (Database == null) { return(null); } if (soundName.Equals(NO_SOUND)) { return(null); } SoundGroupData soundGroupData = Database.GetAudioData(databaseName, soundName); if (soundGroupData == null) { return(null); } if (Instance.DebugComponent) { DDebug.Log("Play '" + databaseName + "' / '" + soundName + "' SoundGroupData at " + position + " position", Instance); } return(soundGroupData.Play(position, Database.GetSoundDatabase(databaseName).OutputAudioMixerGroup)); }
/// <summary> Adds a new entry, a SoundGroupData, to the database. Returns TRUE if the operation was successful </summary> /// <param name="data"> SoundGroupData to add to the database </param> /// <param name="saveAssets"> Write all unsaved asset changes to disk? </param> public bool Add(SoundGroupData data, bool saveAssets) { if (data == null) { return(false); } data.DatabaseName = DatabaseName; AddObjectToAsset(data); SetDirty(saveAssets); return(true); }
/// <summary> Iterates through the database to look for the data. If found, removes the entry and returns TRUE </summary> /// <param name="data"> SoundGroupData to search for </param> /// <param name="showDialog"> Should a display dialog be shown before executing the action </param> /// <param name="saveAssets"> Write all unsaved asset changes to disk? </param> public bool Remove(SoundGroupData data, bool showDialog = false, bool saveAssets = false) { if (data == null) { return(false); } if (!Contains(data)) { return(false); } #if UNITY_EDITOR if (showDialog) { if (!EditorUtility.DisplayDialog(UILabels.RemovedEntry + " '" + data.SoundName + "'", UILabels.AreYouSureYouWantToRemoveTheEntry + "\n\n" + UILabels.OperationCannotBeUndone, UILabels.Yes, UILabels.No)) { return(false); } } #endif for (int i = Database.Count - 1; i >= 0; i--) { if (Database[i] == data) { if (data != null) { DestroyImmediate(data, true); } Database.RemoveAt(i); break; } } UpdateSoundNames(false); SetDirty(saveAssets); return(true); }
/// <summary> Removes any entries that have no AudioClip referenced </summary> /// <param name="performUndo"> Record changes? </param> /// <param name="saveAssets"> Write all unsaved asset changes to disk? </param> public void RemoveEntriesWithNoAudioClipsReferenced(bool performUndo, bool saveAssets = false) { if (performUndo) { UndoRecord(UILabels.RemovedEntry); } for (int i = Database.Count - 1; i >= 0; i--) { SoundGroupData data = Database[i]; if (data.SoundName.Equals(SoundyManager.NO_SOUND)) { continue; } if (data.Sounds == null) { Database.RemoveAt(i); continue; } for (int j = data.Sounds.Count - 1; j >= 0; j--) { if (data.Sounds[j] == null) { data.Sounds.RemoveAt(j); } } if (data.Sounds.Count == 0) { Database.RemoveAt(i); } } SetDirty(saveAssets); }
/// <summary> /// Play the specified sound with the given category, name and type. /// Returns a reference to the SoundyController that is playing the sound. /// Returns null if no sound is found. /// </summary> /// <param name="databaseName"> The sound category </param> /// <param name="soundName"> Sound Name of the sound </param> public static SoundyController Play(string databaseName, string soundName) { if (!s_initialized) { s_instance = Instance; } if (Database == null) { return(null); } if (soundName.Equals(NO_SOUND)) { return(null); } if (string.IsNullOrEmpty(databaseName) || string.IsNullOrEmpty(databaseName.Trim())) { return(null); } if (string.IsNullOrEmpty(soundName) || string.IsNullOrEmpty(soundName.Trim())) { return(null); } SoundDatabase soundDatabase = Database.GetSoundDatabase(databaseName); if (soundDatabase == null) { return(null); } SoundGroupData soundGroupData = soundDatabase.GetData(soundName); if (soundGroupData == null) { return(null); } return(soundGroupData.Play(Pooler.transform, soundDatabase.OutputAudioMixerGroup)); }
/// <summary> Returns TRUE if the SoundGroupData has been found in the database </summary> /// <param name="soundGroupData"> SoundGroupData to search for </param> public bool Contains(SoundGroupData soundGroupData) { return(soundGroupData != null && Database.Contains(soundGroupData)); }