Add utils + refacto
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
using System.Collections;
|
||||
using UnityEngine;
|
||||
using UnityEngine.InputSystem;
|
||||
using Unheimlich.Utility;
|
||||
|
||||
namespace Unheimlich.Audio
|
||||
{
|
||||
@@ -24,8 +25,8 @@ namespace Unheimlich.Audio
|
||||
private const string CONTINUOUS_AUDIO_SOURCE_NAME = "Continuous Audio Source";
|
||||
|
||||
// Volume multipliers for concentration system
|
||||
private const float BASELINE_VOLUME_MULTIPLIER = 0.3f;
|
||||
private const float FULL_VOLUME_MULTIPLIER = 1f;
|
||||
private const float BASELINE_VOLUME_MULTIPLIER = 0.1f;
|
||||
private const float FULL_VOLUME_MULTIPLIER = 1.5f;
|
||||
private const float CONCENTRATION_FADE_DURATION = 1f;
|
||||
private const float RELEASE_FADE_DURATION = 0.5f;
|
||||
|
||||
@@ -78,7 +79,8 @@ namespace Unheimlich.Audio
|
||||
private AudioClip _continuousClip;
|
||||
private Coroutine _volumeFadeCoroutine;
|
||||
private Coroutine _startListeningCoroutine;
|
||||
private Coroutine _concentrationFadeCoroutine;
|
||||
private int _concentrationFadeTweenId = -1;
|
||||
private int _crossfadeTweenId = -1;
|
||||
|
||||
/// <summary>
|
||||
/// Returns true if this emitter has been tapped during the current listening session.
|
||||
@@ -147,18 +149,34 @@ namespace Unheimlich.Audio
|
||||
/// </summary>
|
||||
public void SetConcentrating(bool concentrating)
|
||||
{
|
||||
TweenHelper.CancelTween(ref _concentrationFadeTweenId);
|
||||
|
||||
if (_concentrationFadeCoroutine != null)
|
||||
StopCoroutine(_concentrationFadeCoroutine);
|
||||
if (_continuousAudioSource == null)
|
||||
return;
|
||||
|
||||
if (concentrating)
|
||||
{
|
||||
_concentrationFadeCoroutine = StartCoroutine(FadeConcentrationVolume(BASELINE_VOLUME_MULTIPLIER, FULL_VOLUME_MULTIPLIER, CONCENTRATION_FADE_DURATION));
|
||||
}
|
||||
else
|
||||
{
|
||||
_concentrationFadeCoroutine = StartCoroutine(FadeConcentrationVolume(FULL_VOLUME_MULTIPLIER, BASELINE_VOLUME_MULTIPLIER, RELEASE_FADE_DURATION));
|
||||
}
|
||||
float baseVolume = _continuousBaseVolume;
|
||||
float fromMultiplier = concentrating ? BASELINE_VOLUME_MULTIPLIER : FULL_VOLUME_MULTIPLIER;
|
||||
float toMultiplier = concentrating ? FULL_VOLUME_MULTIPLIER : BASELINE_VOLUME_MULTIPLIER;
|
||||
float duration = concentrating ? CONCENTRATION_FADE_DURATION : RELEASE_FADE_DURATION;
|
||||
|
||||
float fromVolume = baseVolume * fromMultiplier;
|
||||
float toVolume = baseVolume * toMultiplier;
|
||||
|
||||
_concentrationFadeTweenId = TweenHelper.FadeVolume(
|
||||
_continuousAudioSource,
|
||||
toVolume,
|
||||
duration);
|
||||
}
|
||||
|
||||
public void ResetConcentrationVolume()
|
||||
{
|
||||
TweenHelper.CancelTween(ref _concentrationFadeTweenId);
|
||||
|
||||
if (_continuousAudioSource == null)
|
||||
return;
|
||||
|
||||
float baselineVolume = _continuousBaseVolume * BASELINE_VOLUME_MULTIPLIER;
|
||||
_continuousAudioSource.volume = baselineVolume;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -197,8 +215,22 @@ namespace Unheimlich.Audio
|
||||
if (_volumeFadeCoroutine != null)
|
||||
StopCoroutine(_volumeFadeCoroutine);
|
||||
|
||||
TweenHelper.CancelTween(ref _crossfadeTweenId);
|
||||
|
||||
float crossfadeDuration = 1f;
|
||||
_volumeFadeCoroutine = StartCoroutine(CrossfadeSounds(crossfadeDuration));
|
||||
|
||||
if (_continuousAudioSource != null)
|
||||
{
|
||||
_crossfadeTweenId = TweenHelper.FadeVolume(
|
||||
_continuousAudioSource,
|
||||
0f,
|
||||
crossfadeDuration,
|
||||
() =>
|
||||
{
|
||||
if (_continuousAudioSource != null)
|
||||
_continuousAudioSource.Stop();
|
||||
});
|
||||
}
|
||||
|
||||
if (_emitterParticles != null)
|
||||
{
|
||||
@@ -231,7 +263,7 @@ namespace Unheimlich.Audio
|
||||
/// This is the only place where _hasBeenTapped is reset to false,
|
||||
/// allowing the emitter to be used again in a future listening session.
|
||||
/// </summary>
|
||||
public void StopListening()
|
||||
public void StopListening(bool cancelConcentrationFade = true)
|
||||
{
|
||||
bool wasBeenTapped = _hasBeenTapped;
|
||||
|
||||
@@ -244,8 +276,8 @@ namespace Unheimlich.Audio
|
||||
if (_startListeningCoroutine != null)
|
||||
StopCoroutine(_startListeningCoroutine);
|
||||
|
||||
if (_concentrationFadeCoroutine != null)
|
||||
StopCoroutine(_concentrationFadeCoroutine);
|
||||
if (cancelConcentrationFade)
|
||||
TweenHelper.CancelTween(ref _concentrationFadeTweenId);
|
||||
|
||||
if (_audioSource != null && _audioSource.isPlaying)
|
||||
_audioSource.Stop();
|
||||
@@ -400,59 +432,6 @@ namespace Unheimlich.Audio
|
||||
Gamepad.current.SetMotorSpeeds(intensity, intensity);
|
||||
}
|
||||
|
||||
private IEnumerator FadeConcentrationVolume(float fromMultiplier, float toMultiplier, float duration)
|
||||
{
|
||||
float elapsed = 0f;
|
||||
float baseVolume = _continuousBaseVolume;
|
||||
|
||||
while (elapsed < duration)
|
||||
{
|
||||
elapsed += Time.deltaTime;
|
||||
float t = elapsed / duration;
|
||||
float currentMultiplier = Mathf.Lerp(fromMultiplier, toMultiplier, t);
|
||||
|
||||
if (_continuousAudioSource != null)
|
||||
{
|
||||
_continuousAudioSource.volume = baseVolume * currentMultiplier;
|
||||
}
|
||||
|
||||
yield return null;
|
||||
}
|
||||
|
||||
if (_continuousAudioSource != null)
|
||||
{
|
||||
_continuousAudioSource.volume = baseVolume * toMultiplier;
|
||||
}
|
||||
}
|
||||
|
||||
private IEnumerator CrossfadeSounds(float fadeDuration)
|
||||
{
|
||||
if (_continuousAudioSource == null)
|
||||
yield break;
|
||||
|
||||
float startVolume = _continuousAudioSource.volume;
|
||||
float elapsed = 0f;
|
||||
|
||||
while (elapsed < fadeDuration)
|
||||
{
|
||||
elapsed += Time.deltaTime;
|
||||
float t = elapsed / fadeDuration;
|
||||
|
||||
if (_continuousAudioSource != null)
|
||||
{
|
||||
_continuousAudioSource.volume = Mathf.Lerp(startVolume, 0f, t);
|
||||
}
|
||||
|
||||
yield return null;
|
||||
}
|
||||
|
||||
if (_continuousAudioSource != null)
|
||||
{
|
||||
_continuousAudioSource.volume = 0f;
|
||||
_continuousAudioSource.Stop();
|
||||
}
|
||||
}
|
||||
|
||||
private void UpdateVibration()
|
||||
{
|
||||
if (!_enableVibration || Gamepad.current == null)
|
||||
|
||||
@@ -50,6 +50,8 @@ namespace Unheimlich.Audio
|
||||
private void RefreshListenablesList()
|
||||
{
|
||||
_allListenables = FindObjectsByType<AudioListenable>(FindObjectsSortMode.None);
|
||||
if (!_showDebugInfo)
|
||||
return;
|
||||
Debug.Log($"Found {_allListenables.Length} AudioListenable objects in scene");
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user