Skip to content

Commit

Permalink
[+] Speed change
Browse files Browse the repository at this point in the history
  • Loading branch information
clansty committed Sep 28, 2024
1 parent 27b8e6b commit 3d79c93
Showing 1 changed file with 97 additions and 1 deletion.
98 changes: 97 additions & 1 deletion AquaMai/Utils/PractiseMode.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
using AquaMai.Fix;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using AquaMai.Fix;
using AquaMai.Helpers;
using HarmonyLib;
using Manager;
using MelonLoader;
using Monitor;
using Process;
Expand All @@ -13,6 +18,9 @@ public class PractiseMode
{
private static double repeatStart = -1;
private static double repeatEnd = -1;
private static float speed = 1;
private static List<CriAtomExPlayer> players = [];
private static MovieMaterialMai2 movie;

private static void SetRepeatEnd(double time)
{
Expand All @@ -37,6 +45,45 @@ private static void ClearRepeat()
repeatEnd = -1;
}

private static void SetSpeed()
{
foreach (var player in players)
{
player.SetPitch((float)(1200 * Math.Log(speed, 2)));
player.UpdateAll();
}

movie.player.SetSpeed(speed);
}

private static void SpeedUp()
{
speed += .05f;
if (speed > 2)
{
speed = 2;
}

SetSpeed();
}

private static void SpeedDown()
{
speed -= .05f;
if (speed < 0.5)
{
speed = 0.5f;
}

SetSpeed();
}

private static void SpeedReset()
{
speed = 1;
SetSpeed();
}

private class DebugWindow : MonoBehaviour
{
private GUIWindow window;
Expand All @@ -52,6 +99,10 @@ public void Start()
window.Button("循环开始", () => repeatStart = DebugFeature.CurrentPlayMsec);
window.Button("循环结束", () => SetRepeatEnd(DebugFeature.CurrentPlayMsec));
window.Button("循环解除", ClearRepeat);
window.SameLine(1, 1, 1);
window.Button("加速", SpeedUp);
window.Button("减速", SpeedDown);
window.Button("速度重置", SpeedReset);
}

private void OnGUI()
Expand All @@ -62,6 +113,15 @@ private void OnGUI()

private static DebugWindow debugWin;

[HarmonyPatch(typeof(GameProcess), "OnStart")]
[HarmonyPostfix]
public static void GameProcessPostStart()
{
repeatStart = -1;
repeatEnd = -1;
speed = 1;
}

[HarmonyPatch(typeof(GameProcess), "OnUpdate")]
[HarmonyPostfix]
public static void GameProcessPostUpdate(GameProcess __instance, GameMonitor[] ____monitors)
Expand All @@ -86,4 +146,40 @@ public static void GameProcessPostUpdate(GameProcess __instance, GameMonitor[] _
}
}
}

[HarmonyPatch(typeof(NotesManager), "UpdateTimer")]
[HarmonyPostfix]
public static void NotesManagerPostUpdateTimer(bool ____isPlaying, Stopwatch ____stopwatch, ref float ____curMSec, ref float ____curMSecPre, float ____msecStartGap)
{
var num = 0d;
if (____isPlaying && ____stopwatch != null)
{
num = (double)____stopwatch.ElapsedTicks / Stopwatch.Frequency * 1000.0 * speed;
}

____curMSecPre = ____curMSec;
____curMSec = (float)num + ____msecStartGap;
}

[HarmonyPatch]
public static class PlayerObjCreate
{
public static MethodBase TargetMethod()
{
var type = typeof(SoundCtrl).GetNestedType("PlayerObj", BindingFlags.NonPublic);
return AccessTools.Method(type, "Create");
}

public static void Postfix(CriAtomExPlayer ___Player)
{
players.Add(___Player);
}
}

[HarmonyPatch(typeof(MovieController), "Awake")]
[HarmonyPostfix]
public static void MovieControllerPostAwake(MovieMaterialMai2 ____moviePlayers)
{
movie = ____moviePlayers;
}
}

0 comments on commit 3d79c93

Please sign in to comment.