172 lines
6.4 KiB
C#
172 lines
6.4 KiB
C#
//------------------------------------------------------------
|
|
// Game Framework
|
|
// Copyright © 2013-2021 Jiang Yin. All rights reserved.
|
|
// Homepage: https://gameframework.cn/
|
|
// Feedback: mailto:ellan@gameframework.cn
|
|
//------------------------------------------------------------
|
|
|
|
using DataTable;
|
|
using Definition;
|
|
using Entity;
|
|
using GameFramework;
|
|
using GameFramework.DataTable;
|
|
using GameFramework.Sound;
|
|
using UnityGameFramework.Runtime;
|
|
using Game.Utility;
|
|
|
|
namespace StarForce
|
|
{
|
|
public static class SoundExtension
|
|
{
|
|
private const float FadeVolumeDuration = 1f;
|
|
private static int? s_MusicSerialId = null;
|
|
|
|
public static int? PlayMusic(this SoundComponent soundComponent, int musicId, object userData = null)
|
|
{
|
|
soundComponent.StopMusic();
|
|
|
|
IDataTable<DRMusic> dtMusic = GameEntry.DataTable.GetDataTable<DRMusic>();
|
|
DRMusic drMusic = dtMusic.GetDataRow(musicId);
|
|
if (drMusic == null)
|
|
{
|
|
Log.Warning("Can not load music '{0}' from data table.", musicId.ToString());
|
|
return null;
|
|
}
|
|
|
|
PlaySoundParams playSoundParams = PlaySoundParams.Create();
|
|
playSoundParams.Priority = 64;
|
|
playSoundParams.Loop = true;
|
|
playSoundParams.VolumeInSoundGroup = 1f;
|
|
playSoundParams.FadeInSeconds = FadeVolumeDuration;
|
|
playSoundParams.SpatialBlend = 0f;
|
|
s_MusicSerialId = soundComponent.PlaySound(AssetUtility.GetMusicAsset(drMusic.AssetName), "Music", Constant.AssetPriority.MusicAsset, playSoundParams, null, userData);
|
|
return s_MusicSerialId;
|
|
}
|
|
|
|
public static void StopMusic(this SoundComponent soundComponent)
|
|
{
|
|
if (!s_MusicSerialId.HasValue)
|
|
{
|
|
return;
|
|
}
|
|
|
|
soundComponent.StopSound(s_MusicSerialId.Value, FadeVolumeDuration);
|
|
s_MusicSerialId = null;
|
|
}
|
|
|
|
public static int? PlaySound(this SoundComponent soundComponent, int soundId, EntityBase bindingEntity = null, object userData = null)
|
|
{
|
|
IDataTable<DRSound> dtSound = GameEntry.DataTable.GetDataTable<DRSound>();
|
|
DRSound drSound = dtSound.GetDataRow(soundId);
|
|
if (drSound == null)
|
|
{
|
|
Log.Warning("Can not load sound '{0}' from data table.", soundId.ToString());
|
|
return null;
|
|
}
|
|
|
|
PlaySoundParams playSoundParams = PlaySoundParams.Create();
|
|
playSoundParams.Priority = drSound.Priority;
|
|
playSoundParams.Loop = drSound.Loop;
|
|
playSoundParams.VolumeInSoundGroup = drSound.Volume;
|
|
playSoundParams.SpatialBlend = drSound.SpatialBlend;
|
|
return soundComponent.PlaySound(AssetUtility.GetSoundAsset(drSound.AssetName), "Sound", Constant.AssetPriority.SoundAsset, playSoundParams, bindingEntity != null ? bindingEntity.Entity : null, userData);
|
|
}
|
|
|
|
public static int? PlayUISound(this SoundComponent soundComponent, int uiSoundId, object userData = null)
|
|
{
|
|
IDataTable<DRUISound> dtUISound = GameEntry.DataTable.GetDataTable<DRUISound>();
|
|
DRUISound drUISound = dtUISound.GetDataRow(uiSoundId);
|
|
if (drUISound == null)
|
|
{
|
|
Log.Warning("Can not load UI sound '{0}' from data table.", uiSoundId.ToString());
|
|
return null;
|
|
}
|
|
|
|
PlaySoundParams playSoundParams = PlaySoundParams.Create();
|
|
playSoundParams.Priority = drUISound.Priority;
|
|
playSoundParams.Loop = false;
|
|
playSoundParams.VolumeInSoundGroup = drUISound.Volume;
|
|
playSoundParams.SpatialBlend = 0f;
|
|
return soundComponent.PlaySound(AssetUtility.GetUISoundAsset(drUISound.AssetName), "UISound", Constant.AssetPriority.UISoundAsset, playSoundParams, userData);
|
|
}
|
|
|
|
public static bool IsMuted(this SoundComponent soundComponent, string soundGroupName)
|
|
{
|
|
if (string.IsNullOrEmpty(soundGroupName))
|
|
{
|
|
Log.Warning("Sound group is invalid.");
|
|
return true;
|
|
}
|
|
|
|
ISoundGroup soundGroup = soundComponent.GetSoundGroup(soundGroupName);
|
|
if (soundGroup == null)
|
|
{
|
|
Log.Warning("Sound group '{0}' is invalid.", soundGroupName);
|
|
return true;
|
|
}
|
|
|
|
return soundGroup.Mute;
|
|
}
|
|
|
|
public static void Mute(this SoundComponent soundComponent, string soundGroupName, bool mute)
|
|
{
|
|
if (string.IsNullOrEmpty(soundGroupName))
|
|
{
|
|
Log.Warning("Sound group is invalid.");
|
|
return;
|
|
}
|
|
|
|
ISoundGroup soundGroup = soundComponent.GetSoundGroup(soundGroupName);
|
|
if (soundGroup == null)
|
|
{
|
|
Log.Warning("Sound group '{0}' is invalid.", soundGroupName);
|
|
return;
|
|
}
|
|
|
|
soundGroup.Mute = mute;
|
|
|
|
GameEntry.Setting.SetBool(Utility.Text.Format(Constant.Setting.SoundGroupMuted, soundGroupName), mute);
|
|
GameEntry.Setting.Save();
|
|
}
|
|
|
|
public static float GetVolume(this SoundComponent soundComponent, string soundGroupName)
|
|
{
|
|
if (string.IsNullOrEmpty(soundGroupName))
|
|
{
|
|
Log.Warning("Sound group is invalid.");
|
|
return 0f;
|
|
}
|
|
|
|
ISoundGroup soundGroup = soundComponent.GetSoundGroup(soundGroupName);
|
|
if (soundGroup == null)
|
|
{
|
|
Log.Warning("Sound group '{0}' is invalid.", soundGroupName);
|
|
return 0f;
|
|
}
|
|
|
|
return soundGroup.Volume;
|
|
}
|
|
|
|
public static void SetVolume(this SoundComponent soundComponent, string soundGroupName, float volume)
|
|
{
|
|
if (string.IsNullOrEmpty(soundGroupName))
|
|
{
|
|
Log.Warning("Sound group is invalid.");
|
|
return;
|
|
}
|
|
|
|
ISoundGroup soundGroup = soundComponent.GetSoundGroup(soundGroupName);
|
|
if (soundGroup == null)
|
|
{
|
|
Log.Warning("Sound group '{0}' is invalid.", soundGroupName);
|
|
return;
|
|
}
|
|
|
|
soundGroup.Volume = volume;
|
|
|
|
GameEntry.Setting.SetFloat(Utility.Text.Format(Constant.Setting.SoundGroupVolume, soundGroupName), volume);
|
|
GameEntry.Setting.Save();
|
|
}
|
|
}
|
|
}
|