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