-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathTickrateManipulator.cs
More file actions
83 lines (61 loc) · 2.59 KB
/
Copy pathTickrateManipulator.cs
File metadata and controls
83 lines (61 loc) · 2.59 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Editor_Reader;
using OsuParsers.Decoders;
namespace SVOscillator
{
class TickrateManipulator
{
public static void Generate(string pathBase)
{
var reader = new EditorReader();
reader.FetchAll();
string path = Path.Combine(pathBase, reader.ContainingFolder, reader.Filename);
// string path = $"{pathBase}\\{reader.ContainingFolder}\\{reader.Filename}";
float mult = Utility.ReadFloat("Enter tick rate multiplier");
Utility.WaitForUserInput("Scroll in editor to start time, then hit 'Enter'");
float startTime = reader.EditorTime();
Utility.WaitForUserInput("Scroll in editor to end time, then hit 'Enter'");
float endTime = reader.EditorTime();
var beatmap = BeatmapDecoder.Decode(path);
var timingPoints = beatmap.TimingPoints;
var initial = timingPoints[0];
var baseBeatLength = initial.BeatLength;
var baseBpm = Utility.BeatlengthToBpm(baseBeatLength);
float newBpm = baseBpm * mult;
var startRedLine = Utility.MakeRedLine(startTime, newBpm);
var endRedLine = Utility.MakeRedLine(endTime, baseBpm);
float svToReturnTo = 1f;
if (Utility.TryFindExistingByOffset(timingPoints, startTime, out int idx))
{
float oldSv = Utility.CalcSv(timingPoints[idx].BeatLength);
svToReturnTo = oldSv;
float newSv = oldSv / mult;
timingPoints[idx].BeatLength = Utility.CalcBeatlength(newSv);
}
else if (Utility.TryFindMostRecentTimingPoint(timingPoints, startTime, out idx))
{
float oldSv = Utility.CalcSv(timingPoints[idx].BeatLength);
svToReturnTo = oldSv;
float newSv = oldSv / mult;
timingPoints.Add(Utility.MakeGreenLine(startTime, newSv));
}
else
{
timingPoints.Add(Utility.MakeGreenLine(startTime, Utility.CalcSv(initial.BeatLength)));
}
if (!Utility.TryFindExistingByOffset(timingPoints, endTime, out idx))
{
timingPoints.Add(Utility.MakeGreenLine(endTime, svToReturnTo));
}
timingPoints.Add(startRedLine);
timingPoints.Add(endRedLine);
beatmap.Save(path);
Console.WriteLine("Finished!");
}
}
}