Skip to content

Commit

Permalink
PEGASUS: Import the CInventory class
Browse files Browse the repository at this point in the history
  • Loading branch information
Matthew Hoops committed Jun 16, 2011
1 parent e2e2241 commit 9f3c689
Show file tree
Hide file tree
Showing 3 changed files with 256 additions and 0 deletions.
175 changes: 175 additions & 0 deletions engines/pegasus/Game_Shell/CInventory.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
*
* 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
80 changes: 80 additions & 0 deletions engines/pegasus/Game_Shell/CInventory.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
*
* 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
1 change: 1 addition & 0 deletions engines/pegasus/module.mk
Expand Up @@ -9,6 +9,7 @@ MODULE_OBJS = \
overview.o \
pegasus.o \
video.o \
Game_Shell/CInventory.o \
Game_Shell/CItem.o \
Game_Shell/CItemList.o \
MMShell/Base_Classes/MMFunctionPtr.o \
Expand Down

0 comments on commit 9f3c689

Please sign in to comment.