[Scummvm-git-logs] scummvm master -> 1be2092c9bdeceec4fdfd7b98813d1f948d90aba

antoniou79 a.antoniou79 at gmail.com
Wed Sep 2 20:28:57 UTC 2020


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
1be2092c9b BLADERUNNER: Use unsigned difference for robust behavior


Commit: 1be2092c9bdeceec4fdfd7b98813d1f948d90aba
    https://github.com/scummvm/scummvm/commit/1be2092c9bdeceec4fdfd7b98813d1f948d90aba
Author: antoniou79 (a.antoniou79 at gmail.com)
Date: 2020-09-02T23:25:55+03:00

Commit Message:
BLADERUNNER: Use unsigned difference for robust behavior

For the emulation of repeated key firing while holding Esc or Return keys pressed

Changed paths:
    engines/bladerunner/bladerunner.cpp
    engines/bladerunner/bladerunner.h


diff --git a/engines/bladerunner/bladerunner.cpp b/engines/bladerunner/bladerunner.cpp
index 1b127655fb..693d20b977 100644
--- a/engines/bladerunner/bladerunner.cpp
+++ b/engines/bladerunner/bladerunner.cpp
@@ -232,6 +232,10 @@ BladeRunnerEngine::BladeRunnerEngine(OSystem *syst, const ADGameDescription *des
 
 	_actorUpdateCounter  = 0;
 	_actorUpdateTimeLast = 0;
+
+	_currentKeyDown.keycode = Common::KEYCODE_INVALID;
+	_keyRepeatTimeLast = 0;
+	_keyRepeatTimeDelay = 0;
 }
 
 BladeRunnerEngine::~BladeRunnerEngine() {
@@ -1300,7 +1304,8 @@ void BladeRunnerEngine::handleEvents() {
 				// First hit (fire) has a bigger delay (kKeyRepeatInitialDelay) before repeated events are fired from the same key
 				if (event.kbd.keycode == Common::KEYCODE_ESCAPE || event.kbd.keycode == Common::KEYCODE_RETURN) {
 					_currentKeyDown = event.kbd.keycode;
-					_keyRepeatTime = timeNow + kKeyRepeatInitialDelay;
+					_keyRepeatTimeLast = timeNow;
+					_keyRepeatTimeDelay = kKeyRepeatInitialDelay;
 				}
 				handleKeyDown(event);
 			}
@@ -1339,13 +1344,14 @@ void BladeRunnerEngine::handleEvents() {
 		}
 	}
 
-	if ((_currentKeyDown == Common::KEYCODE_ESCAPE || _currentKeyDown == Common::KEYCODE_RETURN) && _keyRepeatTime <= timeNow) {
+	if ((_currentKeyDown == Common::KEYCODE_ESCAPE || _currentKeyDown == Common::KEYCODE_RETURN) && (timeNow - _keyRepeatTimeLast >= _keyRepeatTimeDelay)) {
 		// create a "new" keydown event
 		event.type = Common::EVENT_KEYDOWN;
 		// kbdRepeat field will be unused here since we emulate the kbd repeat behavior anyway, but it's good to set it for consistency
 		event.kbdRepeat = true;
 		event.kbd = _currentKeyDown;
-		_keyRepeatTime = timeNow + kKeyRepeatSustainDelay;
+		_keyRepeatTimeLast = timeNow;
+		_keyRepeatTimeDelay = kKeyRepeatSustainDelay;
 		handleKeyDown(event);
 	}
 }
diff --git a/engines/bladerunner/bladerunner.h b/engines/bladerunner/bladerunner.h
index 0fb54d5fb3..0e54eb04ab 100644
--- a/engines/bladerunner/bladerunner.h
+++ b/engines/bladerunner/bladerunner.h
@@ -263,7 +263,8 @@ public:
 	};
 
 	Common::KeyState _currentKeyDown;
-	uint32 _keyRepeatTime;
+	uint32 _keyRepeatTimeLast;
+	uint32 _keyRepeatTimeDelay;
 
 private:
 	MIXArchive _archives[kArchiveCount];




More information about the Scummvm-git-logs mailing list