aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/tsage/core.cpp59
-rw-r--r--engines/tsage/core.h26
-rw-r--r--engines/tsage/debugger.cpp2
-rw-r--r--engines/tsage/dialogs.cpp4
-rw-r--r--engines/tsage/globals.h6
-rw-r--r--engines/tsage/graphics.cpp2
-rw-r--r--engines/tsage/ringworld_logic.cpp2
-rw-r--r--engines/tsage/ringworld_scenes3.cpp4
-rw-r--r--engines/tsage/ringworld_scenes8.cpp2
-rw-r--r--engines/tsage/saveload.cpp14
-rw-r--r--engines/tsage/saveload.h56
-rw-r--r--engines/tsage/scenes.cpp10
12 files changed, 88 insertions, 99 deletions
diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp
index 8d332c46af..1fa037ee94 100644
--- a/engines/tsage/core.cpp
+++ b/engines/tsage/core.cpp
@@ -537,7 +537,7 @@ void PlayerMover::setDest(const Common::Point &destPos) {
#define REGION_LIST_SIZE 20
void PlayerMover::pathfind(Common::Point *routeList, Common::Point srcPos, Common::Point destPos, RouteEnds routeEnds) {
- List<int> regionIndexes;
+ Common::List<int> regionIndexes;
RouteEnds tempRouteEnds;
int routeRegions[REGION_LIST_SIZE];
Common::Point objPos;
@@ -687,7 +687,7 @@ int PlayerMover::regionIndexOf(const Common::Point &pt) {
return 0;
}
-int PlayerMover::findClosestRegion(Common::Point &pt, List<int> &indexList) {
+int PlayerMover::findClosestRegion(Common::Point &pt, const Common::List<int> &indexList) {
int newY = pt.y;
int result = 0;
@@ -695,35 +695,35 @@ int PlayerMover::findClosestRegion(Common::Point &pt, List<int> &indexList) {
int newX = pt.x + idx;
result = regionIndexOf(newX, pt.y);
- if ((result == 0) || indexList.contains(result)) {
+ if ((result == 0) || contains(indexList, result)) {
newY = pt.y + idx;
result = regionIndexOf(newX, newY);
- if ((result == 0) || indexList.contains(result)) {
+ if ((result == 0) || contains(indexList, result)) {
newX -= idx;
result = regionIndexOf(newX, newY);
- if ((result == 0) || indexList.contains(result)) {
+ if ((result == 0) || contains(indexList, result)) {
newX -= idx;
result = regionIndexOf(newX, newY);
- if ((result == 0) || indexList.contains(result)) {
+ if ((result == 0) || contains(indexList, result)) {
newY -= idx;
result = regionIndexOf(newX, newY);
- if ((result == 0) || indexList.contains(result)) {
+ if ((result == 0) || contains(indexList, result)) {
newY -= idx;
result = regionIndexOf(newX, newY);
- if ((result == 0) || indexList.contains(result)) {
+ if ((result == 0) || contains(indexList, result)) {
newX += idx;
result = regionIndexOf(newX, newY);
- if ((result == 0) || indexList.contains(result)) {
+ if ((result == 0) || contains(indexList, result)) {
newX += idx;
result = regionIndexOf(newX, newY);
- if ((result == 0) || indexList.contains(result)) {
+ if ((result == 0) || contains(indexList, result)) {
continue;
}
}
@@ -1132,8 +1132,7 @@ void PaletteRotation::remove() {
Action *action = _action;
g_system->getPaletteManager()->setPalette((const byte *)&_palette[_start], _start, _end - _start);
- if (_scenePalette->_listeners.contains(this))
- _scenePalette->_listeners.remove(this);
+ _scenePalette->_listeners.remove(this);
delete this;
if (action)
@@ -1213,8 +1212,7 @@ void PaletteUnknown::remove() {
for (int i = 0; i < 256; i++)
_scenePalette->_palette[i] = _palette[i];
_scenePalette->refresh();
- if (_scenePalette->_listeners.contains(this))
- _scenePalette->_listeners.remove(this);
+ _scenePalette->_listeners.remove(this);
delete this;
}
@@ -1312,13 +1310,13 @@ void ScenePalette::getPalette(int start, int count) {
}
void ScenePalette::signalListeners() {
- for (List<PaletteModifier *>::iterator i = _listeners.begin(); i != _listeners.end(); ++i) {
+ for (SynchronisedList<PaletteModifier *>::iterator i = _listeners.begin(); i != _listeners.end(); ++i) {
(*i)->signal();
}
}
void ScenePalette::clearListeners() {
- List<PaletteModifier *>::iterator i = _listeners.begin();
+ SynchronisedList<PaletteModifier *>::iterator i = _listeners.begin();
while (i != _listeners.end()) {
PaletteModifier *obj = *i;
++i;
@@ -1377,6 +1375,7 @@ PaletteUnknown *ScenePalette::addUnkPal(RGB8 *arrBufferRGB, int unkNumb, bool di
void ScenePalette::changeBackground(const Rect &bounds, FadeMode fadeMode) {
ScenePalette tempPalette;
+
if (_globals->_sceneManager._hasPalette) {
if ((fadeMode == FADEMODE_GRADUAL) || (fadeMode == FADEMODE_IMMEDIATE)) {
// Fade out any active palette
@@ -1397,7 +1396,10 @@ void ScenePalette::changeBackground(const Rect &bounds, FadeMode fadeMode) {
_globals->_screenSurface.copyFrom(_globals->_sceneManager._scene->_backSurface,
bounds, Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT), NULL);
- tempPalette._listeners.clear2();
+
+ for (SynchronisedList<PaletteModifier *>::iterator i = tempPalette._listeners.begin(); i != tempPalette._listeners.end(); ++i)
+ delete *i;
+ tempPalette._listeners.clear();
}
void ScenePalette::synchronise(Serialiser &s) {
@@ -1941,7 +1943,7 @@ int SceneObject::checkRegion(const Common::Point &pt) {
}
newY -= _yDiff;
- List<SceneObject *>::iterator i;
+ SynchronisedList<SceneObject *>::iterator i;
for (i = _globals->_sceneObjects->begin(); (regionIndex == 0) && (i != _globals->_sceneObjects->end()); ++i) {
if ((*i) && ((*i)->_flags & OBJFLAG_CHECK_REGION)) {
int objYDiff = (*i)->_position.y - _yDiff;
@@ -2229,11 +2231,8 @@ void SceneObject::calcAngle(const Common::Point &pt) {
}
void SceneObject::removeObject() {
- if (_globals->_sceneItems.contains(this))
- _globals->_sceneItems.remove(this);
-
- if (_globals->_sceneObjects->contains(this))
- _globals->_sceneObjects->remove(this);
+ _globals->_sceneItems.remove(this);
+ _globals->_sceneObjects->remove(this);
if (_visage) {
_vm->_memoryManager.deallocate(_visage);
@@ -2369,7 +2368,7 @@ void SceneObjectList::draw() {
uint32 flagMask = (paneNum == 0) ? OBJFLAG_PANE_0 : OBJFLAG_PANE_1;
// Initial loop to set up object list and update object position, priority, and flags
- for (List<SceneObject *>::iterator i = _globals->_sceneObjects->begin();
+ for (SynchronisedList<SceneObject *>::iterator i = _globals->_sceneObjects->begin();
i != _globals->_sceneObjects->end(); ++i) {
SceneObject *obj = *i;
objList.push_back(obj);
@@ -2523,7 +2522,7 @@ void SceneObjectList::activate() {
_globals->_sceneObjects_queue.push_front(this);
// Flag all the objects as modified
- List<SceneObject *>::iterator i;
+ SynchronisedList<SceneObject *>::iterator i;
for (i = begin(); i != end(); ++i) {
(*i)->_flags |= OBJFLAG_PANES;
}
@@ -2544,7 +2543,7 @@ void SceneObjectList::deactivate() {
_globals->_sceneObjects_queue.pop_front();
_globals->_sceneObjects = *_globals->_sceneObjects_queue.begin();
- List<SceneObject *>::iterator i;
+ SynchronisedList<SceneObject *>::iterator i;
for (i = objectList->begin(); i != objectList->end(); ++i) {
if (!((*i)->_flags & OBJFLAG_CLONED)) {
SceneObject *sceneObj = (*i)->clone();
@@ -3283,9 +3282,9 @@ void WalkRegions::load(int sceneNum) {
* @param pt Point to locate
* @param indexList List of region indexes that should be ignored
*/
-int WalkRegions::indexOf(const Common::Point &pt, List<int> *indexList) {
+int WalkRegions::indexOf(const Common::Point &pt, const Common::List<int> *indexList) {
for (uint idx = 0; idx < _regionList.size(); ++idx) {
- if ((!indexList || !indexList->contains(idx + 1)) && _regionList[idx].contains(pt))
+ if ((!indexList || contains(*indexList, int(idx + 1))) && _regionList[idx].contains(pt))
return idx + 1;
}
@@ -3511,7 +3510,7 @@ void SceneHandler::process(Event &event) {
if (_globals->_player._uiEnabled && (event.eventType == EVENT_BUTTON_DOWN) &&
!_globals->_sceneItems.empty()) {
// Scan the item list to find one the mouse is within
- List<SceneItem *>::iterator i = _globals->_sceneItems.begin();
+ SynchronisedList<SceneItem *>::iterator i = _globals->_sceneItems.begin();
while ((i != _globals->_sceneItems.end()) && !(*i)->contains(event.mousePos))
++i;
@@ -3598,7 +3597,7 @@ void Game::execute() {
do {
// Process all currently atcive game handlers
activeFlag = false;
- for (List<GameHandler *>::iterator i = _handlers.begin(); i != _handlers.end(); ++i) {
+ for (SynchronisedList<GameHandler *>::iterator i = _handlers.begin(); i != _handlers.end(); ++i) {
GameHandler *gh = *i;
if (gh->_lockCtr.getCtr() == 0) {
gh->execute();
diff --git a/engines/tsage/core.h b/engines/tsage/core.h
index cfd2867d35..e30d6efb2d 100644
--- a/engines/tsage/core.h
+++ b/engines/tsage/core.h
@@ -107,7 +107,7 @@ public:
InvObject _jar;
InvObject _emptyJar;
- List<InvObject *> _itemList;
+ SynchronisedList<InvObject *> _itemList;
InvObject *_selectedItem;
public:
InvObjectList();
@@ -264,7 +264,7 @@ protected:
void pathfind(Common::Point *routeList, Common::Point srcPos, Common::Point destPos, RouteEnds routeEnds);
int regionIndexOf(const Common::Point &pt);
int regionIndexOf(int xp, int yp) { return regionIndexOf(Common::Point(xp, yp)); }
- int findClosestRegion(Common::Point &pt, List<int> &indexList);
+ int findClosestRegion(Common::Point &pt, const Common::List<int> &indexList);
int checkMover(Common::Point &srcPos, const Common::Point &destPos);
void checkMovement2(const Common::Point &pt1, const Common::Point &pt2, int numSteps, Common::Point &ptOut);
int proc1(int *routeList, int srcRegion, int destRegion, int &v);
@@ -363,7 +363,7 @@ class ScenePalette: public SavedObject {
public:
RGB8 _palette[256];
GfxColours _colours;
- List<PaletteModifier *> _listeners;
+ SynchronisedList<PaletteModifier *> _listeners;
int _field412;
uint8 _redColour;
@@ -684,7 +684,7 @@ public:
static LineSliceSet mergeSlices(const LineSliceSet &set1, const LineSliceSet &set2);
};
-class SceneRegions: public List<Region> {
+class SceneRegions: public Common::List<Region> {
public:
void load(int sceneNum);
@@ -695,7 +695,7 @@ class SceneObjectList: public SavedObject {
private:
void checkIntersection(Common::Array<SceneObject *> &ObjList, uint ObjIndex, int PaneNum);
- List<SceneObject *> _objList;
+ SynchronisedList<SceneObject *> _objList;
bool _listAltered;
public:
SceneObjectList() { _listAltered = false; }
@@ -712,15 +712,15 @@ public:
void recurse(EventHandlerFn Fn) {
// Loop through each object
_listAltered = false;
- for (List<SceneObject *>::iterator i = _objList.begin(); i != _objList.end() && !_listAltered; ) {
+ for (SynchronisedList<SceneObject *>::iterator i = _objList.begin(); i != _objList.end() && !_listAltered; ) {
SceneObject *o = *i;
++i;
Fn(o);
}
}
- List<SceneObject *>::iterator begin() { return _objList.begin(); }
- List<SceneObject *>::iterator end() { return _objList.end(); }
- bool contains(SceneObject *sceneObj) { return _objList.contains(sceneObj); }
+ SynchronisedList<SceneObject *>::iterator begin() { return _objList.begin(); }
+ SynchronisedList<SceneObject *>::iterator end() { return _objList.end(); }
+ bool contains(SceneObject *sceneObj) { return tSage::contains(_objList, sceneObj); }
void push_back(SceneObject *sceneObj) { _objList.push_back(sceneObj); }
void push_front(SceneObject *sceneObj) { _objList.push_front(sceneObj); }
void remove(SceneObject *sceneObj) {
@@ -729,7 +729,7 @@ public:
}
};
-class ScenePriorities: public List<Region> {
+class ScenePriorities: public Common::List<Region> {
public:
int _resNum;
int _field14;
@@ -811,7 +811,7 @@ public:
/*--------------------------------------------------------------------------*/
-class SceneItemList: public List<SceneItem *> {
+class SceneItemList: public SynchronisedList<SceneItem *> {
public:
void addItems(SceneItem *first, ...);
};
@@ -873,7 +873,7 @@ public:
void clear();
void load(int sceneNum);
- int indexOf(const Common::Point &pt, List<int> *indexList = NULL);
+ int indexOf(const Common::Point &pt, const Common::List<int> *indexList = NULL);
WalkRegion &operator[](int idx) {
assert((idx >= 1) && (idx <= (int)_regionList.size()));
return _regionList[idx - 1];
@@ -934,7 +934,7 @@ public:
class Game {
private:
- List<GameHandler *> _handlers;
+ SynchronisedList<GameHandler *> _handlers;
static bool notLockedFn(GameHandler *g);
void restart();
diff --git a/engines/tsage/debugger.cpp b/engines/tsage/debugger.cpp
index 2c6c533125..cc5c9d899c 100644
--- a/engines/tsage/debugger.cpp
+++ b/engines/tsage/debugger.cpp
@@ -126,7 +126,7 @@ bool Debugger::Cmd_PriorityRegions(int argc, const char **argv) {
// Lock the background surface for access
Graphics::Surface destSurface = _globals->_sceneManager._scene->_backSurface.lockSurface();
- List<Region>::iterator i = _globals->_sceneManager._scene->_priorities.begin();
+ Common::List<Region>::iterator i = _globals->_sceneManager._scene->_priorities.begin();
Common::String regionsDesc;
for (; i != _globals->_sceneManager._scene->_priorities.end(); ++i, ++colour, ++count) {
diff --git a/engines/tsage/dialogs.cpp b/engines/tsage/dialogs.cpp
index 2ab06b44e7..2766ad0450 100644
--- a/engines/tsage/dialogs.cpp
+++ b/engines/tsage/dialogs.cpp
@@ -383,7 +383,7 @@ void InventoryDialog::show(bool allFlag) {
if (!allFlag) {
// Determine how many items are in the player's inventory
int itemCount = 0;
- List<InvObject *>::iterator i;
+ SynchronisedList<InvObject *>::iterator i;
for (i = _globals->_inventory._itemList.begin(); i != _globals->_inventory._itemList.end(); ++i) {
if ((*i)->inInventory())
++itemCount;
@@ -405,7 +405,7 @@ InventoryDialog::InventoryDialog(bool allFlag) {
// Determine the maximum size of the image of any item in the player's inventory
int imgWidth = 0, imgHeight = 0;
- List<InvObject *>::iterator i;
+ SynchronisedList<InvObject *>::iterator i;
for (i = _globals->_inventory._itemList.begin(); i != _globals->_inventory._itemList.end(); ++i) {
InvObject *invObject = *i;
if (allFlag || invObject->inInventory()) {
diff --git a/engines/tsage/globals.h b/engines/tsage/globals.h
index 1696ae300d..b102fdf913 100644
--- a/engines/tsage/globals.h
+++ b/engines/tsage/globals.h
@@ -39,7 +39,7 @@ class Globals: public SavedObject {
public:
GfxSurface _screenSurface;
GfxManager _gfxManagerInstance;
- List<GfxManager *> _gfxManagers;
+ Common::List<GfxManager *> _gfxManagers;
SceneHandler _sceneHandler;
Game _game;
EventsClass _events;
@@ -49,7 +49,7 @@ public:
SceneItemList _sceneItems;
SceneObjectList _sceneObjectsInstance;
SceneObjectList *_sceneObjects;
- List<SceneObjectList *> _sceneObjects_queue;
+ SynchronisedList<SceneObjectList *> _sceneObjects_queue;
SceneText _sceneText;
int _gfxFontNumber;
GfxColours _gfxColours;
@@ -57,7 +57,7 @@ public:
SoundManager _soundManager;
Common::Point _dialogCentre;
WalkRegions _walkRegions;
- List<EventHandler *> _sceneListeners;
+ SynchronisedList<EventHandler *> _sceneListeners;
bool _flags[256];
Player _player;
SoundHandler _soundHandler;
diff --git a/engines/tsage/graphics.cpp b/engines/tsage/graphics.cpp
index f497fac732..12ccabd6a5 100644
--- a/engines/tsage/graphics.cpp
+++ b/engines/tsage/graphics.cpp
@@ -1018,7 +1018,7 @@ void GfxManager::setDefaults() {
}
void GfxManager::activate() {
- assert(!_globals->_gfxManagers.contains(this));
+ assert(!contains(_globals->_gfxManagers, this));
_globals->_gfxManagers.push_front(this);
}
diff --git a/engines/tsage/ringworld_logic.cpp b/engines/tsage/ringworld_logic.cpp
index 82d1b02d6b..c9f866bb10 100644
--- a/engines/tsage/ringworld_logic.cpp
+++ b/engines/tsage/ringworld_logic.cpp
@@ -285,7 +285,7 @@ void SceneArea::wait() {
g_system->delayMillis(10);
}
- List<SceneItem *>::iterator ii;
+ SynchronisedList<SceneItem *>::iterator ii;
for (ii = _globals->_sceneItems.begin(); ii != _globals->_sceneItems.end(); ++ii) {
SceneItem *sceneItem = *ii;
if (sceneItem->contains(event.mousePos)) {
diff --git a/engines/tsage/ringworld_scenes3.cpp b/engines/tsage/ringworld_scenes3.cpp
index 00cd82bd2a..27ddbb4334 100644
--- a/engines/tsage/ringworld_scenes3.cpp
+++ b/engines/tsage/ringworld_scenes3.cpp
@@ -2714,7 +2714,7 @@ void Scene2200::Action3::signal() {
_actionIndex = 8;
setDelay(5);
} else {
- for (List<SceneObject *>::iterator i = _globals->_sceneObjects->begin();
+ for (SynchronisedList<SceneObject *>::iterator i = _globals->_sceneObjects->begin();
i != _globals->_sceneObjects->end(); ++i) {
(*i)->hide();
}
@@ -2751,7 +2751,7 @@ void Scene2200::Action3::signal() {
setDelay(5);
break;
case 7:
- for (List<SceneObject *>::iterator i = _globals->_sceneObjects->begin();
+ for (SynchronisedList<SceneObject *>::iterator i = _globals->_sceneObjects->begin();
i != _globals->_sceneObjects->end(); ++i)
(*i)->show();
diff --git a/engines/tsage/ringworld_scenes8.cpp b/engines/tsage/ringworld_scenes8.cpp
index e9277fbe00..70ef94e83b 100644
--- a/engines/tsage/ringworld_scenes8.cpp
+++ b/engines/tsage/ringworld_scenes8.cpp
@@ -2239,7 +2239,7 @@ void Scene7700::signal() {
void Scene7700::process(Event &event) {
Scene::process(event);
- if (_globals->_sceneItems.contains(&_sceneItem10)) {
+ if (contains<SceneItem *>(_globals->_sceneItems, &_sceneItem10)) {
if (_gfxButton.process(event)) {
_sceneItem10.remove();
_sceneHotspot15.remove();
diff --git a/engines/tsage/saveload.cpp b/engines/tsage/saveload.cpp
index a33f0a5381..8f9db26cdd 100644
--- a/engines/tsage/saveload.cpp
+++ b/engines/tsage/saveload.cpp
@@ -52,7 +52,7 @@ Saver::Saver() {
Saver::~Saver() {
// Internal validation that no saved object is still present
int totalLost = 0;
- for (List<SavedObject *>::iterator i = _saver->_objList.begin(); i != _saver->_objList.end(); ++i) {
+ for (SynchronisedList<SavedObject *>::iterator i = _saver->_objList.begin(); i != _saver->_objList.end(); ++i) {
SavedObject *so = *i;
if (so)
++totalLost;
@@ -128,12 +128,12 @@ Common::Error Saver::save(int slot, const Common::String &saveName) {
writeSavegameHeader(saveFile, header);
// Save out objects that need to come at the start of the savegame
- for (List<SaveListener *>::iterator i = _listeners.begin(); i != _listeners.end(); ++i) {
+ for (SynchronisedList<SaveListener *>::iterator i = _listeners.begin(); i != _listeners.end(); ++i) {
(*i)->listenerSynchronise(serialiser);
}
// Save each registered SaveObject descendant object into the savegame file
- for (List<SavedObject *>::iterator i = _objList.begin(); i != _objList.end(); ++i) {
+ for (SynchronisedList<SavedObject *>::iterator i = _objList.begin(); i != _objList.end(); ++i) {
serialiser.validate((*i)->getClassName());
(*i)->synchronise(serialiser);
}
@@ -171,12 +171,12 @@ Common::Error Saver::restore(int slot) {
delete header.thumbnail;
// Load in data for objects that need to come at the start of the savegame
- for (List<SaveListener *>::iterator i = _listeners.begin(); i != _listeners.end(); ++i) {
+ for (Common::List<SaveListener *>::iterator i = _listeners.begin(); i != _listeners.end(); ++i) {
(*i)->listenerSynchronise(serialiser);
}
// Loop through each registered object to load in the data
- for (List<SavedObject *>::iterator i = _objList.begin(); i != _objList.end(); ++i) {
+ for (SynchronisedList<SavedObject *>::iterator i = _objList.begin(); i != _objList.end(); ++i) {
serialiser.validate((*i)->getClassName());
(*i)->synchronise(serialiser);
}
@@ -343,7 +343,7 @@ bool Saver::savegamesExist() const {
*/
int Saver::blockIndexOf(SavedObject *p) {
int objIndex = 1;
- List<SavedObject *>::iterator iObj;
+ SynchronisedList<SavedObject *>::iterator iObj;
for (iObj = _objList.begin(); iObj != _objList.end(); ++iObj, ++objIndex) {
SavedObject *iObjP = *iObj;
@@ -364,7 +364,7 @@ void Saver::resolveLoadPointers() {
// Outer loop through the main object list
int objIndex = 1;
- for (List<SavedObject *>::iterator iObj = _objList.begin(); iObj != _objList.end(); ++iObj, ++objIndex) {
+ for (SynchronisedList<SavedObject *>::iterator iObj = _objList.begin(); iObj != _objList.end(); ++iObj, ++objIndex) {
Common::List<SavedObjectRef>::iterator iPtr;
for (iPtr = _unresolvedPtrs.begin(); iPtr != _unresolvedPtrs.end(); ) {
diff --git a/engines/tsage/saveload.h b/engines/tsage/saveload.h
index 12552f8104..2984f88144 100644
--- a/engines/tsage/saveload.h
+++ b/engines/tsage/saveload.h
@@ -103,63 +103,53 @@ public:
* Derived list class with extra functionality
*/
template<typename T>
-class List: public Common::List<T> {
+class SynchronisedList : public Common::List<T> {
public:
- bool contains(T v) {
- for (typename List<T>::iterator i = this->begin(); i != this->end(); ++i)
- if (*i == v)
- return true;
- return false;
- }
-
- typedef void (*ForEachFn)(T fn);
- void forEach(ForEachFn Fn) {
- for (typename List<T>::iterator i = this->begin(); i != this->end(); ++i)
- Fn(*i);
- }
-
- void clear2() {
- for (typename List<T>::iterator i = this->begin(); i != this->end(); ++i)
- delete *i;
- Common::List<T>::clear();
- }
-
void synchronise(Serialiser &s) {
int entryCount;
if (s.isLoading()) {
- List<T>::clear();
+ this->clear();
s.syncAsUint32LE(entryCount);
for (int idx = 0; idx < entryCount; ++idx) {
- List<T>::push_back(static_cast<T>((T)NULL));
- T &obj = List<T>::back();
+ this->push_back(static_cast<T>((T)NULL));
+ T &obj = Common::List<T>::back();
s.syncPointer((SavedObject **)&obj);
}
} else {
// Get the list size
- entryCount = 0;
- typename List<T>::iterator i;
- for (i = List<T>::begin(); i != List<T>::end(); ++i, ++entryCount)
- ;
+ entryCount = this->size();
// Write out list
s.syncAsUint32LE(entryCount);
- for (i = List<T>::begin(); i != List<T>::end(); ++i) {
+ for (typename Common::List<T>::iterator i = this->begin(); i != this->end(); ++i) {
s.syncPointer((SavedObject **)&*i);
}
- }
+ }
}
};
/**
+ * Search whether an element is contained in a list.
+ *
+ * @param l List to search.
+ * @param v Element to search for.
+ * @return True in case the element is contained, false otherwise.
+ */
+template<typename T>
+inline bool contains(const Common::List<T> &l, const T &v) {
+ return (Common::find(l.begin(), l.end(), v) != l.end());
+}
+
+/**
* Derived list class for holding function pointers
*/
template<typename T>
-class FunctionList: public List<void (*)(T)> {
+class FunctionList : public Common::List<void (*)(T)> {
public:
void notify(T v) {
- for (typename List<void (*)(T)>::iterator i = this->begin(); i != this->end(); ++i) {
+ for (typename Common::List<void (*)(T)>::iterator i = this->begin(); i != this->end(); ++i) {
(*i)(v);
}
}
@@ -180,10 +170,10 @@ typedef SavedObject *(*SavedObjectFactory)(const Common::String &className);
class Saver {
private:
- List<SavedObject *> _objList;
+ SynchronisedList<SavedObject *> _objList;
FunctionList<bool> _saveNotifiers;
FunctionList<bool> _loadNotifiers;
- List<SaveListener *> _listeners;
+ Common::List<SaveListener *> _listeners;
Common::List<SavedObjectRef> _unresolvedPtrs;
SavedObjectFactory _factoryPtr;
diff --git a/engines/tsage/scenes.cpp b/engines/tsage/scenes.cpp
index 5a351f3772..20f96f8cae 100644
--- a/engines/tsage/scenes.cpp
+++ b/engines/tsage/scenes.cpp
@@ -55,7 +55,7 @@ void SceneManager::checkScene() {
_nextSceneNumber = -1;
}
- _globals->_sceneListeners.forEach(SceneHandler::dispatchObject);
+ Common::for_each(_globals->_sceneListeners.begin(), _globals->_sceneListeners.end(), SceneHandler::dispatchObject);
}
void SceneManager::sceneChange() {
@@ -64,7 +64,7 @@ void SceneManager::sceneChange() {
_scene->remove();
// Clear the scene objects
- List<SceneObject *>::iterator io = _globals->_sceneObjects->begin();
+ SynchronisedList<SceneObject *>::iterator io = _globals->_sceneObjects->begin();
while (io != _globals->_sceneObjects->end()) {
SceneObject *sceneObj = *io;
++io;
@@ -80,7 +80,7 @@ void SceneManager::sceneChange() {
}
// Clear the hotspot list
- List<SceneItem *>::iterator ii = _globals->_sceneItems.begin();
+ SynchronisedList<SceneItem *>::iterator ii = _globals->_sceneItems.begin();
while (ii != _globals->_sceneItems.end()) {
SceneItem *sceneItem = *ii;
++ii;
@@ -145,7 +145,7 @@ void SceneManager::changeScene(int newSceneNumber) {
}
// Stop any objects that were animating
- List<SceneObject *>::iterator i;
+ SynchronisedList<SceneObject *>::iterator i;
for (i = _globals->_sceneObjects->begin(); i != _globals->_sceneObjects->end(); ++i) {
SceneObject *sceneObj = *i;
Common::Point pt(0, 0);
@@ -411,7 +411,7 @@ void Scene::drawAltObjects() {
Common::Array<SceneObject *> objList;
// Initial loop to set the priority for entries in the list
- for (List<SceneObject *>::iterator i = _globals->_sceneManager._altSceneObjects.begin();
+ for (SynchronisedList<SceneObject *>::iterator i = _globals->_sceneManager._altSceneObjects.begin();
i != _globals->_sceneManager._altSceneObjects.end(); ++i) {
SceneObject *obj = *i;
objList.push_back(obj);