@@ -17,7 +17,7 @@ private static async Task WaitForKey() {
1717 }
1818 Console . ReadKey ( true ) ;
1919 }
20- private readonly StructuredOsuMemoryReader osuReader = new ( new ProcessTargetOptions ( "osu!" ) ) ;
20+ private static readonly StructuredOsuMemoryReader osuReader = new ( new ProcessTargetOptions ( "osu!" ) ) ;
2121
2222 private static async Task osuPlug ( ) {
2323 var client = new ButtplugClient ( "osu!plug" ) ;
@@ -111,66 +111,79 @@ async Task ControlDevice() {
111111
112112 var device = client . Devices . First ( dev => dev . Index == deviceChoice ) ;
113113
114-
115- while ( true ) {
116- //i didn't want to put this sleep call here, so that a bunch of misses in quick succession could result in a bunch of vibrations
117- // but if i didn't put it here, the misscount would go to 0 like i was being ratelimited or something
118- Thread . Sleep ( 50 ) ;
119- var processList = Process . GetProcessesByName ( "osu!" ) ;
120- //Console.WriteLine(processList[0]);
121- StructuredOsuMemoryReader . GetInstance ( new ProcessTargetOptions ( "osu!" ) ) ;
122- if ( processList . Length > 0 ) {
114+ ushort previousMisscount = 0 ;
115+ ushort misscount = 0 ;
116+ var processList = Process . GetProcessesByName ( "osu!" ) ;
117+ var baseAddresses = new OsuBaseAddresses ( ) ;
118+ StructuredOsuMemoryReader . GetInstance ( new ProcessTargetOptions ( "osu!" ) ) ;
119+ var badGirlWarning = false ;
120+ while ( true )
121+ {
122+ if ( processList . Length > 0 && ! processList [ 0 ] . HasExited )
123+ {
123124 //i really wanted to keep this in, but this would just keep printing forever because it's inside the while loop
124125 //*might* move it outside so i can still have it print to console
125126 //Console.WriteLine("osu's open. good girl :3");
126- var baseAddresses = new OsuBaseAddresses ( ) ;
127- Program prog = new Program ( ) ;
128- prog . osuReader . TryRead ( baseAddresses ) ;
129- prog . osuReader . TryRead ( baseAddresses . Beatmap ) ;
130- prog . osuReader . TryRead ( baseAddresses . Skin ) ;
131- prog . osuReader . TryRead ( baseAddresses . GeneralData ) ;
132- prog . osuReader . TryRead ( baseAddresses . BanchoUser ) ;
133- prog . osuReader . TryRead ( baseAddresses . Player ) ;
134- var misscount = baseAddresses . Player . HitMiss ;
135- ushort previousMisscount = 0 ;
136- Console . WriteLine ( misscount ) ;
137- Console . WriteLine ( previousMisscount ) ;
138-
139-
140- if ( previousMisscount < misscount ) {
141- try {
127+ osuReader . TryRead ( baseAddresses ) ;
128+ osuReader . TryRead ( baseAddresses . Beatmap ) ;
129+ osuReader . TryRead ( baseAddresses . Skin ) ;
130+ osuReader . TryRead ( baseAddresses . GeneralData ) ;
131+ osuReader . TryRead ( baseAddresses . BanchoUser ) ;
132+ osuReader . TryRead ( baseAddresses . Player ) ;
133+ misscount = baseAddresses . Player . HitMiss ;
134+
135+ if ( misscount < previousMisscount )
136+ {
137+ // Reset detected (e.g. player retried song)
138+ previousMisscount = 0 ;
139+ Console . WriteLine ( $ "misscount reset { misscount } ") ;
140+ }
141+
142+ if ( previousMisscount < misscount )
143+ {
144+ Console . WriteLine ( $ "misscount { misscount } ") ;
145+ Console . WriteLine ( $ "previous misscount { previousMisscount } ") ;
146+ try
147+ {
142148 await device . VibrateAsync ( 0.5 ) ;
143149 await Task . Delay ( 1000 ) ;
144150 await device . VibrateAsync ( 0 ) ;
145151 }
146- catch ( Exception e ) {
152+ catch ( Exception e )
153+ {
147154 Console . WriteLine ( $ "Problem vibrating: { e } ") ;
148155 }
149- misscount = previousMisscount ;
156+ previousMisscount = misscount ;
150157 }
151- Console . WriteLine ( misscount ) ;
152- Console . WriteLine ( previousMisscount ) ;
153- }
154- else {
155- try {
158+ }
159+ else
160+ {
161+ try
162+ {
163+ if ( ! badGirlWarning )
164+ {
156165 Console . WriteLine ( "osu is not open. bad girl" ) ;
157166 await device . VibrateAsync ( 0.5 ) ;
158167 await Task . Delay ( 5000 ) ;
159168 await device . VibrateAsync ( 0 ) ;
160169 Console . WriteLine ( "i hope this taught you a lesson >:3" ) ;
161- //return so we dont vibrate forever
162- return ;
163- }
164- catch ( Exception e ) {
165- Console . WriteLine ( $ "Problem vibrating: { e } ") ;
170+ badGirlWarning = true ;
166171 }
172+ processList = Process . GetProcessesByName ( "osu!" ) ;
173+ baseAddresses = new OsuBaseAddresses ( ) ;
174+ StructuredOsuMemoryReader . GetInstance ( new ProcessTargetOptions ( "osu!" ) ) ;
175+ }
176+ catch ( Exception e )
177+ {
178+ Console . WriteLine ( $ "Problem vibrating: { e } ") ;
179+ }
167180 }
168181 }
169182
170183 }
171184
172185 await ControlDevice ( ) ;
173- }
186+ }
174187 private static void Main ( ) {
175188 // Setup a client, and wait until everything is done before exiting.
176189 osuPlug ( ) . Wait ( ) ;
0 commit comments