@@ -21,10 +21,13 @@ vector<std::string> ArgumentList::arguments;
21
21
bool compareNotes (const Note& a, const Note& b) {
22
22
return a.time < b.time ;
23
23
}
24
+
24
25
std::vector<int > KEYBINDS_5K{ KEY_D,KEY_F,KEY_J,KEY_K,KEY_L };
25
26
std::vector<int > KEYBINDS_4K{ KEY_D,KEY_F,KEY_J,KEY_K };
26
27
std::vector<int > prev4k = KEYBINDS_4K;
27
28
std::vector<int > prev5k = KEYBINDS_5K;
29
+ bool changing4k = false ;
30
+
28
31
rapidjson::Value vectorToJsonArray (const std::vector<int >& vec, rapidjson::Document::AllocatorType& allocator) {
29
32
rapidjson::Value array (rapidjson::kArrayType );
30
33
for (const auto & value : vec) {
@@ -126,6 +129,29 @@ std::string getKeyStr(int keycode)
126
129
return " UNKNOWN" ;
127
130
}
128
131
}
132
+
133
+ int instrument = 0 ;
134
+ int diff = 0 ;
135
+ bool midiLoaded = false ;
136
+ bool isPlaying = false ;
137
+ bool streamsLoaded = false ;
138
+ int selectStage = 0 ;
139
+ std::vector<Music> loadedStreams;
140
+ int curPlayingSong = 0 ;
141
+ int curNoteIdx = 0 ;
142
+ int curODPhrase = 0 ;
143
+ int curBeatLine = 0 ;
144
+
145
+ std::vector<float > bns = { 0 .5f ,0 .75f ,1 .0f ,1 .25f ,1 .5f ,1 .75f ,2 .0f };
146
+ int bn = 4 ;
147
+ std::string bnsButton = " Track Speed 1.5x" ;
148
+
149
+
150
+ std::vector<double > laneTimes = { 0.0 ,0.0 ,0.0 ,0.0 ,0.0 };
151
+ std::vector<double > liftTimes = { 0.0 ,0.0 ,0.0 ,0.0 ,0.0 };
152
+ std::vector<bool > heldFrets = { false ,false ,false ,false ,false };
153
+
154
+
129
155
int main (int argc, char * argv[])
130
156
{
131
157
#ifdef NDEBUG
@@ -158,8 +184,7 @@ int main(int argc, char* argv[])
158
184
double updateDrawTime = 0.0 ;
159
185
double waitTime = 0.0 ;
160
186
float deltaTime = 0 .0f ;
161
- int instrument = 0 ;
162
- int diff = 0 ;
187
+
163
188
164
189
165
190
float timeCounter = 0 .0f ;
@@ -263,23 +288,6 @@ int main(int argc, char* argv[])
263
288
}
264
289
265
290
SongList songList = LoadSongs (songsPath);
266
- bool midiLoaded = false ;
267
- bool isPlaying = false ;
268
- bool streamsLoaded = false ;
269
- int selectStage = 0 ;
270
- std::vector<Music> loadedStreams;
271
- int curPlayingSong = 0 ;
272
- int curNoteIdx = 0 ;
273
- int curODPhrase = 0 ;
274
-
275
- // //////////////////////////////////
276
- //
277
- // BREAKNECK SPEED
278
- //
279
-
280
- float bns = 2 .0f ;
281
- bool bn = true ;
282
- const char * bnsButton = " Breakneck On" ;
283
291
284
292
ChangeDirectory (GetApplicationDirectory ());
285
293
@@ -305,8 +313,6 @@ int main(int argc, char* argv[])
305
313
expertHighway.materials [0 ].maps [MATERIAL_MAP_ALBEDO].color = WHITE;
306
314
emhHighway.materials [0 ].maps [MATERIAL_MAP_ALBEDO].texture = highwayTexture;
307
315
emhHighway.materials [0 ].maps [MATERIAL_MAP_ALBEDO].color = WHITE;
308
- // expertHighway.materials[1].maps[MATERIAL_MAP_ALBEDO].texture = sidesTexture;
309
- // expertHighway.materials[1].maps[MATERIAL_MAP_ALBEDO].color = WHITE;
310
316
Model noteModel = LoadModel ((directory / " Assets/note.obj" ).string ().c_str ());
311
317
Texture2D noteTexture = LoadTexture ((directory / " Assets/note_d.png" ).string ().c_str ());
312
318
Texture2D emitTexture = LoadTexture ((directory / " Assets/note_e.png" ).string ().c_str ());
@@ -325,10 +331,7 @@ int main(int argc, char* argv[])
325
331
liftModel.materials [0 ].maps [MATERIAL_MAP_ALBEDO].color = Color{ 172 ,82 ,217 ,127 };
326
332
Model liftModelOD = LoadModel ((directory / " Assets/lift.obj" ).string ().c_str ());
327
333
liftModelOD.materials [0 ].maps [MATERIAL_MAP_ALBEDO].color = Color{ 217 , 183 , 82 ,127 };
328
- std::vector<double > laneTimes = { 0.0 ,0.0 ,0.0 ,0.0 ,0.0 };
329
- std::vector<double > liftTimes = { 0.0 ,0.0 ,0.0 ,0.0 ,0.0 };
330
- std::vector<bool > heldFrets = { false ,false ,false ,false ,false };
331
- bool changing4k = false ;
334
+
332
335
333
336
while (!WindowShouldClose ())
334
337
{
@@ -432,41 +435,32 @@ int main(int argc, char* argv[])
432
435
433
436
}
434
437
else if (selectStage == 0 ) {
435
-
438
+ streamsLoaded = false ;
436
439
midiLoaded = false ;
437
440
float curSong = 0 .0f ;
438
- for (Song song : songList.songs ) {
439
- if (GuiButton ({ (float )GetScreenWidth () - 100 ,0 ,100 ,60 }, " Keybinds" )) {
440
- selectStage = -1 ;
441
+ if (GuiButton ({ (float )GetScreenWidth () - 100 ,0 ,100 ,60 }, " Keybinds" )) {
442
+ selectStage = -1 ;
443
+ }
444
+ if (GuiButton ({ (float )GetScreenWidth () - 100 ,60 ,100 ,60 }, " Fullscreen" )) {
445
+ windowToggle = !windowToggle;
446
+ ToggleBorderlessWindowed ();
447
+ if (windowToggle) {
448
+ SetWindowPosition (50 , 50 );
449
+ SetWindowSize (1600 , 800 );
441
450
}
451
+ else {
452
+ SetWindowSize (1920 , 1080 );
453
+ };
454
+ }
455
+ if (GuiButton ({ (float )GetScreenWidth () - 150 ,120 ,150 ,60 }, bnsButton.c_str ())) {
456
+ if (bn == 6 ) bn = 0 ; else bn++;
457
+ bnsButton = " Track Speed " +std::to_string (bns[bn])+" x" ;
458
+ }
459
+ for (Song song : songList.songs ) {
442
460
if (GuiButton ({ 0 ,0 + (60 * curSong),300 ,60 }, " " )) {
443
461
curPlayingSong = (int )curSong;
444
462
selectStage = 1 ;
445
463
}
446
- if (GuiButton ({ (float )GetScreenWidth () - 100 ,60 ,100 ,60 }, " Fullscreen" )) {
447
- windowToggle = !windowToggle;
448
- ToggleBorderlessWindowed ();
449
- if (windowToggle) {
450
- SetWindowPosition (50 , 50 );
451
- SetWindowSize (1600 , 800 );
452
- }
453
- else {
454
- SetWindowSize (1920 , 1080 );
455
- };
456
- }
457
- if (GuiButton ({ (float )GetScreenWidth () - 100 ,120 ,100 ,60 }, bnsButton)) {
458
- if (!bn) {
459
- bns = 2 .0f ;
460
- bn = true ;
461
- bnsButton = " Breakneck On" ;
462
- }
463
- else
464
- {
465
- bns = 1 .0f ;
466
- bn = false ;
467
- bnsButton = " Breakneck Off" ;
468
- };
469
- }
470
464
DrawTextureEx (song.albumArt , Vector2{ 5 ,(60 * curSong) + 5 }, 0 .0f , 0 .1f , RAYWHITE);
471
465
472
466
DrawText (song.title .c_str (), 60 , (60 * curSong) + 5 , 20 , BLACK);
@@ -490,18 +484,22 @@ int main(int argc, char* argv[])
490
484
}
491
485
SongParts songPart = partFromString (trackName);
492
486
std::cout << " TRACKNAME " << trackName << " : " << int (songPart) << std::endl;
493
- if (songPart != SongParts::Invalid) {
494
- songList.songs [curPlayingSong].parts [(int )songPart]->hasPart = true ;
495
- std::string diffstr = " ESY: " ;
496
- for (int diff = 0 ; diff < 4 ; diff++) {
497
- Chart newChart;
498
- newChart.parseNotes (midiFile, i, midiFile[i], diff);
499
- std::sort (newChart.notes .begin (), newChart.notes .end (), compareNotes);
500
- if (diff == 1 ) diffstr = " MED: " ;
501
- else if (diff == 2 ) diffstr = " HRD: " ;
502
- else if (diff == 3 ) diffstr = " EXP: " ;
503
- songList.songs [curPlayingSong].parts [(int )songPart]->charts .push_back (newChart);
504
- std::cout << trackName << " " << diffstr << newChart.notes .size () << std::endl;
487
+ if (trackName == " BEAT" )
488
+ songList.songs [curPlayingSong].parseBeatLines (midiFile, i, midiFile[i]);
489
+ else {
490
+ if (songPart != SongParts::Invalid) {
491
+ songList.songs [curPlayingSong].parts [(int )songPart]->hasPart = true ;
492
+ std::string diffstr = " ESY: " ;
493
+ for (int diff = 0 ; diff < 4 ; diff++) {
494
+ Chart newChart;
495
+ newChart.parseNotes (midiFile, i, midiFile[i], diff);
496
+ std::sort (newChart.notes .begin (), newChart.notes .end (), compareNotes);
497
+ if (diff == 1 ) diffstr = " MED: " ;
498
+ else if (diff == 2 ) diffstr = " HRD: " ;
499
+ else if (diff == 3 ) diffstr = " EXP: " ;
500
+ songList.songs [curPlayingSong].parts [(int )songPart]->charts .push_back (newChart);
501
+ std::cout << trackName << " " << diffstr << newChart.notes .size () << std::endl;
502
+ }
505
503
}
506
504
}
507
505
}
@@ -591,25 +589,36 @@ int main(int argc, char* argv[])
591
589
}
592
590
else {
593
591
DrawModel (smasherReg, Vector3{ diffDistance - (i + 2 ), 0 , 0 }, 1 .0f , WHITE);
594
-
592
+
595
593
}
596
594
}
597
595
for (int i = 0 ; i < 3 ; i++) {
598
596
DrawLine3D (Vector3{ lineDistance - i, 0 .05f , 0 }, Vector3{ lineDistance - i, 0 .05f , 20 }, Color{ 255 ,255 ,255 ,255 });
599
597
}
600
598
}
601
-
602
-
599
+ if (songList.songs [curPlayingSong].beatLines .size () >= 0 ) {
600
+ for (int i = curBeatLine; i < songList.songs [curPlayingSong].beatLines .size (); i++) {
601
+ double relTime = (songList.songs [curPlayingSong].beatLines [i].first - musicTime) * bns[bn];
602
+ if (relTime > 1.5 )
603
+ break ;
604
+ float radius = songList.songs [curPlayingSong].beatLines [i].second ? 0 .05f : 0 .025f ;
605
+ DrawCylinderEx (Vector3{ -diffDistance-0 .5f ,0 ,2 .5f + (12 .5f * (float )relTime) }, Vector3{ diffDistance + 0 .5f ,0 ,2 .5f + (12 .5f * (float )relTime) }, radius, radius, 4 , WHITE);
606
+
607
+ if (relTime < -1 && curBeatLine < songList.songs [curPlayingSong].beatLines .size ())
608
+ curBeatLine++;
609
+
610
+ }
611
+ }
603
612
// DrawTriangle3D(Vector3{ 2.5f,0.0f,0.0f }, Vector3{ -2.5f,0.0f,0.0f }, Vector3{ -2.5f,0.0f,20.0f }, BLACK);
604
613
// DrawTriangle3D(Vector3{ 2.5f,0.0f,0.0f }, Vector3{ -2.5f,0.0f,20.0f }, Vector3{ 2.5f,0.0f,20.0f }, BLACK);
605
614
606
615
// DrawLine3D(Vector3{ 2.5f, 0.05f, 2.0f }, Vector3{ -2.5f, 0.05f, 2.0f}, WHITE);
607
- Chart& dmsExpert = songList.songs [curPlayingSong].parts [instrument]->charts [diff];
608
- if (dmsExpert .odPhrases .size () > 0 && curODPhrase < dmsExpert. odPhrases . size () ) {
609
- if (dmsExpert .notes [curNoteIdx].time +dmsExpert .notes [curNoteIdx].len > dmsExpert .odPhrases [curODPhrase].end && curODPhrase < dmsExpert .odPhrases .size ()) curODPhrase++;
616
+ Chart& curChart = songList.songs [curPlayingSong].parts [instrument]->charts [diff];
617
+ if (curChart .odPhrases .size () > 0 ) {
618
+ if (curChart .notes [curNoteIdx].time +curChart .notes [curNoteIdx].len > curChart .odPhrases [curODPhrase].end && curODPhrase < curChart .odPhrases .size ()- 1 ) curODPhrase++;
610
619
}
611
- for (int i = curNoteIdx; i < dmsExpert .notes .size (); i++) {
612
- Note& curNote = dmsExpert .notes [i];
620
+ for (int i = curNoteIdx; i < curChart .notes .size (); i++) {
621
+ Note& curNote = curChart .notes [i];
613
622
if (curNote.lift == true ) {
614
623
if (curNote.time - 0.075 < liftTimes[curNote.lane ] && curNote.time + 0.075 > laneTimes[curNote.lane ]) {
615
624
curNote.hit = true ;
@@ -618,20 +627,20 @@ int main(int argc, char* argv[])
618
627
else {
619
628
if (curNote.time - 0.075 < laneTimes[curNote.lane ] && curNote.time + 0.075 > laneTimes[curNote.lane ]) {
620
629
curNote.hit = true ;
621
- if ((curNote.len * bns) > 0.25 ) {
630
+ if ((curNote.len * bns[bn] ) > 0.25 ) {
622
631
curNote.held = true ;
623
632
}
624
633
}
625
- if (laneTimes[curNote.lane ] == 0.0 && (curNote.len * bns) > 0.25 ) {
634
+ if (laneTimes[curNote.lane ] == 0.0 && (curNote.len * bns[bn] ) > 0.25 ) {
626
635
curNote.held = false ;
627
636
}
628
637
}
629
638
630
- double relTime = (curNote.time - musicTime) * bns;
631
- double relEnd = ((curNote.time + curNote.len ) - musicTime) * bns;
639
+ double relTime = (curNote.time - musicTime) * bns[bn] ;
640
+ double relEnd = ((curNote.time + curNote.len ) - musicTime) * bns[bn] ;
632
641
bool od = false ;
633
- if (dmsExpert .odPhrases .size () > 0 && curODPhrase < dmsExpert. odPhrases . size () ) {
634
- if (curNote.time >= dmsExpert .odPhrases [curODPhrase].start && curNote.time <= dmsExpert .odPhrases [curODPhrase].end ) {
642
+ if (curChart .odPhrases .size () > 0 ) {
643
+ if (curNote.time >= curChart .odPhrases [curODPhrase].start && curNote.time <= curChart .odPhrases [curODPhrase].end ) {
635
644
od = true ;
636
645
}
637
646
@@ -651,9 +660,9 @@ int main(int argc, char* argv[])
651
660
}
652
661
else {
653
662
// sustains
654
- if ((curNote.len * bns)> 0.25 ) {
663
+ if ((curNote.len * bns[bn] )> 0.25 ) {
655
664
if (curNote.hit == true && curNote.held == true ) {
656
- if (curNote.heldTime < (curNote.len * bns)) {
665
+ if (curNote.heldTime < (curNote.len * bns[bn] )) {
657
666
curNote.heldTime = 0.0 - relTime;
658
667
if (relTime < 0.0 ) relTime = 0.0 ;
659
668
}
@@ -672,16 +681,19 @@ int main(int argc, char* argv[])
672
681
DrawLine3D (Vector3{ diffDistance - (1 .0f * curNote.lane ),0 .05f ,2 .5f + (12 .5f * (float )relTime) }, Vector3{ diffDistance - (1 .0f * curNote.lane ),0 .05f ,2 .5f + (12 .5f * (float )relEnd) }, Color{ 172 ,82 ,217 ,255 });
673
682
}
674
683
// regular notes
675
- if (((curNote.len * bns) >=0.25 && (curNote.held ==true ||curNote.hit ==false )) || ((curNote.len * bns)<0.25 && curNote.hit ==false )) {
684
+ if (((curNote.len * bns[bn] ) >=0.25 && (curNote.held ==true ||curNote.hit ==false )) || ((curNote.len * bns[bn] )<0.25 && curNote.hit ==false )) {
676
685
if (od == true )
677
686
DrawModel (noteModelOD, Vector3{ diffDistance - (1 .0f * curNote.lane ),0 ,2 .5f + (12 .5f * (float )relTime) }, 1 .0f , WHITE);
678
687
else
679
688
DrawModel (noteModel, Vector3{ diffDistance - (1 .0f * curNote.lane ),0 ,2 .5f + (12 .5f * (float )relTime) }, 1 .0f , WHITE);
680
689
}
681
690
}
682
- if (relEnd < -1 && curNoteIdx < dmsExpert .notes .size ()) curNoteIdx = i + 1 ;
691
+ if (relEnd < -1 && curNoteIdx < curChart .notes .size ()) curNoteIdx = i + 1 ;
683
692
684
693
}
694
+ DrawLine3D (Vector3{ -diffDistance - 0 .5f ,0 ,2 .5f + (12 .5f * 0 .075f *bns[bn])}, Vector3{diffDistance + 0 .5f ,0 ,2 .5f + (12 .5f * 0 .075f * bns[bn] )}, Color{0 ,255 ,0 ,255 });
695
+ DrawLine3D (Vector3{ -diffDistance - 0 .5f ,0 ,2 .5f - (12 .5f * 0 .075f * bns[bn]) }, Vector3{ diffDistance + 0 .5f ,0 ,2 .5f - (12 .5f * 0 .075f * bns[bn] )}, Color{ 0 ,255 ,0 ,255 });
696
+
685
697
EndMode3D ();
686
698
}
687
699
0 commit comments