PEGASUS: Restructure remaining (already converted) Game Shell classes

This commit is contained in:
Matthew Hoops 2011-09-02 01:06:17 -04:00
parent e642906cdd
commit cb7b382acf
15 changed files with 432 additions and 433 deletions

View File

@ -1,175 +0,0 @@
/* 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/Game_Shell/CItem.h"
#include "pegasus/Game_Shell/CInventory.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

View File

@ -1,111 +0,0 @@
/* 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/Game_Shell/CItem.h"
#include "pegasus/Game_Shell/CItemList.h"
namespace Pegasus {
CItem::CItem(const tItemID id, const tNeighborhoodID neighborhood, const tRoomID room, const tDirectionConstant direction) : MMIDObject(id) {
fItemNeighborhood = neighborhood;
fItemRoom = room;
fItemDirection = direction;
fItemWeight = 1;
fItemOwnerID = kNoActorID;
fItemState = 0;
gAllItems.push_back(this);
}
CItem::~CItem() {
}
Common::Error CItem::WriteToStream(Common::WriteStream *stream) {
stream->writeUint16BE(fItemNeighborhood);
stream->writeUint16BE(fItemRoom);
stream->writeByte(fItemDirection);
stream->writeUint16BE(fItemOwnerID);
stream->writeUint16BE(fItemState);
if (stream->err())
return Common::kWritingFailed;
return Common::kNoError;
}
Common::Error CItem::ReadFromStream(Common::ReadStream *stream) {
fItemNeighborhood = stream->readUint16BE();
fItemRoom = stream->readUint16BE();
fItemDirection = stream->readByte();
fItemOwnerID = stream->readUint16BE();
fItemState = stream->readUint16BE();
if (stream->err())
return Common::kReadingFailed;
return Common::kNoError;
}
tActorID CItem::GetItemOwner() const {
return fItemOwnerID;
}
void CItem::SetItemOwner(const tActorID owner) {
fItemOwnerID = owner;
}
tWeightType CItem::GetItemWeight() {
return fItemWeight;
}
tItemState CItem::GetItemState() const {
return fItemState;
}
void CItem::SetItemState(const tItemState state) {
fItemState = state;
}
void CItem::GetItemRoom(tNeighborhoodID &neighborhood, tRoomID &room, tDirectionConstant &direction) const {
neighborhood = fItemNeighborhood;
room = fItemRoom;
direction = fItemDirection;
}
void CItem::SetItemRoom(const tNeighborhoodID neighborhood, const tRoomID room, const tDirectionConstant direction) {
fItemNeighborhood = neighborhood;
fItemRoom = room;
fItemDirection = direction;
}
tNeighborhoodID CItem::GetItemNeighborhood() const {
return fItemNeighborhood;
}
} // End of namespace Pegasus

View File

@ -38,29 +38,29 @@ public:
MMIDObject(const tMM32BitID id);
~MMIDObject();
tMM32BitID GetObjectID() const;
tMM32BitID getObjectID() const;
private:
tMM32BitID fObjectID;
tMM32BitID _objectID;
};
inline MMIDObject::MMIDObject(const tMM32BitID id) {
fObjectID = id;
_objectID = id;
}
inline MMIDObject::~MMIDObject() {
}
inline tMM32BitID MMIDObject::GetObjectID() const {
return fObjectID;
inline tMM32BitID MMIDObject::getObjectID() const {
return _objectID;
}
inline int operator==(const MMIDObject &arg1, const MMIDObject &arg2) {
return arg1.fObjectID == arg2.fObjectID;
return arg1._objectID == arg2._objectID;
}
inline int operator!=(const MMIDObject &arg1, const MMIDObject &arg2) {
return arg1.fObjectID != arg2.fObjectID;
return arg1._objectID != arg2._objectID;
}
} // End of namespace Pegasus

View File

@ -1530,12 +1530,12 @@ bool GameStateManager::isTakenItemID(tItemID id) {
return _itemTakenFlags.getFlag(id);
}
void GameStateManager::setTakenItem(CItem *item, bool value) {
setTakenItemID(item->GetObjectID(), value);
void GameStateManager::setTakenItem(Item *item, bool value) {
setTakenItemID(item->getObjectID(), value);
}
bool GameStateManager::isTakenItem(CItem *item) {
return isTakenItemID(item->GetObjectID());
bool GameStateManager::isTakenItem(Item *item) {
return isTakenItemID(item->getObjectID());
}
void GameStateManager::setCaldoriaFuseTimeLimit(const TimeValue timeLimit) {

View File

@ -29,7 +29,7 @@
#include "common/singleton.h"
#include "pegasus/types.h"
#include "pegasus/Game_Shell/CItem.h"
#include "pegasus/items/item.h"
namespace Common {
class Error;
@ -615,8 +615,8 @@ public:
bool allTimeZonesFinished();
void setTakenItemID(tItemID, bool);
bool isTakenItemID(tItemID);
void setTakenItem(CItem*, bool);
bool isTakenItem(CItem*);
void setTakenItem(Item*, bool);
bool isTakenItem(Item*);
// Caldoria
void setCaldoriaFuseTimeLimit(const TimeValue);

View File

@ -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

View File

@ -23,15 +23,15 @@
*
*/
#ifndef PEGASUS_GAMESHELL_CINVENTORY_H
#define PEGASUS_GAMESHELL_CINVENTORY_H
#ifndef PEGASUS_ITEMS_INVENTORY_H
#define PEGASUS_ITEMS_INVENTORY_H
#include "pegasus/types.h"
#include "pegasus/Game_Shell/CItemList.h"
#include "pegasus/items/itemlist.h"
namespace Pegasus {
class CItem;
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
@ -39,40 +39,40 @@ class CItem;
// 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 {
class Inventory {
public:
CInventory();
virtual ~CInventory();
Inventory();
virtual ~Inventory();
tWeightType GetWeightLimit();
void SetWeightLimit(tWeightType limit);
tWeightType GetWeight();
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();
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;
void setOwnerID(const tActorID id);
tActorID getOwnerID() const;
uint32 GetReferenceCount() { return fReferenceCount; }
uint32 getReferenceCount() { return _referenceCount; }
protected:
tWeightType fWeightLimit;
tActorID fOwnerID;
CItemList fInventoryList;
tWeightType _weightLimit;
tActorID _ownerID;
ItemList _inventoryList;
private:
uint32 fReferenceCount;
uint32 _referenceCount;
};
} // End of namespace Pegasus

