diff options
Diffstat (limited to 'engines/pegasus/items')
-rwxr-xr-x | engines/pegasus/items/inventory.cpp | 175 | ||||
-rwxr-xr-x | engines/pegasus/items/inventory.h | 80 | ||||
-rwxr-xr-x | engines/pegasus/items/item.cpp | 111 | ||||
-rwxr-xr-x | engines/pegasus/items/item.h | 255 | ||||
-rwxr-xr-x | engines/pegasus/items/itemlist.cpp | 79 | ||||
-rwxr-xr-x | engines/pegasus/items/itemlist.h | 60 |
6 files changed, 760 insertions, 0 deletions
diff --git a/engines/pegasus/items/inventory.cpp b/engines/pegasus/items/inventory.cpp new file mode 100755 index 0000000000..8f7eb46fd4 --- /dev/null +++ b/engines/pegasus/items/inventory.cpp @@ -0,0 +1,175 @@ +/* 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, Inc. + * + * 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 "pegasus/constants.h" +#include "pegasus/items/item.h" +#include "pegasus/items/inventory.h" + +namespace Pegasus { + +Inventory::Inventory() { + _weightLimit = 100; + _ownerID = kNoActorID; + _referenceCount = 0; +} + +Inventory::~Inventory() { +} + +void Inventory::setWeightLimit(tWeightType limit) { + _weightLimit = limit; + // *** What to do if the new weight limit is greater than the current weight? +} + +tWeightType Inventory::getWeight() { + tWeightType result = 0; + + for (ItemIterator it = _inventoryList.begin(); it != _inventoryList.end(); it++) + result += (*it)->getItemWeight(); + + return result; +} + +// If the item already belongs, just return kInventoryOK. +tInventoryResult Inventory::addItem(Item *item) { + if (itemInInventory(item)) + return kInventoryOK; + + if (getWeight() + item->getItemWeight() > _weightLimit) + return kTooMuchWeight; + + _inventoryList.push_back(item); + item->setItemOwner(_ownerID); + + ++_referenceCount; + return kInventoryOK; +} + +tInventoryResult Inventory::removeItem(Item *item) { + for (ItemIterator it = _inventoryList.begin(); it != _inventoryList.end(); it++) { + if (*it == item) { + _inventoryList.erase(it); + item->setItemOwner(kNoActorID); + + ++_referenceCount; + return kInventoryOK; + } + } + + return kItemNotInInventory; +} + +tInventoryResult Inventory::removeItem(tItemID id) { + Item *item = findItemByID(id); + + if (item) { + _inventoryList.remove(item); + item->setItemOwner(kNoActorID); + + ++_referenceCount; + return kInventoryOK; + } + + return kItemNotInInventory; +} + +void Inventory::removeAllItems() { + _inventoryList.clear(); + ++_referenceCount; +} + +bool Inventory::itemInInventory(Item *item) { + for (ItemIterator it = _inventoryList.begin(); it != _inventoryList.end(); it++) + if (*it == item) + return true; + + return false; +} + +bool Inventory::itemInInventory(tItemID id) { + return findItemByID(id) != NULL; +} + +Item *Inventory::getItemAt(int32 index) { + int32 i = 0; + for (ItemIterator it = _inventoryList.begin(); it != _inventoryList.end(); it++, i++) + if (i == index) + return *it; + + return 0; +} + +tItemID Inventory::getItemIDAt(int32 index) { + Item *item = getItemAt(index); + + if (item) + return item->getObjectID(); + + return kNoItemID; +} + +Item *Inventory::findItemByID(tItemID id) { + return _inventoryList.findItemByID(id); +} + +// Return -1 if not found. + +int32 Inventory::findIndexOf(Item *item) { + uint32 i = 0; + for (ItemIterator it = _inventoryList.begin(); it != _inventoryList.end(); it++, i++) + if (*it == item) + return i; + + return -1; +} + +// Return -1 if not found. + +int32 Inventory::findIndexOf(tItemID id) { + uint32 i = 0; + for (ItemIterator it = _inventoryList.begin(); it != _inventoryList.end(); it++, i++) + if ((*it)->getObjectID() == id) + return i; + + return -1; +} + +tWeightType Inventory::getWeightLimit() { + return _weightLimit; +} + +int32 Inventory::getNumItems() { + return _inventoryList.size(); +} + +void Inventory::setOwnerID(const tActorID id) { + _ownerID = id; +} + +tActorID Inventory::getOwnerID() const { + return _ownerID; +} + +} // End of namespae Pegasus diff --git a/engines/pegasus/items/inventory.h b/engines/pegasus/items/inventory.h new file mode 100755 index 0000000000..7da782f00e --- /dev/null +++ b/engines/pegasus/items/inventory.h @@ -0,0 +1,80 @@ +/* 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, Inc. + * + * 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_ITEMS_INVENTORY_H +#define PEGASUS_ITEMS_INVENTORY_H + +#include "pegasus/types.h" +#include "pegasus/items/itemlist.h" + +namespace Pegasus { + +class Item; + +// Inventories have a "current item". This item is the default item the player can +// use. In a text adventure system, the current item would be "it", as in +// "Hit the troll with it," where "it" would refer to some weapon which is the current +// item. In a graphic adventure, the current item would be the item the user selects +// to use with the mouse or other pointing device. + +class Inventory { +public: + Inventory(); + virtual ~Inventory(); + + tWeightType getWeightLimit(); + void setWeightLimit(tWeightType limit); + tWeightType getWeight(); + + virtual tInventoryResult addItem(Item *item); + virtual tInventoryResult removeItem(Item *item); + virtual tInventoryResult removeItem(tItemID id); + virtual bool itemInInventory(Item *item); + virtual bool itemInInventory(tItemID id); + virtual Item *getItemAt(int32 index); + virtual tItemID getItemIDAt(int32 index); + virtual Item *findItemByID(tItemID id); + virtual int32 findIndexOf(Item *item); + virtual int32 findIndexOf(tItemID id); + int32 getNumItems(); + virtual void removeAllItems(); + + void setOwnerID(const tActorID id); + tActorID getOwnerID() const; + + uint32 getReferenceCount() { return _referenceCount; } + +protected: + tWeightType _weightLimit; + tActorID _ownerID; + ItemList _inventoryList; + +private: + uint32 _referenceCount; +}; + +} // End of namespace Pegasus + +#endif diff --git a/engines/pegasus/items/item.cpp b/engines/pegasus/items/item.cpp new file mode 100755 index 0000000000..934dce6f2d --- /dev/null +++ b/engines/pegasus/items/item.cpp @@ -0,0 +1,111 @@ +/* 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, Inc. + * + * 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 "pegasus/constants.h" +#include "pegasus/items/item.h" +#include "pegasus/items/itemlist.h" + +namespace Pegasus { + +Item::Item(const tItemID id, const tNeighborhoodID neighborhood, const tRoomID room, const tDirectionConstant direction) : MMIDObject(id) { + _itemNeighborhood = neighborhood; + _itemRoom = room; + _itemDirection = direction; + _itemWeight = 1; + _itemOwnerID = kNoActorID; + _itemState = 0; + + g_allItems.push_back(this); +} + +Item::~Item() { +} + +Common::Error Item::writeToStream(Common::WriteStream *stream) { + stream->writeUint16BE(_itemNeighborhood); + stream->writeUint16BE(_itemRoom); + stream->writeByte(_itemDirection); + stream->writeUint16BE(_itemOwnerID); + stream->writeUint16BE(_itemState); + + if (stream->err()) + return Common::kWritingFailed; + + return Common::kNoError; +} + +Common::Error Item::readFromStream(Common::ReadStream *stream) { + _itemNeighborhood = stream->readUint16BE(); + _itemRoom = stream->readUint16BE(); + _itemDirection = stream->readByte(); + _itemOwnerID = stream->readUint16BE(); + _itemState = stream->readUint16BE(); + + if (stream->err()) + return Common::kReadingFailed; + + return Common::kNoError; +} + +tActorID Item::getItemOwner() const { + return _itemOwnerID; +} + +void Item::setItemOwner(const tActorID owner) { + _itemOwnerID = owner; +} + +tWeightType Item::getItemWeight() { + return _itemWeight; +} + +tItemState Item::getItemState() const { + return _itemState; +} + +void Item::setItemState(const tItemState state) { + _itemState = state; +} + +void Item::getItemRoom(tNeighborhoodID &neighborhood, tRoomID &room, tDirectionConstant &direction) const { + neighborhood = _itemNeighborhood; + room = _itemRoom; + direction = _itemDirection; +} + +void Item::setItemRoom(const tNeighborhoodID neighborhood, const tRoomID room, const tDirectionConstant direction) { + _itemNeighborhood = neighborhood; + _itemRoom = room; + _itemDirection = direction; +} + +tNeighborhoodID Item::getItemNeighborhood() const { + return _itemNeighborhood; +} + +} // End of namespace Pegasus diff --git a/engines/pegasus/items/item.h b/engines/pegasus/items/item.h new file mode 100755 index 0000000000..37ad54e5e7 --- /dev/null +++ b/engines/pegasus/items/item.h @@ -0,0 +1,255 @@ +/* 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, Inc. + * + * 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_ITEMS_ITEM_H +#define PEGASUS_ITEMS_ITEM_H + +#include "pegasus/MMShell/Utilities/MMIDObject.h" +#include "pegasus/types.h" + +namespace Common { + class Error; + class ReadStream; + class WriteStream; +} + +namespace Pegasus { + +/* + + Item is an object which can be picked up and carried around. + Items have + a location + an ID. + weight + an owner (kNoActorID if no one is carrying the Item) + +*/ + +// Item IDs. + +const tItemID kAirMask = 7; +const tItemID kAntidote = 8; +const tItemID kArgonCanister = 9; +const tItemID kCardBomb = 10; +const tItemID kCrowbar = 11; +const tItemID kGasCanister = 12; +const tItemID kHistoricalLog = 13; +const tItemID kJourneymanKey = 14; +const tItemID kKeyCard = 15; +const tItemID kMachineGun = 16; +const tItemID kMarsCard = 17; +const tItemID kNitrogenCanister = 18; +const tItemID kOrangeJuiceGlassFull = 19; +const tItemID kOrangeJuiceGlassEmpty = 20; +const tItemID kPoisonDart = 21; +const tItemID kSinclairKey = 22; +const tItemID kStunGun = 23; +const tItemID kArgonPickup = 24; + +// Biochips. + +const tItemID kAIBiochip = 0; +const tItemID kInterfaceBiochip = 1; +const tItemID kMapBiochip = 2; +const tItemID kOpticalBiochip = 3; +const tItemID kPegasusBiochip = 4; +const tItemID kRetinalScanBiochip = 5; +const tItemID kShieldBiochip = 6; + +const tItemID kNumItems = 25; + +// Item States. + +const tItemState kAI000 = 0; +const tItemState kAI005 = 1; +const tItemState kAI006 = 2; +const tItemState kAI010 = 3; +const tItemState kAI015 = 4; +const tItemState kAI016 = 5; +const tItemState kAI020 = 6; +const tItemState kAI024 = 7; +const tItemState kAI100 = 8; +const tItemState kAI101 = 9; +const tItemState kAI105 = 10; +const tItemState kAI106 = 11; +const tItemState kAI110 = 12; +const tItemState kAI111 = 13; +const tItemState kAI115 = 14; +const tItemState kAI116 = 15; +const tItemState kAI120 = 16; +const tItemState kAI121 = 17; +const tItemState kAI124 = 18; +const tItemState kAI125 = 19; +const tItemState kAI126 = 20; +const tItemState kAI200 = 21; +const tItemState kAI201 = 22; +const tItemState kAI202 = 23; +const tItemState kAI205 = 24; +const tItemState kAI206 = 25; +const tItemState kAI210 = 26; +const tItemState kAI211 = 27; +const tItemState kAI212 = 28; +const tItemState kAI215 = 29; +const tItemState kAI216 = 30; +const tItemState kAI220 = 31; +const tItemState kAI221 = 32; +const tItemState kAI222 = 33; +const tItemState kAI224 = 34; +const tItemState kAI225 = 35; +const tItemState kAI226 = 36; +const tItemState kAI300 = 37; +const tItemState kAI301 = 38; +const tItemState kAI302 = 39; +const tItemState kAI303 = 40; +const tItemState kAI305 = 41; +const tItemState kAI306 = 42; +const tItemState kAI310 = 43; +const tItemState kAI311 = 44; +const tItemState kAI312 = 45; +const tItemState kAI313 = 46; +const tItemState kAI315 = 47; +const tItemState kAI316 = 48; +const tItemState kAI320 = 49; +const tItemState kAI321 = 50; +const tItemState kAI322 = 51; +const tItemState kAI323 = 52; +const tItemState kAI324 = 53; +const tItemState kAI325 = 54; +const tItemState kAI326 = 55; +const tItemState kNormalItem = 56; +const tItemState kMapUnavailable = 57; +const tItemState kMapEngaged = 58; +const tItemState kOptical000 = 59; +const tItemState kOptical001 = 60; +const tItemState kOptical002 = 61; +const tItemState kOptical010 = 62; +const tItemState kOptical011 = 63; +const tItemState kOptical012 = 64; +const tItemState kOptical020 = 65; +const tItemState kOptical021 = 66; +const tItemState kOptical100 = 67; +const tItemState kOptical101 = 68; +const tItemState kOptical102 = 69; +const tItemState kOptical110 = 70; +const tItemState kOptical111 = 71; +const tItemState kOptical112 = 72; +const tItemState kOptical120 = 73; +const tItemState kOptical121 = 74; +const tItemState kOptical200 = 75; +const tItemState kOptical201 = 76; +const tItemState kOptical210 = 77; +const tItemState kOptical211 = 78; +const tItemState kPegasusTSA00 = 79; +const tItemState kPegasusTSA10 = 80; +const tItemState kPegasusPrehistoric00 = 81; +const tItemState kPegasusPrehistoric01 = 82; +const tItemState kPegasusPrehistoric10 = 83; +const tItemState kPegasusPrehistoric11 = 84; +const tItemState kPegasusMars00 = 85; +const tItemState kPegasusMars01 = 86; +const tItemState kPegasusMars10 = 87; +const tItemState kPegasusMars11 = 88; +const tItemState kPegasusNorad00 = 89; +const tItemState kPegasusNorad01 = 90; +const tItemState kPegasusNorad10 = 91; +const tItemState kPegasusNorad11 = 92; +const tItemState kPegasusWSC00 = 93; +const tItemState kPegasusWSC01 = 94; +const tItemState kPegasusWSC10 = 95; +const tItemState kPegasusWSC11 = 96; +const tItemState kPegasusCaldoria = 97; +const tItemState kRetinalSimulating = 98; +const tItemState kShieldNormal = 99; +const tItemState kShieldRadiation = 100; +const tItemState kShieldPlasma = 101; +const tItemState kShieldCardBomb = 102; +const tItemState kShieldDraining = 103; +const tItemState kAirMaskEmptyOff = 104; +const tItemState kAirMaskEmptyFilter = 105; +const tItemState kAirMaskLowOff = 106; +const tItemState kAirMaskLowFilter = 107; +const tItemState kAirMaskLowOn = 108; +const tItemState kAirMaskFullOff = 109; +const tItemState kAirMaskFullFilter = 110; +const tItemState kAirMaskFullOn = 111; +const tItemState kArgonEmpty = 112; +const tItemState kArgonFull = 113; +const tItemState kFlashlightOff = 114; +const tItemState kFlashlightOn = 115; +const tItemState kNitrogenEmpty = 116; +const tItemState kNitrogenFull = 117; +const tItemState kFullGlass = 118; + +// Extra IDs. + +const uint32 kRetinalScanSearching = 0; +const uint32 kRetinalScanActivated = 1; +const uint32 kShieldIntro = 2; +const uint32 kRemoveAirMask = 3; +const uint32 kRemoveArgon = 4; +const uint32 kRemoveCrowbar = 5; +const uint32 kGasCanLoop = 6; +const uint32 kRemoveJourneymanKey = 7; +const uint32 kRemoveMarsCard = 8; +const uint32 kRemoveNitrogen = 9; +const uint32 kRemoveGlass = 10; +const uint32 kRemoveDart = 11; +const uint32 kRemoveSinclairKey = 12; + +class Item : public MMIDObject { +public: + Item(const tItemID id, const tNeighborhoodID neighborhood, const tRoomID room, const tDirectionConstant direction); + virtual ~Item(); + + // WriteToStream writes everything EXCEPT the item's ID. + // It is assumed that the calling function will write and read the ID. + virtual Common::Error writeToStream(Common::WriteStream *stream); + virtual Common::Error readFromStream(Common::ReadStream *stream); + + virtual tActorID getItemOwner() const; + virtual void setItemOwner(const tActorID owner); + + void getItemRoom(tNeighborhoodID &neighborhood, tRoomID &room, tDirectionConstant &direction) const; + void setItemRoom(const tNeighborhoodID neighborhood, const tRoomID room, const tDirectionConstant direction); + tNeighborhoodID getItemNeighborhood() const; + + virtual tWeightType getItemWeight(); + + virtual void setItemState(const tItemState state); + virtual tItemState getItemState() const; + +protected: + tNeighborhoodID _itemNeighborhood; + tRoomID _itemRoom; + tDirectionConstant _itemDirection; + tActorID _itemOwnerID; + tWeightType _itemWeight; + tItemState _itemState; +}; + +} // End of namespace Pegasus + +#endif diff --git a/engines/pegasus/items/itemlist.cpp b/engines/pegasus/items/itemlist.cpp new file mode 100755 index 0000000000..2b980d6f5f --- /dev/null +++ b/engines/pegasus/items/itemlist.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, Inc. + * + * 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/items/item.h" +#include "engines/pegasus/items/itemlist.h" + +namespace Pegasus { + +// TODO: Don't use global construction! +ItemList g_allItems; + +ItemList::ItemList() { +} + +ItemList::~ItemList() { +} + +Common::Error ItemList::writeToStream(Common::WriteStream *stream) { + stream->writeUint32BE(size()); + + for (ItemIterator it = begin(); it != end(); it++) { + stream->writeUint16BE((*it)->getObjectID()); + (*it)->writeToStream(stream); + } + + if (stream->err()) + return Common::kWritingFailed; + + return Common::kNoError; +} + +Common::Error ItemList::readFromStream(Common::ReadStream *stream) { + uint32 itemCount = stream->readUint32BE(); + + for (uint32 i = 0; i < itemCount; i++) { + tItemID itemID = stream->readUint16BE(); + g_allItems.findItemByID(itemID)->readFromStream(stream); + } + + if (stream->err()) + return Common::kReadingFailed; + + return Common::kNoError; +} + +Item *ItemList::findItemByID(const tItemID id) { + for (ItemIterator it = begin(); it != end(); it++) + if ((*it)->getObjectID() == id) + return *it; + + return 0; +} + +} // End of namespace Pegasus diff --git a/engines/pegasus/items/itemlist.h b/engines/pegasus/items/itemlist.h new file mode 100755 index 0000000000..dd9a4ba023 --- /dev/null +++ b/engines/pegasus/items/itemlist.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, Inc. + * + * 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_ITEMS_ITEMLIST_H +#define PEGASUS_ITEMS_ITEMLIST_H + +#include "common/list.h" + +#include "pegasus/types.h" + +namespace Common { + class ReadStream; + class WriteStream; +} + +namespace Pegasus { + +class Item; + +class ItemList : public Common::List<Item *> { +public: + ItemList(); + virtual ~ItemList(); + + virtual Common::Error writeToStream(Common::WriteStream *stream); + virtual Common::Error readFromStream(Common::ReadStream *stream); + + Item *findItemByID(const tItemID id); +}; + +typedef ItemList::iterator ItemIterator; + +// TODO: Don't use global construction! +extern ItemList g_allItems; + +} // End of namespace Pegasus + +#endif |