void WalkmeshWidget::fill(Field *field)
{
	this->walkmesh = field->walkmesh();
	this->camera = field->camera();
	this->infFile = field->inf();
	this->bgFile = field->background();
	this->scripts = field->scriptsAndTexts();
	this->field = field;
	this->fieldModels.clear();
	if(modelsVisible) {
		openModels();
	}

	updatePerspective();
	resetCamera();
}
Exemple #2
0
int FieldArchivePS::open(const QString &path, ArchiveObserver *progress)
{
	FieldPS *field;
	QString desc;
	int i, currentMap=0, fieldID=0;

	if(iso)		delete iso;
	iso = new FF8DiscArchive(path);
	if(!iso->open(QIODevice::ReadOnly)) {
		errorMsg = QObject::tr("Impossible d'ouvrir le fichier image disque. (%1)").arg(iso->errorString());
		return 1;
	}

	if(!iso->findIMG()) {
		errorMsg = QObject::tr("Fichier FF8DISC?.IMG introuvable.");
		return 4;
	}

	const QList<FF8DiscFile> &fieldFiles = iso->fieldDirectory();
	int tocSize = fieldFiles.size();
	const int tocStart = iso->isDemo() ? 0 : 77;

	if(tocSize == 0) {
		errorMsg = QObject::tr("Impossible d'ouvrir le dossier field.");
		return 4;
	}

	clearFields();
	setMapList(QStringList());
	int indexOf;

	quint32 freq = ((tocSize - tocStart) / 3)/100;

	if(freq == 0) {
		freq = 1;
	}

	progress->setObserverMaximum((tocSize - tocStart) / 3);

	for(i=tocStart ; i<tocSize ; i += 3) {
		QCoreApplication::processEvents();
		if(progress->observerWasCanceled()) {
			clearFields();
			errorMsg = QObject::tr("Ouverture annulée.");
			return 2;
		}
		if(currentMap % freq == 0) {
			progress->setObserverValue(currentMap);
		}

		QByteArray fieldData = iso->fileLZS(fieldFiles.at(i));

		if(!fieldData.isEmpty()) {
			if (iso->isDemo()) {
				field = new FieldJpDemoPS(i);
			} else {
				field = new FieldPS(i);
			}
			if(field->open(fieldData)) {
				if(field->hasJsmFile())
					desc = Data::location(field->getJsmFile()->mapID());
				else
					desc = QString();

				indexOf = mapList().indexOf(field->name());
				QString mapId = indexOf==-1 ? "~" : QString("%1").arg(indexOf, 3, 10, QChar('0'));

				fields.append(field);
				fieldsSortByName.insert(field->name(), fieldID);
				fieldsSortByDesc.insert(desc, fieldID);
				fieldsSortByMapId.insert(mapId, fieldID);
				++fieldID;
			} else {
				delete field;
			}
		}
		++currentMap;
	}

	if(fields.isEmpty()) {
		errorMsg = QObject::tr("Aucun écran trouvé.");
		return 4;
	}

	openModels();

	if(iso->isJp() && Config::value("encoding", "00").toString() == "00") {
		Config::setValue("encoding", "01");
	} else if(!iso->isJp() && Config::value("encoding", "00").toString() == "01") {
		Config::setValue("encoding", "00");
	}

	return 0;
}