|
From: Tapio V. <aa...@us...> - 2010-01-09 15:02:42
|
Module: performous
Branch: master
Commit: edf2ef0d5ec86746d391383c973c6bf6a93c1ce3
Author: Tapio Vierros <tap...@gm...>
Date: Sat Jan 9 16:24:26 2010 +0200
Fix joining in the middle of the game.
---
game/dancegraph.cc | 58 ++++++++++++++++++++++++++------------------------
game/guitargraph.cc | 3 ++
2 files changed, 33 insertions(+), 28 deletions(-)
diff --git a/game/dancegraph.cc b/game/dancegraph.cc
index 1dd4bf3..0d005ec 100644
--- a/game/dancegraph.cc
+++ b/game/dancegraph.cc
@@ -171,6 +171,35 @@ void DanceGraph::engine() {
if (time < it->first + it->second) { time = it->first; break; } // Inside stop
time -= it->second;
}
+
+ bool difficulty_changed = false;
+ // Handle all events
+ for (input::Event ev; m_input.tryPoll(ev);) {
+ m_dead = 0; // Keep alive
+ if (m_jointime == not_joined) { // Handle joining
+ m_jointime = (time < 0.0 ? -join_delay : time);
+ break;
+ }
+ // Difficulty / mode selection
+ if (time < m_jointime + join_delay && ev.type == input::Event::PRESS) {
+ if (ev.pressed[STEP_UP]) difficultyDelta(1);
+ else if (ev.pressed[STEP_DOWN]) difficultyDelta(-1);
+ else if (ev.pressed[STEP_LEFT]) gameMode(-1);
+ else if (ev.pressed[STEP_RIGHT]) gameMode(1);
+ difficulty_changed = true;
+ }
+ // Gaming controls
+ if (ev.type == input::Event::RELEASE) {
+ m_pressed[ev.button] = false;
+ dance(time, ev);
+ m_pressed_anim[ev.button].setTarget(0.0);
+ } else if (ev.type == input::Event::PRESS) {
+ m_pressed[ev.button] = true;
+ dance(time, ev);
+ m_pressed_anim[ev.button].setValue(1.0);
+ }
+ }
+
// Notes gone by
for (DanceNotes::iterator& it = m_notesIt; it != m_notes.end() && time > it->note.end + maxTolerance; it++) {
if(!it->isHit) { // Missed
@@ -186,6 +215,7 @@ void DanceGraph::engine() {
}
++m_dead;
}
+ if (difficulty_changed) m_dead = 0; // if difficulty is changed, m_dead would get incorrect
// Holding button when mine comes?
for (DanceNotes::iterator it = m_notesIt; it != m_notes.end() && time <= it->note.begin + maxTolerance; it++) {
@@ -197,34 +227,6 @@ void DanceGraph::engine() {
}
}
- // Handle all events
- for (input::Event ev; m_input.tryPoll(ev);) {
- m_dead = 0; // Keep alive
- if (m_jointime == not_joined) { // Handle joining
- m_jointime = (time < 0.0 ? -join_delay : time);
- break;
- }
- // Difficulty / mode selection
- if (time < m_jointime + join_delay) {
- if (ev.type == input::Event::PRESS) {
- if (ev.pressed[STEP_UP]) difficultyDelta(1);
- else if (ev.pressed[STEP_DOWN]) difficultyDelta(-1);
- else if (ev.pressed[STEP_LEFT]) gameMode(-1);
- else if (ev.pressed[STEP_RIGHT]) gameMode(1);
- }
- }
- // Gaming controls
- if (ev.type == input::Event::RELEASE) {
- m_pressed[ev.button] = false;
- dance(time, ev);
- m_pressed_anim[ev.button].setTarget(0.0);
- } else if (ev.type == input::Event::PRESS) {
- m_pressed[ev.button] = true;
- dance(time, ev);
- m_pressed_anim[ev.button].setValue(1.0);
- }
- }
-
// Check if a long streak goal has been reached
if (m_streak >= getNextBigStreak(m_bigStreak)) {
m_streakPopup.setTarget(1.0);
diff --git a/game/guitargraph.cc b/game/guitargraph.cc
index a13681d..25d5e6d 100644
--- a/game/guitargraph.cc
+++ b/game/guitargraph.cc
@@ -152,6 +152,7 @@ void GuitarGraph::engine() {
}
if (m_starpower.get() > 0.001) m_correctness.setTarget(1.0, true);
double whammy = 0;
+ bool difficulty_changed = false;
// Handle all events
for (input::Event ev; m_input.tryPoll(ev);) {
// This hack disallows joining with Enter-key for skipping instrumental
@@ -184,6 +185,7 @@ void GuitarGraph::engine() {
else if (ev.pressed[1 + m_drums]) difficulty(DIFFICULTY_EASY);
else if (ev.pressed[2 + m_drums]) difficulty(DIFFICULTY_MEDIUM);
else if (ev.pressed[3 + m_drums]) difficulty(DIFFICULTY_AMAZING);
+ difficulty_changed = true;
}
// Playing
} else if (m_drums) {
@@ -200,6 +202,7 @@ void GuitarGraph::engine() {
++m_dead;
++m_chordIt;
}
+ if (difficulty_changed) m_dead = 0; // if difficulty is changed, m_dead would get incorrect
// Adjust the correctness value
if (!m_events.empty() && m_events.back().type == 0) m_correctness.setTarget(0.0, true);
else if (m_chordIt != m_chords.end() && m_chordIt->begin <= time) {
|