aboutsummaryrefslogtreecommitdiff
path: root/engines/illusions/thread.cpp
diff options
context:
space:
mode:
authorjohndoe1232014-04-01 11:22:58 +0200
committerEugene Sandulenko2018-07-20 06:43:33 +0000
commitd77d4ed4a61d79ffc75bb9dbdab01157da387a13 (patch)
treebcf62f7f9ce9b3dd8a95cca16fe96bfc22d8ff66 /engines/illusions/thread.cpp
parentf2c48e3ae0e5775da6f3dcac841414cf8b5379ef (diff)
downloadscummvm-rg350-d77d4ed4a61d79ffc75bb9dbdab01157da387a13.tar.gz
scummvm-rg350-d77d4ed4a61d79ffc75bb9dbdab01157da387a13.tar.bz2
scummvm-rg350-d77d4ed4a61d79ffc75bb9dbdab01157da387a13.zip
ILLUSIONS: Fix bug which occured when trying to walk while talking
- Fix minor bugs - Work on talk thread handling
Diffstat (limited to 'engines/illusions/thread.cpp')
-rw-r--r--engines/illusions/thread.cpp16
1 files changed, 12 insertions, 4 deletions
diff --git a/engines/illusions/thread.cpp b/engines/illusions/thread.cpp
index 38e69007c0..980a8afc4b 100644
--- a/engines/illusions/thread.cpp
+++ b/engines/illusions/thread.cpp
@@ -22,6 +22,7 @@
#include "illusions/illusions.h"
#include "illusions/thread.h"
+#include "illusions/actor.h"
namespace Illusions {
@@ -55,7 +56,7 @@ void Thread::onTerminated() {
}
void Thread::onKill() {
- // TODO artmgrThreadIsDead(thread->threadId);
+ _vm->_controls->threadIsDead(_threadId);
terminate();
}
@@ -110,11 +111,11 @@ int Thread::update() {
void Thread::terminate() {
if (!_terminated) {
- if (!(_notifyFlags & 1))
+ if (!(_notifyFlags & 1)) {
_vm->notifyThreadId(_callingThreadId);
+ }
_callingThreadId = 0;
onTerminated();
- // TODO _vm->removeThread(_threadId, this);
_terminated = true;
}
}
@@ -128,7 +129,6 @@ ThreadList::ThreadList(IllusionsEngine *vm)
void ThreadList::startThread(Thread *thread) {
// TODO tag has to be set by the Thread class scrmgrGetCurrentScene();
_threads.push_back(thread);
- // TODO _vm->addThread(thread->_threadId, thread);
}
void ThreadList::updateThreads() {
@@ -246,6 +246,14 @@ void ThreadList::endTalkThreads() {
}
}
+void ThreadList::endTalkThreadsNoNotify() {
+ for (Iterator it = _threads.begin(); it != _threads.end(); ++it) {
+ Thread *thread = *it;
+ if (thread->_type == kTTTalkThread && thread->_callingThreadId == 0)
+ thread->terminate();
+ }
+}
+
void ThreadList::killThread(uint32 threadId) {
if (!threadId)