public void AudioSourceSettingUpdate_NewValueIsWrittenBackToSettings() { var setting = "setting"; _audioSourceMock.SetupGet(s => s.Settings).Returns(new List <AudioSourceSettingAttribute> { new AudioSourceSettingAttribute(setting) }); var settingModel = new AudioSourceSetting { Name = setting }; var settings = new AudioSourceSettings { Settings = new List <AudioSourceSetting> { settingModel } }; object newSettingValue = 1; _audioSourceMock.SetupGet(s => s[It.Is <string>(x => x == setting)]).Returns(newSettingValue); var vm = new AudioSourceSettingsCollectionViewModel(_audioSourceMock.Object, settings, _messageBus.Object); _audioSourceMock.Raise(s => s.SettingChanged += null, new SettingChangedEventArgs(setting)); vm.EndEdit(); Assert.Equal(newSettingValue, settingModel.Value); }
private List <AudioSourceSettingKeyValue> CreateKeyValuePairs(IInternalAudioSource source, AudioSourceSettings existingSettings) { // Using a list instead of a dictionary is simple and good enough for now. There are no observable dictionaries either. var keyPairViewModels = new List <AudioSourceSettingKeyValue>(); var settingAttributes = source.Settings; foreach (var settingAttribute in settingAttributes) { var matchingSetting = existingSettings.Settings.FirstOrDefault(s => s.Name == settingAttribute.Name); if (matchingSetting != null) { keyPairViewModels.Add(new AudioSourceSettingKeyValue(source, matchingSetting, settingAttribute)); } else { var name = settingAttribute.Name; var defaultValue = source[name]; var newSettingModel = new AudioSourceSetting { Name = name, Value = defaultValue }; existingSettings.Settings.Add(newSettingModel); keyPairViewModels.Add(new AudioSourceSettingKeyValue(source, newSettingModel, settingAttribute)); } } // apply changes in priority foreach (var keyPair in keyPairViewModels.OrderByDescending(vm => vm.Priority)) { keyPair.PropagateSettingToAudioSource(); } return(keyPairViewModels); }
private List <AudioSourceSettingVM> CreateSettingViewModels(AudioSourceSettings existingSettings, IAudioSource source) { var viewmodels = new List <AudioSourceSettingVM>(); var audioSourceSettingInfos = source.GetSettings(); foreach (var audioSourceSettingInfo in audioSourceSettingInfos.OrderByDescending(s => s.Attribute.Priority)) { var matchingSetting = existingSettings.Settings.FirstOrDefault(s => s.Name == audioSourceSettingInfo.Attribute.Name); if (matchingSetting != null) { viewmodels.Add(new AudioSourceSettingVM(matchingSetting, audioSourceSettingInfo)); } else { var name = audioSourceSettingInfo.Attribute.Name; var defaultValue = audioSourceSettingInfo.GetValue(); var newSetting = new AudioSourceSetting { Name = name, Value = defaultValue }; Model.Settings.Add(newSetting); viewmodels.Add(new AudioSourceSettingVM(newSetting, audioSourceSettingInfo, false)); } } return(viewmodels); }
private List <AudioSourceSettingVM> CreateSettingViewModels(AudioSourceSettings existingSettings, IInternalAudioSource source) { var viewmodels = new List <AudioSourceSettingVM>(); var settingAttributes = source.Settings; foreach (var settingAttribute in settingAttributes) { var matchingSetting = existingSettings.Settings.FirstOrDefault(s => s.Name == settingAttribute.Name); if (matchingSetting != null) { viewmodels.Add(new AudioSourceSettingVM(source, matchingSetting, settingAttribute)); } else { var name = settingAttribute.Name; var defaultValue = source[name]; var newSetting = new AudioSourceSetting { Name = name, Value = defaultValue }; Model.Settings.Add(newSetting); viewmodels.Add(new AudioSourceSettingVM(source, newSetting, settingAttribute, false)); } } // apply changes in priority foreach (var viewModel in viewmodels.OrderByDescending(vm => vm.Priority)) { viewModel.ApplyChanges(); } return(viewmodels); }
public void AudioSourceSettingUpdatesAreHandled() { var setting = "setting"; _audioSourceMock.SetupGet(s => s.Settings).Returns(new List <AudioSourceSettingAttribute> { new AudioSourceSettingAttribute(setting) }); var settingModel = new AudioSourceSetting { Name = setting }; var settings = new AudioSourceSettings { Settings = new List <AudioSourceSetting> { settingModel } }; var vm = new AudioSourceSettingsVM(settings, _audioSourceMock.Object); object newSettingValue = 1; _audioSourceMock.SetupGet(s => s[It.Is <string>(x => x == setting)]).Returns(newSettingValue); _audioSourceMock.Raise(s => s.SettingChanged += null, new SettingChangedEventArgs(setting)); Assert.AreEqual(settingModel.Value, newSettingValue); }
/// <summary> /// 音樂音效播放(依設定) /// </summary> /// <param name="objAudioSource"></param> /// <param name="_set"></param> /// <returns></returns> void PlayAudioBySetting(GameObject objAudioSource, AudioSourceSetting _set) { AudioSource audioInst = objAudioSource.GetComponent <AudioSource>(); int clipLength = _set._Clip.AudioClip.Length; //是否隨機選擇音樂 if (_set._Clip.isRandom) { //亂數 //System.Random rdm; //rdm = new System.Random(Guid.NewGuid().GetHashCode()); int rdm = UnityEngine.Random.Range(0, _set._Clip.AudioClip.Length); audioInst.clip = _set._Clip.AudioClip[rdm]; //音樂結束刪除依長度 audioInst.GetComponent <DestroyObj>().DestroyTime = _set._Clip.AudioClip[rdm].length; } else { audioInst.clip = _set._Clip.AudioClip[0]; //音樂結束刪除依長度 audioInst.GetComponent <DestroyObj>().DestroyTime = _set._Clip.AudioClip[0].length; } audioInst.playOnAwake = _set.PlayOnAwake; audioInst.mute = _set.Mute; audioInst.loop = _set.Loop; audioInst.priority = _set.Priority; audioInst.volume = _set.Volume * SFX_FixValue; audioInst.pitch = _set._PitchSet.initPitch; }
/// <summary> /// Initializes a new instance of the <see cref="AudioSourceSettingKeyValue"/> class /// with the model, setting information and if it was saved. /// </summary> /// <param name="audioSource">The associated <see cref="IInternalAudioSource"/>.</param> /// <param name="source">The setting model.</param> /// <param name="settingAttribute">The <see cref="AudioSourceSettingAttribute"/>.</param> public AudioSourceSettingKeyValue(IInternalAudioSource audioSource, AudioSourceSetting source, AudioSourceSettingAttribute settingAttribute) { _settingAttribute = settingAttribute; _audioSource = audioSource; _originalSource = source; MapSelf(_originalSource, _model); // Model value was deserialized from string maybe so change to correct type source.Value = TypeConvertHelper.ConvertToType(source.Value, SettingType); }
/// <summary> /// BGM播放(獨播) /// </summary> /// <param name="_set"></param> /// <returns></returns> IEnumerator BGMPlayer(AudioSourceSetting _set) { AudioSource _get; _get = BGM_AS; #region [前置處理] //現在音量 float _vol = _get.volume; //淡出音量 if (isfadeOutTime > 0) { isFadeOut(_get); yield return(null); } #endregion _get.volume = 0.0f; //是否隨機選擇音樂 if (_set._Clip.isRandom) { //亂數 int rdm = UnityEngine.Random.Range(0, _set._Clip.AudioClip.Length); _get.clip = _set._Clip.AudioClip[rdm]; } else { _get.clip = _set._Clip.AudioClip[0]; } #region [初始化參數] _get.mute = _set.Mute; _get.playOnAwake = _set.PlayOnAwake; _get.loop = _set.Loop; _get.priority = _set.Priority; _get.volume = _set.Volume; //_get.loop = _set.Loop; #endregion #region [Pitch] //取是否隨機Pitch bool isPitchRNG; isPitchRNG = _set._PitchSet.isRandom; //Pitch AudioSourceSetting.PitchSet getPitch; getPitch = _set._PitchSet; if (isPitchRNG) { //隨機Pitch值 float RNGPitch; RNGPitch = UnityEngine.Random.Range(getPitch.min, getPitch.max); _get.pitch = RNGPitch; } else { _get.pitch = getPitch.initPitch; } #endregion //FadeOut時間記錄 isfadeOutTime = _set._Clip.fadeOutTime; _get.Play(); yield return(null); #region [FadeIn] //float FadeTime; //FadeTime = _set._Clip.fadeInTime; Control_BGM_Player(); //BGM_ReelVol = _set.Volume; //if (_vol > BGM_ReelVol) //{ // //FadeOut 速率 // float Rate; // Rate = _vol / _set._Clip.fadeInTime * Time.deltaTime; // float isSetVol; // isSetVol = _set.Volume; // while (_vol > isSetVol) // { // _vol -= Rate; // if (_vol < isSetVol) // _vol = isSetVol; // _get.volume = _vol; // } //} Control_BGM_Player(); #endregion }