111
engines/pegasus/items/item.cpp Executable file
View File

@ -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

View File

@ -23,8 +23,8 @@
*
*/
#ifndef PEGASUS_GAMESHELL_CITEM_H
#define PEGASUS_GAMESHELL_CITEM_H
#ifndef PEGASUS_ITEMS_ITEM_H
#define PEGASUS_ITEMS_ITEM_H
#include "pegasus/MMShell/Utilities/MMIDObject.h"
#include "pegasus/types.h"
@ -39,12 +39,12 @@ namespace Pegasus {
/*
CItem is an object which can be picked up and carried around.
CItems have
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 CItem)
an owner (kNoActorID if no one is carrying the Item)
*/
@ -219,35 +219,35 @@ const uint32 kRemoveGlass = 10;
const uint32 kRemoveDart = 11;
const uint32 kRemoveSinclairKey = 12;
class CItem : public MMIDObject {
class Item : public MMIDObject {
public:
CItem(const tItemID id, const tNeighborhoodID neighborhood, const tRoomID room, const tDirectionConstant direction);
virtual ~CItem();
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 Common::Error writeToStream(Common::WriteStream *stream);
virtual Common::Error readFromStream(Common::ReadStream *stream);
virtual tActorID GetItemOwner() const;
virtual void SetItemOwner(const tActorID owner);
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;
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 tWeightType getItemWeight();
virtual void SetItemState(const tItemState state);
virtual tItemState GetItemState() const;
virtual void setItemState(const tItemState state);
virtual tItemState getItemState() const;
protected:
tNeighborhoodID fItemNeighborhood;
tRoomID fItemRoom;
tDirectionConstant fItemDirection;
tActorID fItemOwnerID;
tWeightType fItemWeight;
tItemState fItemState;
tNeighborhoodID _itemNeighborhood;
tRoomID _itemRoom;
tDirectionConstant _itemDirection;
tActorID _itemOwnerID;
tWeightType _itemWeight;
tItemState _itemState;
};
} // End of namespace Pegasus

View File

@ -26,26 +26,26 @@
#include "common/error.h"
#include "common/stream.h"
#include "engines/pegasus/Game_Shell/CItem.h"
#include "engines/pegasus/Game_Shell/CItemList.h"
#include "engines/pegasus/items/item.h"
#include "engines/pegasus/items/itemlist.h"
namespace Pegasus {
// TODO: Don't use global construction!
CItemList gAllItems;
ItemList g_allItems;
CItemList::CItemList() {
ItemList::ItemList() {
}
CItemList::~CItemList() {
ItemList::~ItemList() {
}
Common::Error CItemList::WriteToStream(Common::WriteStream *stream) {
Common::Error ItemList::writeToStream(Common::WriteStream *stream) {
stream->writeUint32BE(size());
for (CItemIterator it = begin(); it != end(); it++) {
stream->writeUint16BE((*it)->GetObjectID());
(*it)->WriteToStream(stream);
for (ItemIterator it = begin(); it != end(); it++) {
stream->writeUint16BE((*it)->getObjectID());
(*it)->writeToStream(stream);
}
if (stream->err())
@ -54,12 +54,12 @@ Common::Error CItemList::WriteToStream(Common::WriteStream *stream) {
return Common::kNoError;
}
Common::Error CItemList::ReadFromStream(Common::ReadStream *stream) {
Common::Error ItemList::readFromStream(Common::ReadStream *stream) {
uint32 itemCount = stream->readUint32BE();
for (uint32 i = 0; i < itemCount; i++) {
tItemID itemID = stream->readUint16BE();
gAllItems.FindItemByID(itemID)->ReadFromStream(stream);
g_allItems.findItemByID(itemID)->readFromStream(stream);
}
if (stream->err())
@ -68,9 +68,9 @@ Common::Error CItemList::ReadFromStream(Common::ReadStream *stream) {
return Common::kNoError;
}
CItem *CItemList::FindItemByID(const tItemID id) {
for (CItemIterator it = begin(); it != end(); it++)
if ((*it)->GetObjectID() == id)
Item *ItemList::findItemByID(const tItemID id) {
for (ItemIterator it = begin(); it != end(); it++)
if ((*it)->getObjectID() == id)
return *it;
return 0;

View File

@ -23,8 +23,8 @@
*
*/
#ifndef PEGASUS_GAMESHELL_CITEMLIST_H
#define PEGASUS_GAMESHELL_CITEMLIST_H
#ifndef PEGASUS_ITEMS_ITEMLIST_H
#define PEGASUS_ITEMS_ITEMLIST_H
#include "common/list.h"
@ -37,23 +37,23 @@ namespace Common {
namespace Pegasus {
class CItem;
class Item;
class CItemList : public Common::List<CItem *> {
class ItemList : public Common::List<Item *> {
public:
CItemList();
virtual ~CItemList();
ItemList();
virtual ~ItemList();
virtual Common::Error WriteToStream(Common::WriteStream *stream);
virtual Common::Error ReadFromStream(Common::ReadStream *stream);
virtual Common::Error writeToStream(Common::WriteStream *stream);
virtual Common::Error readFromStream(Common::ReadStream *stream);
CItem *FindItemByID(const tItemID id);
Item *findItemByID(const tItemID id);
};
typedef CItemList::iterator CItemIterator;
typedef ItemList::iterator ItemIterator;
// TODO: Don't use global construction!
extern CItemList gAllItems;
extern ItemList g_allItems;
} // End of namespace Pegasus

View File

@ -25,8 +25,7 @@
#include "pegasus/console.h"
#include "pegasus/pegasus.h"
#include "pegasus/MMShell/Sounds/MMSound.h"
#include "pegasus/sound.h"
namespace Pegasus {
@ -46,9 +45,9 @@ enum {
};
void PegasusEngine::runMainMenu() {
MMSound sound;
sound.InitFromAIFFFile("Sounds/Main Menu.aiff");
sound.LoopSound();
Sound sound;
sound.initFromAIFFFile("Sounds/Main Menu.aiff");
sound.loopSound();
// Note down how long since the last click
uint32 lastClickTime = _system->getMillis();
@ -86,14 +85,14 @@ void PegasusEngine::runMainMenu() {
case Common::KEYCODE_RETURN:
if (buttonSelected != kDifficultyButton) {
drawMenuButtonSelected(buttonSelected);
sound.StopSound();
sound.stopSound();
setGameMode(buttonSelected);
if (_gameMode != kMainMenuMode)
return;
drawMenu(buttonSelected);
sound.LoopSound();
sound.loopSound();
}
break;
case Common::KEYCODE_d:
@ -122,7 +121,7 @@ void PegasusEngine::runMainMenu() {
return;
// Too slow! Go back and show the intro again.
sound.StopSound();
sound.stopSound();
_video->playMovie(_introDirectory + "/LilMovie.movie");
_gameMode = kIntroMode;
}

View File

@ -9,15 +9,15 @@ MODULE_OBJS = \
menu.o \
overview.o \
pegasus.o \
sound.o \
video.o \
Game_Shell/CInventory.o \
Game_Shell/CItem.o \
Game_Shell/CItemList.o \
items/inventory.o \
items/item.o \
items/itemlist.o \
MMShell/Base_Classes/MMFunctionPtr.o \
MMShell/Notification/MMNotification.o \
MMShell/Notification/MMNotificationManager.o \
MMShell/Notification/MMNotificationReceiver.o \
MMShell/Sounds/MMSound.o \
MMShell/Utilities/MMResourceFile.o \
MMShell/Utilities/MMTimeValue.o \
MMShell/Utilities/MMUtilities.o \

View File

@ -28,25 +28,25 @@
#include "common/file.h"
#include "common/system.h"
#include "engines/pegasus/MMShell/Sounds/MMSound.h"
#include "pegasus/sound.h"
namespace Pegasus {
MMSound::MMSound() {
Sound::Sound() {
_aiffStream = 0;
_volume = 0xFF;
}
MMSound::~MMSound() {
DisposeSound();
Sound::~Sound() {
disposeSound();
}
void MMSound::DisposeSound() {
StopSound();
void Sound::disposeSound() {
stopSound();
delete _aiffStream; _aiffStream = 0;
}
void MMSound::InitFromAIFFFile(const Common::String &fileName) {
void Sound::initFromAIFFFile(const Common::String &fileName) {
Common::File *file = new Common::File();
if (!file->open(fileName)) {
delete file;
@ -58,37 +58,37 @@ void MMSound::InitFromAIFFFile(const Common::String &fileName) {
#if 0
// TODO!
void MMSound::AttachFader(MMSoundFader *theFader) {
if (fTheFader)
fTheFader->AttachSound(NULL);
void Sound::attachFader(SoundFader *fader) {
if (_fader)
_fader->attachSound(NULL);
fTheFader = theFader;
_fader = fader;
if (fTheFader)
fTheFader->AttachSound(this);
if (_fader)
_fader->attachSound(this);
}
#endif
void MMSound::PlaySound() {
if (!SoundLoaded())
void Sound::playSound() {
if (!isSoundLoaded())
return;
StopSound();
stopSound();
#if 0
// TODO!
if (fTheFader)
this->SetVolume(fTheFader->GetFaderValue());
if (_fader)
setVolume(_fader->getFaderValue());
#endif
g_system->getMixer()->playStream(Audio::Mixer::kPlainSoundType, &_handle, _aiffStream, -1, _volume, 0, DisposeAfterUse::NO);
}
void MMSound::LoopSound() {
if (!SoundLoaded())
void Sound::loopSound() {
if (!isSoundLoaded())
return;
StopSound();
stopSound();
// Create a looping stream
Audio::AudioStream *loopStream = new Audio::LoopingAudioStream(_aiffStream, 0, DisposeAfterUse::NO);
@ -96,18 +96,18 @@ void MMSound::LoopSound() {
#if 0
// TODO!
// Assume that if there is a fader, we're going to fade the sound in.
if (fTheFader)
this->SetVolume(0);
if (_fader)
setVolume(0);
#endif
g_system->getMixer()->playStream(Audio::Mixer::kPlainSoundType, &_handle, loopStream, -1, _volume, 0, DisposeAfterUse::YES);
}
void MMSound::StopSound(void) {
void Sound::stopSound(void) {
g_system->getMixer()->stopHandle(_handle);
}
void MMSound::SetVolume(const uint16 volume) {
void Sound::setVolume(const uint16 volume) {
// Clipping the volume to [0x00, 0xFF] instead of Apple's [0, 0x100]
// We store the volume in case SetVolume is called before the sound starts
@ -115,11 +115,11 @@ void MMSound::SetVolume(const uint16 volume) {
g_system->getMixer()->setChannelVolume(_handle, _volume);
}
bool MMSound::IsPlaying() {
return SoundLoaded() && g_system->getMixer()->isSoundHandleActive(_handle);
bool Sound::isPlaying() {
return isSoundLoaded() && g_system->getMixer()->isSoundHandleActive(_handle);
}
bool MMSound::SoundLoaded() const {
bool Sound::isSoundLoaded() const {
return _aiffStream != 0;
}

View File

@ -23,8 +23,8 @@
*
*/
#ifndef PEGASUS_MMSHELL_SOUNDS_MMSOUND_H
#define PEGASUS_MMSHELL_SOUNDS_MMSOUND_H
#ifndef PEGASUS_SOUND_H
#define PEGASUS_SOUND_H
#include "audio/mixer.h"
#include "common/str.h"
@ -49,26 +49,26 @@ namespace Pegasus {
// Pan the sound
// Change these settings dynamically over time
class MMSound {
class Sound {
public:
MMSound();
~MMSound();
Sound();
~Sound();
// We only have one access point here because we should
// only be opening an AIFF file from a file name. We're
// not using the resource fork string resources.
void InitFromAIFFFile(const Common::String &fileName);
void initFromAIFFFile(const Common::String &fileName);
void DisposeSound();
bool SoundLoaded() const;
void PlaySound();
void LoopSound();
void StopSound();
void SetVolume(const uint16 volume);
bool IsPlaying();
void disposeSound();
bool isSoundLoaded() const;
void playSound();
void loopSound();
void stopSound();
void setVolume(const uint16 volume);
bool isPlaying();
// TODO!
//void AttachFader(MMSoundFader*);
//void attachFader(SoundFader *fader);
protected:
Audio::RewindableAudioStream *_aiffStream;
@ -76,7 +76,7 @@ protected:
byte _volume;
// TODO!
//MMSoundFader *fTheFader;
//SoundFader *_fader;
};
} // End of namespace Pegasus