[Scummvm-cvs-logs] SF.net SVN: scummvm:[55848] scummvm/trunk/engines/lastexpress/game

Littleboy at users.sourceforge.net Littleboy at users.sourceforge.net
Wed Feb 9 01:24:06 CET 2011


Revision: 55848
          http://scummvm.svn.sourceforge.net/scummvm/?rev=55848&view=rev
Author:   Littleboy
Date:     2011-02-09 00:24:06 +0000 (Wed, 09 Feb 2011)

Log Message:
-----------
LASTEXPRESS: Implement proper Inventory::open() and Inventory::close()

Modified Paths:
--------------
    scummvm/trunk/engines/lastexpress/game/inventory.cpp
    scummvm/trunk/engines/lastexpress/game/inventory.h
    scummvm/trunk/engines/lastexpress/game/logic.cpp

Modified: scummvm/trunk/engines/lastexpress/game/inventory.cpp
===================================================================
--- scummvm/trunk/engines/lastexpress/game/inventory.cpp	2011-02-09 00:23:49 UTC (rev 55847)
+++ scummvm/trunk/engines/lastexpress/game/inventory.cpp	2011-02-09 00:24:06 UTC (rev 55848)
@@ -43,9 +43,9 @@
 
 namespace LastExpress {
 
-Inventory::Inventory(LastExpressEngine *engine) : _engine(engine), _selectedItem(kItemNone), _highlightedItem(kItemNone), _opened(false), _visible(false),
+Inventory::Inventory(LastExpressEngine *engine) : _engine(engine), _selectedItem(kItemNone), _highlightedItem(kItemNone), _itemsShown(0),
 	_showingHourGlass(false), _blinkingEgg(false), _blinkingTime(0), _blinkingInterval(_defaultBlinkingInterval), _blinkingBrightness(1),
-	_useMagnifier(false), _flag1(false), _flag2(false), _eggHightlighted(false), _itemScene(NULL) {
+	_useMagnifier(false), _flag1(false), _isOpened(false), _eggHightlighted(false), _itemScene(NULL) {
 
 	_inventoryRect = Common::Rect(0, 0, 32, 32);
 	_menuRect = Common::Rect(608, 448, 640, 480);
@@ -160,11 +160,12 @@
 		if (ev.type == Common::EVENT_LBUTTONDOWN) {
 			_eggHightlighted = false;
 			_flag1 = false;
-			_flag2 = false;
+			_isOpened = false;
 
 			getSound()->playSoundWithSubtitles("LIB039.SND", SoundManager::kFlagMenuClock, kEntityPlayer);
 
 			getMenu()->show(true, kSavegameTypeIndex, 0);
+
 		} else if (ev.type == Common::EVENT_RBUTTONDOWN) {
 			if (getGlobalTimer()) {
 				if (getSound()->isBuffered("TIMER"))
@@ -175,7 +176,52 @@
 		}
 	}
 
+	// Selected item
+	if (ev.mouse.x >= 32) {
+		// TODO
+
+		return;
+	}
+
+	// Opened inventory
+	if (ev.mouse.y >= 32) {
+		// TODO
+
+		return;
+	}
+
 	//
+	if (!getProgress().field_84
+	 && getEntityData(kEntityPlayer)->location != kLocationOutsideTrain
+	 && getProgress().field_18 != 4
+	 && (_selectedItem == kItemNone || get(_selectedItem)->manualSelect || getState()->sceneUseBackup)) {
+
+		// Draw inventory contents when clicking on portrait
+		if (ev.type == Common::EVENT_LBUTTONDOWN) {
+			open();
+			return;
+		}
+
+		if (!_flag1 && !_isOpened) {
+			drawItem((CursorStyle)getProgress().portrait, 0, 0);
+			_flag1 = true;
+		} else if (!_isOpened || (ev.type == Common::EVENT_LBUTTONDOWN || ev.type == Common::EVENT_LBUTTONUP)) {
+			// Do nothing
+		} else if (_isOpened) {
+			close();
+
+			// Select item
+
+			// Examine item
+
+			_flag1 = true;
+		}
+
+		// Draw highlighted item
+	}
+
+
+	//
 	//// If clicked, show the menu
 	//if (ev.type == Common::EVENT_LBUTTONUP) {
 	//	getSound()->playSound(kEntityPlayer, "LIB039");
@@ -193,104 +239,104 @@
 	//	}
 	//}
 
-	// Portrait (inventory)
-	if (_inventoryRect.contains(ev.mouse)) {
-		//insideInventory = true;
-		_engine->getCursor()->setStyle(kCursorNormal);
+	//// Portrait (inventory)
+	//if (_inventoryRect.contains(ev.mouse)) {
+	//	//insideInventory = true;
+	//	_engine->getCursor()->setStyle(kCursorNormal);
 
-		// If clicked, show pressed state and display inventory
-		if (ev.type == Common::EVENT_LBUTTONUP) {
-			open();
-		} else {
-			// Highlight if needed
-			if (_highlightedItem != (InventoryItem)getProgress().portrait && !_opened) {
-				_highlightedItem = (InventoryItem)getProgress().portrait;
-				drawItem((CursorStyle)getProgress().portrait, 0, 0);
+	//	// If clicked, show pressed state and display inventory
+	//	if (ev.type == Common::EVENT_LBUTTONUP) {
+	//		open();
+	//	} else {
+	//		// Highlight if needed
+	//		if (_highlightedItem != (InventoryItem)getProgress().portrait && !_opened) {
+	//			_highlightedItem = (InventoryItem)getProgress().portrait;
+	//			drawItem((CursorStyle)getProgress().portrait, 0, 0);
 
-				askForRedraw();
-			}
-		}
-	} else {
-		// remove highlight if needed
-		if (_highlightedItem == (InventoryItem)getProgress().portrait && !_opened) {
-			drawItem((CursorStyle)getProgress().portrait, 0, 0);
-			_highlightedItem = kItemNone;
-			askForRedraw();
-		}
-	}
+	//			askForRedraw();
+	//		}
+	//	}
+	//} else {
+	//	// remove highlight if needed
+	//	if (_highlightedItem == (InventoryItem)getProgress().portrait && !_opened) {
+	//		drawItem((CursorStyle)getProgress().portrait, 0, 0);
+	//		_highlightedItem = kItemNone;
+	//		askForRedraw();
+	//	}
+	//}
 
-	// If the inventory is open, check all items rect to see if we need to highlight one / handle click
-	if (_opened) {
+	//// If the inventory is open, check all items rect to see if we need to highlight one / handle click
+	//if (_opened) {
 
-		// Always show normal cursor when the inventory is opened
-		//insideInventory = true;
-		_engine->getCursor()->setStyle(kCursorNormal);
+	//	// Always show normal cursor when the inventory is opened
+	//	//insideInventory = true;
+	//	_engine->getCursor()->setStyle(kCursorNormal);
 
-		bool selected = false;
+	//	bool selected = false;
 
-		// Iterate over items
-		int16 y = 44;
-		for (int i = 1; i < 32; i++) {
-			if (!hasItem((InventoryItem)i))
-				continue;
+	//	// Iterate over items
+	//	int16 y = 44;
+	//	for (int i = 1; i < 32; i++) {
+	//		if (!hasItem((InventoryItem)i))
+	//			continue;
 
-			if (Common::Rect(0, y, 32, 32 + y).contains(ev.mouse)) {
+	//		if (Common::Rect(0, y, 32, 32 + y).contains(ev.mouse)) {
 
-				// If released with an item highlighted, show this item
-				if (ev.type == Common::EVENT_LBUTTONUP) {
-					if (_entries[i].isSelectable) {
-						selected = true;
-						_selectedItem = (InventoryItem)i;
-						drawItem(get(_selectedItem)->cursor, 44, 0);
-					}
+	//			// If released with an item highlighted, show this item
+	//			if (ev.type == Common::EVENT_LBUTTONUP) {
+	//				if (_entries[i].isSelectable) {
+	//					selected = true;
+	//					_selectedItem = (InventoryItem)i;
+	//					drawItem(get(_selectedItem)->cursor, 44, 0);
+	//				}
 
-					examine((InventoryItem)i);
-					break;
-				} else {
-					if (_highlightedItem != i) {
-						drawItem(_entries[i].cursor, 0, y);
-						_highlightedItem = (InventoryItem)i;
-						askForRedraw();
-					}
-				}
-			} else {
-				// Remove highlight if necessary
-				if (_highlightedItem == i) {
-					drawItem(_entries[i].cursor, 0, y);
-					_highlightedItem = kItemNone;
-					askForRedraw();
-				}
-			}
+	//				examine((InventoryItem)i);
+	//				break;
+	//			} else {
+	//				if (_highlightedItem != i) {
+	//					drawItem(_entries[i].cursor, 0, y);
+	//					_highlightedItem = (InventoryItem)i;
+	//					askForRedraw();
+	//				}
+	//			}
+	//		} else {
+	//			// Remove highlight if necessary
+	//			if (_highlightedItem == i) {
+	//				drawItem(_entries[i].cursor, 0, y);
+	//				_highlightedItem = kItemNone;
+	//				askForRedraw();
+	//			}
+	//		}
 
-			y += 40;
-		}
+	//		y += 40;
+	//	}
 
-		// Right button is released: we need to close the inventory
-		if (ev.type == Common::EVENT_LBUTTONUP) {
+	//	// Right button is released: we need to close the inventory
+	//	if (ev.type == Common::EVENT_LBUTTONUP) {
 
-			// Not on a selectable item: unselect the current item
-			if (!selected)
-				unselectItem();
+	//		// Not on a selectable item: unselect the current item
+	//		if (!selected)
+	//			unselectItem();
 
-			close();
-		}
-	}
+	//		close();
+	//	}
+	//}
 
-	// Selected item
-	if (_selectedItem != kItemNone && _selectedRect.contains(ev.mouse)) {
-		//insideInventory = true;
+	//// Selected item
+	//if (_selectedItem != kItemNone && _selectedRect.contains(ev.mouse)) {
+	//	//insideInventory = true;
 
-		// Show magnifier icon
-		_engine->getCursor()->setStyle(kCursorMagnifier);
+	//	// Show magnifier icon
+	//	_engine->getCursor()->setStyle(kCursorMagnifier);
 
-		if (ev.type == Common::EVENT_LBUTTONUP) {
-			examine(_selectedItem);
-		}
-	}
+	//	if (ev.type == Common::EVENT_LBUTTONUP) {
+	//		examine(_selectedItem);
+	//	}
+	//}
 
-	// If the egg is blinking, refresh
-	if (_blinkingEgg)
-		drawEgg();
+	//// If the egg is blinking, refresh
+	//if (_blinkingEgg)
+	//	drawEgg();
 
 	// Restore cursor
 	//if (!insideInventory)
@@ -581,18 +627,24 @@
 
 // Close inventory: clear items and reset icon
 void Inventory::open() {
-	_opened = true;
+	_flag1 = false;
+	_isOpened = true;
 
-	// Show selected state
+	// Draw highlighted portrait
 	drawItem((CursorStyle)(getProgress().portrait + 1), 0, 0);
 
-	uint16 y = 44;
+	// Draw at most 11 items in the inventory
+	_itemsShown = 0;
+	for (int i = 1; i < ARRAYSIZE(_entries); i++) {
+		if (!_entries[i].isPresent)
+			continue;
 
-	// Iterate over items
-	for (uint i = 1; i < 32; i++) {
-		if (_entries[i].isPresent) {
-			drawItem(_entries[i].cursor, 0, y);
-			y += 40;
+		if (!_entries[i].manualSelect)
+			continue;
+
+		if (_itemsShown < 11) {
+			drawItem(_entries[i].cursor, 0, 40 * _itemsShown + 44, 1);
+			++_itemsShown;
 		}
 	}
 
@@ -601,20 +653,15 @@
 
 // Close inventory: clear items and reset icon
 void Inventory::close() {
-	_opened = false;
+	_isOpened = false;
 
 	// Fallback to unselected state
 	drawItem((CursorStyle)getProgress().portrait, 0, 0);
 
-	// Erase rectangle for all inventory items
-	int count = 0;
-	for (uint i = 1; i < 32; i++) {
-		if (_entries[i].isPresent) {
-			count++;
-		}
-	}
+	// Erase rectangle for inventory items shown
+	_engine->getGraphicsManager()->clear(GraphicsManager::kBackgroundInventory, Common::Rect(0, 44, 32, (int16)(44 + 40 * _itemsShown)));
 
-	_engine->getGraphicsManager()->clear(GraphicsManager::kBackgroundInventory, Common::Rect(0, 44, 32, (int16)(44 + 44 * count)));
+	_itemsShown = 0;
 
 	askForRedraw();
 }

Modified: scummvm/trunk/engines/lastexpress/game/inventory.h
===================================================================
--- scummvm/trunk/engines/lastexpress/game/inventory.h	2011-02-09 00:23:49 UTC (rev 55847)
+++ scummvm/trunk/engines/lastexpress/game/inventory.h	2011-02-09 00:24:06 UTC (rev 55848)
@@ -121,7 +121,7 @@
 	// State
 	bool isMagnifierInUse() { return _useMagnifier; }
 	bool isFlag1() { return _flag1; }
-	bool isFlag2() { return _flag2; }
+	bool isOpened() { return _isOpened; }
 	bool isEggHighlighted() { return _eggHightlighted; }
 
 	// Serializable
@@ -143,9 +143,9 @@
 	InventoryEntry _entries[32];
 	InventoryItem _selectedItem;
 	InventoryItem _highlightedItem;
-	bool _opened;
-	bool _visible;
 
+	uint32 _itemsShown;
+
 	bool _showingHourGlass;
 	bool _blinkingEgg;
 	uint32 _blinkingTime;
@@ -155,7 +155,7 @@
 	// Flags
 	bool _useMagnifier;
 	bool _flag1;
-	bool _flag2;
+	bool _isOpened;
 	bool _eggHightlighted;
 
 	Scene *_itemScene;

Modified: scummvm/trunk/engines/lastexpress/game/logic.cpp
===================================================================
--- scummvm/trunk/engines/lastexpress/game/logic.cpp	2011-02-09 00:23:49 UTC (rev 55847)
+++ scummvm/trunk/engines/lastexpress/game/logic.cpp	2011-02-09 00:24:06 UTC (rev 55848)
@@ -90,7 +90,7 @@
 	if (getInventory()->isMagnifierInUse()) \
 		_engine->getCursor()->setStyle(kCursorMagnifier); \
 	if (getInventory()->isFlag1() \
-	|| getInventory()->isFlag2() \
+	|| getInventory()->isOpened() \
 	|| getInventory()->isEggHighlighted()) \
 		_engine->getCursor()->setStyle(kCursorNormal); \
 	return; \
@@ -144,7 +144,7 @@
 	 && !getEntities()->isPlayerPosition(kCarGreenSleeping, 59)
 	 && !getEntities()->isPlayerPosition(kCarGreenSleeping, 76)
 	 && !getInventory()->isFlag1()
-	 && !getInventory()->isFlag2()
+	 && !getInventory()->isOpened()
 	 && !getInventory()->isEggHighlighted()
 	 && !getInventory()->isMagnifierInUse()) {
 
@@ -174,7 +174,7 @@
 	 && (getEntities()->isPlayerInCar(kCarGreenSleeping) || getEntities()->isPlayerInCar(kCarRedSleeping))
 	 && getProgress().jacket == kJacketGreen
 	 && !getInventory()->isFlag1()
-	 && !getInventory()->isFlag2()
+	 && !getInventory()->isOpened()
 	 && !getInventory()->isEggHighlighted()
 	 && !getInventory()->isMagnifierInUse()
 	 && (getInventory()->get(kItem2)->location == kObjectLocationNone || getEntityData(kEntityPlayer)->car != kCarRedSleeping || getEntityData(kEntityPlayer)->entityPosition != kPosition_2300)) {
@@ -199,7 +199,7 @@
 	EntityIndex entityIndex = getEntities()->canInteractWith(ev.mouse);
 	if (entityIndex
 	 && !getInventory()->isFlag1()
-	 && !getInventory()->isFlag2()
+	 && !getInventory()->isOpened()
 	 && !getInventory()->isEggHighlighted()
 	 && !getInventory()->isMagnifierInUse()) {
 
@@ -223,10 +223,10 @@
 
 	//////////////////////////////////////////////////////////////////////////
 	// Handle standard actions
-	if (getInventory()->isFlag1() || getInventory()->isFlag2() || getInventory()->isEggHighlighted())
+	if (getInventory()->isFlag1() || getInventory()->isOpened() || getInventory()->isEggHighlighted())
 		_engine->getCursor()->setStyle(kCursorNormal);
 
-	if (hotspotHandled || getInventory()->isFlag1() || getInventory()->isFlag2() || getInventory()->isEggHighlighted())
+	if (hotspotHandled || getInventory()->isFlag1() || getInventory()->isOpened() || getInventory()->isEggHighlighted())
 		return;
 
 	// Magnifier in use
@@ -234,7 +234,7 @@
 		_engine->getCursor()->setStyle(kCursorMagnifier);
 
 		if (getInventory()->isFlag1()
-		 || getInventory()->isFlag2()
+		 || getInventory()->isOpened()
 		 || getInventory()->isEggHighlighted())
 			_engine->getCursor()->setStyle(kCursorNormal);
 
@@ -519,7 +519,7 @@
 	 || getEntities()->isPlayerPosition(kCarGreenSleeping, 59)
 	 || getEntities()->isPlayerPosition(kCarGreenSleeping, 76)
 	 || getInventory()->isFlag1()
-	 || getInventory()->isFlag2()
+	 || getInventory()->isOpened()
 	 || getInventory()->isEggHighlighted()
 	 || getInventory()->isMagnifierInUse()) {
 
@@ -527,7 +527,7 @@
 		 || (!getEntities()->isPlayerInCar(kCarGreenSleeping) && !getEntities()->isPlayerInCar(kCarRedSleeping))
 		 || getProgress().jacket != kJacketGreen
 		 || getInventory()->isFlag1()
-		 || getInventory()->isFlag2()
+		 || getInventory()->isOpened()
 		 || getInventory()->isEggHighlighted()
 		 || getInventory()->isMagnifierInUse()
 		 || (getInventory()->get(kItem2)->location
@@ -537,7 +537,7 @@
 			EntityIndex entity = getEntities()->canInteractWith(getCoords());
 			if (entity
 			 && !getInventory()->isFlag1()
-			 && !getInventory()->isFlag2()
+			 && !getInventory()->isOpened()
 			 && !getInventory()->isEggHighlighted()
 			 && !getInventory()->isMagnifierInUse()) {
 				 if (getInventory()->hasItem((InventoryItem)(getEntityData(entity)->inventoryItem & kItemToggleHigh))) {
@@ -551,7 +551,7 @@
 
 			if (!interact
 			 && !getInventory()->isFlag1()
-			 && !getInventory()->isFlag2()
+			 && !getInventory()->isOpened()
 			 && !getInventory()->isEggHighlighted()
 			 && !getInventory()->isMagnifierInUse()) {
 				int location = 0;
@@ -587,7 +587,7 @@
 	if (getInventory()->isMagnifierInUse())
 		style = kCursorMagnifier;
 
-	if (getInventory()->isFlag1() || getInventory()->isFlag2() || getInventory()->isEggHighlighted())
+	if (getInventory()->isFlag1() || getInventory()->isOpened() || getInventory()->isEggHighlighted())
 		style = kCursorNormal;
 
 	_engine->getCursor()->setStyle(style);


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list