[Scummvm-cvs-logs] scummvm master -> b38d965fdf18e728e7fb4c05a02ef6ff7f1ee256

Littleboy littleboy22 at gmail.com
Wed May 11 20:34:07 CEST 2011


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:
b38d965fdf LASTEXPRESS: Implement last part of inventory handling


Commit: b38d965fdf18e728e7fb4c05a02ef6ff7f1ee256
    https://github.com/scummvm/scummvm/commit/b38d965fdf18e728e7fb4c05a02ef6ff7f1ee256
Author: Littleboy (littleboy at users.sourceforge.net)
Date: 2011-05-11T11:20:46-07:00

Commit Message:
LASTEXPRESS: Implement last part of inventory handling

Changed paths:
    engines/lastexpress/game/inventory.cpp



diff --git a/engines/lastexpress/game/inventory.cpp b/engines/lastexpress/game/inventory.cpp
index c4d43d5..8e13587 100644
--- a/engines/lastexpress/game/inventory.cpp
+++ b/engines/lastexpress/game/inventory.cpp
@@ -127,11 +127,6 @@ void Inventory::init() {
 	_selectedItem = kItemNone;
 }
 
-// FIXME we need to draw cursors with full background opacity so that whatever is in the background is erased
-// this saved us clearing some part of the background when switching between states
-
-// TODO if we draw inventory objects on screen, we need to load a new scene.
-// Signal that the inventory has taken over the screen and stop processing mouse events after we have been called
 void Inventory::handleMouseEvent(const Common::Event &ev) {
 	_useMagnifier = false;
 
@@ -180,13 +175,39 @@ void Inventory::handleMouseEvent(const Common::Event &ev) {
 	// Selected item
 	if (ev.mouse.x >= 32) {
 		if (_isOpened) {
-			// If clicked
-			if (ev.type == Common::EVENT_LBUTTONDOWN) {
-				if (_highlightedItemIndex != 0) {
-					error("[Inventory::handleMouseEvent] Click on highlighted item not implemented");
-				}
+			// If we are currently inside inventory with the mouse pressed
+			if (getFlags()->mouseLeftPressed) {
+				if (_highlightedItemIndex)
+					drawHighlight(_highlightedItemIndex, true);
 			} else {
-				warning("[Inventory::handleMouseEvent] Default handling of open menu not implemented");
+				// The user released the mouse button, we need to update the inventory state (clear hightlight and items)
+				drawItem((CursorStyle)getProgress().portrait, 0, 0, 1);
+				_engine->getGraphicsManager()->clear(GraphicsManager::kBackgroundInventory, Common::Rect(0, 44, 32, (int16)(40 * _itemsShown + 40)));
+				_isOpened = false;
+				askForRedraw();
+
+				drawSelectedItem();
+
+				// Load backup scene
+				if (getState()->sceneUseBackup) {
+					SceneIndex scene = kSceneNone;
+					if (getState()->sceneBackup2) {
+						scene = getState()->sceneBackup2;
+						getState()->sceneBackup2 = kSceneNone;
+
+						// Load our scene
+						getScenes()->loadScene(scene);
+					} else if (!getEvent(kEventKronosBringFirebird) && !getProgress().isEggOpen) {
+						getState()->sceneUseBackup = false;
+						scene = getState()->sceneBackup;
+
+						if (getEntities()->getPosition(getScenes()->get(scene)->car, getScenes()->get(scene)->position))
+							scene = getScenes()->processIndex(getState()->sceneBackup);
+
+						// Load our scene
+						getScenes()->loadScene(scene);
+					}
+				}
 			}
 		} else {
 			if (_portraitHighlighted) {
@@ -195,10 +216,30 @@ void Inventory::handleMouseEvent(const Common::Event &ev) {
 				_portraitHighlighted = false;
 			}
 
+			// Magnifier
 			if (_selectedItem != kItemNone
 			 && get(_selectedItem)->scene != kSceneNone
 			 && _selectedItemRect.contains(ev.mouse)) {
-				error("[Inventory::handleMouseEvent] Default handling of selected item not implemented");
+
+				if (!getState()->sceneUseBackup || (getState()->sceneBackup2 && getFirstExaminableItem() == _selectedItem))
+					_useMagnifier = true;
+
+				if (getFlags()->mouseLeftPressed) {
+					if (getState()->sceneUseBackup) {
+						if (getState()->sceneBackup2
+						 && getFirstExaminableItem() == _selectedItem) {
+							 SceneIndex sceneIndex = getState()->sceneBackup2;
+							 getState()->sceneBackup2 = kSceneNone;
+
+							 getScenes()->loadScene(sceneIndex);
+						}
+					} else {
+						getState()->sceneBackup = getState()->scene;
+						getState()->sceneUseBackup = true;
+
+						getScenes()->loadScene(get(_selectedItem)->scene);
+					}
+				}
 			}
 		}
 
@@ -237,6 +278,7 @@ void Inventory::handleMouseEvent(const Common::Event &ev) {
 		// Reset items and portrait
 		drawItem((CursorStyle)getProgress().portrait, 0, 0, 1);
 		_engine->getGraphicsManager()->clear(GraphicsManager::kBackgroundInventory, Common::Rect(0, 44, 32, (int16)(40 * _itemsShown + 40)));
+		askForRedraw();
 		_highlightedItemIndex = 0;
 		_itemsShown = 0;
 
@@ -257,11 +299,10 @@ void Inventory::handleMouseEvent(const Common::Event &ev) {
 				getScenes()->loadScene(entry.scene);
 			}
 
-			if (entry.field_2) {
+			if (entry.field_2)
 				selectItem((InventoryItem)index);
-			} else {
+			else
 				drawSelectedItem();
-			}
 
 			// Set inventory as closed (will cause a cleanup on next call)
 			_isOpened = false;






More information about the Scummvm-git-logs mailing list