Skip to content

Commit

Permalink
PEGASUS: Fix idlers freeing themselves
Browse files Browse the repository at this point in the history
Our idler handling is more like the original now
  • Loading branch information
Matthew Hoops committed Oct 3, 2011
1 parent 0756f72 commit d2789a1
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 5 deletions.
20 changes: 16 additions & 4 deletions engines/pegasus/pegasus.cpp
Expand Up @@ -78,6 +78,7 @@ PegasusEngine::PegasusEngine(OSystem *syst, const PegasusGameDescription *gamede
_switchModesSync = false;
_draggingItem = 0;
_dragType = kDragNoDrag;
_idlerHead = 0;
}

PegasusEngine::~PegasusEngine() {
Expand Down Expand Up @@ -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) {
Expand Down
2 changes: 1 addition & 1 deletion engines/pegasus/pegasus.h
Expand Up @@ -211,7 +211,7 @@ friend class InputHandler;
Common::String _introDirectory;

// Idlers
Common::List<Idler *> _idlers;
Idler *_idlerHead;
void giveIdleTime();

// Items
Expand Down
2 changes: 2 additions & 0 deletions engines/pegasus/timers.cpp
Expand Up @@ -31,6 +31,8 @@ namespace Pegasus {

Idler::Idler() {
_isIdling = false;
_nextIdler = 0;
_prevIdler = 0;
}

Idler::~Idler() {
Expand Down
1 change: 1 addition & 0 deletions engines/pegasus/timers.h
Expand Up @@ -50,6 +50,7 @@ friend class PegasusEngine;
virtual void useIdleTime() {}

bool _isIdling;
Idler *_nextIdler, *_prevIdler;
};

enum {
Expand Down

0 comments on commit d2789a1

Please sign in to comment.