Skip to content

Commit

Permalink
[F] Sudden changes in headphone volume (#9)
Browse files Browse the repository at this point in the history
* [F] Sudden changes in headphone volume

* [F]: Should rst _volumeFadeInState when logging out

* [F]: Reset _volumeFadeInState in GameOver
  • Loading branch information
Becods authored Jan 20, 2025
1 parent f6e8f4e commit d00f70d
Showing 1 changed file with 66 additions and 10 deletions.
76 changes: 66 additions & 10 deletions AquaMai.Mods/Tweaks/TimeSaving/EntryToMusicSelection.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
using MAI2.Util;
using Manager;
using Monitor;
using Monitor.ModeSelect;
using Process;
using Process.Information;

Expand All @@ -14,6 +15,12 @@ namespace AquaMai.Mods.Tweaks.TimeSaving;
zh: "登录完成后直接进入选歌界面")]
public class EntryToMusicSelection
{
private static int[] _timers = new int[2];

private static CommonValue[] _volumeFadeIns = { new CommonValue(), new CommonValue() };

private static readonly bool[] _volumeFadeInState = new bool[2];

/*
* Highly experimental, may well break some stuff
* Works by overriding the info screen (where it shows new events and stuff)
Expand All @@ -25,16 +32,6 @@ public class EntryToMusicSelection
public static bool OnUpdate(InformationProcess __instance, ProcessDataContainer ___container)
{
GameManager.SetMaxTrack();
// Set headphone volume
for (var i = 0; i < 2; i++)
{
var userData = UserDataManager.Instance.GetUserData(i);
if (userData.IsEntry)
{
OptionHeadphonevolumeID headPhoneVolume = userData.Option.HeadPhoneVolume;
SoundManager.SetHeadPhoneVolume(i, headPhoneVolume.GetValue());
}
}
___container.processManager.AddProcess(new MusicSelectProcess(___container));
___container.processManager.ReleaseProcess(__instance);
return false;
Expand All @@ -49,4 +46,63 @@ public static void MapResultMonitorPreInitialize(int monIndex)
if (index >= 0) return;
userData.MapList.Clear();
}

// Gradually increase headphone volume
[HarmonyPrefix]
[HarmonyPatch(typeof(MusicSelectProcess), "OnUpdate")]
public static void MusicSelectProcessOnUpdate()
{
for (var i = 0; i < 2; i++)
{
if (_volumeFadeInState[i] && _timers[i] == 0) continue;

if (_timers[i] > 0)
{
_timers[i]--;
}

if (_volumeFadeInState[i])
{
if (_timers[i] == 0)
{
SoundManager.SetHeadPhoneVolume(i, _volumeFadeIns[i].end);
}
else if (!_volumeFadeIns[i].UpdateValue())
{
SoundManager.SetHeadPhoneVolume(i, _volumeFadeIns[i].current);
}
}
else
{
var userData = UserDataManager.Instance.GetUserData(i);
if (!userData.IsEntry) continue;
var value = userData.Option.HeadPhoneVolume.GetValue();
if (GameManager.IsSelectContinue[i])
{
_volumeFadeIns[i].start = value;
_volumeFadeIns[i].current = value;
}
else
{
_volumeFadeIns[i].start = 0.05f;
_volumeFadeIns[i].current = 0.05f;
}

_volumeFadeIns[i].end = value;
_volumeFadeIns[i].diff = (_volumeFadeIns[i].end - _volumeFadeIns[i].start) / 90f;
_timers[i] = 90;
_volumeFadeInState[i] = true;
}
}
}

[HarmonyPrefix]
[HarmonyPatch(typeof(GameOverProcess), "OnStart")]
public static void GameOverProcessOnStart()
{
for (var i = 0; i < 2; i++)
{
_volumeFadeInState[i] = false;
}
}
}

0 comments on commit d00f70d

Please sign in to comment.