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(); }
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; }