// ----------------------------------------------------------------- // Name : update // ----------------------------------------------------------------- void DiscussionAction::update(double delta) { if (!isFinished() && isTalking()) { m_fSentenceTimer -= delta; if (!isTalking()) { m_pDiscussion->notifyStoppedTalking(this); } } }
static void In1_atnhi(int tr) { if (par_status & 0xff) { ResetBus(); Go(WaitATN); } else { if (isListening()) { Go(In1); } else { if (isTalking()) { ResetBus(); if (!parallel_ndac) { /* old pet... */ Go(OldPet); } else { State[OldPet].m[NDAClo](tr); return; } } else { #ifdef PARALLEL_DEBUG if (parallel_debug) log_warning(LOG_DEFAULT, "IEEE488: Ouch, something weird happened: %s got %s", State[In1].name, Trans[tr]); #endif ResetBus(); Go(WaitATN); } } } }
bool Actor::restoreState(SaveGame *savedState) { for (Common::List<Costume *>::const_iterator i = _costumeStack.begin(); i != _costumeStack.end(); ++i) { delete *i; } _costumeStack.clear(); // load actor name _name = savedState->readString(); _setName = savedState->readString(); _talkColor = savedState->readColor(); _pos = savedState->readVector3d(); _pitch = savedState->readFloat(); _yaw = savedState->readFloat(); _roll = savedState->readFloat(); _walkRate = savedState->readFloat(); _turnRate = savedState->readFloat(); _constrain = savedState->readBool(); _reflectionAngle = savedState->readFloat(); _visible = savedState->readBool(); _lookingMode = savedState->readBool(); _scale = savedState->readFloat(); _timeScale = savedState->readFloat(); _puckOrient = savedState->readBool(); _talkSoundName = savedState->readString(); _talking = savedState->readBool(); _backgroundTalk = savedState->readBool(); if (isTalking()) { g_grim->addTalkingActor(this); } _collisionMode = (CollisionMode)savedState->readLEUint32(); _collisionScale = savedState->readFloat(); if (savedState->readBool()) { Common::String fn = savedState->readString(); _lipSync = g_resourceloader->getLipSync(fn); } else { _lipSync = NULL; } uint32 size = savedState->readLEUint32(); for (uint32 i = 0; i < size; ++i) { Common::String fname = savedState->readString(); const int depth = savedState->readLESint32(); Costume *pc = NULL; if (depth > 0) { //build all the previousCostume hierarchy Common::String *names = new Common::String[depth]; for (int j = 0; j < depth; ++j) { names[j] = savedState->readString(); } for (int j = depth - 1; j >= 0; --j) { pc = findCostume(names[j]); if (!pc) { pc = g_resourceloader->loadCostume(names[j], pc); } } delete[] names; } Costume *c = g_resourceloader->loadCostume(fname, pc); c->restoreState(savedState); _costumeStack.push_back(c); } _turning = savedState->readBool(); _moveYaw = savedState->readFloat(); _walking = savedState->readBool(); _destPos = savedState->readVector3d(); _restChore.restoreState(savedState, this); _walkChore.restoreState(savedState, this); _walkedLast = savedState->readBool(); _walkedCur = savedState->readBool(); _leftTurnChore.restoreState(savedState, this); _rightTurnChore.restoreState(savedState, this); _lastTurnDir = savedState->readLESint32(); _currTurnDir = savedState->readLESint32(); for (int i = 0; i < 10; ++i) { _talkChore[i].restoreState(savedState, this); } _talkAnim = savedState->readLESint32(); _mumbleChore.restoreState(savedState, this); clearShadowPlanes(); for (int i = 0; i < MAX_SHADOWS; ++i) { Shadow &shadow = _shadowArray[i]; shadow.name = savedState->readString(); shadow.pos = savedState->readVector3d(); size = savedState->readLEUint32(); Set *scene = NULL; for (uint32 j = 0; j < size; ++j) { Common::String setName = savedState->readString(); Common::String secName = savedState->readString(); if (!scene || scene->getName() != setName) { scene = g_grim->findSet(setName); } if (scene) { addShadowPlane(secName.c_str(), scene, i); } else { warning("%s: No scene \"%s\" found, cannot restore shadow on sector \"%s\"", getName().c_str(), setName.c_str(), secName.c_str()); } } shadow.shadowMaskSize = savedState->readLESint32(); delete[] shadow.shadowMask; if (shadow.shadowMaskSize > 0) { shadow.shadowMask = new byte[shadow.shadowMaskSize]; savedState->read(shadow.shadowMask, shadow.shadowMaskSize); } else { shadow.shadowMask = NULL; } shadow.active = savedState->readBool(); shadow.dontNegate = savedState->readBool(); } _activeShadowSlot = savedState->readLESint32(); _sayLineText = savedState->readLESint32(); _lookAtVector = savedState->readVector3d(); size = savedState->readLEUint32(); for (uint32 i = 0; i < size; ++i) { _path.push_back(savedState->readVector3d()); } return true; }