コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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);
        }
コード例 #6
0
ファイル: AudioManager.cs プロジェクト: chile109/ArrowArduino
    /// <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;
    }
コード例 #7
0
        /// <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);
        }
コード例 #8
0
ファイル: AudioManager.cs プロジェクト: chile109/ArrowArduino
    /// <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
    }