[Scummvm-git-logs] scummvm master -> f4c652e76f60304b1144947ff7c19af3451a880d
djsrv
dservilla at gmail.com
Tue Aug 4 19:17:24 UTC 2020
This automated email contains information about 3 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
5e96518ba7 DIRECTOR: Don't add delay to "wait for" tempos
a7ca8a0b2c DIRECTOR: Get rid of busy wait for click loop
f4c652e76f DIRECTOR: Return true on handled key event
Commit: 5e96518ba77cde08888d2e6d6ff2c10ccc0521ae
https://github.com/scummvm/scummvm/commit/5e96518ba77cde08888d2e6d6ff2c10ccc0521ae
Author: djsrv (dservilla at gmail.com)
Date: 2020-08-04T14:59:43-04:00
Commit Message:
DIRECTOR: Don't add delay to "wait for" tempos
Changed paths:
engines/director/score.cpp
diff --git a/engines/director/score.cpp b/engines/director/score.cpp
index 9c55ef9429..27890b1fbe 100644
--- a/engines/director/score.cpp
+++ b/engines/director/score.cpp
@@ -285,20 +285,22 @@ void Score::stopPlay() {
}
void Score::update() {
- if (_waitForChannel) {
- if (_soundManager->isChannelActive(_waitForChannel))
- return;
-
- _waitForChannel = 0;
- }
-
if (_activeFade) {
if (!_soundManager->fadeChannel(_activeFade))
_activeFade = 0;
}
- if (g_system->getMillis() < _nextFrameTime && !debugChannelSet(-1, kDebugFast) && !_nextFrame)
- return;
+ if (!debugChannelSet(-1, kDebugFast)) {
+ if (_waitForChannel) {
+ if (_soundManager->isChannelActive(_waitForChannel))
+ return;
+
+ _waitForChannel = 0;
+ }
+
+ if (g_system->getMillis() < _nextFrameTime && !_nextFrame)
+ return;
+ }
// For previous frame
if (_currentFrame > 0 && !_vm->_playbackPaused) {
@@ -393,28 +395,29 @@ void Score::update() {
if (tempo > 161) {
// Delay
_nextFrameTime = g_system->getMillis() + (256 - tempo) * 1000;
-
- return;
} else if (tempo <= 60) {
// FPS
- _nextFrameTime = g_system->getMillis() + (float)tempo / 60 * 1000;
_currentFrameRate = tempo;
- } else if (tempo >= 136) {
- // TODO Wait for channel tempo - 135
- warning("STUB: tempo >= 136");
- } else if (tempo == 128) {
- _vm->waitForClick();
- } else if (tempo == 135) {
- // Wait for sound channel 1
- _waitForChannel = 1;
- } else if (tempo == 134) {
- // Wait for sound channel 2
- _waitForChannel = 2;
+ _nextFrameTime = g_system->getMillis() + 1000.0 / (float)_currentFrameRate;
+ } else {
+ if (tempo >= 136) {
+ // TODO Wait for channel tempo - 135
+ warning("STUB: tempo >= 136");
+ } else if (tempo == 128) {
+ _vm->waitForClick();
+ } else if (tempo == 135) {
+ // Wait for sound channel 1
+ _waitForChannel = 1;
+ } else if (tempo == 134) {
+ // Wait for sound channel 2
+ _waitForChannel = 2;
+ }
+ _nextFrameTime = g_system->getMillis();
}
+ } else {
+ _nextFrameTime = g_system->getMillis() + 1000.0 / (float)_currentFrameRate;
}
- _nextFrameTime = g_system->getMillis() + 1000.0 / (float)_currentFrameRate;
-
if (debugChannelSet(-1, kDebugSlow))
_nextFrameTime += 1000;
}
Commit: a7ca8a0b2c8db3379a06173dccb107e8dc76bb9f
https://github.com/scummvm/scummvm/commit/a7ca8a0b2c8db3379a06173dccb107e8dc76bb9f
Author: djsrv (dservilla at gmail.com)
Date: 2020-08-04T15:14:05-04:00
Commit Message:
DIRECTOR: Get rid of busy wait for click loop
Changed paths:
engines/director/director.h
engines/director/events.cpp
engines/director/score.cpp
engines/director/score.h
diff --git a/engines/director/director.h b/engines/director/director.h
index 920a10a4db..c3e41bc17f 100644
--- a/engines/director/director.h
+++ b/engines/director/director.h
@@ -217,7 +217,6 @@ public:
// events.cpp
void processEvents();
uint32 getMacTicks();
- void waitForClick();
public:
RandomState _rnd;
diff --git a/engines/director/events.cpp b/engines/director/events.cpp
index 495d156245..15d1c749db 100644
--- a/engines/director/events.cpp
+++ b/engines/director/events.cpp
@@ -139,26 +139,31 @@ bool Movie::processEvent(Common::Event &event) {
return true;
case Common::EVENT_LBUTTONDOWN:
- pos = _stage->getMousePos();
-
- // D3 doesn't have both mouse up and down.
- // But we still want to know if the mouse is down for press effects.
- spriteId = sc->getMouseSpriteIDFromPos(pos);
- _currentClickOnSpriteId = sc->getActiveSpriteIDFromPos(pos);
-
- if (spriteId > 0 && sc->_channels[spriteId]->_sprite->shouldHilite())
- g_director->getCurrentStage()->invertChannel(sc->_channels[spriteId]);
-
- _lastEventTime = g_director->getMacTicks();
- _lastClickTime = _lastEventTime;
- _lastClickPos = pos;
-
- debugC(3, kDebugEvents, "event: Button Down @(%d, %d), movie '%s', sprite id: %d", pos.x, pos.y, _macName.c_str(), spriteId);
- registerEvent(kEventMouseDown, spriteId);
-
- if (sc->_channels[spriteId]->_sprite->_moveable) {
- _draggingSpritePos = _stage->getMousePos();
- _currentDraggedChannel = sc->_channels[spriteId];
+ if (sc->_waitForClick) {
+ sc->_waitForClick = false;
+ _vm->setCursor(kCursorDefault);
+ } else {
+ pos = _stage->getMousePos();
+
+ // D3 doesn't have both mouse up and down.
+ // But we still want to know if the mouse is down for press effects.
+ spriteId = sc->getMouseSpriteIDFromPos(pos);
+ _currentClickOnSpriteId = sc->getActiveSpriteIDFromPos(pos);
+
+ if (spriteId > 0 && sc->_channels[spriteId]->_sprite->shouldHilite())
+ g_director->getCurrentStage()->invertChannel(sc->_channels[spriteId]);
+
+ _lastEventTime = g_director->getMacTicks();
+ _lastClickTime = _lastEventTime;
+ _lastClickPos = pos;
+
+ debugC(3, kDebugEvents, "event: Button Down @(%d, %d), movie '%s', sprite id: %d", pos.x, pos.y, _macName.c_str(), spriteId);
+ registerEvent(kEventMouseDown, spriteId);
+
+ if (sc->_channels[spriteId]->_sprite->_moveable) {
+ _draggingSpritePos = _stage->getMousePos();
+ _currentDraggedChannel = sc->_channels[spriteId];
+ }
}
return true;
@@ -209,28 +214,4 @@ bool Movie::processEvent(Common::Event &event) {
return false;
}
-void DirectorEngine::waitForClick() {
- setCursor(kCursorMouseUp);
-
- bool cursor = false;
- uint32 nextTime = g_system->getMillis() + 1000;
-
- while (!processQuitEvent(true)) {
- g_system->updateScreen();
- g_system->delayMillis(10);
-
- if (g_system->getMillis() >= nextTime) {
- nextTime = g_system->getMillis() + 1000;
-
- setCursor(kCursorDefault);
-
- setCursor(cursor ? kCursorMouseDown : kCursorMouseUp);
-
- cursor = !cursor;
- }
- }
-
- setCursor(kCursorDefault);
-}
-
} // End of namespace Director
diff --git a/engines/director/score.cpp b/engines/director/score.cpp
index 27890b1fbe..033d3d0d0b 100644
--- a/engines/director/score.cpp
+++ b/engines/director/score.cpp
@@ -68,6 +68,8 @@ Score::Score(Movie *movie) {
_currentLabel = 0;
_nextFrameTime = 0;
_waitForChannel = 0;
+ _waitForClick = false;
+ _waitForClickCursor = false;
_activeFade = 0;
_playState = kPlayNotStarted;
@@ -297,6 +299,16 @@ void Score::update() {
_waitForChannel = 0;
}
+
+ if (_waitForClick) {
+ if (g_system->getMillis() >= _nextFrameTime + 1000) {
+ _waitForClickCursor = !_waitForClickCursor;
+ _vm->setCursor(kCursorDefault);
+ _vm->setCursor(_waitForClickCursor ? kCursorMouseDown : kCursorMouseUp);
+ _nextFrameTime = g_system->getMillis();
+ }
+ return;
+ }
if (g_system->getMillis() < _nextFrameTime && !_nextFrame)
return;
@@ -404,7 +416,9 @@ void Score::update() {
// TODO Wait for channel tempo - 135
warning("STUB: tempo >= 136");
} else if (tempo == 128) {
- _vm->waitForClick();
+ _waitForClick = true;
+ _waitForClickCursor = false;
+ _vm->setCursor(kCursorMouseUp);
} else if (tempo == 135) {
// Wait for sound channel 1
_waitForChannel = 1;
diff --git a/engines/director/score.h b/engines/director/score.h
index a9cd771434..c6a5fd78ab 100644
--- a/engines/director/score.h
+++ b/engines/director/score.h
@@ -134,6 +134,8 @@ public:
PlayState _playState;
uint32 _nextFrameTime;
int _waitForChannel;
+ bool _waitForClick;
+ bool _waitForClickCursor;
int _activeFade;
Cursor *_currentCursor;
Commit: f4c652e76f60304b1144947ff7c19af3451a880d
https://github.com/scummvm/scummvm/commit/f4c652e76f60304b1144947ff7c19af3451a880d
Author: djsrv (dservilla at gmail.com)
Date: 2020-08-04T15:16:18-04:00
Commit Message:
DIRECTOR: Return true on handled key event
Changed paths:
engines/director/events.cpp
diff --git a/engines/director/events.cpp b/engines/director/events.cpp
index 15d1c749db..6fcc25a508 100644
--- a/engines/director/events.cpp
+++ b/engines/director/events.cpp
@@ -201,7 +201,7 @@ bool Movie::processEvent(Common::Event &event) {
_lastEventTime = g_director->getMacTicks();
_lastKeyTime = _lastEventTime;
registerEvent(kEventKeyDown);
- break;
+ return true;
case Common::EVENT_KEYUP:
_keyFlags = event.kbd.flags;
More information about the Scummvm-git-logs
mailing list