aboutsummaryrefslogtreecommitdiff
path: root/engines/parallaction
diff options
context:
space:
mode:
authorNicola Mettifogo2007-11-19 20:23:01 +0000
committerNicola Mettifogo2007-11-19 20:23:01 +0000
commitd86246308d31b898ca22462de3a68910b52e0eb1 (patch)
tree508f4c662d1c0bf3238dc8abcf91edea2faaa142 /engines/parallaction
parent2a339d8ea3deb7b8ef28224ada00c1180bc260e3 (diff)
downloadscummvm-rg350-d86246308d31b898ca22462de3a68910b52e0eb1.tar.gz
scummvm-rg350-d86246308d31b898ca22462de3a68910b52e0eb1.tar.bz2
scummvm-rg350-d86246308d31b898ca22462de3a68910b52e0eb1.zip
Walk and script handling are now directly handled by the main loop, instead of relying on the job list.
svn-id: r29568
Diffstat (limited to 'engines/parallaction')
-rw-r--r--engines/parallaction/exec_ns.cpp6
-rw-r--r--engines/parallaction/parallaction.cpp16
-rw-r--r--engines/parallaction/parallaction.h11
-rw-r--r--engines/parallaction/parallaction_br.cpp4
-rw-r--r--engines/parallaction/parallaction_ns.cpp8
-rw-r--r--engines/parallaction/walk.cpp18
6 files changed, 33 insertions, 30 deletions
diff --git a/engines/parallaction/exec_ns.cpp b/engines/parallaction/exec_ns.cpp
index c0d75133f7..071810ad16 100644
--- a/engines/parallaction/exec_ns.cpp
+++ b/engines/parallaction/exec_ns.cpp
@@ -388,9 +388,13 @@ void Parallaction_ns::eraseAnimations() {
}
-void Parallaction_ns::jobRunScripts(void *parm, Job *j) {
+void Parallaction_ns::runScripts() {
debugC(9, kDebugExec, "jobRunScripts");
+ if (_engineFlags & kEnginePauseJobs) {
+ return;
+ }
+
static uint16 modCounter = 0;
for (AnimationList::iterator it = _animations.begin(); it != _animations.end(); it++) {
diff --git a/engines/parallaction/parallaction.cpp b/engines/parallaction/parallaction.cpp
index 1a61e5c0e0..bb1afe8a2c 100644
--- a/engines/parallaction/parallaction.cpp
+++ b/engines/parallaction/parallaction.cpp
@@ -288,6 +288,9 @@ void Parallaction::runGame() {
eraseLabel();
eraseAnimations();
+ runScripts();
+ walk();
+
runJobs();
drawAnimations();
@@ -364,15 +367,14 @@ void Parallaction::processInput(InputData *data) {
if (hitZone(kZoneYou, _mousePos.x, _mousePos.y) == 0) {
setArrowCursor();
}
- removeJob(_jRunScripts);
-// _jDrawInventory = addJob(kJobShowInventory, 0, kPriority2);
+ pauseJobs();
openInventory();
break;
case kEvCloseInventory: // closes inventory and possibly select item
closeInventory();
setInventoryCursor(data->_inventoryIndex);
- _jRunScripts = addJob(kJobRunScripts, 0, kPriority15);
+ resumeJobs();
addJob(kJobHideInventory, 0, kPriority20);
break;
@@ -890,7 +892,7 @@ void Parallaction::doLocationEnterTransition() {
pal.makeGrayscale();
_gfx->setPalette(pal);
- jobRunScripts(NULL, NULL);
+ runScripts();
drawAnimations();
_gfx->swapBuffers();
@@ -989,8 +991,10 @@ void Character::scheduleWalk(int16 x, int16 y) {
return;
}
- WalkNodeList *list = _builder.buildPath(x, y);
- _vm->addJob(kJobWalk, list, kPriority19 );
+ _walkPath = _builder.buildPath(x, y);
+
+// WalkNodeList *list = _builder.buildPath(x, y);
+// _vm->addJob(kJobWalk, list, kPriority19 );
_engineFlags |= kEngineWalking;
}
diff --git a/engines/parallaction/parallaction.h b/engines/parallaction/parallaction.h
index 70cbc22278..b12ee8beeb 100644
--- a/engines/parallaction/parallaction.h
+++ b/engines/parallaction/parallaction.h
@@ -218,6 +218,7 @@ struct Character {
Frames *_talk;
Frames *_objs;
PathBuilder _builder;
+ WalkNodeList *_walkPath;
Character(Parallaction *vm);
void getFoot(Common::Point &foot);
@@ -528,7 +529,6 @@ protected: // data
BackgroundInfo *_backgroundInfo;
Zone *_hoverZone;
- Job *_jRunScripts;
protected: // members
@@ -579,13 +579,12 @@ public:
virtual void parseLocation(const char* name) = 0;
- virtual void jobRunScripts(void*, Job *j) = 0;
virtual void jobDisplayDroppedItem(void*, Job *j) = 0;
virtual void jobRemovePickedItem(void*, Job *j) = 0;
virtual void jobToggleDoor(void*, Job *j) = 0;
- virtual void jobWalk(void*, Job *j) = 0;
-
+ virtual void runScripts() = 0;
+ virtual void walk() = 0;
virtual void drawAnimations() = 0;
virtual void eraseAnimations() = 0;
virtual void drawLabel() = 0;
@@ -735,13 +734,13 @@ private:
const Callable *_callables;
protected:
- void jobRunScripts(void*, Job *j);
void jobDisplayDroppedItem(void*, Job *j);
void jobRemovePickedItem(void*, Job *j);
void jobToggleDoor(void*, Job *j);
- void jobWalk(void*, Job *j);
void jobHideInventory(void *parm, Job *j);
+ void runScripts();
+ void walk();
void drawAnimations();
void eraseAnimations();
void drawLabel();
diff --git a/engines/parallaction/parallaction_br.cpp b/engines/parallaction/parallaction_br.cpp
index c3e12ac605..232e08799e 100644
--- a/engines/parallaction/parallaction_br.cpp
+++ b/engines/parallaction/parallaction_br.cpp
@@ -362,8 +362,8 @@ void Parallaction_br::initJobs() {
0,
&Parallaction_br::jobDisplayDroppedItem,
&Parallaction_br::jobRemovePickedItem,
- &Parallaction_br::jobRunScripts,
- &Parallaction_br::jobWalk,
+ 0,
+ 0,
0,
0,
&Parallaction_br::jobWaitRemoveLabelJob,
diff --git a/engines/parallaction/parallaction_ns.cpp b/engines/parallaction/parallaction_ns.cpp
index 9f4fdccceb..1b50074095 100644
--- a/engines/parallaction/parallaction_ns.cpp
+++ b/engines/parallaction/parallaction_ns.cpp
@@ -256,8 +256,6 @@ int Parallaction_ns::go() {
changeLocation(_location._name);
- _jRunScripts = addJob(kJobRunScripts, 0, kPriority15);
-
runGame();
return 0;
@@ -446,8 +444,8 @@ void Parallaction_ns::initJobs() {
0,
&Parallaction_ns::jobDisplayDroppedItem,
&Parallaction_ns::jobRemovePickedItem,
- &Parallaction_ns::jobRunScripts,
- &Parallaction_ns::jobWalk,
+ 0,
+ 0,
0,
0,
0,
@@ -457,8 +455,6 @@ void Parallaction_ns::initJobs() {
};
_jobsFn = jobs;
-
- _jRunScripts = 0;
}
JobOpcode* Parallaction_ns::createJobOpcode(uint functionId, Job *job) {
diff --git a/engines/parallaction/walk.cpp b/engines/parallaction/walk.cpp
index 8c12395952..d35132fc35 100644
--- a/engines/parallaction/walk.cpp
+++ b/engines/parallaction/walk.cpp
@@ -381,8 +381,12 @@ void Parallaction::finalizeWalk(WalkNodeList *list) {
delete list;
}
-void Parallaction_ns::jobWalk(void *parm, Job *j) {
- WalkNodeList *list = (WalkNodeList*)parm;
+void Parallaction_ns::walk() {
+ if ((_engineFlags & kEngineWalking) == 0) {
+ return;
+ }
+
+ WalkNodeList *list = _char._walkPath;
_char._ani._oldPos.x = _char._ani._left;
_char._ani._oldPos.y = _char._ani._top;
@@ -400,11 +404,11 @@ void Parallaction_ns::jobWalk(void *parm, Job *j) {
}
if (it == list->end()) {
debugC(1, kDebugWalk, "jobWalk reached last node");
- j->_finished = 1;
+// j->_finished = 1;
finalizeWalk(list);
return;
}
- j->_parm = list;
+ _char._walkPath = list;
// selectWalkFrame must be performed before position is changed by clipMove
int16 v16 = selectWalkFrame(pos, *it);
@@ -416,7 +420,7 @@ void Parallaction_ns::jobWalk(void *parm, Job *j) {
if (newpos == _char._ani._oldPos) {
debugC(1, kDebugWalk, "jobWalk was blocked by an unforeseen obstacle");
- j->_finished = 1;
+// j->_finished = 1;
finalizeWalk(list);
} else {
_char._ani._frame = v16 + walkData2 + 1;
@@ -445,7 +449,3 @@ PathBuilder::PathBuilder(Animation *anim) : _anim(anim), _list(0) {
} // namespace Parallaction
-
-
-
-