Skip to content

Commit da66188

Browse files
Event based input, and changes to the hit window view
1 parent fadcb3f commit da66188

File tree

1 file changed

+90
-93
lines changed

1 file changed

+90
-93
lines changed

Encore/src/main.cpp

+90-93
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,9 @@
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>
2223
vector<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 };
7576
int bn = 4;
7677
std::string bnsButton = "Track Speed 1.5x";
7778

78-
7979
std::vector<double> laneTimes = { 0.0,0.0,0.0,0.0,0.0 };
8080
std::vector<double> liftTimes = { 0.0,0.0,0.0,0.0,0.0 };
8181
std::vector<bool> heldFrets = { false,false,false,false,false };
8282
std::vector<bool> tapRegistered{ false,false,false,false,false };
8383
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+
84152

85153
int 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

Comments
 (0)