1616#include " game/player.h"
1717#include " game/keybinds.h"
1818#include " raygui.h"
19- #include < stdlib.h>
2019
20+ #include < stdlib.h>
21+ #include " GLFW/glfw3.h"
2122#include < cstdio>
2223vector<std::string> ArgumentList::arguments;
2324
@@ -75,12 +76,79 @@ std::vector<float> bns = { 0.5f,0.75f,1.0f,1.25f,1.5f,1.75f,2.0f };
7576int bn = 4 ;
7677std::string bnsButton = " Track Speed 1.5x" ;
7778
78-
7979std::vector<double > laneTimes = { 0.0 ,0.0 ,0.0 ,0.0 ,0.0 };
8080std::vector<double > liftTimes = { 0.0 ,0.0 ,0.0 ,0.0 ,0.0 };
8181std::vector<bool > heldFrets = { false ,false ,false ,false ,false };
8282std::vector<bool > tapRegistered{ false ,false ,false ,false ,false };
8383std::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+
84152
85153int main (int argc, char * argv[])
86154{
@@ -100,7 +168,7 @@ int main(int argc, char* argv[])
100168 int targetFPSArg = 0 ;
101169
102170 if (FPSCapStringVal != " " )
103- {
171+ {
104172#ifdef NDEBUG
105173 str2int (&targetFPSArg, FPSCapStringVal.c_str ());
106174#else
@@ -225,7 +293,7 @@ int main(int argc, char* argv[])
225293 }
226294 }
227295
228- SongList songList = LoadSongs (songsPath);
296+ songList = LoadSongs (songsPath);
229297
230298 ChangeDirectory (GetApplicationDirectory ());
231299 // assets loading
@@ -308,45 +376,14 @@ int main(int argc, char* argv[])
308376 Model liftModelOD = LoadModel ((directory / " Assets/notes/lift.obj" ).string ().c_str ());
309377 liftModelOD.materials [0 ].maps [MATERIAL_MAP_ALBEDO].color = Color{ 217 , 183 , 82 ,127 };
310378
379+
380+ GLFWkeyfun origCallback = glfwSetKeyCallback (glfwGetCurrentContext (), notesCallback);
381+
311382
312383 while (!WindowShouldClose ())
313384 {
314385 float diffDistance = diff == 3 ? 2 .0f : 1 .5f ;
315386 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- }
350387 BeginDrawing ();
351388
352389 ClearBackground (DARKGRAY);
@@ -372,7 +409,6 @@ int main(int argc, char* argv[])
372409 std::string charStr = " UNKNOWN" ;
373410 if (KEYBINDS_5K[i] >= 39 && KEYBINDS_5K[i] < 96 && KEYBINDS_5K[i] != KEY_MENU) {
374411 charStr=static_cast <char >(KEYBINDS_5K[i]);
375- charStr=static_cast <char >(KEYBINDS_5K[i]);
376412 }
377413 else {
378414 charStr = getKeyStr (KEYBINDS_5K[i]);
@@ -556,6 +592,7 @@ int main(int argc, char* argv[])
556592 diff = i;
557593 selectStage = 3 ;
558594 isPlaying = true ;
595+ glfwSetKeyCallback (glfwGetCurrentContext (), notesCallback);
559596 }
560597 }
561598 }
@@ -590,10 +627,13 @@ int main(int argc, char* argv[])
590627 note.perfect = false ;
591628
592629 }
630+ glfwSetKeyCallback (glfwGetCurrentContext (), origCallback);
593631 // notes = songList.songs[curPlayingSong].parts[instrument]->charts[diff].notes.size();
594632 // notes = songList.songs[curPlayingSong].parts[instrument]->charts[diff];
595633 for (odPhrase &phrase : songList.songs [curPlayingSong].parts [instrument]->charts [diff].odPhrases ) {
596634 phrase.missed = false ;
635+ phrase.notesHit = 0 ;
636+ phrase.added = false ;
597637 }
598638 selectStage = 0 ;
599639
@@ -617,7 +657,6 @@ int main(int argc, char* argv[])
617657 }
618658 }
619659 double musicTime = GetMusicTimePlayed (loadedStreams[0 ]);
620-
621660 if (musicTime >= songList.songs [curPlayingSong].end ) {
622661 for (Note& note : songList.songs [curPlayingSong].parts [instrument]->charts [diff].notes ) {
623662 note.accounted = false ;
@@ -628,9 +667,12 @@ int main(int argc, char* argv[])
628667 note.perfect = false ;
629668 // notes += 1;
630669 }
670+ glfwSetKeyCallback (glfwGetCurrentContext (), origCallback);
631671 // notes = (int)songList.songs[curPlayingSong].parts[instrument]->charts[diff].notes.size();
632672 for (odPhrase& phrase : songList.songs [curPlayingSong].parts [instrument]->charts [diff].odPhrases ) {
633673 phrase.missed = false ;
674+ phrase.notesHit = 0 ;
675+ phrase.added = false ;
634676 }
635677 selectStage = 0 ;
636678 overdrive = false ;
@@ -641,15 +683,9 @@ int main(int argc, char* argv[])
641683 midiLoaded = false ;
642684 streamsLoaded = false ;
643685 }
644- if (IsKeyPressed (KEY_SPACE) && overdriveFill > 0 && !overdrive) {
645- overdriveActiveTime = musicTime;
646- overdriveActiveFill = overdriveFill;
647- overdrive = true ;
686+ if (overdrive) {
648687 expertHighway.materials [0 ].maps [MATERIAL_MAP_ALBEDO].texture = highwayTextureOD;
649688 emhHighway.materials [0 ].maps [MATERIAL_MAP_ALBEDO].texture = highwayTextureOD;
650- }
651- if (overdrive) {
652-
653689 overdriveFill = overdriveActiveFill-((musicTime-overdriveActiveTime)/(1920 / songList.songs [curPlayingSong].bpms [curBPM].bpm ));
654690 if (overdriveFill <= 0 ) {
655691 overdrive = false ;
@@ -743,44 +779,6 @@ int main(int argc, char* argv[])
743779 }
744780 for (int i = curNoteIdx; i < curChart.notes .size (); i++) {
745781 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-
784782 bool od = false ;
785783 if (curChart.odPhrases .size () > 0 ) {
786784 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[])
805803 curChart.odPhrases [curODPhrase].added = true ;
806804 }
807805 }
808- if (curNote.hit && IsKeyPressed (KEYBINDS_5K[curNote. lane ]) && !curNote.accounted ) {
806+ if (curNote.hit && !curNote.accounted ) {
809807 player::HitNote (curNote.perfect , instrument);
810808 curNote.accounted = true ;
811809 }
@@ -884,14 +882,13 @@ int main(int argc, char* argv[])
884882 if (relEnd < -1 && curNoteIdx < curChart.notes .size ()-1 ) curNoteIdx = i + 1 ;
885883
886884 }
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 });
894888
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
895892 EndMode3D ();
896893
897894
0 commit comments