aboutsummaryrefslogtreecommitdiff
path: root/engines/pegasus/fader.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/pegasus/fader.cpp')
-rwxr-xr-xengines/pegasus/fader.cpp25
1 files changed, 16 insertions, 9 deletions
diff --git a/engines/pegasus/fader.cpp b/engines/pegasus/fader.cpp
index c3cfe9d263..3d8305b2c9 100755
--- a/engines/pegasus/fader.cpp
+++ b/engines/pegasus/fader.cpp
@@ -31,6 +31,7 @@ namespace Pegasus {
Fader::Fader() {
_currentValue = 0;
_currentFaderMove._numKnots = 0;
+ _syncMode = false;
}
void Fader::setFaderValue(const uint32 newValue) {
@@ -85,19 +86,13 @@ void Fader::startFader(const FaderMoveSpec &spec) {
void Fader::startFaderSync(const FaderMoveSpec &spec) {
if (initFaderMove(spec)) {
+ _syncMode = true;
+
setFlags(0);
setScale(spec._faderScale);
setSegment(spec._knots[0].knotTime, spec._knots[spec._numKnots - 1].knotTime);
setTime(spec._knots[0].knotTime);
- start();
-
- while (isFading())
- useIdleTime();
-
- // Once more, for good measure, to make sure that there are no boundary
- // condition problems.
- useIdleTime();
- stopFader();
+ start();
}
}
@@ -144,6 +139,18 @@ void Fader::timeChanged(const TimeValue newTime) {
}
}
+void Fader::checkCallBacks() {
+ IdlerTimeBase::checkCallBacks();
+
+ if (_syncMode && !isRunning()) {
+ // Once more, for good measure, to make sure that there are no boundary
+ // condition problems.
+ useIdleTime();
+ stopFader();
+ _syncMode = false;
+ }
+}
+
void FaderMoveSpec::makeOneKnotFaderSpec(const uint32 knotValue) {
_numKnots = 1;
_knots[0].knotTime = 0;