[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