mirror of https://github.com/hykilpikonna/AquaDX
[+] PractiseModeUI
parent
8c3400ee41
commit
e7c69d2a6b
|
@ -320,6 +320,7 @@ DEBUG</DefineConstants>
|
|||
<Compile Include="Utils\JudgeAdjust.cs" />
|
||||
<Compile Include="Utils\LogUserId.cs" />
|
||||
<Compile Include="Utils\PractiseMode.cs" />
|
||||
<Compile Include="Utils\PractiseModeUI.cs" />
|
||||
<Compile Include="Utils\WindowState.cs" />
|
||||
<Compile Include="UX\CustomPlaceName.cs" />
|
||||
<Compile Include="UX\CustomVersionString.cs" />
|
||||
|
|
|
@ -5,7 +5,6 @@ using AquaMai.Fix;
|
|||
using AquaMai.Helpers;
|
||||
using HarmonyLib;
|
||||
using Manager;
|
||||
using MelonLoader;
|
||||
using Monitor;
|
||||
using Process;
|
||||
using UnityEngine;
|
||||
|
@ -15,13 +14,13 @@ namespace AquaMai.Utils;
|
|||
|
||||
public class PractiseMode
|
||||
{
|
||||
private static double repeatStart = -1;
|
||||
private static double repeatEnd = -1;
|
||||
private static float speed = 1;
|
||||
public static double repeatStart = -1;
|
||||
public static double repeatEnd = -1;
|
||||
public static float speed = 1;
|
||||
private static CriAtomExPlayer player;
|
||||
private static MovieMaterialMai2 movie;
|
||||
|
||||
private static void SetRepeatEnd(double time)
|
||||
public static void SetRepeatEnd(double time)
|
||||
{
|
||||
if (repeatStart == -1)
|
||||
{
|
||||
|
@ -38,13 +37,13 @@ public class PractiseMode
|
|||
repeatEnd = time;
|
||||
}
|
||||
|
||||
private static void ClearRepeat()
|
||||
public static void ClearRepeat()
|
||||
{
|
||||
repeatStart = -1;
|
||||
repeatEnd = -1;
|
||||
}
|
||||
|
||||
private static void SetSpeed()
|
||||
public static void SetSpeed()
|
||||
{
|
||||
player.SetPitch((float)(1200 * Math.Log(speed, 2)));
|
||||
// player.SetDspTimeStretchRatio(1 / speed);
|
||||
|
@ -53,7 +52,7 @@ public class PractiseMode
|
|||
movie.player.SetSpeed(speed);
|
||||
}
|
||||
|
||||
private static void SpeedUp()
|
||||
public static void SpeedUp()
|
||||
{
|
||||
speed += .05f;
|
||||
if (speed > 2)
|
||||
|
@ -64,7 +63,7 @@ public class PractiseMode
|
|||
SetSpeed();
|
||||
}
|
||||
|
||||
private static void SpeedDown()
|
||||
public static void SpeedDown()
|
||||
{
|
||||
speed -= .05f;
|
||||
if (speed < 0.5)
|
||||
|
@ -75,7 +74,7 @@ public class PractiseMode
|
|||
SetSpeed();
|
||||
}
|
||||
|
||||
private static void SpeedReset()
|
||||
public static void SpeedReset()
|
||||
{
|
||||
speed = 1;
|
||||
SetSpeed();
|
||||
|
@ -108,7 +107,7 @@ public class PractiseMode
|
|||
}
|
||||
}
|
||||
|
||||
private static DebugWindow debugWin;
|
||||
public static PractiseModeUI ui;
|
||||
|
||||
[HarmonyPatch(typeof(GameProcess), "OnStart")]
|
||||
[HarmonyPostfix]
|
||||
|
@ -117,23 +116,31 @@ public class PractiseMode
|
|||
repeatStart = -1;
|
||||
repeatEnd = -1;
|
||||
speed = 1;
|
||||
ui = null;
|
||||
SetSpeed();
|
||||
}
|
||||
|
||||
[HarmonyPrefix]
|
||||
[HarmonyPatch(typeof(GenericProcess), "OnUpdate")]
|
||||
public static void OnGenericProcessUpdate(GenericMonitor[] ____monitors)
|
||||
{
|
||||
if (Input.GetKeyDown(KeyCode.F12))
|
||||
{
|
||||
____monitors[0].gameObject.AddComponent<DebugWindow>();
|
||||
}
|
||||
else if (Input.GetKeyDown(KeyCode.F11))
|
||||
{
|
||||
____monitors[0].gameObject.AddComponent<PractiseModeUI>();
|
||||
}
|
||||
}
|
||||
|
||||
[HarmonyPatch(typeof(GameProcess), "OnUpdate")]
|
||||
[HarmonyPostfix]
|
||||
public static void GameProcessPostUpdate(GameProcess __instance, GameMonitor[] ____monitors)
|
||||
{
|
||||
if (Input.GetKeyDown(KeyCode.F12))
|
||||
if (InputManager.GetSystemInputPush(InputManager.SystemButtonSetting.ButtonTest) && ui is null)
|
||||
{
|
||||
if (debugWin is null)
|
||||
{
|
||||
debugWin = ____monitors[0].gameObject.AddComponent<DebugWindow>();
|
||||
}
|
||||
else
|
||||
{
|
||||
MelonLogger.Msg("[PractiseMode] 调试窗口作用中");
|
||||
}
|
||||
ui = ____monitors[0].gameObject.AddComponent<PractiseModeUI>();
|
||||
}
|
||||
|
||||
if (repeatStart >= 0 && repeatEnd >= 0)
|
||||
|
|
|
@ -0,0 +1,163 @@
|
|||
using System;
|
||||
using AquaMai.Fix;
|
||||
using Manager;
|
||||
using UnityEngine;
|
||||
using UrGUI.GUIWindow;
|
||||
|
||||
namespace AquaMai.Utils;
|
||||
|
||||
public class PractiseModeUI : MonoBehaviour
|
||||
{
|
||||
private GUIWindow window;
|
||||
|
||||
private float playerWidth;
|
||||
private float playerCenter;
|
||||
private float windowTop;
|
||||
private float controlHeight;
|
||||
private float margin;
|
||||
private float sideButtonWidth;
|
||||
private float centerButtonWidth;
|
||||
private int fontSize;
|
||||
|
||||
public void Start()
|
||||
{
|
||||
playerWidth = Screen.height / 1920f * 1080;
|
||||
if (AquaMai.AppConfig.UX.SinglePlayer)
|
||||
{
|
||||
playerCenter = Screen.width / 2f;
|
||||
}
|
||||
else
|
||||
{
|
||||
playerCenter = Screen.width / 2f - playerWidth / 2;
|
||||
}
|
||||
|
||||
windowTop = Screen.height - playerWidth + playerWidth * .22f;
|
||||
controlHeight = playerWidth * .13f;
|
||||
margin = playerWidth * .01f;
|
||||
sideButtonWidth = playerWidth * .1f;
|
||||
centerButtonWidth = playerWidth * .28f;
|
||||
fontSize = (int)(playerWidth * .02f);
|
||||
}
|
||||
|
||||
public Rect GetButtonRect(int pos, int row)
|
||||
{
|
||||
float x;
|
||||
float width;
|
||||
switch (pos)
|
||||
{
|
||||
case 0:
|
||||
x = playerCenter - centerButtonWidth / 2 - sideButtonWidth - margin;
|
||||
width = sideButtonWidth;
|
||||
break;
|
||||
case 1:
|
||||
x = playerCenter - centerButtonWidth / 2;
|
||||
width = centerButtonWidth;
|
||||
break;
|
||||
case 2:
|
||||
x = playerCenter + centerButtonWidth / 2 + margin;
|
||||
width = sideButtonWidth;
|
||||
break;
|
||||
default:
|
||||
throw new ArgumentOutOfRangeException(nameof(pos), pos, null);
|
||||
}
|
||||
|
||||
return new Rect(x, windowTop + (margin + controlHeight) * row + margin, width, controlHeight);
|
||||
}
|
||||
|
||||
public void OnGUI()
|
||||
{
|
||||
var labelStyle = GUI.skin.GetStyle("label");
|
||||
labelStyle.fontSize = fontSize;
|
||||
labelStyle.alignment = TextAnchor.MiddleCenter;
|
||||
|
||||
var buttonStyle = GUI.skin.GetStyle("button");
|
||||
buttonStyle.fontSize = fontSize;
|
||||
|
||||
GUI.Box(new Rect(
|
||||
playerCenter - centerButtonWidth / 2 - sideButtonWidth - margin * 2,
|
||||
windowTop,
|
||||
centerButtonWidth + sideButtonWidth * 2 + margin * 4,
|
||||
controlHeight * 4 + margin * 5
|
||||
), "");
|
||||
|
||||
GUI.Button(GetButtonRect(0, 0), "Seek <<");
|
||||
GUI.Button(GetButtonRect(1, 0), "Pause");
|
||||
GUI.Button(GetButtonRect(2, 0), "Seek >>");
|
||||
|
||||
if (PractiseMode.repeatStart == -1)
|
||||
{
|
||||
GUI.Button(GetButtonRect(0, 1), "Start");
|
||||
GUI.Label(GetButtonRect(1, 1), "Loop not set");
|
||||
}
|
||||
else if (PractiseMode.repeatEnd == -1)
|
||||
{
|
||||
GUI.Button(GetButtonRect(0, 1), "End");
|
||||
GUI.Label(GetButtonRect(1, 1), "Loop start set");
|
||||
GUI.Button(GetButtonRect(2, 1), "Reset");
|
||||
}
|
||||
else
|
||||
{
|
||||
GUI.Label(GetButtonRect(1, 1), "Loop set");
|
||||
GUI.Button(GetButtonRect(2, 1), "Reset");
|
||||
}
|
||||
|
||||
GUI.Button(GetButtonRect(0, 2), "Speed -");
|
||||
GUI.Label(GetButtonRect(1, 2), $"Speed {PractiseMode.speed * 100:000}%");
|
||||
GUI.Button(GetButtonRect(2, 2), "Speed +");
|
||||
GUI.Button(GetButtonRect(1, 3), "Speed Reset");
|
||||
}
|
||||
|
||||
public void Update()
|
||||
{
|
||||
if (InputManager.GetTouchPanelAreaDown(InputManager.TouchPanelArea.E8))
|
||||
{
|
||||
DebugFeature.Seek(-1000);
|
||||
}
|
||||
else if (InputManager.GetTouchPanelAreaDown(InputManager.TouchPanelArea.E2))
|
||||
{
|
||||
DebugFeature.Seek(1000);
|
||||
}
|
||||
else if (InputManager.GetTouchPanelAreaDown(InputManager.TouchPanelArea.B8) || InputManager.GetTouchPanelAreaDown(InputManager.TouchPanelArea.B1))
|
||||
{
|
||||
DebugFeature.Pause = !DebugFeature.Pause;
|
||||
}
|
||||
else if (InputManager.GetTouchPanelAreaDown(InputManager.TouchPanelArea.B7) && PractiseMode.repeatStart == -1)
|
||||
{
|
||||
PractiseMode.repeatStart = DebugFeature.CurrentPlayMsec;
|
||||
}
|
||||
else if (InputManager.GetTouchPanelAreaDown(InputManager.TouchPanelArea.B7) && PractiseMode.repeatEnd == -1)
|
||||
{
|
||||
PractiseMode.SetRepeatEnd(DebugFeature.CurrentPlayMsec);
|
||||
}
|
||||
else if (InputManager.GetTouchPanelAreaDown(InputManager.TouchPanelArea.B2))
|
||||
{
|
||||
PractiseMode.ClearRepeat();
|
||||
}
|
||||
else if (InputManager.GetTouchPanelAreaDown(InputManager.TouchPanelArea.B6))
|
||||
{
|
||||
PractiseMode.SpeedDown();
|
||||
}
|
||||
else if (InputManager.GetTouchPanelAreaDown(InputManager.TouchPanelArea.B3))
|
||||
{
|
||||
PractiseMode.SpeedUp();
|
||||
}
|
||||
else if (InputManager.GetTouchPanelAreaDown(InputManager.TouchPanelArea.B5) || InputManager.GetTouchPanelAreaDown(InputManager.TouchPanelArea.B4))
|
||||
{
|
||||
PractiseMode.SpeedReset();
|
||||
}
|
||||
else if (
|
||||
InputManager.GetTouchPanelAreaDown(InputManager.TouchPanelArea.A1) ||
|
||||
InputManager.GetTouchPanelAreaDown(InputManager.TouchPanelArea.A2) ||
|
||||
InputManager.GetTouchPanelAreaDown(InputManager.TouchPanelArea.A3) ||
|
||||
InputManager.GetTouchPanelAreaDown(InputManager.TouchPanelArea.A4) ||
|
||||
InputManager.GetTouchPanelAreaDown(InputManager.TouchPanelArea.A5) ||
|
||||
InputManager.GetTouchPanelAreaDown(InputManager.TouchPanelArea.A6) ||
|
||||
InputManager.GetTouchPanelAreaDown(InputManager.TouchPanelArea.A7) ||
|
||||
InputManager.GetTouchPanelAreaDown(InputManager.TouchPanelArea.A8)
|
||||
)
|
||||
{
|
||||
PractiseMode.ui = null;
|
||||
Destroy(this);
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue