public bool Play(int soundId, float offset) { if (soundId > (int)EVehicleSoundId.Invalid) { //mute other sounds MuteSoundExcept(soundId); // if it is the first time audio-play then create the specified sound entity. SoundEntity soundEntity = null; if (!_soundEntityCache.ContainsKey(soundId)) { soundEntity = CreateSoundEntity(soundId); _soundEntityCache[soundId] = soundEntity; } soundEntity = _soundEntityCache[soundId]; if (soundEntity == null) { return(true); } //play the speicified sound if (soundEntity.hasAudioSourceKey) { var soundKey = soundEntity.audioSourceKey.Value; if (_soundPlayer.IsPlaying(soundKey)) { _soundPlayer.Mute(soundKey, false); } else { var isLoopSound = _soundConfigManager.IsLoopSound(soundId); if (isLoopSound && offset > 0) { var clipLength = _soundPlayer.GetLength(soundKey); if (clipLength > 0) { offset %= clipLength; } } _soundPlayer.Play(soundKey, offset, isLoopSound); } return(true); } return(false); } //mute all sound if try play Invalid Sound MuteSoundExcept((int)EVehicleSoundId.Invalid); return(true); }
public void OnGamePlay() { foreach (var soundEntity in _playingSoundGroup) { if (!soundEntity.hasAudioSourceKey || soundEntity.isFlagPreventDestroy) { continue; } if (soundEntity.hasParent) { _soundParentController.CleanUpWithParent(soundEntity); } var key = soundEntity.audioSourceKey.Value; if (!_soundPlayer.IsPlaying(key)) { soundEntity.isFlagDestroy = true; } } }