mirror of
https://github.com/libretro/scummvm.git
synced 2025-01-18 07:53:12 +00:00
PEGASUS: Restructure remaining (already converted) Game Shell classes
This commit is contained in:
parent
e642906cdd
commit
cb7b382acf
@ -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
|
@ -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
|
@ -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
|
||||
|
@ -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) {
|
||||
|
@ -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);
|
||||
|
175
engines/pegasus/items/inventory.cpp
Executable file
175
engines/pegasus/items/inventory.cpp
Executable 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
|
@ -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
111
engines/pegasus/items/item.cpp
Executable 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
|
@ -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
|
@ -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;
|
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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 \
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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
|
Loading…
x
Reference in New Issue
Block a user