aboutsummaryrefslogtreecommitdiff
path: root/engines/pegasus/pegasus.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/pegasus/pegasus.cpp')
-rw-r--r--engines/pegasus/pegasus.cpp20
1 files changed, 16 insertions, 4 deletions
diff --git a/engines/pegasus/pegasus.cpp b/engines/pegasus/pegasus.cpp
index 7dac148f61..4200147e2d 100644
--- a/engines/pegasus/pegasus.cpp
+++ b/engines/pegasus/pegasus.cpp
@@ -78,6 +78,7 @@ PegasusEngine::PegasusEngine(OSystem *syst, const PegasusGameDescription *gamede
_switchModesSync = false;
_draggingItem = 0;
_dragType = kDragNoDrag;
+ _idlerHead = 0;
}
PegasusEngine::~PegasusEngine() {
@@ -311,16 +312,27 @@ GUI::Debugger *PegasusEngine::getDebugger() {
}
void PegasusEngine::addIdler(Idler *idler) {
- _idlers.push_back(idler);
+ idler->_nextIdler = _idlerHead;
+ if (_idlerHead)
+ _idlerHead->_prevIdler = idler;
+ idler->_prevIdler = 0;
+ _idlerHead = idler;
}
void PegasusEngine::removeIdler(Idler *idler) {
- _idlers.remove(idler);
+ if (idler->_prevIdler)
+ idler->_prevIdler->_nextIdler = idler->_nextIdler;
+ if (idler->_nextIdler)
+ idler->_nextIdler->_prevIdler = idler->_prevIdler;
+ if (idler == _idlerHead)
+ _idlerHead = idler->_nextIdler;
+ idler->_nextIdler = 0;
+ idler->_prevIdler = 0;
}
void PegasusEngine::giveIdleTime() {
- for (Common::List<Idler *>::iterator it = _idlers.begin(); it != _idlers.end(); it++)
- (*it)->useIdleTime();
+ for (Idler *idler = _idlerHead; idler != 0; idler = idler->_nextIdler)
+ idler->useIdleTime();
}
void PegasusEngine::addTimeBase(TimeBase *timeBase) {