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; | 
