16
16
#include " game/player.h"
17
17
#include " game/keybinds.h"
18
18
#include " raygui.h"
19
- #include < stdlib.h>
20
19
20
+ #include < stdlib.h>
21
+ #include " GLFW/glfw3.h"
21
22
#include < cstdio>
22
23
vector<std::string> ArgumentList::arguments;
23
24
@@ -75,12 +76,79 @@ std::vector<float> bns = { 0.5f,0.75f,1.0f,1.25f,1.5f,1.75f,2.0f };
75
76
int bn = 4 ;
76
77
std::string bnsButton = " Track Speed 1.5x" ;
77
78
78
-
79
79
std::vector<double > laneTimes = { 0.0 ,0.0 ,0.0 ,0.0 ,0.0 };
80
80
std::vector<double > liftTimes = { 0.0 ,0.0 ,0.0 ,0.0 ,0.0 };
81
81
std::vector<bool > heldFrets = { false ,false ,false ,false ,false };
82
82
std::vector<bool > tapRegistered{ false ,false ,false ,false ,false };
83
83
std::vector<bool > liftRegistered{ false ,false ,false ,false ,false };
84
+ SongList songList;
85
+ static void notesCallback (GLFWwindow* wind, int key, int scancode, int action, int mods) {
86
+
87
+ if (action < 2 ){
88
+
89
+ Chart& curChart = songList.songs [curPlayingSong].parts [instrument]->charts [diff];
90
+ float eventTime = GetMusicTimePlayed (loadedStreams[0 ]);
91
+ if (key == KEY_SPACE && overdriveFill > 0 && !overdrive) {
92
+ overdriveActiveTime = eventTime;
93
+ overdriveActiveFill = overdriveFill;
94
+ overdrive = true ;
95
+ }
96
+ int lane = -1 ;
97
+ if (diff == 3 ) {
98
+ for (int i = 0 ; i < 5 ; i++) {
99
+ if (key == KEYBINDS_5K[i]) {
100
+ if (action == GLFW_PRESS) {
101
+ heldFrets[i] = true ;
102
+ }
103
+ else if (action == GLFW_RELEASE) {
104
+ heldFrets[i] = false ;
105
+ }
106
+ lane = i;
107
+ }
108
+
109
+ }
110
+ }
111
+ else {
112
+ for (int i = 0 ; i < 4 ; i++) {
113
+ if (key == KEYBINDS_4K[i]) {
114
+ if (action == GLFW_PRESS) {
115
+ heldFrets[i] = true ;
116
+ }
117
+ else if (action == GLFW_RELEASE) {
118
+ heldFrets[i] = false ;
119
+ }
120
+ lane = i;
121
+ }
122
+ }
123
+ }
124
+
125
+ for (int i = curNoteIdx; i < curChart.notes .size (); i++) {
126
+ Note& curNote = curChart.notes [i];
127
+ if (curNote.time > eventTime + 0.125 ) break ;
128
+ if (lane != curNote.lane ) continue ;
129
+ if ((curNote.lift && action == GLFW_RELEASE) || action == GLFW_PRESS) {
130
+ if (curNote.time - 0.125 < eventTime && curNote.time + 0.125 > eventTime) {
131
+ curNote.hit = true ;
132
+ if ((curNote.len ) > curNote.sustainThreshold && !curNote.lift ) {
133
+ curNote.held = true ;
134
+ }
135
+ if (curNote.time - 0.025 < eventTime && curNote.time + 0.025 > eventTime) {
136
+ curNote.perfect = true ;
137
+ }
138
+ break ;
139
+ }
140
+ }
141
+ if (curNote.time + 0.125 < GetMusicTimePlayed (loadedStreams[0 ]) && !curNote.hit ) {
142
+ curNote.miss = true ;
143
+ }
144
+ if (action==GLFW_RELEASE && curNote.held && (curNote.len ) > curNote.sustainThreshold ) {
145
+ curNote.held = false ;
146
+ }
147
+
148
+ }
149
+ }
150
+ }
151
+
84
152
85
153
int main (int argc, char * argv[])
86
154
{
@@ -100,7 +168,7 @@ int main(int argc, char* argv[])
100
168
int targetFPSArg = 0 ;
101
169
102
170
if (FPSCapStringVal != " " )
103
- {
171
+ {
104
172
#ifdef NDEBUG
105
173
str2int (&targetFPSArg, FPSCapStringVal.c_str ());
106
174
#else
@@ -225,7 +293,7 @@ int main(int argc, char* argv[])
225
293
}
226
294
}
227
295
228
- SongList songList = LoadSongs (songsPath);
296
+ songList = LoadSongs (songsPath);
229
297
230
298
ChangeDirectory (GetApplicationDirectory ());
231
299
// assets loading
@@ -308,45 +376,14 @@ int main(int argc, char* argv[])
308
376
Model liftModelOD = LoadModel ((directory / " Assets/notes/lift.obj" ).string ().c_str ());
309
377
liftModelOD.materials [0 ].maps [MATERIAL_MAP_ALBEDO].color = Color{ 217 , 183 , 82 ,127 };
310
378
379
+
380
+ GLFWkeyfun origCallback = glfwSetKeyCallback (glfwGetCurrentContext (), notesCallback);
381
+
311
382
312
383
while (!WindowShouldClose ())
313
384
{
314
385
float diffDistance = diff == 3 ? 2 .0f : 1 .5f ;
315
386
float lineDistance = diff == 3 ? 1 .5f : 1 .0f ;
316
- if (isPlaying) {
317
- if (diff == 3 ) {
318
- for (int i = 0 ; i < 5 ; i++) {
319
- if (IsKeyPressed (KEYBINDS_5K[i])) {
320
- laneTimes[i] = (double )GetMusicTimePlayed (loadedStreams[0 ]);
321
- liftTimes[i] = 0.0 ;
322
- heldFrets[i] = true ;
323
- liftRegistered[i] = false ;
324
- }
325
- if (IsKeyReleased (KEYBINDS_5K[i])) {
326
- laneTimes[i] = 0.0 ;
327
- liftTimes[i] = (double )GetMusicTimePlayed (loadedStreams[0 ]);
328
- heldFrets[i] = false ;
329
- tapRegistered[i] = false ;
330
- }
331
- }
332
- }
333
- else {
334
- for (int i = 0 ; i < 4 ; i++) {
335
- if (IsKeyPressed (KEYBINDS_4K[i])) {
336
- laneTimes[i] = (double )GetMusicTimePlayed (loadedStreams[0 ]);
337
- liftTimes[i] = 0.0 ;
338
- heldFrets[i] = true ;
339
- liftRegistered[i] = false ;
340
- }
341
- if (IsKeyReleased (KEYBINDS_4K[i])) {
342
- laneTimes[i] = 0.0 ;
343
- liftTimes[i] = (double )GetMusicTimePlayed (loadedStreams[0 ]);
344
- heldFrets[i] = false ;
345
- tapRegistered[i] = false ;
346
- }
347
- }
348
- }
349
- }
350
387
BeginDrawing ();
351
388
352
389
ClearBackground (DARKGRAY);
@@ -372,7 +409,6 @@ int main(int argc, char* argv[])
372
409
std::string charStr = " UNKNOWN" ;
373
410
if (KEYBINDS_5K[i] >= 39 && KEYBINDS_5K[i] < 96 && KEYBINDS_5K[i] != KEY_MENU) {
374
411
charStr=static_cast <char >(KEYBINDS_5K[i]);
375
- charStr=static_cast <char >(KEYBINDS_5K[i]);
376
412
}
377
413
else {
378
414
charStr = getKeyStr (KEYBINDS_5K[i]);
@@ -556,6 +592,7 @@ int main(int argc, char* argv[])
556
592
diff = i;
557
593
selectStage = 3 ;
558
594
isPlaying = true ;
595
+ glfwSetKeyCallback (glfwGetCurrentContext (), notesCallback);
559
596
}
560
597
}
561
598
}
@@ -590,10 +627,13 @@ int main(int argc, char* argv[])
590
627
note.perfect = false ;
591
628
592
629
}
630
+ glfwSetKeyCallback (glfwGetCurrentContext (), origCallback);
593
631
// notes = songList.songs[curPlayingSong].parts[instrument]->charts[diff].notes.size();
594
632
// notes = songList.songs[curPlayingSong].parts[instrument]->charts[diff];
595
633
for (odPhrase &phrase : songList.songs [curPlayingSong].parts [instrument]->charts [diff].odPhrases ) {
596
634
phrase.missed = false ;
635
+ phrase.notesHit = 0 ;
636
+ phrase.added = false ;
597
637
}
598
638
selectStage = 0 ;
599
639
@@ -617,7 +657,6 @@ int main(int argc, char* argv[])
617
657
}
618
658
}
619
659
double musicTime = GetMusicTimePlayed (loadedStreams[0 ]);
620
-
621
660
if (musicTime >= songList.songs [curPlayingSong].end ) {
622
661
for (Note& note : songList.songs [curPlayingSong].parts [instrument]->charts [diff].notes ) {
623
662
note.accounted = false ;
@@ -628,9 +667,12 @@ int main(int argc, char* argv[])
628
667
note.perfect = false ;
629
668
// notes += 1;
630
669
}
670
+ glfwSetKeyCallback (glfwGetCurrentContext (), origCallback);
631
671
// notes = (int)songList.songs[curPlayingSong].parts[instrument]->charts[diff].notes.size();
632
672
for (odPhrase& phrase : songList.songs [curPlayingSong].parts [instrument]->charts [diff].odPhrases ) {
633
673
phrase.missed = false ;
674
+ phrase.notesHit = 0 ;
675
+ phrase.added = false ;
634
676
}
635
677
selectStage = 0 ;
636
678
overdrive = false ;
@@ -641,15 +683,9 @@ int main(int argc, char* argv[])
641
683
midiLoaded = false ;
642
684
streamsLoaded = false ;
643
685
}
644
- if (IsKeyPressed (KEY_SPACE) && overdriveFill > 0 && !overdrive) {
645
- overdriveActiveTime = musicTime;
646
- overdriveActiveFill = overdriveFill;
647
- overdrive = true ;
686
+ if (overdrive) {
648
687
expertHighway.materials [0 ].maps [MATERIAL_MAP_ALBEDO].texture = highwayTextureOD;
649
688
emhHighway.materials [0 ].maps [MATERIAL_MAP_ALBEDO].texture = highwayTextureOD;
650
- }
651
- if (overdrive) {
652
-
653
689
overdriveFill = overdriveActiveFill-((musicTime-overdriveActiveTime)/(1920 / songList.songs [curPlayingSong].bpms [curBPM].bpm ));
654
690
if (overdriveFill <= 0 ) {
655
691
overdrive = false ;
@@ -743,44 +779,6 @@ int main(int argc, char* argv[])
743
779
}
744
780
for (int i = curNoteIdx; i < curChart.notes .size (); i++) {
745
781
Note& curNote = curChart.notes [i];
746
- if (!curNote.lift ) {
747
- if (curNote.time - 0.075 < laneTimes[curNote.lane ] && curNote.time + 0.075 > laneTimes[curNote.lane ] && !tapRegistered[curNote.lane ]) {
748
- curNote.hit = true ;
749
- tapRegistered[curNote.lane ] = true ;
750
- if ((curNote.len ) > curNote.sustainThreshold ) {
751
- curNote.held = true ;
752
- }
753
- if (curNote.time - 0.025 < laneTimes[curNote.lane ] && curNote.time + 0.025 > laneTimes[curNote.lane ]) {
754
- curNote.perfect = true ;
755
- }
756
- }
757
- else if (curNote.time + 0.075 < GetMusicTimePlayed (loadedStreams[0 ]) && !curNote.hit ) {
758
- curNote.miss = true ;
759
- }
760
- if (laneTimes[curNote.lane ] == 0.0 && (curNote.len ) > curNote.sustainThreshold ) {
761
- curNote.held = false ;
762
- }
763
- } else {
764
- if (curNote.time - 0.075 < liftTimes[curNote.lane ] && curNote.time + 0.075 > liftTimes[curNote.lane ] && !liftRegistered[curNote.lane ]) {
765
- curNote.hit = true ;
766
- liftRegistered[curNote.lane ] = true ;
767
- if (curNote.time - 0.025 < liftTimes[curNote.lane ] && curNote.time + 0.025 > liftTimes[curNote.lane ]) {
768
- curNote.perfect = true ;
769
- }
770
- }
771
- else if (curNote.time - 0.075 < laneTimes[curNote.lane ] && curNote.time + 0.075 > laneTimes[curNote.lane ] && !tapRegistered[curNote.lane ]) {
772
- curNote.hit = true ;
773
- tapRegistered[curNote.lane ] = true ;
774
- if (curNote.time - 0.025 < laneTimes[curNote.lane ] && curNote.time + 0.025 > laneTimes[curNote.lane ]) {
775
- curNote.perfect = true ;
776
- }
777
- }
778
- else if (curNote.time + 0.075 < GetMusicTimePlayed (loadedStreams[0 ]) && !curNote.hit ) {
779
- curNote.miss = true ;
780
- }
781
- }
782
-
783
-
784
782
bool od = false ;
785
783
if (curChart.odPhrases .size () > 0 ) {
786
784
if (curNote.time >= curChart.odPhrases [curODPhrase].start && curNote.time <= curChart.odPhrases [curODPhrase].end && !curChart.odPhrases [curODPhrase].missed ) {
@@ -805,7 +803,7 @@ int main(int argc, char* argv[])
805
803
curChart.odPhrases [curODPhrase].added = true ;
806
804
}
807
805
}
808
- if (curNote.hit && IsKeyPressed (KEYBINDS_5K[curNote. lane ]) && !curNote.accounted ) {
806
+ if (curNote.hit && !curNote.accounted ) {
809
807
player::HitNote (curNote.perfect , instrument);
810
808
curNote.accounted = true ;
811
809
}
@@ -884,14 +882,13 @@ int main(int argc, char* argv[])
884
882
if (relEnd < -1 && curNoteIdx < curChart.notes .size ()-1 ) curNoteIdx = i + 1 ;
885
883
886
884
}
887
- DrawLine3D (Vector3{ -diffDistance - 0 .5f ,0 ,smasherPos + (12 .5f * 0 .075f * bns[bn]) }, Vector3{ diffDistance + 0 .5f ,0 ,smasherPos + (12 .5f * 0 .075f * bns[bn] )}, Color{0 ,255 ,0 ,255 });
888
- DrawLine3D (Vector3{ -diffDistance - 0 .5f ,0 ,smasherPos - (12 .5f * 0 .075f * bns[bn]) }, Vector3{ diffDistance + 0 .5f ,0 ,smasherPos - (12 .5f * 0 .075f * bns[bn] )}, Color{ 0 ,255 ,0 ,255 });
889
- // DrawLine3D(Vector3{ -diffDistance - 0.5f,0,smasherPos + (12.5f * 0.025f * bns[bn]) }, Vector3{ diffDistance + 0.5f,0,smasherPos + (12.5f * 0.025f * bns[bn] )}, GOLD);
890
- // DrawLine3D(Vector3{ -diffDistance - 0.5f,0,smasherPos - (12.5f * 0.025f * bns[bn]) }, Vector3{ diffDistance + 0.5f,0,smasherPos - (12.5f * 0.025f * bns[bn] )}, GOLD);
891
-
892
- DrawTriangle3D (Vector3{ -diffDistance - 0 .5f ,0 ,smasherPos - (12 .5f * 0 .025f * bns[bn]) }, Vector3{ diffDistance - 0 .5f ,0 ,smasherPos - (12 .5f * 0 .025f * bns[bn]) }, Vector3{ diffDistance + 0 .5f ,0 ,smasherPos + (12 .5f * 0 .025f * bns[bn] )}, GOLD);
893
- DrawTriangle3D (Vector3{ -diffDistance - 0 .5f ,0 ,smasherPos - (12 .5f * 0 .025f * bns[bn]) }, Vector3{ -diffDistance - 0 .5f ,0 ,smasherPos + (12 .5f * 0 .025f * bns[bn]) }, Vector3{ diffDistance + 0 .5f ,0 ,smasherPos + (12 .5f * 0 .025f * bns[bn] )}, GOLD);
885
+ #ifndef NDEBUG
886
+ DrawTriangle3D (Vector3{ -diffDistance - 0 .5f ,0 .05f ,smasherPos + (12 .5f * 0 .125f * bns[bn]) }, Vector3{ diffDistance + 0 .5f ,0 .05f ,smasherPos + (12 .5f * 0 .125f * bns[bn]) }, Vector3{ diffDistance + 0 .5f ,0 .05f ,smasherPos - (12 .5f * 0 .125f * bns[bn]) }, Color{ 0 ,255 ,0 ,80 });
887
+ DrawTriangle3D (Vector3{ diffDistance + 0 .5f ,0 .05f ,smasherPos - (12 .5f * 0 .125f * bns[bn]) }, Vector3{ -diffDistance - 0 .5f ,0 .05f ,smasherPos - (12 .5f * 0 .125f * bns[bn]) }, Vector3{ -diffDistance - 0 .5f ,0 .05f ,smasherPos + (12 .5f * 0 .125f * bns[bn]) }, Color{ 0 ,255 ,0 ,80 });
894
888
889
+ DrawTriangle3D (Vector3{ -diffDistance - 0 .5f ,0 .05f ,smasherPos + (12 .5f * 0 .025f * bns[bn]) }, Vector3{ diffDistance + 0 .5f ,0 .05f ,smasherPos + (12 .5f * 0 .025f * bns[bn]) }, Vector3{ diffDistance + 0 .5f ,0 .05f ,smasherPos - (12 .5f * 0 .025f * bns[bn]) }, Color{ 190 ,255 ,0 ,80 });
890
+ DrawTriangle3D (Vector3{ diffDistance + 0 .5f ,0 .05f ,smasherPos - (12 .5f * 0 .025f * bns[bn]) }, Vector3{ -diffDistance - 0 .5f ,0 .05f ,smasherPos - (12 .5f * 0 .025f * bns[bn]) }, Vector3{ -diffDistance - 0 .5f ,0 .05f ,smasherPos + (12 .5f * 0 .025f * bns[bn]) }, Color{ 190 ,255 ,0 ,80 });
891
+ #endif
895
892
EndMode3D ();
896
893
897
894
0 commit comments