diff options
| -rw-r--r-- | engines/cine/various.cpp | 59 | 
1 files changed, 23 insertions, 36 deletions
diff --git a/engines/cine/various.cpp b/engines/cine/various.cpp index 8b3001e143..c70062ca4c 100644 --- a/engines/cine/various.cpp +++ b/engines/cine/various.cpp @@ -838,6 +838,7 @@ uint16 executePlayerInput() {  	uint16 mouseX, mouseY, mouseButton;  	uint16 currentEntry = 0;  	uint16 di = 0; +	bool limitMouseCheckCount = false;  	canUseOnObject = 0; @@ -848,29 +849,36 @@ uint16 executePlayerInput() {  	}  	if (allowPlayerInput) { // Player input is allowed -		if (isDrawCommandEnabled) { +		if (g_cine->getGameType() == Cine::GType_FW && isDrawCommandEnabled) {  			renderer->setCommand(commandBuffer); -			isDrawCommandEnabled = 0;  		} +		isDrawCommandEnabled = 0; +		limitMouseCheckCount = true; +	} -		getMouseData(mouseUpdateStatus, &mouseButton, &mouseX, &mouseY); +	// Get mouse position and button states +	di = 0; +	currentEntry = 0; +	getMouseData(mouseUpdateStatus, &mouseButton, &mouseX, &mouseY); -		while (mouseButton && currentEntry < 200) { -			di |= (mouseButton & (kLeftMouseButton | kRightMouseButton)); -			getMouseData(mouseUpdateStatus, &mouseButton, &mouseX, &mouseY); -			currentEntry++; -		} +	while (mouseButton && (!limitMouseCheckCount || currentEntry < 200) && !g_cine->shouldQuit()) { +		di |= (mouseButton & (kLeftMouseButton | kRightMouseButton)); +		manageEvents(); +		getMouseData(mouseUpdateStatus, &mouseButton, &mouseX, &mouseY); +		currentEntry++; +	} -		if (di) { -			mouseButton = di; -		} +	if (di) { +		mouseButton = di; +	} +	if ((mouseButton & kLeftMouseButton) && (mouseButton & kRightMouseButton)) { +		// Left and right mouse buttons are down +		g_cine->makeSystemMenu(); +	} else if (allowPlayerInput) { // Player input is allowed  		if (playerCommand != -1) { // A player command is given  			if (mouseButton & kLeftMouseButton) { // Left mouse button is down -				if (mouseButton & kRightMouseButton) { // Right mouse button is down -					// A player command is given, left and right mouse buttons are down -					g_cine->makeSystemMenu(); -				} else { // Right mouse button is up +				if (!(mouseButton & kRightMouseButton)) { // Right mouse button is up  					// A player command is given, left mouse button is down, right mouse button is up  					int16 si;  					do { @@ -953,9 +961,6 @@ uint16 executePlayerInput() {  					}  					makeCommandLine(); -				} else { // Left mouse button is down -					// No player command is given, left and right mouse buttons are down -					g_cine->makeSystemMenu();  				}  			} else { // Right mouse button is up  				if (mouseButton & kLeftMouseButton) { // Left mouse button is down @@ -985,24 +990,6 @@ uint16 executePlayerInput() {  				}  			}  		} -	} else { // Player input is not allowed -		di = 0; -		getMouseData(mouseUpdateStatus, &mouseButton, &mouseX, &mouseY); - -		while (mouseButton && !g_cine->shouldQuit()) { -			di |= (mouseButton & (kLeftMouseButton | kRightMouseButton)); -			manageEvents(); -			getMouseData(mouseUpdateStatus, &mouseButton, &mouseX, &mouseY); -		} - -		if (di) { -			mouseButton = di; -		} - -		if ((mouseButton & kLeftMouseButton) && (mouseButton & kRightMouseButton)) { -			// Player input is not allowed, left and right mouse buttons are down -			g_cine->makeSystemMenu(); -		}  	}  	var_2 = menuVar & 0x7F;  | 
