[Scummvm-cvs-logs] SF.net SVN: scummvm: [31420] scummvm/trunk/engines/lure

thebluegr at users.sourceforge.net thebluegr at users.sourceforge.net
Sun Apr 6 14:00:37 CEST 2008


Revision: 31420
          http://scummvm.svn.sourceforge.net/scummvm/?rev=31420&view=rev
Author:   thebluegr
Date:     2008-04-06 05:00:37 -0700 (Sun, 06 Apr 2008)

Log Message:
-----------
Replaced ManagedList with Common::SharedPtr in the rest of the lure engine

Modified Paths:
--------------
    scummvm/trunk/engines/lure/debugger.cpp
    scummvm/trunk/engines/lure/game.cpp
    scummvm/trunk/engines/lure/hotspots.cpp
    scummvm/trunk/engines/lure/hotspots.h
    scummvm/trunk/engines/lure/menu.cpp
    scummvm/trunk/engines/lure/res.cpp
    scummvm/trunk/engines/lure/res_struct.cpp
    scummvm/trunk/engines/lure/res_struct.h
    scummvm/trunk/engines/lure/room.cpp
    scummvm/trunk/engines/lure/surface.cpp
    scummvm/trunk/engines/lure/surface.h

Modified: scummvm/trunk/engines/lure/debugger.cpp
===================================================================
--- scummvm/trunk/engines/lure/debugger.cpp	2008-04-06 11:12:42 UTC (rev 31419)
+++ scummvm/trunk/engines/lure/debugger.cpp	2008-04-06 12:00:37 UTC (rev 31420)
@@ -121,7 +121,7 @@
 
 	DebugPrintf("Available rooms are:\n");
 	for (RoomDataList::iterator i = rooms.begin(); i != rooms.end(); ++i) {
-		RoomData *room = *i;
+		RoomData *room = (*i).get();
 		// Explictly note the second drawbridge room as "Alt"
 		if (room->roomNumber == 49) {
 			strings.getString(47, buffer);
@@ -245,7 +245,7 @@
 			// Loop for displaying active hotspots
 			HotspotList::iterator i;
 			for (i = res.activeHotspots().begin(); i != res.activeHotspots().end(); ++i) {
-				Hotspot *hotspot = *i;
+				Hotspot *hotspot = (*i).get();
 
 				if (hotspot->nameId() == 0) strcpy(buffer, "none");
 				else strings.getString(hotspot->nameId(), buffer);
@@ -259,7 +259,7 @@
 
 			HotspotDataList::iterator i;
 			for (i = res.hotspotData().begin(); i != res.hotspotData().end(); ++i) {
-				HotspotData *hotspot = *i;
+				HotspotData *hotspot = (*i).get();
 
 				if (hotspot->roomNumber == roomNumber) {
 					if (hotspot->nameId == 0) strcpy(buffer, "none");
@@ -411,7 +411,7 @@
 	else {
 		RoomExitHotspotList::iterator i;
 		for (i = exits.begin(); i != exits.end(); ++i) {
-			RoomExitHotspotData *rec = *i;
+			RoomExitHotspotData *rec = (*i).get();
 
 			DebugPrintf("\nArea - (%d,%d)-(%d,%d) Room=%d Cursor=%d Hotspot=%xh",
 				rec->xs, rec->ys, rec->xe, rec->ye, rec->destRoomNumber, rec->cursorNum, rec->hotspotId);
@@ -426,7 +426,7 @@
 	else {
 		RoomExitList::iterator i2;
 		for (i2 = room->exits.begin(); i2 != room->exits.end(); ++i2) {
-			RoomExitData *rec2 = *i2;
+			RoomExitData *rec2 = (*i2).get();
 
 			DebugPrintf("\nExit - (%d,%d)-(%d,%d) Dest=%d,(%d,%d) Dir=%s Sequence=%xh",
 				rec2->xs, rec2->ys, rec2->xe, rec2->ye, rec2->roomNumber,

Modified: scummvm/trunk/engines/lure/game.cpp
===================================================================
--- scummvm/trunk/engines/lure/game.cpp	2008-04-06 11:12:42 UTC (rev 31419)
+++ scummvm/trunk/engines/lure/game.cpp	2008-04-06 12:00:37 UTC (rev 31420)
@@ -72,7 +72,7 @@
 	uint16 *idList = new uint16[res.activeHotspots().size()];
 	int idSize = 0;
 	for (i = res.activeHotspots().begin(); i != res.activeHotspots().end(); ++i) {
-		Hotspot *hotspot = *i;
+		Hotspot *hotspot = (*i).get();
 
 		if (!_preloadFlag || ((hotspot->layer() != 0xff) &&
 			(hotspot->hotspotId() < FIRST_NONCHARACTER_ID)))

Modified: scummvm/trunk/engines/lure/hotspots.cpp
===================================================================
--- scummvm/trunk/engines/lure/hotspots.cpp	2008-04-06 11:12:42 UTC (rev 31419)
+++ scummvm/trunk/engines/lure/hotspots.cpp	2008-04-06 12:00:37 UTC (rev 31420)
@@ -224,7 +224,10 @@
 	Resources &r = Resources::getReference();
 
 	// Get the animation specified
-	HotspotAnimData *tempAnim = r.animRecords()[animIndex];
+	HotspotAnimList::iterator anim = r.animRecords().begin();
+	for (int i = 0; i < animIndex; i++)
+		++anim;
+	HotspotAnimData *tempAnim = (*anim).get();
 
 	_animId = tempAnim->animRecordId;
 	if (_data)
@@ -1161,7 +1164,7 @@
 	HotspotList::iterator i;
 	HotspotList &lst = res.activeHotspots();
 	for (i = lst.begin(); i != lst.end(); ++i) {
-		Hotspot *hsCurrent = *i;
+		Hotspot *hsCurrent = (*i).get();
 
 		// Skip entry if it's the door or the character
 		if ((hsCurrent->hotspotId() == hotspotId()) ||
@@ -1868,7 +1871,7 @@
 	HotspotDataList &list = res.hotspotData();
 	HotspotDataList::iterator i;
 	for (i = list.begin(); i != list.end(); ++i) {
-		HotspotData *rec = *i;
+		HotspotData *rec = (*i).get();
 
 		if (rec->roomNumber == PLAYER_ID) {
 			if (numItems++ == 0) strcat(buffer, ": ");
@@ -3421,7 +3424,7 @@
 			if (i != entries.end()) ++i;
 
 		for (; i != entries.end(); ++i) {
-			entry = *i;
+			entry = (*i).get();
 			uint8 flags = (uint8) (entry->descId >> 14);
 			if (flags == 3)
 				// Skip the entry
@@ -4345,9 +4348,9 @@
 		printf("Pathfinder::list\n");
 	}
 
-	ManagedList<WalkingActionEntry *>::iterator i;
+	WalkingActionList::iterator i;
 	for (i = _list.begin(); i != _list.end(); ++i) {
-		WalkingActionEntry *e = *i;
+		WalkingActionEntry *e = (*i).get();
 		if (buffer) {
 			sprintf(buffer, "Direction=%d, numSteps=%d\n", e->direction(), e->numSteps());
 			buffer += strlen(buffer);
@@ -4469,9 +4472,9 @@
 		stream->write(_layer, sizeof(RoomPathsDecompressedData));
 
 		// Save any active step sequence
-		ManagedList<WalkingActionEntry *>::iterator i;
+		WalkingActionList::iterator i;
 		for (i = _list.begin(); i != _list.end(); ++i) {
-			WalkingActionEntry *entry = *i;
+			WalkingActionEntry *entry = (*i).get();
 			stream->writeByte(entry->direction());
 			stream->writeSint16LE(entry->rawSteps());
 		}
@@ -4491,7 +4494,7 @@
 		uint8 direction;
 		while ((direction = stream->readByte()) != 0xff) {
 			int steps = stream->readSint16LE();
-			_list.push_back(new WalkingActionEntry((Direction) direction, steps));
+			_list.push_back(WalkingActionList::value_type(new WalkingActionEntry((Direction) direction, steps)));
 		}
 		_stepCtr = stream->readSint16LE();
 	}
@@ -4640,7 +4643,7 @@
 void HotspotList::saveToStream(WriteStream *stream) {
 	HotspotList::iterator i;
 	for (i = begin(); i != end(); ++i) {
-		Hotspot *hotspot = *i;
+		Hotspot *hotspot = (*i).get();
 		debugC(ERROR_INTERMEDIATE, kLureDebugAnimations, "Saving hotspot %xh", hotspot->hotspotId());
 		bool dynamicObject = hotspot->hotspotId() != hotspot->originalId();
 		stream->writeUint16LE(hotspot->originalId());

Modified: scummvm/trunk/engines/lure/hotspots.h
===================================================================
--- scummvm/trunk/engines/lure/hotspots.h	2008-04-06 11:12:42 UTC (rev 31419)
+++ scummvm/trunk/engines/lure/hotspots.h	2008-04-06 12:00:37 UTC (rev 31420)
@@ -112,7 +112,8 @@
 private:
 	Hotspot *_hotspot;
 	bool _inUse;
-	ManagedList<WalkingActionEntry *> _list;
+	typedef Common::List<Common::SharedPtr<WalkingActionEntry> > WalkingActionList;
+	WalkingActionList _list;
 	RoomPathsDecompressedData _layer;
 	int _stepCtr;
 	bool _inProgress;
@@ -134,10 +135,10 @@
 	void scanLine(int numScans, int changeAmount, uint16 *&pEnd, int &v);
 
 	void add(Direction dir, int steps) {
-		_list.push_front(new WalkingActionEntry(dir, steps));
+		_list.push_front(WalkingActionList::value_type(new WalkingActionEntry(dir, steps)));
 	}
 	void addBack(Direction dir, int steps) {
-		_list.push_back(new WalkingActionEntry(dir, steps));
+		_list.push_back(WalkingActionList::value_type(new WalkingActionEntry(dir, steps)));
 	}
 public:
 	PathFinder(Hotspot *h);
@@ -470,7 +471,7 @@
 	void loadFromStream(Common::ReadStream *stream);
 };
 
-class HotspotList: public ManagedList<Hotspot *> {
+class HotspotList: public Common::List<Common::SharedPtr<Hotspot> > {
 public:
 	void saveToStream(WriteStream *stream);
 	void loadFromStream(ReadStream *stream);

Modified: scummvm/trunk/engines/lure/menu.cpp
===================================================================
--- scummvm/trunk/engines/lure/menu.cpp	2008-04-06 11:12:42 UTC (rev 31419)
+++ scummvm/trunk/engines/lure/menu.cpp	2008-04-06 12:00:37 UTC (rev 31420)
@@ -273,7 +273,7 @@
 
 	HotspotDataList::iterator i;
 	for (i = rsc.hotspotData().begin(); i != rsc.hotspotData().end(); ++i) {
-		HotspotData *hotspot = *i;
+		HotspotData *hotspot = (*i).get();
 		if (hotspot->roomNumber == PLAYER_ID) {
 			idList[itemCtr] = hotspot->hotspotId;
 			char *hotspotName = itemNames[itemCtr++] = (char *) malloc(MAX_HOTSPOT_NAME_SIZE);
@@ -314,7 +314,7 @@
 
 	// Loop for rooms
 	for (ir = rooms.begin(); ir != rooms.end(); ++ir) {
-		RoomData *roomData = *ir;
+		RoomData *roomData = (*ir).get();
 		// Pre-condition checks for whether to skip room
 		if ((roomData->hdrFlags != 15) && ((roomData->hdrFlags & fields.hdrFlagMask()) == 0))
 			continue;
@@ -334,7 +334,7 @@
 
 	// Loop for hotspots
 	for (ih = hotspots.begin(); ih != hotspots.end(); ++ih) {
-		HotspotData *hotspot = *ih;
+		HotspotData *hotspot = (*ih).get();
 
 		if ((hotspot->headerFlags != 15) &&
 			((hotspot->headerFlags & fields.hdrFlagMask()) == 0))

Modified: scummvm/trunk/engines/lure/res.cpp
===================================================================
--- scummvm/trunk/engines/lure/res.cpp	2008-04-06 11:12:42 UTC (rev 31419)
+++ scummvm/trunk/engines/lure/res.cpp	2008-04-06 12:00:37 UTC (rev 31420)
@@ -127,7 +127,7 @@
 			RoomResource *rec = (RoomResource *) (mb->data() + offsetVal);
 
 			RoomData *newEntry = new RoomData(rec, paths);
-			_roomData.push_back(newEntry);
+			_roomData.push_back(RoomDataList::value_type(newEntry));
 
 			uint8 numExits = rec->numExits;
 			if (numExits > 0) {
@@ -136,7 +136,7 @@
 
 				for (uint16 exitCtr = 0; exitCtr < numExits; ++exitCtr, ++exitRes) {
 					RoomExitData *exit = new RoomExitData(exitRes);
-					newEntry->exits.push_back(exit);
+					newEntry->exits.push_back(RoomExitList::value_type(exit));
 				}
 			}
 		}
@@ -158,7 +158,7 @@
 					(mb->data() + offsetVal);
 				while (READ_LE_UINT16(&re->hotspotId) != 0xffff) {
 					RoomExitHotspotData *newEntry = new RoomExitHotspotData(re);
-					room->exitHotspots.push_back(newEntry);
+					room->exitHotspots.push_back(RoomExitHotspotList::value_type(newEntry));
 					++re;
 				}
 			}
@@ -172,7 +172,7 @@
 	RoomExitJoinResource *joinRec = (RoomExitJoinResource *) mb->data();
 	while (READ_LE_UINT16(&joinRec->hotspot1Id) != 0xffff) {
 		RoomExitJoinData *newEntry = new RoomExitJoinData(joinRec);
-		_exitJoins.push_back(newEntry);
+		_exitJoins.push_back(RoomExitJoinList::value_type(newEntry));
 
 		GET_NEXT(joinRec, RoomExitJoinResource);
 	}
@@ -195,7 +195,7 @@
 	++offset;
 	while (READ_LE_UINT16(offset) != 0xffff) {
 		RandomActionSet *actionSet = new RandomActionSet(offset);
-		_randomActions.push_back(actionSet);
+		_randomActions.push_back(RandomActionList::value_type(actionSet));
 	}
 
 	// Loop through loading the schedules
@@ -203,7 +203,7 @@
 	while ((startOffset = READ_LE_UINT16(++offset)) != 0xffff) {
 		CharacterScheduleResource *res = (CharacterScheduleResource *) (mb->data() + startOffset);
 		CharacterScheduleSet *newEntry = new CharacterScheduleSet(res, ++ctr);
-		_charSchedules.push_back(newEntry);
+		_charSchedules.push_back(CharacterScheduleList::value_type(newEntry));
 	}
 	delete mb;
 
@@ -212,7 +212,7 @@
 	HotspotResource *hsRec = (HotspotResource *) mb->data();
 	while (READ_LE_UINT16(&hsRec->hotspotId) != 0xffff) {
 		HotspotData *newEntry = new HotspotData(hsRec);
-		_hotspotData.push_back(newEntry);
+		_hotspotData.push_back(HotspotDataList::value_type(newEntry));
 
 		GET_NEXT(hsRec, HotspotResource);
 	}
@@ -223,7 +223,7 @@
 	HotspotOverrideResource *hsoRec = (HotspotOverrideResource *) mb->data();
 	while (READ_LE_UINT16(&hsoRec->hotspotId) != 0xffff) {
 		HotspotOverrideData *newEntry = new HotspotOverrideData(hsoRec);
-		_hotspotOverrides.push_back(newEntry);
+		_hotspotOverrides.push_back(HotspotOverrideList::value_type(newEntry));
 		++hsoRec;
 	}
 	delete mb;
@@ -233,7 +233,7 @@
 	HotspotAnimResource *animRec = (HotspotAnimResource *) mb->data();
 	while (READ_LE_UINT16(&animRec->animRecordId) != 0xffff) {
 		HotspotAnimData *newEntry = new HotspotAnimData(animRec);
-		_animData.push_back(newEntry);
+		_animData.push_back(HotspotAnimList::value_type(newEntry));
 
 		// Handle any direction frames
 		AnimRecordTemp dirEntries[4] = {
@@ -248,7 +248,7 @@
 					(mb->data() + offsetVal);
 				while (READ_LE_UINT16(&moveRec->frameNumber) != 0xffff) {
 					MovementData *newMove = new MovementData(moveRec);
-					dirEntries[dirCtr].list->push_back(newMove);
+					dirEntries[dirCtr].list->push_back(MovementDataList::value_type(newMove));
 					++moveRec;
 				}
 			}
@@ -279,7 +279,7 @@
 
 		HotspotActionList *list = new HotspotActionList(
 			recordId, mb->data() + offsetVal);
-		_actionsList.push_back(list);
+		_actionsList.push_back(HotspotActionSet::value_type(list));
 	}
 	delete mb;
 
@@ -291,7 +291,7 @@
 		uint16 *offsets = (uint16 *) (mb->data() + READ_LE_UINT16(&thHeader->offset));
 		TalkHeaderData *newEntry = new TalkHeaderData(hotspotId, offsets);
 
-		_talkHeaders.push_back(newEntry);
+		_talkHeaders.push_back(TalkHeaderList::value_type(newEntry));
 		++thHeader;
 	}
 	delete mb;
@@ -316,18 +316,18 @@
 		TalkDataResource *entry = (TalkDataResource *) (dataStart + READ_LE_UINT16(&tdHeader->listOffset));
 		while (READ_LE_UINT16(&entry->preSequenceId) != 0xffff) {
 			TalkEntryData *newEntry = new TalkEntryData(entry);
-			data->entries.push_back(newEntry);
+			data->entries.push_back(TalkEntryList::value_type(newEntry));
 			++entry;
 		}
 
 		entry = (TalkDataResource *) (dataStart + READ_LE_UINT16(&tdHeader->responsesOffset));
 		while (READ_LE_UINT16(&entry->preSequenceId) != 0xffff) {
 			TalkEntryData *newEntry = new TalkEntryData(entry);
-			data->responses.push_back(newEntry);
+			data->responses.push_back(TalkEntryList::value_type(newEntry));
 			++entry;
 		}
 
-		_talkData.push_back(data);
+		_talkData.push_back(TalkDataList::value_type(data));
 		++tdHeader;
 	}
 	delete mb;
@@ -337,7 +337,7 @@
 	RoomExitCoordinateEntryResource *coordRec = (RoomExitCoordinateEntryResource *) mb->data();
 	while (READ_LE_UINT16(coordRec) != 0xffff) {
 		RoomExitCoordinates *newEntry = new RoomExitCoordinates(coordRec);
-		_coordinateList.push_back(newEntry);
+		_coordinateList.push_back(RoomExitCoordinatesList::value_type(newEntry));
 		++coordRec;
 	}
 	delete mb;
@@ -346,7 +346,7 @@
 	mb = d.getEntry(EXIT_HOTSPOT_ID_LIST);
 	RoomExitIndexedHotspotResource *indexedRec = (RoomExitIndexedHotspotResource *) mb->data();
 	while (READ_LE_UINT16(indexedRec) != 0xffff) {
-		_indexedRoomExitHospots.push_back(new RoomExitIndexedHotspotData(indexedRec));
+		_indexedRoomExitHospots.push_back(RoomExitIndexedHotspotList::value_type(new RoomExitIndexedHotspotData(indexedRec)));
 		indexedRec++;
 	}
 
@@ -373,7 +373,7 @@
 	RoomExitJoinList::iterator i;
 
 	for (i = _exitJoins.begin(); i != _exitJoins.end(); ++i) {
-		RoomExitJoinData *rec = *i;
+		RoomExitJoinData *rec = (*i).get();
 		if ((rec->hotspots[0].hotspotId == hotspotId) || (rec->hotspots[1].hotspotId == hotspotId))
 			return rec;
 	}
@@ -389,7 +389,7 @@
 	RoomDataList::iterator i;
 
 	for (i = _roomData.begin(); i != _roomData.end(); ++i) {
-		RoomData *rec = *i;
+		RoomData *rec = (*i).get();
 		if (rec->roomNumber == roomNumber) return rec;
 		++rec;
 	}
@@ -446,7 +446,7 @@
 	HotspotDataList::iterator i;
 
 	for (i = _hotspotData.begin(); i != _hotspotData.end(); ++i) {
-		HotspotData *rec = *i;
+		HotspotData *rec = (*i).get();
 		if (rec->hotspotId == hotspotId) return rec;
 	}
 
@@ -457,7 +457,7 @@
 	HotspotList::iterator i;
 
 	for (i = _activeHotspots.begin(); i != _activeHotspots.end(); ++i) {
-		Hotspot *rec = *i;
+		Hotspot *rec = (*i).get();
 		if (rec->hotspotId() == hotspotId) return rec;
 	}
 
@@ -469,7 +469,7 @@
 	HotspotOverrideList::iterator i;
 
 	for (i = _hotspotOverrides.begin(); i != _hotspotOverrides.end(); ++i) {
-		HotspotOverrideData *rec = *i;
+		HotspotOverrideData *rec = (*i).get();
 		if (rec->hotspotId == hotspotId) return rec;
 	}
 
@@ -480,7 +480,7 @@
 	HotspotAnimList::iterator i;
 
 	for (i = _animData.begin(); i != _animData.end(); ++i) {
-		HotspotAnimData *rec = *i;
+		HotspotAnimData *rec = (*i).get();
 		if (rec->animRecordId == animRecordId) return rec;
 	}
 
@@ -492,7 +492,7 @@
 	int index = 0;
 
 	for (i = _animData.begin(); i != _animData.end(); ++i, ++index) {
-		HotspotAnimData *rec = *i;
+		HotspotAnimData *rec = (*i).get();
 		if (rec == animData)
 			return index;
 	}
@@ -511,7 +511,7 @@
 TalkHeaderData *Resources::getTalkHeader(uint16 hotspotId) {
 	TalkHeaderList::iterator i;
 	for (i = _talkHeaders.begin(); i != _talkHeaders.end(); ++i) {
-		TalkHeaderData *rec = *i;
+		TalkHeaderData *rec = (*i).get();
 		if (rec->characterId == hotspotId) return rec;
 	}
 	return NULL;
@@ -637,7 +637,7 @@
 	HotspotData *hData = getHotspot(hotspotId);
 	assert(hData);
 	Hotspot *hotspot = new Hotspot(hData);
-	_activeHotspots.push_back(hotspot);
+	_activeHotspots.push_back(HotspotList::value_type(hotspot));
 
 	if (hotspotId < FIRST_NONCHARACTER_ID) {
 		// Default characters to facing upwards until they start moving
@@ -649,14 +649,14 @@
 }
 
 void Resources::addHotspot(Hotspot *hotspot) {
-	_activeHotspots.push_back(hotspot);
+	_activeHotspots.push_back(HotspotList::value_type(hotspot));
 }
 
 void Resources::deactivateHotspot(uint16 hotspotId, bool isDestId) {
 	HotspotList::iterator i = _activeHotspots.begin();
 
 	while (i != _activeHotspots.end()) {
-		Hotspot *h = *i;
+		Hotspot *h = (*i).get();
 		if ((!isDestId && (h->hotspotId() == hotspotId)) ||
 			(isDestId && (h->destHotspotId() == hotspotId) && (h->hotspotId() == 0xffff))) {
 			_activeHotspots.erase(i);
@@ -671,7 +671,7 @@
 	HotspotList::iterator i = _activeHotspots.begin();
 
 	while (i != _activeHotspots.end()) {
-		Hotspot *h = *i;
+		Hotspot *h = (*i).get();
 		if (h == hotspot) {
 			_activeHotspots.erase(i);
 			break;
@@ -686,7 +686,7 @@
 	HotspotDataList &list = _hotspotData;
 	HotspotDataList::iterator i;
 	for (i = list.begin(); i != list.end(); ++i) {
-		HotspotData *rec = *i;
+		HotspotData *rec = (*i).get();
 		if (rec->roomNumber == PLAYER_ID) ++numItems;
 	}
 
@@ -715,7 +715,7 @@
 
 	TalkDataList::iterator i;
 	for (i = _talkData.begin(); i != _talkData.end(); ++i) {
-		TalkData *rec = *i;
+		TalkData *rec = (*i).get();
 		if (rec->recordId == offset) {
 			_activeTalkData = rec;
 			return;
@@ -732,7 +732,7 @@
 	// Save out the schedule for any non-active NPCs
 	HotspotDataList::iterator i;
 	for (i = _hotspotData.begin(); i != _hotspotData.end(); ++i) {
-		HotspotData *rec = *i;
+		HotspotData *rec = (*i).get();
 		if (!rec->npcSchedule.isEmpty()) {
 			Hotspot *h = getActiveHotspot(rec->hotspotId);
 			if (h == NULL) {

Modified: scummvm/trunk/engines/lure/res_struct.cpp
===================================================================
--- scummvm/trunk/engines/lure/res_struct.cpp	2008-04-06 11:12:42 UTC (rev 31419)
+++ scummvm/trunk/engines/lure/res_struct.cpp	2008-04-06 12:00:37 UTC (rev 31420)
@@ -151,7 +151,7 @@
 RoomExitData *RoomExitList::checkExits(int16 xp, int16 yp) {
 	iterator i;
 	for (i = begin(); i != end(); i++) {
-		RoomExitData *rec = *i;
+		RoomExitData *rec = (*i).get();
 		if (rec->insideRect(xp, yp)) {
 			return rec;
 		}
@@ -285,7 +285,7 @@
 	RoomDataList::iterator i;
 
 	for (i = begin(); i != end(); ++i) {
-		RoomData *rec = *i;
+		RoomData *rec = (*i).get();
 		stream->writeByte(rec->flags);
 		const byte *pathData = rec->paths.data();
 		stream->write(pathData, ROOM_PATHS_HEIGHT * ROOM_PATHS_WIDTH);
@@ -297,7 +297,7 @@
 	byte data[ROOM_PATHS_HEIGHT * ROOM_PATHS_WIDTH];
 
 	for (i = begin(); i != end(); ++i) {
-		RoomData *rec = *i;
+		RoomData *rec = (*i).get();
 		rec->flags = stream->readByte();
 		stream->read(data, ROOM_PATHS_HEIGHT * ROOM_PATHS_WIDTH);
 		rec->paths.load(data);
@@ -322,7 +322,7 @@
 
 void RoomExitJoinList::saveToStream(WriteStream *stream) {
 	for (RoomExitJoinList::iterator i = begin(); i != end(); ++i) {
-		RoomExitJoinData *rec = *i;
+		RoomExitJoinData *rec = (*i).get();
 
 		stream->writeUint16LE(rec->hotspots[0].hotspotId);
 		stream->writeUint16LE(rec->hotspots[1].hotspotId);
@@ -339,7 +339,7 @@
 
 void RoomExitJoinList::loadFromStream(ReadStream *stream) {
 	for (RoomExitJoinList::iterator i = begin(); i != end(); ++i) {
-		RoomExitJoinData *rec = *i;
+		RoomExitJoinData *rec = (*i).get();
 
 		uint16 hotspot1Id = stream->readUint16LE();
 		if (hotspot1Id == 0xffff) error("Invalid room exit join list");
@@ -371,7 +371,7 @@
 uint16 HotspotActionList::getActionOffset(Action action) {
 	iterator i;
 	for (i = begin(); i != end(); ++i) {
-		HotspotActionData *rec = *i;
+		HotspotActionData *rec = (*i).get();
 		if (rec->action == action) return rec->sequenceOffset;
 	}
 
@@ -539,7 +539,7 @@
 void HotspotDataList::saveToStream(WriteStream *stream) {
 	iterator i;
 	for (i = begin(); i != end(); ++i) {
-		HotspotData *hotspot = *i;
+		HotspotData *hotspot = (*i).get();
 		stream->writeUint16LE(hotspot->hotspotId);
 		hotspot->saveToStream(stream);
 	}
@@ -585,7 +585,7 @@
 	iterator i;
 
 	for (i = begin(); i != end(); ++i) {
-		MovementData *rec = *i;
+		MovementData *rec = (*i).get();
 		if (foundFlag || (i == begin())) {
 			xChange = rec->xChange;
 			yChange = rec->yChange;
@@ -624,14 +624,14 @@
 		GET_NEXT(actionRec, HotspotActionResource)) {
 
 		HotspotActionData *actionEntry = new HotspotActionData(actionRec);
-		push_back(actionEntry);
+		push_back(HotspotActionList::value_type(actionEntry));
 	}
 }
 
 HotspotActionList *HotspotActionSet::getActions(uint16 recordId) {
 	HotspotActionSet::iterator i;
 	for (i = begin(); i != end(); ++i) {
-		HotspotActionList *list = *i;
+		HotspotActionList *list = (*i).get();
 		if (list->recordId == recordId) return list;
 	}
 
@@ -697,7 +697,7 @@
 		++i;
 	}
 
-	return *i;
+	return (*i).get();
 }
 
 // The following class acts as a container for all the NPC conversations
@@ -705,11 +705,11 @@
 void TalkDataList::saveToStream(WriteStream *stream) {
 	TalkDataList::iterator i;
 	for (i = begin(); i != end(); ++i) {
-		TalkData *rec = *i;
+		TalkData *rec = (*i).get();
 		TalkEntryList::iterator i2;
 
 		for (i2 = rec->entries.begin(); i2 != rec->entries.end(); ++i2) {
-			TalkEntryData *entry = *i2;
+			TalkEntryData *entry = (*i2).get();
 			stream->writeUint16LE(entry->descId);
 		}
 	}
@@ -718,11 +718,11 @@
 void TalkDataList::loadFromStream(ReadStream *stream) {
 	TalkDataList::iterator i;
 	for (i = begin(); i != end(); ++i) {
-		TalkData *rec = *i;
+		TalkData *rec = (*i).get();
 		TalkEntryList::iterator i2;
 
 		for (i2 = rec->entries.begin(); i2 != rec->entries.end(); ++i2) {
-			TalkEntryData *entry = *i2;
+			TalkEntryData *entry = (*i2).get();
 			entry->descId = stream->readUint16LE();
 		}
 	}
@@ -780,7 +780,7 @@
 	debugC(ERROR_DETAILED, kLureDebugScripts, "Delay List add sequence=%xh delay=%d canClear=%d",
 		seqOffset, delay, (int)canClear);
 	SequenceDelayData *entry = new SequenceDelayData(delay, seqOffset, canClear);
-	push_front(entry);
+	push_front(SequenceDelayList::value_type(entry));
 }
 
 void SequenceDelayList::tick() {
@@ -790,7 +790,7 @@
 	debugC(ERROR_DETAILED, kLureDebugScripts, "Delay List check start at time %d", currTime);
 
 	for (i = begin(); i != end(); i++) {
-		SequenceDelayData *entry = *i;
+		SequenceDelayData *entry = (*i).get();
 		debugC(ERROR_DETAILED, kLureDebugScripts, "Delay List check %xh at time %d", entry->sequenceOffset, entry->timeoutCtr);
 
 		if (currTime >= entry->timeoutCtr) {
@@ -807,7 +807,7 @@
 	SequenceDelayList::iterator i = begin();
 
 	while (i != end()) {
-		SequenceDelayData *entry = *i;
+		SequenceDelayData *entry = (*i).get();
 		if (entry->canClear || forceClear)
 			i = erase(i);
 		else
@@ -820,7 +820,7 @@
 	SequenceDelayList::iterator i;
 
 	for (i = begin(); i != end(); ++i) {
-		SequenceDelayData *entry = *i;
+		SequenceDelayData *entry = (*i).get();
 		stream->writeUint16LE(entry->sequenceOffset);
 		stream->writeUint32LE((currTime > entry->timeoutCtr ) ? 0 :
 			entry->timeoutCtr - currTime);
@@ -838,7 +838,7 @@
 	while ((seqOffset = stream->readUint16LE()) != 0) {
 		uint32 delay = currTime + stream->readUint32LE();
 		bool canClear = stream->readByte() != 0;
-		push_back(SequenceDelayData::load(delay, seqOffset, canClear));
+		push_back(SequenceDelayList::value_type(SequenceDelayData::load(delay, seqOffset, canClear)));
 	}
 }
 
@@ -913,9 +913,9 @@
 	if (_parent) {
 		CharacterScheduleSet::iterator i;
 		for (i = _parent->begin(); i != _parent->end(); ++i) {
-			if (*i == this) {
+			if ((*i).get() == this) {
 				++i;
-				CharacterScheduleEntry *result = (i == _parent->end()) ? NULL : *i;
+				CharacterScheduleEntry *result = (i == _parent->end()) ? NULL : (*i).get();
 				return result;
 			}
 		}
@@ -933,7 +933,7 @@
 
 	while (rec->action != 0) {
 		CharacterScheduleEntry *r = new CharacterScheduleEntry(this, rec);
-		push_back(r);
+		push_back(CharacterScheduleSet::value_type(r));
 	}
 
 	_id = setId;
@@ -962,7 +962,7 @@
 
 		if (i == end())
 			error("Invalid index %d specified for support data set", id >> 8);
-		currentSet = *i;
+		currentSet = (*i).get();
 	}
 
 	// Get the indexed instruction in the specified set
@@ -975,7 +975,7 @@
 	if (i == currentSet->end())
 		error("Invalid index %d specified within support data set", id & 0x3ff);
 
-	return *i;
+	return (*i).get();
 }
 
 uint16 CharacterScheduleSet::getId(CharacterScheduleEntry *rec) {
@@ -985,7 +985,7 @@
 
 	iterator i;
 	for (i = begin(); i != end(); ++i, ++result)
-		if (*i == rec) break;
+		if ((*i).get() == rec) break;
 	if (i == end())
 		error("Parent child relationship missing in character schedule set");
 	return result;
@@ -1015,7 +1015,7 @@
 RandomActionSet *RandomActionList::getRoom(uint16 roomNumber) {
 	iterator i;
 	for (i = begin(); i != end(); ++i) {
-		RandomActionSet *v = *i;
+		RandomActionSet *v = (*i).get();
 		if (v->roomNumber() == roomNumber)
 			return v;
 	}
@@ -1058,7 +1058,7 @@
 uint16 RoomExitIndexedHotspotList::getHotspot(uint16 roomNumber, uint8 hotspotIndexId) {
 	iterator i;
 	for (i = begin(); i != end(); ++i) {
-		RoomExitIndexedHotspotData *entry = *i;
+		RoomExitIndexedHotspotData *entry = (*i).get();
 		if ((entry->roomNumber == roomNumber) && (entry->hotspotIndex == hotspotIndexId))
 			return entry->hotspotId;
 	}
@@ -1080,7 +1080,7 @@
 void PausedCharacterList::reset(uint16 hotspotId) {
 	iterator i;
 	for (i = begin(); i != end(); ++i) {
-		PausedCharacter *rec = *i;
+		PausedCharacter *rec = (*i).get();
 
 		if (rec->srcCharId == hotspotId) {
 			rec->counter = 1;
@@ -1094,7 +1094,7 @@
 	iterator i = begin();
 
 	while (i != end()) {
-		PausedCharacter *rec = *i;
+		PausedCharacter *rec = (*i).get();
 		--rec->counter;
 
 		// Handle reflecting counter to hotspot
@@ -1115,7 +1115,7 @@
 	if (h.blockedState() != BS_NONE) {
 
 		for (i = begin(); i != end(); ++i) {
-			PausedCharacter *rec = *i;
+			PausedCharacter *rec = (*i).get();
 
 			if (rec->srcCharId == h.hotspotId()) {
 				rec->counter = IDLE_COUNTDOWN_SIZE;
@@ -1145,7 +1145,7 @@
 		// calling character and the impinging list entry
 		bool foundEntry = false;
 		for (i = res.pausedList().begin(); !foundEntry && (i != res.pausedList().end()); ++i) {
-			PausedCharacter *rec = *i;
+			PausedCharacter *rec = (*i).get();
 			foundEntry = (rec->srcCharId == charId) &&
 				(rec->destCharId == hotspot->hotspotId());
 		}
@@ -1161,7 +1161,7 @@
 
 		// Add a new paused character entry
 		PausedCharacter *entry = new PausedCharacter(charId, hotspot->hotspotId());
-		res.pausedList().push_back(entry);
+		res.pausedList().push_back(PausedCharacterList::value_type(entry));
 		charHotspot->setBlockedState(BS_INITIAL);
 
 		if (hotspot->hotspotId() < START_EXIT_ID) {
@@ -1444,7 +1444,7 @@
 }
 
 void CurrentActionStack::list(char *buffer) {
-	ManagedList<CurrentActionEntry *>::iterator i;
+	ActionsList::iterator i;
 
 	if (buffer) {
 		sprintf(buffer, "CurrentActionStack::list num_actions=%d\n", size());
@@ -1454,7 +1454,7 @@
 		printf("CurrentActionStack::list num_actions=%d\n", size());
 
 	for (i = _actions.begin(); i != _actions.end(); ++i) {
-		CurrentActionEntry *entry = *i;
+		CurrentActionEntry *entry = (*i).get();
 		if (buffer) {
 			sprintf(buffer, "style=%d room#=%d", entry->action(), entry->roomNumber());
 			buffer += strlen(buffer);
@@ -1508,7 +1508,7 @@
 }
 
 void CurrentActionStack::saveToStream(WriteStream *stream) {
-	ManagedList<CurrentActionEntry *>::iterator i;
+	ActionsList::iterator i;
 
 	debugC(ERROR_DETAILED, kLureDebugAnimations, "Saving hotspot action stack");
 	char buffer[MAX_DESC_SIZE];
@@ -1516,7 +1516,7 @@
 	debugC(ERROR_DETAILED, kLureDebugAnimations, "%s", buffer);
 
 	for (i = _actions.begin(); i != _actions.end(); ++i) {
-		CurrentActionEntry *rec = *i;
+		CurrentActionEntry *rec = (*i).get();
 		rec->saveToStream(stream);
 	}
 	stream->writeByte(0xff);      // End of list marker
@@ -1528,15 +1528,15 @@
 
 	_actions.clear();
 	while ((rec = CurrentActionEntry::loadFromStream(stream)) != NULL)
-		_actions.push_back(rec);
+		_actions.push_back(ActionsList::value_type(rec));
 }
 
 void CurrentActionStack::copyFrom(CurrentActionStack &stack) {
-	ManagedList<CurrentActionEntry *>::iterator i;
+	ActionsList::iterator i;
 
 	for (i = stack._actions.begin(); i != stack._actions.end(); ++i) {
-		CurrentActionEntry *rec = *i;
-		_actions.push_back(new CurrentActionEntry(rec));
+		CurrentActionEntry *rec = (*i).get();
+		_actions.push_back(ActionsList::value_type(new CurrentActionEntry(rec)));
 	}
 }
 

Modified: scummvm/trunk/engines/lure/res_struct.h
===================================================================
--- scummvm/trunk/engines/lure/res_struct.h	2008-04-06 11:12:42 UTC (rev 31419)
+++ scummvm/trunk/engines/lure/res_struct.h	2008-04-06 12:00:37 UTC (rev 31420)
@@ -29,6 +29,7 @@
 #include "lure/luredefs.h"
 #include "common/list.h"
 #include "common/file.h"
+#include "common/ptr.h"
 
 namespace Lure {
 
@@ -249,53 +250,6 @@
 
 #include "common/pack-end.h"	// END STRUCT PACKING
 
-/**
- * Class template for a derived list that destroys the contained
- * object when the record containing it is destroyed. It's not
- * perfect, since the underlying list doesn't have virtual
- * methods, but it's sufficient for my usage.
- */
-template <class T>
-class ManagedList: public Common::List<T> {
-	typedef typename Common::List<T> Common_List;
-public:
-	~ManagedList() {
-		clear();
-	}
-
-	void clear() {
-		typename Common_List::iterator i = Common_List::begin();
-		while (i != Common_List::end()) {
-			T v = *i;
-			i = Common_List::erase(i);
-			delete v;
-		}
-	}
-
-	typename Common_List::iterator erase(typename Common_List::iterator pos) {
-		T obj = *pos;
-		typename Common_List::iterator result = Common_List::erase(pos);
-		delete obj;
-		return result;
-	}
-
-	typename Common_List::iterator erase(typename Common_List::iterator first,
-			typename Common_List::iterator last) {
-
-		while (first != last)
-			erase(first++);
-
-		return last;
-	}
-
-	T operator[](int index) {
-		typename Common_List::iterator i = Common_List::begin();
-		while (index-- > 0)
-			++i;
-		return *i;
-	}
-};
-
 /** Enumeration used for direction facings */
 enum Direction {UP, DOWN, LEFT, RIGHT, NO_DIRECTION};
 
@@ -312,7 +266,7 @@
 	uint16 destRoomNumber;
 };
 
-typedef ManagedList<RoomExitHotspotData *> RoomExitHotspotList;
+typedef Common::List<Common::SharedPtr<RoomExitHotspotData> > RoomExitHotspotList;
 
 class RoomExitData {
 public:
@@ -326,7 +280,7 @@
 	uint16 x, y;
 };
 
-class RoomExitList: public ManagedList<RoomExitData *> {
+class RoomExitList: public Common::List<Common::SharedPtr<RoomExitData> > {
 public:
 	RoomExitData *checkExits(int16 xp, int16 yp);
 };
@@ -381,7 +335,7 @@
 	RoomPathsData paths;
 };
 
-class RoomDataList: public ManagedList<RoomData *> {
+class RoomDataList: public Common::List<Common::SharedPtr<RoomData> > {
 public:
 	void saveToStream(WriteStream *stream);
 	void loadFromStream(ReadStream *stream);
@@ -404,7 +358,7 @@
 	byte blocked;
 };
 
-class RoomExitJoinList: public ManagedList<RoomExitJoinData *> {
+class RoomExitJoinList: public Common::List<Common::SharedPtr<RoomExitJoinData> > {
 public:
 	void saveToStream(WriteStream *stream);
 	void loadFromStream(ReadStream *stream);
@@ -418,7 +372,7 @@
 	uint16 sequenceOffset;
 };
 
-class HotspotActionList: public ManagedList<HotspotActionData *> {
+class HotspotActionList: public Common::List<Common::SharedPtr<HotspotActionData> > {
 public:
 	uint16 recordId;
 
@@ -426,7 +380,7 @@
 	uint16 getActionOffset(Action action);
 };
 
-class HotspotActionSet: public ManagedList<HotspotActionList *> {
+class HotspotActionSet: public Common::List<Common::SharedPtr<HotspotActionList> > {
 public:
 	HotspotActionList *getActions(uint16 recordId);
 };
@@ -503,7 +457,8 @@
 
 class CurrentActionStack {
 private:
-	ManagedList<CurrentActionEntry *> _actions;
+	typedef Common::List<Common::SharedPtr<CurrentActionEntry> > ActionsList;
+	ActionsList _actions;
 	void validateStack() {
 		if (_actions.size() > 20)
 			error("NPC character got an excessive number of pending actions");
@@ -521,27 +476,27 @@
 	void list() { list(NULL); }
 
 	void addBack(CurrentAction newAction, uint16 roomNum) {
-		_actions.push_back(new CurrentActionEntry(newAction, roomNum));
+		_actions.push_back(ActionsList::value_type(new CurrentActionEntry(newAction, roomNum)));
 		validateStack();
 	}
 	void addBack(CurrentAction newAction, CharacterScheduleEntry *rec, uint16 roomNum) {
-		_actions.push_back(new CurrentActionEntry(newAction, rec, roomNum));
+		_actions.push_back(ActionsList::value_type(new CurrentActionEntry(newAction, rec, roomNum)));
 		validateStack();
 	}
 	void addBack(Action newAction, uint16 roomNum, uint16 param1, uint16 param2) {
-		_actions.push_back(new CurrentActionEntry(newAction, roomNum, param1, param2));
+		_actions.push_back(ActionsList::value_type(new CurrentActionEntry(newAction, roomNum, param1, param2)));
 		validateStack();
 	}
 	void addFront(CurrentAction newAction, uint16 roomNum) {
-		_actions.push_front(new CurrentActionEntry(newAction, roomNum));
+		_actions.push_front(ActionsList::value_type(new CurrentActionEntry(newAction, roomNum)));
 		validateStack();
 	}
 	void addFront(CurrentAction newAction, CharacterScheduleEntry *rec, uint16 roomNum) {
-		_actions.push_front(new CurrentActionEntry(newAction, rec, roomNum));
+		_actions.push_front(ActionsList::value_type(new CurrentActionEntry(newAction, rec, roomNum)));
 		validateStack();
 	}
 	void addFront(Action newAction, uint16 roomNum, uint16 param1, uint16 param2) {
-		_actions.push_front(new CurrentActionEntry(newAction, roomNum, param1, param2));
+		_actions.push_front(ActionsList::value_type(new CurrentActionEntry(newAction, roomNum, param1, param2)));
 		validateStack();
 	}
 
@@ -612,7 +567,7 @@
 	void loadFromStream(ReadStream *stream);
 };
 
-class HotspotDataList: public ManagedList<HotspotData *> {
+class HotspotDataList: public Common::List<Common::SharedPtr<HotspotData> > {
 public:
 	void saveToStream(WriteStream *stream);
 	void loadFromStream(ReadStream *stream);
@@ -626,7 +581,7 @@
 	int16 xs, xe, ys, ye;
 };
 
-typedef ManagedList<HotspotOverrideData *> HotspotOverrideList;
+typedef Common::List<Common::SharedPtr<HotspotOverrideData> > HotspotOverrideList;
 
 class MovementData {
 public:
@@ -637,7 +592,7 @@
 	int16 yChange;
 };
 
-class MovementDataList: public ManagedList<MovementData *> {
+class MovementDataList: public Common::List<Common::SharedPtr<MovementData> > {
 public:
 	bool getFrame(uint16 currentFrame, int16 &xChange, int16 &yChange,
 		uint16 &nextFrame);
@@ -659,7 +614,7 @@
 	MovementDataList upFrames, downFrames;
 };
 
-typedef ManagedList<HotspotAnimData *> HotspotAnimList;
+typedef Common::List<Common::SharedPtr<HotspotAnimData> > HotspotAnimList;
 
 // Talk header list
 
@@ -675,7 +630,7 @@
 	uint16 getEntry(int index);
 };
 
-typedef ManagedList<TalkHeaderData *> TalkHeaderList;
+typedef Common::List<Common::SharedPtr<TalkHeaderData> > TalkHeaderList;
 
 class TalkEntryData {
 public:
@@ -686,7 +641,7 @@
 	uint16 postSequenceId;
 };
 
-typedef ManagedList<TalkEntryData *> TalkEntryList;
+typedef Common::List<Common::SharedPtr<TalkEntryData> > TalkEntryList;
 
 class TalkData {
 public:
@@ -700,7 +655,7 @@
 	TalkEntryData *getResponse(int index);
 };
 
-class TalkDataList: public ManagedList<TalkData *> {
+class TalkDataList: public Common::List<Common::SharedPtr<TalkData> > {
 public:
 	void saveToStream(WriteStream *stream);
 	void loadFromStream(ReadStream *stream);
@@ -722,7 +677,7 @@
 	RoomExitCoordinateData &getData(uint16 destRoomNumber);
 };
 
-class RoomExitCoordinatesList: public ManagedList<RoomExitCoordinates *> {
+class RoomExitCoordinatesList: public Common::List<Common::SharedPtr<RoomExitCoordinates> > {
 public:
 	RoomExitCoordinates &getEntry(uint16 roomNumber);
 };
@@ -736,7 +691,7 @@
 	uint16 hotspotId;
 };
 
-class RoomExitIndexedHotspotList: public ManagedList<RoomExitIndexedHotspotData *> {
+class RoomExitIndexedHotspotList: public Common::List<Common::SharedPtr<RoomExitIndexedHotspotData> > {
 public:
 	uint16 getHotspot(uint16 roomNumber, uint8 hotspotIndexId);
 };
@@ -755,7 +710,7 @@
 	bool canClear;
 };
 
-class SequenceDelayList: public ManagedList<SequenceDelayData *> {
+class SequenceDelayList: public Common::List<Common::SharedPtr<SequenceDelayData> > {
 public:
 	void add(uint16 delay, uint16 seqOffset, bool canClear);
 	void tick();
@@ -769,7 +724,7 @@
 
 extern const int actionNumParams[NPC_JUMP_ADDRESS+1];
 
-class CharacterScheduleSet: public ManagedList<CharacterScheduleEntry *> {
+class CharacterScheduleSet: public Common::List<Common::SharedPtr<CharacterScheduleEntry> > {
 private:
 	uint16 _id;
 public:
@@ -778,7 +733,7 @@
 	uint16 id() { return _id; }
 };
 
-class CharacterScheduleList: public ManagedList<CharacterScheduleSet *> {
+class CharacterScheduleList: public Common::List<Common::SharedPtr<CharacterScheduleSet> > {
 public:
 	CharacterScheduleEntry *getEntry(uint16 id, CharacterScheduleSet *currentSet = NULL);
 };
@@ -815,7 +770,7 @@
 	void loadFromStream(Common::ReadStream *stream);
 };
 
-class RandomActionList: public ManagedList<RandomActionSet *> {
+class RandomActionList: public Common::List<Common::SharedPtr<RandomActionSet> > {
 public:
 	RandomActionSet *getRoom(uint16 roomNumber);
 	void saveToStream(Common::WriteStream *stream);
@@ -834,7 +789,7 @@
 
 class Hotspot;
 
-class PausedCharacterList: public ManagedList<PausedCharacter *> {
+class PausedCharacterList: public Common::List<Common::SharedPtr<PausedCharacter> > {
 public:
 	void reset(uint16 hotspotId);
 	void countdown();

Modified: scummvm/trunk/engines/lure/room.cpp
===================================================================
--- scummvm/trunk/engines/lure/room.cpp	2008-04-06 11:12:42 UTC (rev 31419)
+++ scummvm/trunk/engines/lure/room.cpp	2008-04-06 12:00:37 UTC (rev 31420)
@@ -138,7 +138,7 @@
 	HotspotList &list = r.activeHotspots();
 	HotspotList::iterator i = list.begin();
 	while (i != list.end()) {
-		Hotspot *h = i.operator*();
+		Hotspot *h = (i.operator*()).get();
 		if (!h->persistant()) {
 			i = list.erase(i);
 		} else {
@@ -153,7 +153,7 @@
 
 	HotspotDataList::iterator i;
 	for (i = list.begin(); i != list.end(); ++i) {
-		HotspotData *rec = *i;
+		HotspotData *rec = (*i).get();
 
 		if ((rec->hotspotId < 0x7530) && (rec->roomNumber == _roomNumber) &&
 			(rec->layer != 0))
@@ -178,7 +178,7 @@
 	// Loop for each range of hotspot Ids
 	for (int ctr = 0; ctr < 4; ++ctr) {
 		for (i = list.begin(); i != list.end(); ++i) {
-			entry = *i;
+			entry = (*i).get();
 			if ((entry->hotspotId < rangeStart[ctr]) || (entry->hotspotId > rangeEnd[ctr]))
 				// Hotspot outside range, so skip it
 				continue;
@@ -252,7 +252,7 @@
 
 	RoomExitHotspotList::iterator i;
 	for (i = exits.begin(); i != exits.end(); ++i) {
-		RoomExitHotspotData *rec = *i;
+		RoomExitHotspotData *rec = (*i).get();
 		skipFlag = false;
 
 		if (rec->hotspotId != 0) {
@@ -449,7 +449,7 @@
 	List<Hotspot *> tempList;
 	List<Hotspot *>::iterator iTemp;
 	for (i = hotspots.begin(); i != hotspots.end(); ++i) {
-		Hotspot *h = i.operator*();
+		Hotspot *h = (i.operator*()).get();
 		if ((h->layer() != 1) || (h->roomNumber() != _roomNumber) ||
 			h->skipFlag() || !h->isActiveAnimation())
 			continue;

Modified: scummvm/trunk/engines/lure/surface.cpp
===================================================================
--- scummvm/trunk/engines/lure/surface.cpp	2008-04-06 11:12:42 UTC (rev 31419)
+++ scummvm/trunk/engines/lure/surface.cpp	2008-04-06 12:00:37 UTC (rev 31420)
@@ -1288,7 +1288,7 @@
 			h->setColourOffset(ptr->startColour);
 			h->setAnimation(ptr->animId);
 
-			_hotspots.push_back(h);
+			_hotspots.push_back(HotspotsList::value_type(h));
 		}
 
 		++ptr;
@@ -1309,9 +1309,30 @@
 		s->copyTo(&screen.screen(), 0, MENUBAR_Y_SIZE);
 		delete s;
 
+		// Get needed hotspots
+		HotspotsList::iterator hotspot0 = _hotspots.begin();
+		HotspotsList::iterator hotspot1 = _hotspots.begin();
+		for (int i = 0; i < 1; i++)
+			++hotspot1;
+		HotspotsList::iterator hotspot2 = _hotspots.begin();
+		for (int i = 0; i < 2; i++)
+			++hotspot2;
+		HotspotsList::iterator hotspot3 = _hotspots.begin();
+		for (int i = 0; i < 3; i++)
+			++hotspot3;
+		HotspotsList::iterator hotspot4 = _hotspots.begin();
+		for (int i = 0; i < 4; i++)
+			++hotspot4;
+		HotspotsList::iterator hotspot5 = _hotspots.begin();
+		for (int i = 0; i < 5; i++)
+			++hotspot5;
+		HotspotsList::iterator hotspot6 = _hotspots.begin();
+		for (int i = 0; i < 6; i++)
+			++hotspot6;
+
 		// Add wording header and display screen
-		_hotspots[2]->setFrameNumber(1);
-		_hotspots[2]->copyTo(&screen.screen());
+		(hotspot2->get())->setFrameNumber(1);
+		(hotspot2->get())->copyTo(&screen.screen());
 		screen.update();
 		screen.setPalette(&p);
 
@@ -1321,8 +1342,8 @@
 		} while (!events.interruptableDelay(100));
 
 		// Change title text to selection
-		_hotspots[2]->setFrameNumber(0);
-		_hotspots[2]->copyTo(&screen.screen());
+		(hotspot2->get())->setFrameNumber(0);
+		(hotspot2->get())->copyTo(&screen.screen());
 		screen.update();
 
 		// Clear any prior try
@@ -1334,15 +1355,21 @@
 					if ((events.event().kbd.keycode == Common::KEYCODE_BACKSPACE) && (_charIndex > 0)) {
 						// Remove the last number typed
 						--_charIndex;
-						_hotspots[_charIndex + 3]->setFrameNumber(10);   // Blank space
-						_hotspots[_charIndex + 3]->copyTo(&screen.screen());
+						HotspotsList::iterator tmpHotspot = _hotspots.begin();
+						for (int i = 0; i < _charIndex + 3; i++)
+							++tmpHotspot;
+						(tmpHotspot->get())->setFrameNumber(10);   // Blank space
+						(tmpHotspot->get())->copyTo(&screen.screen());
 
 						screen.update();
 					} else if ((events.event().kbd.keycode >= Common::KEYCODE_0) &&
 								(events.event().kbd.keycode <= Common::KEYCODE_9)) {
+						HotspotsList::iterator tmpHotspot = _hotspots.begin();
+						for (int i = 0; i < _charIndex + 3; i++)
+							++tmpHotspot;
 						// Number pressed
-						_hotspots[_charIndex + 3]->setFrameNumber(events.event().kbd.ascii - '0');
-						_hotspots[_charIndex + 3]->copyTo(&screen.screen());
+						(tmpHotspot->get())->setFrameNumber(events.event().kbd.ascii - '0');
+						(tmpHotspot->get())->copyTo(&screen.screen());
 
 						++_charIndex;
 					}
@@ -1360,11 +1387,11 @@
 			return false;
 
 		// At this point, two page numbers have been entered - validate them
-		int page1 = (_hotspots[3]->frameNumber() * 10) + _hotspots[4]->frameNumber();
-		int page2 = (_hotspots[5]->frameNumber() * 10) + _hotspots[6]->frameNumber();
+		int page1 = ((hotspot3->get())->frameNumber() * 10) + (hotspot4->get())->frameNumber();
+		int page2 = ((hotspot5->get())->frameNumber() * 10) + (hotspot6->get())->frameNumber();
 
-		if ((page1 == pageNumbers[_hotspots[0]->frameNumber()]) &&
-			(page2 == pageNumbers[_hotspots[1]->frameNumber()]))
+		if ((page1 == pageNumbers[(hotspot0->get())->frameNumber()]) &&
+			(page2 == pageNumbers[(hotspot1->get())->frameNumber()]))
 			return true;
 	}
 
@@ -1377,10 +1404,12 @@
 	int char1 = _rnd.getRandomNumber(19);
 	int char2 = _rnd.getRandomNumber(19);
 
-	_hotspots[0]->setFrameNumber(char1);
-	_hotspots[0]->copyTo(&screen.screen());
-	_hotspots[1]->setFrameNumber(char2);
-	_hotspots[1]->copyTo(&screen.screen());
+	HotspotsList::iterator curHotspot = _hotspots.begin();
+	(curHotspot->get())->setFrameNumber(char1);
+	(curHotspot->get())->copyTo(&screen.screen());
+	++curHotspot;
+	(curHotspot->get())->setFrameNumber(char2);
+	(curHotspot->get())->copyTo(&screen.screen());
 
 	screen.update();
 }

Modified: scummvm/trunk/engines/lure/surface.h
===================================================================
--- scummvm/trunk/engines/lure/surface.h	2008-04-06 11:12:42 UTC (rev 31419)
+++ scummvm/trunk/engines/lure/surface.h	2008-04-06 12:00:37 UTC (rev 31420)
@@ -28,6 +28,7 @@
 
 
 #include "common/str.h"
+#include "common/ptr.h"
 #include "lure/disk.h"
 #include "lure/luredefs.h"
 
@@ -140,7 +141,8 @@
 class CopyProtectionDialog {
 private:
 	Common::RandomSource _rnd;
-	ManagedList<Hotspot *> _hotspots;
+	typedef Common::List<Common::SharedPtr<Hotspot> > HotspotsList;
+	HotspotsList _hotspots;
 	int _charIndex;
 
 	void chooseCharacters();


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