mirror of
https://github.com/redstrate/Novus.git
synced 2025-04-28 06:37:44 +00:00
karaku: Finish up definition integration
It now loads some column names correctly, and the links.
This commit is contained in:
parent
f6c9d13b09
commit
57e3cd5fa8
3 changed files with 76 additions and 53 deletions
|
@ -43,12 +43,17 @@ MainWindow::MainWindow(GameData *data)
|
||||||
layout->addWidget(exdPart);
|
layout->addWidget(exdPart);
|
||||||
|
|
||||||
connect(listWidget, &SheetListWidget::sheetSelected, this, [data, exdPart](const QString &name) {
|
connect(listWidget, &SheetListWidget::sheetSelected, this, [data, exdPart](const QString &name) {
|
||||||
|
QString definitionPath;
|
||||||
|
|
||||||
|
const QDir dataDir = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation);
|
||||||
|
const QDir definitionsDir = dataDir.absoluteFilePath(QStringLiteral("definitions"));
|
||||||
|
|
||||||
auto path = QStringLiteral("exd/%1.exh").arg(name.toLower());
|
auto path = QStringLiteral("exd/%1.exh").arg(name.toLower());
|
||||||
auto pathStd = path.toStdString();
|
auto pathStd = path.toStdString();
|
||||||
|
|
||||||
auto file = physis_gamedata_extract_file(data, pathStd.c_str());
|
auto file = physis_gamedata_extract_file(data, pathStd.c_str());
|
||||||
|
|
||||||
exdPart->loadSheet(name, file);
|
exdPart->loadSheet(name, file, definitionsDir.absoluteFilePath(QStringLiteral("%1.json").arg(name)));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -34,13 +34,15 @@ EXDPart::EXDPart(GameData *data, QWidget *parent)
|
||||||
contentsBoxLayout->addWidget(pageTabWidget);
|
contentsBoxLayout->addWidget(pageTabWidget);
|
||||||
}
|
}
|
||||||
|
|
||||||
void EXDPart::loadSheet(const QString &name, physis_Buffer buffer)
|
void EXDPart::loadSheet(const QString &name, physis_Buffer buffer, const QString &definitionPath)
|
||||||
{
|
{
|
||||||
pageTabWidget->clear();
|
pageTabWidget->clear();
|
||||||
|
|
||||||
QFile definitionFile(QStringLiteral("Achievement.json"));
|
QFile definitionFile(definitionPath);
|
||||||
definitionFile.open(QIODevice::ReadOnly);
|
definitionFile.open(QIODevice::ReadOnly);
|
||||||
|
|
||||||
|
qInfo() << definitionPath;
|
||||||
|
|
||||||
QJsonArray definitionList;
|
QJsonArray definitionList;
|
||||||
if (definitionFile.isOpen()) {
|
if (definitionFile.isOpen()) {
|
||||||
auto document = QJsonDocument::fromJson(definitionFile.readAll());
|
auto document = QJsonDocument::fromJson(definitionFile.readAll());
|
||||||
|
@ -51,7 +53,12 @@ void EXDPart::loadSheet(const QString &name, physis_Buffer buffer)
|
||||||
&& definition.toObject()[QLatin1String("converter")].toObject()[QLatin1String("type")].toString() == QStringLiteral("link")) {
|
&& definition.toObject()[QLatin1String("converter")].toObject()[QLatin1String("type")].toString() == QStringLiteral("link")) {
|
||||||
auto linkName = definition.toObject()[QLatin1String("converter")].toObject()[QLatin1String("target")].toString();
|
auto linkName = definition.toObject()[QLatin1String("converter")].toObject()[QLatin1String("target")].toString();
|
||||||
|
|
||||||
auto linkExh = physis_parse_excel_sheet_header(buffer);
|
auto path = QStringLiteral("exd/%1.exh").arg(linkName.toLower());
|
||||||
|
auto pathStd = path.toStdString();
|
||||||
|
|
||||||
|
auto file = physis_gamedata_extract_file(data, pathStd.c_str());
|
||||||
|
|
||||||
|
auto linkExh = physis_parse_excel_sheet_header(file);
|
||||||
auto linkExd = physis_gamedata_read_excel_sheet(data, linkName.toStdString().c_str(), linkExh, getSuitableLanguage(linkExh), 0);
|
auto linkExd = physis_gamedata_read_excel_sheet(data, linkName.toStdString().c_str(), linkExh, getSuitableLanguage(linkExh), 0);
|
||||||
|
|
||||||
if (linkExd.p_ptr != nullptr) {
|
if (linkExd.p_ptr != nullptr) {
|
||||||
|
@ -124,7 +131,8 @@ void EXDPart::loadSheet(const QString &name, physis_Buffer buffer)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (definitionList.contains(static_cast<int>(z))) {
|
// TODO: index could be different
|
||||||
|
if (z >= 0 && z < definitionList.size()) {
|
||||||
columnType = definitionList[z].toObject()[QLatin1String("name")].toString();
|
columnType = definitionList[z].toObject()[QLatin1String("name")].toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -138,6 +146,49 @@ void EXDPart::loadSheet(const QString &name, physis_Buffer buffer)
|
||||||
for (unsigned int z = 0; z < exd.column_count; z++) {
|
for (unsigned int z = 0; z < exd.column_count; z++) {
|
||||||
auto columnData = exd.row_data[j].column_data[z];
|
auto columnData = exd.row_data[j].column_data[z];
|
||||||
|
|
||||||
|
auto [columnString, columnRow] = getColumnData(columnData);
|
||||||
|
|
||||||
|
if (z >= 0 && z < definitionList.size()) {
|
||||||
|
auto definition = definitionList[z].toObject();
|
||||||
|
if (definition.contains(QLatin1String("converter"))
|
||||||
|
&& definition[QLatin1String("converter")].toObject()[QLatin1String("type")].toString() == QLatin1String("link")) {
|
||||||
|
auto linkName = definition[QLatin1String("converter")].toObject()[QLatin1String("target")].toString();
|
||||||
|
|
||||||
|
if (cachedExcelSheets.contains(linkName)) {
|
||||||
|
auto cachedExcel = cachedExcelSheets[linkName];
|
||||||
|
if (static_cast<unsigned int>(columnRow) < cachedExcel.exd.row_count) {
|
||||||
|
auto [colString, _] = getColumnData(*cachedExcel.exd.row_data[columnRow].column_data);
|
||||||
|
columnString = colString;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
auto newItem = new QTableWidgetItem(columnString);
|
||||||
|
|
||||||
|
tableWidget->setItem(j, z, newItem);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
tableWidget->resizeColumnsToContents();
|
||||||
|
|
||||||
|
pageTabWidget->addTab(tableWidget, QStringLiteral("Page %1").arg(i));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Language EXDPart::getSuitableLanguage(physis_EXH *pExh)
|
||||||
|
{
|
||||||
|
for (uint32_t i = 0; i < pExh->language_count; i++) {
|
||||||
|
if (pExh->languages[i] == Language::English) {
|
||||||
|
return Language::English;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return Language::None;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::pair<QString, int> EXDPart::getColumnData(physis_ColumnData &columnData)
|
||||||
|
{
|
||||||
QString columnString;
|
QString columnString;
|
||||||
int columnRow;
|
int columnRow;
|
||||||
switch (columnData.tag) {
|
switch (columnData.tag) {
|
||||||
|
@ -184,42 +235,7 @@ void EXDPart::loadSheet(const QString &name, physis_Buffer buffer)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (definitionList.contains(static_cast<int>(z))) {
|
return {columnString, columnRow};
|
||||||
auto definition = definitionList[z].toObject();
|
|
||||||
if (definition.contains(QLatin1String("converter"))
|
|
||||||
&& definition[QLatin1String("converter")].toObject()[QLatin1String("type")].toString() == QLatin1String("link")) {
|
|
||||||
auto linkName = definition[QLatin1String("converter")].toObject()[QLatin1String("target")].toString();
|
|
||||||
|
|
||||||
if (cachedExcelSheets.contains(linkName)) {
|
|
||||||
auto cachedExcel = cachedExcelSheets[linkName];
|
|
||||||
if (static_cast<unsigned int>(columnRow) < cachedExcel.exd.row_count) {
|
|
||||||
columnString = QString::fromStdString(cachedExcel.exd.row_data[columnRow].column_data->string._0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
auto newItem = new QTableWidgetItem(columnString);
|
|
||||||
|
|
||||||
tableWidget->setItem(j, z, newItem);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
tableWidget->resizeColumnsToContents();
|
|
||||||
|
|
||||||
pageTabWidget->addTab(tableWidget, QStringLiteral("Page %1").arg(i));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Language EXDPart::getSuitableLanguage(physis_EXH *pExh)
|
|
||||||
{
|
|
||||||
for (uint32_t i = 0; i < pExh->language_count; i++) {
|
|
||||||
if (pExh->languages[i] == Language::English) {
|
|
||||||
return Language::English;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return Language::None;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#include "moc_exdpart.cpp"
|
#include "moc_exdpart.cpp"
|
|
@ -17,9 +17,11 @@ class EXDPart : public QWidget
|
||||||
public:
|
public:
|
||||||
explicit EXDPart(GameData *data, QWidget *parent = nullptr);
|
explicit EXDPart(GameData *data, QWidget *parent = nullptr);
|
||||||
|
|
||||||
void loadSheet(const QString &name, physis_Buffer buffer);
|
void loadSheet(const QString &name, physis_Buffer buffer, const QString &definitionPath = {});
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
std::pair<QString, int> getColumnData(physis_ColumnData &columnData);
|
||||||
|
|
||||||
GameData *data = nullptr;
|
GameData *data = nullptr;
|
||||||
|
|
||||||
QTabWidget *pageTabWidget = nullptr;
|
QTabWidget *pageTabWidget = nullptr;
|
||||||
|
|
Loading…
Add table
Reference in a new issue