Skip to content

Commit 83bffd2

Browse files
committed
[+] ReviveFinaleVSlide
1 parent 350f301 commit 83bffd2

File tree

1 file changed

+86
-0
lines changed

1 file changed

+86
-0
lines changed
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
using System.Collections.Generic;
2+
using System.Reflection.Emit;
3+
using AquaMai.Core.Attributes;
4+
using AquaMai.Config.Attributes;
5+
using HarmonyLib;
6+
using Manager;
7+
using MelonLoader;
8+
9+
namespace AquaMai.Mods.GameSystem;
10+
11+
[ConfigSection(
12+
en: "Allow v-shaped slide with the same starting and ending point, such as \"1v1\" in Simai notation",
13+
zh: "允许形如 \"1v1\" 的,起点和终点相同的 v 型星星")]
14+
public static class ReviveFinaleVSlide
15+
{
16+
public static List<string> InsertData(List<string> list)
17+
{
18+
MelonLogger.Msg("[ReviveFinaleVSlide] Insert SVG data");
19+
20+
list[0] = "V_1.svg";
21+
return list;
22+
}
23+
24+
public static List<List<SlideManager.HitArea>> InsertHitArea(List<List<SlideManager.HitArea>> list)
25+
{
26+
MelonLogger.Msg("[ReviveFinaleVSlide] Insert hit area list");;
27+
28+
list[0] = [
29+
new SlideManager.HitArea
30+
{
31+
HitPoints = [InputManager.TouchPanelArea.A1],
32+
PushDistance = 156.42124938964844,
33+
ReleaseDistance = 43.27423858642578
34+
},
35+
new SlideManager.HitArea
36+
{
37+
HitPoints = [InputManager.TouchPanelArea.B1],
38+
PushDistance = 128.9917755126953,
39+
ReleaseDistance = 42.19921875
40+
},
41+
new SlideManager.HitArea
42+
{
43+
HitPoints = [InputManager.TouchPanelArea.C1],
44+
PushDistance = 218.6302947998047,
45+
ReleaseDistance = 42.19921875
46+
},
47+
new SlideManager.HitArea
48+
{
49+
HitPoints = [InputManager.TouchPanelArea.B1],
50+
PushDistance = 128.9917755126953,
51+
ReleaseDistance = 43.27423858642578
52+
},
53+
new SlideManager.HitArea
54+
{
55+
HitPoints = [InputManager.TouchPanelArea.A1],
56+
PushDistance = 156.42124938964844,
57+
ReleaseDistance = 0.0
58+
}
59+
];
60+
return list;
61+
}
62+
63+
[HarmonyPatch(typeof(SlideManager), MethodType.Constructor)]
64+
public static class SlideDataPatch
65+
{
66+
public static IEnumerable<CodeInstruction> Transpiler(IEnumerable<CodeInstruction> instructions)
67+
{
68+
var vDataList = AccessTools.Field(typeof(SlideManager), "_vDataList");
69+
var vHitAreaList = AccessTools.Field(typeof(SlideManager), "_vHitAreaList");
70+
71+
foreach (var insn in instructions)
72+
{
73+
if (insn.StoresField(vDataList))
74+
{
75+
yield return new CodeInstruction(OpCodes.Call, AccessTools.Method(typeof(ReviveFinaleVSlide), "InsertData"));
76+
}
77+
else if (insn.StoresField(vHitAreaList))
78+
{
79+
yield return new CodeInstruction(OpCodes.Call, AccessTools.Method(typeof(ReviveFinaleVSlide), "InsertHitArea"));
80+
}
81+
82+
yield return insn;
83+
}
84+
}
85+
}
86+
}

0 commit comments

Comments
 (0)