Esempio n. 1
0
int Overlays::play(const Common::String &name, int loopId, bool loopForever, bool startNow, int a6) {
	assert(name.size() <= 12);
	if (loopId < 0) {
		warning("Overlays::play - loop id can't be a negative number!");
		return -1;
	}

	int32 hash = MIXArchive::getHash(name);
	int index = findByHash(hash);
	if (index < 0) {
		index = findEmpty();
		if (index < 0) {
			return index;
		}
		_videos[index].loaded = true;
		_videos[index].name = name;
		_videos[index].hash = hash;
		_videos[index].loopId = loopId;
		_videos[index].enqueuedLoopId = -1;
		_videos[index].loopForever = loopForever;
		_videos[index].vqaPlayer = new VQAPlayer(_vm, &_vm->_surfaceFront, Common::String::format("%s.VQA", name.c_str()));

		if (!_videos[index].vqaPlayer) {
			resetSingle(index);
			return -1;
		}
		// TODO? Removed as redundant
		// repeat forever
		//_videos[index].vqaPlayer->setBeginAndEndFrame(0, 0, -1, kLoopSetModeJustStart, nullptr, nullptr);
	}

	bool skipNewVQAPlayerOpen = false;
	if (_videos[index].vqaPlayer
	    && !startNow
	    && _videos[index].vqaPlayer->getFrameCount() > 0
	) {
		skipNewVQAPlayerOpen = true;
		_videos[index].enqueuedLoopId = loopId;
	}

	if (skipNewVQAPlayerOpen || _videos[index].vqaPlayer->open()) {
		_videos[index].vqaPlayer->setLoop(
			loopId,
			loopForever ? -1 : 0,
			startNow ? kLoopSetModeImmediate : kLoopSetModeEnqueue,
			nullptr, nullptr);
	} else {
		resetSingle(index);
		return -1;
	}
	return index;
}
Esempio n. 2
0
void Overlays::removeAll() {
	for (int i = 0; i < kOverlayVideos; ++i) {
		if (_videos[i].loaded) {
			resetSingle(i);
		}
	}
}
Esempio n. 3
0
Overlays::~Overlays() {
	for (int i = 0; i < kOverlayVideos; ++i) {
		resetSingle(i);
	}
	_videos.clear();
	reset();
}
Esempio n. 4
0
void Overlays::remove(const Common::String &name) {
	int id = mix_id(name);
	int index = findById(id);
	if (index >= 0) {
		resetSingle(index);
	}
}
Esempio n. 5
0
void Overlays::tick() {
	for (int i = 0; i < kOverlayVideos; ++i) {
		if (_videos[i].loaded) {
			int frame = _videos[i].vqaPlayer->update(true);
			if (frame < 0) {
				resetSingle(i);
			}
		}
	}
}
Esempio n. 6
0
bool Overlays::init() {
	reset();
	_videos.resize(kOverlayVideos);

	for (int i = 0; i < kOverlayVideos; ++i) {
		_videos[i].vqaPlayer = nullptr;
		resetSingle(i);
	}

	return true;
}
Esempio n. 7
0
void RespTable::cleanObject(DtObjectRef obj) {
  resetSingle(obj);
  for (PairList::const_iterator i = pairList.begin(); 
       i != pairList.end(); ++i) { 
    if ((*i).first.first == obj) { 
      partnerList.push_back((*i).first.second);
    }
    else if ((*i).first.second == obj) {
      partnerList.push_back((*i).first.first);
    }
  }
  while (!partnerList.empty()) {
    resetPair(obj, partnerList.back());
    partnerList.pop_back();
  }
}
Esempio n. 8
0
void Overlays::resume(bool isLoadingGame) {

	for (int i = 0; i < kOverlayVideos; ++i) {
		if (_videos[i].loaded && isLoadingGame) {
			_videos[i].vqaPlayer = new VQAPlayer(_vm, &_vm->_surfaceFront, Common::String::format("%s.VQA", _videos[i].name.c_str()));
			if (!_videos[i].vqaPlayer) {
				resetSingle(i);
				continue;
			}

			_videos[i].vqaPlayer->open();
			_videos[i].vqaPlayer->setLoop(
				_videos[i].loopId,
				_videos[i].loopForever ? -1 : 0,
				kLoopSetModeImmediate,
				nullptr, nullptr);

			_videos[i].vqaPlayer->seekToFrame(_videos[i].frame);
			_videos[i].vqaPlayer->update(true);
		}
	}
}
Esempio n. 9
0
void Overlays::remove(const Common::String &name) {
	int index = findByHash(MIXArchive::getHash(name));
	if (index >= 0) {
		resetSingle(index);
	}
}