diff options
Diffstat (limited to 'engines/pegasus')
-rwxr-xr-x | engines/pegasus/Game_Shell/CItem.cpp | 4 | ||||
-rwxr-xr-x | engines/pegasus/Game_Shell/CItemList.cpp | 79 | ||||
-rwxr-xr-x | engines/pegasus/Game_Shell/CItemList.h | 60 | ||||
-rw-r--r-- | engines/pegasus/module.mk | 1 |
4 files changed, 142 insertions, 2 deletions
diff --git a/engines/pegasus/Game_Shell/CItem.cpp b/engines/pegasus/Game_Shell/CItem.cpp index 0816e595da..90a7a04b19 100755 --- a/engines/pegasus/Game_Shell/CItem.cpp +++ b/engines/pegasus/Game_Shell/CItem.cpp @@ -27,6 +27,7 @@ #include "common/stream.h" #include "pegasus/Game_Shell/CItem.h" +#include "pegasus/Game_Shell/CItemList.h" #include "pegasus/Game_Shell/Headers/Game_Shell_Constants.h" namespace Pegasus { @@ -39,8 +40,7 @@ CItem::CItem(const tItemID id, const tNeighborhoodID neighborhood, const tRoomID fItemOwnerID = kNoActorID; fItemState = 0; - // TODO: This line would append this item to the list of all items - //gAllItems.Append(this); + gAllItems.push_back(this); } CItem::~CItem() { diff --git a/engines/pegasus/Game_Shell/CItemList.cpp b/engines/pegasus/Game_Shell/CItemList.cpp new file mode 100755 index 0000000000..eb7cf9a393 --- /dev/null +++ b/engines/pegasus/Game_Shell/CItemList.cpp @@ -0,0 +1,79 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * Additional copyright for this file: + * Copyright (C) 1995-1997 Presto Studios + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "common/error.h" +#include "common/stream.h" + +#include "engines/pegasus/Game_Shell/CItem.h" +#include "engines/pegasus/Game_Shell/CItemList.h" + +namespace Pegasus { + +// TODO: Don't use global construction! +CItemList gAllItems; + +CItemList::CItemList() { +} + +CItemList::~CItemList() { +} + +Common::Error CItemList::WriteToStream(Common::WriteStream *stream) { + stream->writeUint32BE(size()); + + for (CItemIterator it = begin(); it != end(); it++) { + stream->writeUint16BE((*it)->GetObjectID()); + (*it)->WriteToStream(stream); + } + + if (stream->err()) + return Common::kWritingFailed; + + return Common::kNoError; +} + +Common::Error CItemList::ReadFromStream(Common::ReadStream *stream) { + uint32 itemCount = stream->readUint32BE(); + + for (uint32 i = 0; i < itemCount; i++) { + tItemID itemID = stream->readUint16BE(); + gAllItems.FindItemByID(itemID)->ReadFromStream(stream); + } + + if (stream->err()) + return Common::kReadingFailed; + + return Common::kNoError; +} + +CItem *CItemList::FindItemByID(const tItemID id) { + for (CItemIterator it = begin(); it != end(); it++) + if ((*it)->GetObjectID() == id) + return *it; + + return 0; +} + +} // End of namespace Pegasus diff --git a/engines/pegasus/Game_Shell/CItemList.h b/engines/pegasus/Game_Shell/CItemList.h new file mode 100755 index 0000000000..e2caa09bbc --- /dev/null +++ b/engines/pegasus/Game_Shell/CItemList.h @@ -0,0 +1,60 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * Additional copyright for this file: + * Copyright (C) 1995-1997 Presto Studios + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef PEGASUS_GAMESHELL_CITEMLIST_H +#define PEGASUS_GAMESHELL_CITEMLIST_H + +#include "common/list.h" + +#include "pegasus/Game_Shell/Headers/Game_Shell_Types.h" + +namespace Common { + class ReadStream; + class WriteStream; +} + +namespace Pegasus { + +class CItem; + +class CItemList : public Common::List<CItem *> { +public: + CItemList(); + virtual ~CItemList(); + + virtual Common::Error WriteToStream(Common::WriteStream *stream); + virtual Common::Error ReadFromStream(Common::ReadStream *stream); + + CItem *FindItemByID(const tItemID id); +}; + +typedef CItemList::iterator CItemIterator; + +// TODO: Don't use global construction! +extern CItemList gAllItems; + +} // End of namespace Pegasus + +#endif diff --git a/engines/pegasus/module.mk b/engines/pegasus/module.mk index 2c07c385ad..ff49b1fa53 100644 --- a/engines/pegasus/module.mk +++ b/engines/pegasus/module.mk @@ -10,6 +10,7 @@ MODULE_OBJS = \ pegasus.o \ video.o \ Game_Shell/CItem.o \ + Game_Shell/CItemList.o \ MMShell/Base_Classes/MMFunctionPtr.o \ MMShell/Sounds/MMSound.o \ MMShell/Utilities/MMResourceFile.o \ |