@@ -18,14 +18,49 @@ class Settings {
18
18
}
19
19
return array;
20
20
}
21
+ void ensureValuesExist () {
22
+ rapidjson::Document::AllocatorType& allocator = settings.GetAllocator ();
23
+ if (!settings.HasMember (" trackSpeed" ))
24
+ settings.AddMember (" trackSpeed" , rapidjson::Value (), allocator);
25
+ if (!settings.HasMember (" avOffset" ))
26
+ settings.AddMember (" avOffset" , rapidjson::Value (), allocator);
27
+ if (!settings.HasMember (" inputOffset" ))
28
+ settings.AddMember (" inputOffset" , rapidjson::Value (), allocator);
29
+ if (!settings.HasMember (" keybinds" ))
30
+ settings.AddMember (" keybinds" , rapidjson::kObjectType , allocator);
31
+ if (!settings[" keybinds" ].HasMember (" 4k" ))
32
+ settings[" keybinds" ].AddMember (" 4k" , rapidjson::kArrayType , allocator);
33
+ if (!settings[" keybinds" ].HasMember (" 5k" ))
34
+ settings[" keybinds" ].AddMember (" 5k" , rapidjson::kArrayType , allocator);
35
+ if (!settings[" keybinds" ].HasMember (" 4kAlt" ))
36
+ settings[" keybinds" ].AddMember (" 4kAlt" , rapidjson::kArrayType , allocator);
37
+ if (!settings[" keybinds" ].HasMember (" 5kAlt" ))
38
+ settings[" keybinds" ].AddMember (" 5kAlt" , rapidjson::kArrayType , allocator);
39
+ if (!settings[" keybinds" ].HasMember (" overdrive" ))
40
+ settings[" keybinds" ].AddMember (" overdrive" , rapidjson::Value (), allocator);
41
+ if (!settings[" keybinds" ].HasMember (" overdriveAlt" ))
42
+ settings[" keybinds" ].AddMember (" overdriveAlt" , rapidjson::Value (), allocator);
43
+ }
21
44
public:
22
45
rapidjson::Document settings;
23
46
std::vector<int > defaultKeybinds4K{ KEY_D,KEY_F,KEY_J,KEY_K };
24
47
std::vector<int > defaultKeybinds5K{ KEY_D,KEY_F,KEY_J,KEY_K,KEY_L };
48
+ std::vector<int > defaultKeybinds4KAlt{ -1 ,-1 ,-1 ,-1 };
49
+ std::vector<int > defaultKeybinds5KAlt{ -1 ,-1 ,-1 ,-1 ,-1 };
50
+ int defaultKeybindOverdrive = 32 ;
51
+ int defaultKeybindOverdriveAlt = -1 ;
25
52
std::vector<int > keybinds4K = defaultKeybinds4K;
26
53
std::vector<int > keybinds5K = defaultKeybinds5K;
54
+ std::vector<int > keybinds4KAlt = defaultKeybinds4KAlt;
55
+ std::vector<int > keybinds5KAlt = defaultKeybinds5KAlt;
56
+ int keybindOverdrive = defaultKeybindOverdrive;
57
+ int keybindOverdriveAlt = defaultKeybindOverdriveAlt;
27
58
std::vector<int > prev4k = keybinds4K;
28
59
std::vector<int > prev5k = keybinds5K;
60
+ std::vector<int > prev4kAlt = keybinds4KAlt;
61
+ std::vector<int > prev5kAlt = keybinds5KAlt;
62
+ int prevOverdrive = keybindOverdrive;
63
+ int prevOverdriveAlt = keybindOverdriveAlt;
29
64
std::vector<float > defaultTrackSpeedOptions = { 0 .5f ,0 .75f ,1 .0f ,1 .25f ,1 .5f ,1 .75f ,2 .0f };
30
65
std::vector<float > trackSpeedOptions = defaultTrackSpeedOptions;
31
66
int trackSpeed = 4 ;
@@ -35,6 +70,7 @@ class Settings {
35
70
int inputOffsetMS = 0 ;
36
71
int prevInputOffsetMS = inputOffsetMS;
37
72
bool changing4k = false ;
73
+ bool changingAlt = false ;
38
74
void writeDefaultSettings (std::filesystem::path settingsFile, bool migrate = false ) {
39
75
rapidjson::Document::AllocatorType& allocator = settings.GetAllocator ();
40
76
settings.SetObject ();
@@ -52,17 +88,26 @@ class Settings {
52
88
for (int & key : defaultKeybinds5K)
53
89
array5K.PushBack (rapidjson::Value ().SetInt (key), allocator);
54
90
}
91
+ rapidjson::Value array4KAlt (rapidjson::kArrayType );
92
+ rapidjson::Value array5KAlt (rapidjson::kArrayType );
93
+ for (int & key : defaultKeybinds4KAlt)
94
+ array4KAlt.PushBack (rapidjson::Value ().SetInt (key), allocator);
95
+ for (int & key : defaultKeybinds5KAlt)
96
+ array5KAlt.PushBack (rapidjson::Value ().SetInt (key), allocator);
55
97
settings.AddMember (" keybinds" , rapidjson::Value (rapidjson::kObjectType ), allocator);
56
98
settings[" keybinds" ].AddMember (" 4k" , array4K, allocator);
57
99
settings[" keybinds" ].AddMember (" 5k" , array5K, allocator);
58
- rapidjson::Value avOffset;
59
- avOffset.SetInt (avOffsetMS);
100
+ settings[" keybinds" ].AddMember (" 4kAlt" , array4KAlt, allocator);
101
+ settings[" keybinds" ].AddMember (" 5kAlt" , array5KAlt, allocator);
102
+ rapidjson::Value overdrive (keybindOverdrive);
103
+ rapidjson::Value overdriveAlt (keybindOverdriveAlt);
104
+ settings[" keybinds" ].AddMember (" overdrive" , overdrive, allocator);
105
+ settings[" keybinds" ].AddMember (" overdriveAlt" , overdriveAlt, allocator);
106
+ rapidjson::Value avOffset (avOffsetMS);
60
107
settings.AddMember (" avOffset" , avOffset, allocator);
61
- rapidjson::Value inputOffset;
62
- inputOffset.SetInt (inputOffsetMS);
108
+ rapidjson::Value inputOffset (inputOffsetMS);
63
109
settings.AddMember (" inputOffset" , inputOffset, allocator);
64
- rapidjson::Value trackSpeedVal;
65
- trackSpeedVal.SetInt (4 );
110
+ rapidjson::Value trackSpeedVal (4 );
66
111
settings.AddMember (" trackSpeed" , trackSpeedVal, allocator);
67
112
rapidjson::Value arrayTrackSpeedOptions (rapidjson::kArrayType );
68
113
for (float & speed : defaultTrackSpeedOptions)
@@ -74,6 +119,10 @@ class Settings {
74
119
bool keybindsError = false ;
75
120
bool keybinds4KError = false ;
76
121
bool keybinds5KError = false ;
122
+ bool keybinds4KAltError = false ;
123
+ bool keybinds5KAltError = false ;
124
+ bool keybindsOverdriveError = false ;
125
+ bool keybindsOverdriveAltError = false ;
77
126
bool avError = false ;
78
127
bool inputError = false ;
79
128
bool trackSpeedOptionsError = false ;
@@ -124,6 +173,55 @@ class Settings {
124
173
keybinds5KError = true ;
125
174
}
126
175
}
176
+ if (settings[" keybinds" ].HasMember (" 4kAlt" ) && settings[" keybinds" ][" 4kAlt" ].IsArray ()) {
177
+ const rapidjson::Value& arr = settings[" keybinds" ][" 4kAlt" ];
178
+ if (arr.Size () == 4 ) {
179
+ for (int i = 0 ; i < 4 ; i++) {
180
+ if (arr[i].IsInt ()) {
181
+ keybinds4KAlt[i] = arr[i].GetInt ();
182
+ }
183
+ else {
184
+ keybinds4KAltError = true ;
185
+ }
186
+ }
187
+ prev4kAlt = keybinds4KAlt;
188
+ }
189
+ else {
190
+ keybinds4KAltError = true ;
191
+ }
192
+ }
193
+ if (settings[" keybinds" ].HasMember (" 5kAlt" ) && settings[" keybinds" ][" 5kAlt" ].IsArray ()) {
194
+ const rapidjson::Value& arr = settings[" keybinds" ][" 5kAlt" ];
195
+ if (arr.Size () == 5 ) {
196
+ for (int i = 0 ; i < 5 ; i++) {
197
+ if (arr[i].IsInt ()) {
198
+ keybinds5KAlt[i] = arr[i].GetInt ();
199
+ }
200
+ else {
201
+ keybinds5KAltError = true ;
202
+ }
203
+ }
204
+ prev5kAlt = keybinds5KAlt;
205
+ }
206
+ else {
207
+ keybinds5KAltError = true ;
208
+ }
209
+ }
210
+ if (settings[" keybinds" ].HasMember (" overdrive" ) && settings[" keybinds" ][" overdrive" ].IsInt ()) {
211
+ keybindOverdrive = settings[" keybinds" ][" overdrive" ].GetInt ();
212
+ prevOverdrive = keybindOverdrive;
213
+ }
214
+ else {
215
+ keybindsOverdriveError = true ;
216
+ }
217
+
218
+ if (settings[" keybinds" ].HasMember (" overdriveAlt" ) && settings[" keybinds" ][" overdriveAlt" ].IsInt ()) {
219
+ keybindOverdriveAlt = settings[" keybinds" ][" overdriveAlt" ].GetInt ();
220
+ prevOverdriveAlt = keybindOverdriveAlt;
221
+ }
222
+ else {
223
+ keybindsOverdriveAltError = true ;
224
+ }
127
225
}
128
226
else {
129
227
keybindsError = true ;
@@ -206,6 +304,38 @@ class Settings {
206
304
array5K.PushBack (rapidjson::Value ().SetInt (key), allocator);
207
305
settings[" keybinds" ].AddMember (" 5k" , array5K, allocator);
208
306
}
307
+ if (keybinds4KAltError) {
308
+ if (settings[" keybinds" ].HasMember (" 4kAlt" ))
309
+ settings[" keybinds" ].EraseMember (" 4kAlt" );
310
+ rapidjson::Document::AllocatorType& allocator = settings.GetAllocator ();
311
+ rapidjson::Value array4K (rapidjson::kArrayType );
312
+ for (int & key : defaultKeybinds4KAlt)
313
+ array4K.PushBack (rapidjson::Value ().SetInt (key), allocator);
314
+ settings[" keybinds" ].AddMember (" 4kAlt" , array4K, allocator);
315
+ }
316
+ if (keybinds5KAltError) {
317
+ if (settings[" keybinds" ].HasMember (" 5kAlt" ))
318
+ settings[" keybinds" ].EraseMember (" 5kAlt" );
319
+ rapidjson::Document::AllocatorType& allocator = settings.GetAllocator ();
320
+ rapidjson::Value array5K (rapidjson::kArrayType );
321
+ for (int & key : defaultKeybinds5KAlt)
322
+ array5K.PushBack (rapidjson::Value ().SetInt (key), allocator);
323
+ settings[" keybinds" ].AddMember (" 5kAlt" , array5K, allocator);
324
+ }
325
+ if (keybindsOverdriveError) {
326
+ if (settings[" keybinds" ].HasMember (" overdrive" ))
327
+ settings[" keybinds" ].EraseMember (" overdrive" );
328
+ rapidjson::Document::AllocatorType& allocator = settings.GetAllocator ();
329
+ rapidjson::Value overdriveKey (KEY_SPACE);
330
+ settings[" keybinds" ].AddMember (" overdrive" , overdriveKey, allocator);
331
+ }
332
+ if (keybindsOverdriveAltError){
333
+ if (settings[" keybinds" ].HasMember (" overdriveAlt" ))
334
+ settings[" keybinds" ].EraseMember (" overdriveAlt" );
335
+ rapidjson::Document::AllocatorType& allocator = settings.GetAllocator ();
336
+ rapidjson::Value overdriveKeyAlt (defaultKeybindOverdriveAlt);
337
+ settings[" keybinds" ].AddMember (" overdriveAlt" , overdriveKeyAlt, allocator);
338
+ }
209
339
if (avError) {
210
340
if (settings.HasMember (" avOffset" ))
211
341
settings.EraseMember (" avOffset" );
@@ -240,7 +370,8 @@ class Settings {
240
370
arrayTrackSpeedOptions.PushBack (rapidjson::Value ().SetFloat (speed), allocator);
241
371
settings.AddMember (" trackSpeedOptions" , arrayTrackSpeedOptions, allocator);
242
372
}
243
- if (keybindsError || keybinds4KError || keybinds5KError || avError || inputError|| trackSpeedError || trackSpeedOptionsError) {
373
+ if (keybindsError || keybinds4KError || keybinds5KError || keybinds4KAltError || keybinds5KAltError|| keybindsOverdriveError || keybindsOverdriveAltError || avError || inputError|| trackSpeedError || trackSpeedOptionsError) {
374
+ ensureValuesExist ();
244
375
saveSettings (settingsFile);
245
376
}
246
377
}
@@ -350,6 +481,18 @@ class Settings {
350
481
keybinds5KMember->value .Clear ();
351
482
for (int & key : keybinds5K)
352
483
keybinds5KMember->value .PushBack (rapidjson::Value ().SetInt (key), allocator);
484
+ rapidjson::Value::MemberIterator keybinds4KAltMember = settings[" keybinds" ].FindMember (" 4kAlt" );
485
+ keybinds4KAltMember->value .Clear ();
486
+ for (int & key : keybinds4KAlt)
487
+ keybinds4KAltMember->value .PushBack (rapidjson::Value ().SetInt (key), allocator);
488
+ rapidjson::Value::MemberIterator keybinds5KAltMember = settings[" keybinds" ].FindMember (" 5kAlt" );
489
+ keybinds5KAltMember->value .Clear ();
490
+ for (int & key : keybinds5KAlt)
491
+ keybinds5KAltMember->value .PushBack (rapidjson::Value ().SetInt (key), allocator);
492
+ rapidjson::Value::MemberIterator overdriveKeyMember = settings[" keybinds" ].FindMember (" overdrive" );
493
+ overdriveKeyMember->value .SetInt (keybindOverdrive);
494
+ rapidjson::Value::MemberIterator overdriveKeyAltMember = settings[" keybinds" ].FindMember (" overdriveAlt" );
495
+ overdriveKeyAltMember->value .SetInt (keybindOverdriveAlt);
353
496
char writeBuffer[8192 ];
354
497
FILE* fp = fopen (settingsFile.string ().c_str (), " wb" );
355
498
rapidjson::FileWriteStream os (fp, writeBuffer, sizeof (writeBuffer));
0 commit comments