Skip to content

Commit

Permalink
DVO: Adjusted slider bounds, reset volume in lobby
Browse files Browse the repository at this point in the history
  • Loading branch information
AuriRex committed Jul 11, 2023
1 parent e07d221 commit 8f54273
Showing 1 changed file with 30 additions and 7 deletions.
37 changes: 30 additions & 7 deletions TheArchive.IL2CPP/Features/Accessibility/DynamicVolumeOverride.cs
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,12 @@ public class DynamicVolumeOverride : Feature

public class DynamicVolumeSettings
{
[FSSlider(0f, 100f)]
[FSSlider(0f, 1f, FSSlider.SliderStyle.FloatPercent, FSSlider.RoundTo.TwoDecimal)]
[FSDisplayName("Volume Override")]
[FSDescription("Volume percent to use during the games' intro and elevator ride sequences.")]
public float VolumeOverrideValue { get; set; } = 0.1f;

[FSHide, Obsolete]
public float VolumeOverride { get; set; } = 10f;

[FSDisplayName("Volume Interpolation (Seconds)")]
Expand All @@ -58,6 +61,18 @@ public enum FocusChangeMode
}
}

public override void Init()
{
// Move from legacy settings value to new one
#pragma warning disable CS0612 // Type or member is obsolete
if (Settings.VolumeOverride >= 0)
{
Settings.VolumeOverrideValue = Settings.VolumeOverride / 100f;
Settings.VolumeOverride = -1;
}
#pragma warning restore CS0612 // Type or member is obsolete
}

public override void OnButtonPressed(ButtonSetting setting)
{
if(setting.ButtonID == nameof(DynamicVolumeSettings.OopsMySoundSomehowBrokePleaseReset))
Expand Down Expand Up @@ -89,7 +104,7 @@ public override void OnApplicationFocusChanged(bool focus)
{
if (IsOverrideActive)
{
SetSFXVolume(Settings.VolumeOverride);
SetSFXVolume(Settings.VolumeOverrideValue * 100f);
return;
}
ResetAllVolume();
Expand All @@ -107,7 +122,7 @@ public override void OnApplicationFocusChanged(bool focus)
ResetAllVolume();
break;
case DynamicVolumeSettings.FocusChangeMode.OverrideInBackground:
SetAllVolume(Settings.VolumeOverride);
SetAllVolume(Settings.VolumeOverrideValue * 100f);
break;
}
return;
Expand Down Expand Up @@ -158,26 +173,34 @@ public static void ResetAllVolume()
private static readonly eGameStateName _eGameStateName_Offline = Utils.GetEnumFromName<eGameStateName>(nameof(eGameStateName.Offline));
private static readonly eGameStateName _eGameStateName_StopElevatorRide = Utils.GetEnumFromName<eGameStateName>(nameof(eGameStateName.StopElevatorRide));
private static readonly eGameStateName _eGameStateName_InLevel = Utils.GetEnumFromName<eGameStateName>(nameof(eGameStateName.InLevel));
private static readonly eGameStateName _eGameStateName_Lobby = Utils.GetEnumFromName<eGameStateName>(nameof(eGameStateName.Lobby));

public void OnGameStateChanged(eGameStateName state)
{
if(state == _eGameStateName_Offline)
{
IsOverrideActive = true;
// Change volume for intro seq.
SetSFXVolume(Settings.VolumeOverride, "OnGameStateChanged, Offline");
SetSFXVolume(Settings.VolumeOverrideValue * 100f, "OnGameStateChanged, Offline");
}

if(state == _eGameStateName_StopElevatorRide || (state == _eGameStateName_InLevel && !IsLerpActive && IsOverrideActive))
{
// Lerp to game settings on elevator ride stop
LerpVolume(Settings.VolumeOverride, GetPlayerSFXSettings(), Settings.LerpTime, onDone: () =>
LerpVolume(Settings.VolumeOverrideValue * 100f, GetPlayerSFXSettings(), Settings.LerpTime, onDone: () =>
{
IsOverrideActive = false;
if (IsApplicationFocused)
ResetAllVolume();
});
}

if (state == _eGameStateName_Lobby)
{
IsOverrideActive = false;
if (IsApplicationFocused)
ResetAllVolume();
}
}

private static void LerpVolume(float from, float to, float duration, Action onDone = null)
Expand Down Expand Up @@ -233,7 +256,7 @@ public static void Prefix()
// And a second time later once enabled for real (also everytime you switch in the menu)
if (_state == 1)
{
LerpVolume(Settings.VolumeOverride, GetPlayerSFXSettings(), Settings.LerpTime, onDone: () =>
LerpVolume(Settings.VolumeOverrideValue * 100f, GetPlayerSFXSettings(), Settings.LerpTime, onDone: () =>
{
IsOverrideActive = false;
if (IsApplicationFocused)
Expand All @@ -252,7 +275,7 @@ internal static class ElevatorRide_StartPreReleaseSequence_Patch
public static void Prefix()
{
IsOverrideActive = true;
SetSFXVolume(Settings.VolumeOverride, "ElevatorRide.StartPreReleaseSequence");
SetSFXVolume(Settings.VolumeOverrideValue * 100f, "ElevatorRide.StartPreReleaseSequence");
}
}

Expand Down

0 comments on commit 8f54273

Please sign in to comment.