diff options
Diffstat (limited to 'engines/fullpipe/behavior.cpp')
-rw-r--r-- | engines/fullpipe/behavior.cpp | 58 |
1 files changed, 51 insertions, 7 deletions
diff --git a/engines/fullpipe/behavior.cpp b/engines/fullpipe/behavior.cpp index 1a2b7bb8e2..75cb027d7a 100644 --- a/engines/fullpipe/behavior.cpp +++ b/engines/fullpipe/behavior.cpp @@ -132,7 +132,7 @@ void BehaviorManager::updateBehavior(BehaviorInfo *behaviorInfo, BehaviorEntry * mq->sendNextCommand(); bhi->_flags &= 0xFFFFFFFD; - } else if (behaviorInfo->_counter >= bhi->_delay && bhi->_percent && g_fullpipe->_rnd->getRandomNumber(32767) <= entry->_items[i]->_percent) { + } else if (behaviorInfo->_counter >= bhi->_delay && bhi->_percent && g_fp->_rnd->getRandomNumber(32767) <= entry->_items[i]->_percent) { MessageQueue *mq = new MessageQueue(bhi->_messageQueue, 0, 1); mq->sendNextCommand(); @@ -149,7 +149,7 @@ void BehaviorManager::updateStaticAniBehavior(StaticANIObject *ani, int delay, B MessageQueue *mq = 0; if (bhe->_flags & 1) { - uint rnd = g_fullpipe->_rnd->getRandomNumber(32767); + uint rnd = g_fp->_rnd->getRandomNumber(32767); uint runPercent = 0; for (int i = 0; i < bhe->_itemsCount; i++) { if (!(bhe->_items[i]->_flags & 1) && bhe->_items[i]->_percent) { @@ -164,7 +164,7 @@ void BehaviorManager::updateStaticAniBehavior(StaticANIObject *ani, int delay, B for (int i = 0; i < bhe->_itemsCount; i++) { if (!(bhe->_items[i]->_flags & 1) && delay >= bhe->_items[i]->_delay) { if (bhe->_items[i]->_percent) { - if (g_fullpipe->_rnd->getRandomNumber(32767) <= bhe->_items[i]->_percent) { + if (g_fp->_rnd->getRandomNumber(32767) <= bhe->_items[i]->_percent) { mq = new MessageQueue(bhe->_items[i]->_messageQueue, 0, 1); break; } @@ -179,6 +179,50 @@ void BehaviorManager::updateStaticAniBehavior(StaticANIObject *ani, int delay, B } } +bool BehaviorManager::setBehaviorEnabled(StaticANIObject *obj, int aniId, int quId, int flag) { + BehaviorEntryInfo *entry = getBehaviorEntryInfoByMessageQueueDataId(obj, aniId, quId); + + if (entry) { + if (flag) + entry->_flags &= 0xFFFFFFFE; + else + entry->_flags |= 1; + } else + return false; + + return true; +} + +void BehaviorManager::setFlagByStaticAniObject(StaticANIObject *ani, int flag) { + for (uint i = 0; i < _behaviors.size(); i++) { + BehaviorInfo *beh = _behaviors[i]; + + if (ani == beh->_ani) { + if (flag) + beh->_flags &= 0xfe; + else + beh->_flags |= 1; + } + } +} + +BehaviorEntryInfo *BehaviorManager::getBehaviorEntryInfoByMessageQueueDataId(StaticANIObject *ani, int id1, int id2) { + for (uint i = 0; i < _behaviors.size(); i++) { + if (_behaviors[i]->_ani == ani) { + for (uint j = 0; j < _behaviors[i]->_bheItems.size(); j++) { + if (_behaviors[i]->_bheItems[j]->_staticsId == id1) { + for (int k = 0; k < _behaviors[i]->_bheItems[j]->_itemsCount; k++) { + if (_behaviors[i]->_bheItems[j]->_items[k]->_messageQueue->_dataId == id2) + return _behaviors[i]->_bheItems[j]->_items[k]; + } + } + } + } + } + + return 0; +} + void BehaviorInfo::clear() { _ani = 0; _staticsId = 0; @@ -227,11 +271,11 @@ void BehaviorInfo::initObjectBehavior(GameVar *var, Scene *sc, StaticANIObject * if (strcmp(var->_value.stringValue, "ROOT")) break; - GameVar *v1 = g_fullpipe->getGameLoaderGameVar()->getSubVarByName("BEHAVIOR")->getSubVarByName(ani->getName()); + GameVar *v1 = g_fp->getGameLoaderGameVar()->getSubVarByName("BEHAVIOR")->getSubVarByName(ani->getName()); if (v1 == var) return; - sc = g_fullpipe->accessScene(ani->_sceneId); + sc = g_fp->accessScene(ani->_sceneId); clear(); var = v1; _itemsCount = var->getSubVarsCount(); @@ -239,7 +283,7 @@ void BehaviorInfo::initObjectBehavior(GameVar *var, Scene *sc, StaticANIObject * } for (int i = 0; i < _itemsCount; i++) { - int maxDelay; + int maxDelay = 0; _bheItems.push_back(new BehaviorEntry(var->getSubVarByIndex(i), sc, ani, &maxDelay)); @@ -275,7 +319,7 @@ BehaviorEntry::BehaviorEntry(GameVar *var, Scene *sc, StaticANIObject *ani, int for (int i = 0; i < _itemsCount; i++) { GameVar *subvar = var->getSubVarByIndex(i); - int delay; + int delay = 0; _items[i] = new BehaviorEntryInfo(subvar, sc, &delay); totalPercent += delay; |