Skip to content

Commit f9ec675

Browse files
Merge pull request #4
Proposal for fixed misscount detection logic and osu running state detection
2 parents cd236f6 + 9cc9f11 commit f9ec675

1 file changed

Lines changed: 52 additions & 39 deletions

File tree

Program.cs

Lines changed: 52 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)