Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
PEGASUS: Import the CInventory class
- Loading branch information
Matthew Hoops
committed
Jun 16, 2011
1 parent
e2e2241
commit 9f3c689
Showing
3 changed files
with
256 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 | ||
* | ||
* 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/Game_Shell/CItem.h" | ||
#include "pegasus/Game_Shell/CInventory.h" | ||
#include "pegasus/Game_Shell/Headers/Game_Shell_Constants.h" | ||
|
||
namespace Pegasus { | ||
|
||
CInventory::CInventory() { | ||
fWeightLimit = 100; | ||
fOwnerID = kNoActorID; | ||
fReferenceCount = 0; | ||
} | ||
|
||
CInventory::~CInventory() { | ||
} | ||
|
||
void CInventory::SetWeightLimit(tWeightType limit) { | ||
fWeightLimit = limit; | ||
// *** What to do if the new weight limit is greater than the current weight? | ||
} | ||
|
||
tWeightType CInventory::GetWeight() { | ||
tWeightType result = 0; | ||
|
||
for (CItemIterator it = fInventoryList.begin(); it != fInventoryList.end(); it++) | ||
result += (*it)->GetItemWeight(); | ||
|
||
return result; | ||
} | ||
|
||
// If the item already belongs, just return kInventoryOK. | ||
tInventoryResult CInventory::AddItem(CItem *item) { | ||
if (ItemInInventory(item)) | ||
return kInventoryOK; | ||
|
||
if (GetWeight() + item->GetItemWeight() > fWeightLimit) | ||
return kTooMuchWeight; | ||
|
||
fInventoryList.push_back(item); | ||
item->SetItemOwner(fOwnerID); | ||
|
||
++fReferenceCount; | ||
return kInventoryOK; | ||
} | ||
|
||
tInventoryResult CInventory::RemoveItem(CItem *item) { | ||
for (CItemIterator it = fInventoryList.begin(); it != fInventoryList.end(); it++) { | ||
if (*it == item) { | ||
fInventoryList.erase(it); | ||
item->SetItemOwner(kNoActorID); | ||
|
||
++fReferenceCount; | ||
return kInventoryOK; | ||
} | ||
} | ||
|
||
return kItemNotInInventory; | ||
} | ||
|
||
tInventoryResult CInventory::RemoveItem(tItemID id) { | ||
CItem *item = FindItemByID(id); | ||
|
||
if (item) { | ||
fInventoryList.remove(item); | ||
item->SetItemOwner(kNoActorID); | ||
|
||
++fReferenceCount; | ||
return kInventoryOK; | ||
} | ||
|
||
return kItemNotInInventory; | ||
} | ||
|
||
void CInventory::RemoveAllItems() { | ||
fInventoryList.clear(); | ||
++fReferenceCount; | ||
} | ||
|
||
bool CInventory::ItemInInventory(CItem *item) { | ||
for (CItemIterator it = fInventoryList.begin(); it != fInventoryList.end(); it++) | ||
if (*it == item) | ||
return true; | ||
|
||
return false; | ||
} | ||
|
||
bool CInventory::ItemInInventory(tItemID id) { | ||
return FindItemByID(id) != NULL; | ||
} | ||
|
||
CItem *CInventory::GetItemAt(int32 index) { | ||
int32 i = 0; | ||
for (CItemIterator it = fInventoryList.begin(); it != fInventoryList.end(); it++, i++) | ||
if (i == index) | ||
return *it; | ||
|
||
return 0; | ||
} | ||
|
||
tItemID CInventory::GetItemIDAt(int32 index) { | ||
CItem *item = GetItemAt(index); | ||
|
||
if (item) | ||
return item->GetObjectID(); | ||
|
||
return kNoItemID; | ||
} | ||
|
||
CItem *CInventory::FindItemByID(tItemID id) { | ||
return fInventoryList.FindItemByID(id); | ||
} | ||
|
||
// Return -1 if not found. | ||
|
||
int32 CInventory::FindIndexOf(CItem *item) { | ||
uint32 i = 0; | ||
for (CItemIterator it = fInventoryList.begin(); it != fInventoryList.end(); it++, i++) | ||
if (*it == item) | ||
return i; | ||
|
||
return -1; | ||
} | ||
|
||
// Return -1 if not found. | ||
|
||
int32 CInventory::FindIndexOf(tItemID id) { | ||
uint32 i = 0; | ||
for (CItemIterator it = fInventoryList.begin(); it != fInventoryList.end(); it++, i++) | ||
if ((*it)->GetObjectID() == id) | ||
return i; | ||
|
||
return -1; | ||
} | ||
|
||
tWeightType CInventory::GetWeightLimit() { | ||
return fWeightLimit; | ||
} | ||
|
||
int32 CInventory::GetNumItems() { | ||
return fInventoryList.size(); | ||
} | ||
|
||
void CInventory::SetOwnerID(const tActorID id) { | ||
fOwnerID = id; | ||
} | ||
|
||
tActorID CInventory::GetOwnerID() const { | ||
return fOwnerID; | ||
} | ||
|
||
} // End of namespae Pegasus |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 | ||
* | ||
* 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_CINVENTORY_H | ||
#define PEGASUS_GAMESHELL_CINVENTORY_H | ||
|
||
#include "pegasus/Game_Shell/CItemList.h" | ||
#include "pegasus/Game_Shell/Headers/Game_Shell_Types.h" | ||
|
||
namespace Pegasus { | ||
|
||
class CItem; | ||
|
||
// 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 CInventory { | ||
public: | ||
CInventory(); | ||
virtual ~CInventory(); | ||
|
||
tWeightType GetWeightLimit(); | ||
void SetWeightLimit(tWeightType limit); | ||
tWeightType GetWeight(); | ||
|
||
virtual tInventoryResult AddItem(CItem *item); | ||
virtual tInventoryResult RemoveItem(CItem *item); | ||
virtual tInventoryResult RemoveItem(tItemID id); | ||
virtual bool ItemInInventory(CItem *item); | ||
virtual bool ItemInInventory(tItemID id); | ||
virtual CItem *GetItemAt(int32 index); | ||
virtual tItemID GetItemIDAt(int32 index); | ||
virtual CItem *FindItemByID(tItemID id); | ||
virtual int32 FindIndexOf(CItem *item); | ||
virtual int32 FindIndexOf(tItemID id); | ||
int32 GetNumItems(); | ||
virtual void RemoveAllItems(); | ||
|
||
void SetOwnerID(const tActorID id); | ||
tActorID GetOwnerID() const; | ||
|
||
uint32 GetReferenceCount() { return fReferenceCount; } | ||
|
||
protected: | ||
tWeightType fWeightLimit; | ||
tActorID fOwnerID; | ||
CItemList fInventoryList; | ||
|
||
private: | ||
uint32 fReferenceCount; | ||
}; | ||
|
||
} // End of namespace Pegasus | ||
|
||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters