Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions apps/armoury/src/gearlistmodel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -33,23 +33,23 @@ GearListModel::GearListModel(physis_SqPackResource *data, QObject *parent)
m_sheet = physis_sqpack_read_excel_sheet(data, "Item", &m_exh, Language::English);

for (unsigned int i = 0; i < m_sheet.page_count; i++) {
for (unsigned int j = m_exh.pages[i].start_id; j < m_exh.pages[i].start_id + m_sheet.pages[i].row_count; j++) {
for (unsigned int j = m_exh.pages[i].start_id; j < m_exh.pages[i].start_id + m_sheet.pages[i].entry_count; j++) {
const auto row = physis_excel_get_row(&m_sheet, j); // TODO: use all rows, free
if (row.row_data) {
auto primaryModel = row.row_data[0].column_data[47].u_int64._0;
if (row.columns) {
auto primaryModel = row.columns[47].u_int64._0;
// auto secondaryModel = row.column_data[48].u_int64._0;

int16_t parts[4];
memcpy(parts, &primaryModel, sizeof(int16_t) * 4);

const auto slot = physis_slot_from_id(row.row_data[0].column_data[17].u_int8._0);
const auto slot = physis_slot_from_id(row.columns[17].u_int8._0);
if (slot == Slot::Invalid) {
continue;
}

GearInfo info = {};
info.name = row.row_data[0].column_data[9].string._0;
info.icon = row.row_data[0].column_data[10].u_int16._0;
info.name = row.columns[9].string._0;
info.icon = row.columns[10].u_int16._0;
info.slot = slot;
info.modelInfo.primaryID = parts[0];

Expand Down
8 changes: 4 additions & 4 deletions apps/mapeditor/src/appstate.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -53,17 +53,17 @@ void AppState::clear()
QString AppState::lookupENpcName(const uint32_t id) const
{
auto row = physis_excel_get_row(&m_enpcResidentSheet, id);
if (row.row_data && strlen(row.row_data[0].column_data[0].string._0) > 0) {
return QString::fromLatin1(row.row_data[0].column_data[0].string._0);
if (row.columns && strlen(row.columns[0].string._0) > 0) {
return QString::fromLatin1(row.columns[0].string._0);
}
return i18n("Event NPC");
}

QString AppState::lookupEObjName(const uint32_t id) const
{
auto row = physis_excel_get_row(&m_eobjNameSheet, id);
if (row.row_data && strlen(row.row_data[0].column_data[0].string._0) > 0) {
return QString::fromLatin1(row.row_data[0].column_data[0].string._0);
if (row.columns && strlen(row.columns[0].string._0) > 0) {
return QString::fromLatin1(row.columns[0].string._0);
}
return i18n("Event Object");
}
16 changes: 8 additions & 8 deletions apps/mapeditor/src/maplistwidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -45,23 +45,23 @@ MapListWidget::MapListWidget(physis_SqPackResource *data, QWidget *parent)
// TODO: figure out why row_count in EXH is wrong?!
for (uint32_t i = 0; i < territoryExh.pages[0].row_count; i++) {
auto territoryExdRow = physis_excel_get_row(&territorySheet, i); // TODO: free, use all rows
if (territoryExdRow.row_data) {
const char *bg = territoryExdRow.row_data[0].column_data[1].string._0;
if (territoryExdRow.columns) {
const char *bg = territoryExdRow.columns[1].string._0;
if (strlen(bg) == 0) {
continue;
}

int placeRegionKey = territoryExdRow.row_data[0].column_data[3].u_int16._0;
int placeRegionKey = territoryExdRow.columns[3].u_int16._0;
auto regionExdRow = physis_excel_get_row(&nameSheet, placeRegionKey); // TODO: free, use all rows
const char *placeRegion = regionExdRow.row_data[0].column_data[0].string._0;
const char *placeRegion = regionExdRow.columns[0].string._0;

int placeZoneKey = territoryExdRow.row_data[0].column_data[4].u_int16._0;
int placeZoneKey = territoryExdRow.columns[4].u_int16._0;
auto zoneExdRow = physis_excel_get_row(&nameSheet, placeZoneKey); // TODO: free, use all rows
const char *placeZone = zoneExdRow.row_data[0].column_data[0].string._0;
const char *placeZone = zoneExdRow.columns[0].string._0;

int placeNameKey = territoryExdRow.row_data[0].column_data[5].u_int16._0;
int placeNameKey = territoryExdRow.columns[5].u_int16._0;
auto nameExdRow = physis_excel_get_row(&nameSheet, placeNameKey); // TODO: free, use all rows
const char *placeName = nameExdRow.row_data[0].column_data[0].string._0;
const char *placeName = nameExdRow.columns[0].string._0;

QStandardItem *item = new QStandardItem();
item->setData(QString::fromStdString(bg));
Expand Down
2 changes: 1 addition & 1 deletion extern/libphysis
Submodule libphysis updated 3 files
+7 −7 Cargo.lock
+17 −8 src/exd.rs
+60 −60 src/resource.rs
97 changes: 54 additions & 43 deletions parts/exd/excelmodel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,21 +20,19 @@ ExcelModel::ExcelModel(const physis_EXH &exh, const physis_ExcelSheetPage &page,
, m_language(language)
{
// We need to count the subrows to get the "true" row count.
unsigned int regularRowCount = 0;
for (unsigned int i = 0; i < page.row_count; i++) {
const auto &row = page.rows[i];
for (unsigned int i = 0; i < page.entry_count; i++) {
const auto &entry = page.entries[i];

for (unsigned int j = 0; j < row.row_count; j++) {
for (unsigned int j = 0; j < entry.subrow_count; j++) {
// Push a "true" row index for the given subrow. This is just for faster lookups.
m_rowIndices.emplace_back(regularRowCount, row.row_id, j);
m_rowIndices.emplace_back(i, entry.row_id, j);
}

if (row.row_count > 1) {
if (entry.subrow_count > 1) {
m_hasSubrows = true;
}

m_rowCount += row.row_count;
regularRowCount++;
m_rowCount += entry.subrow_count;
}

// TODO: make this look-up more sensible to reduce calls to indexOf
Expand Down Expand Up @@ -124,28 +122,28 @@ QVariant ExcelModel::data(const QModelIndex &index, int role) const
// TODO: de-duplicate with the identical switch below
uint32_t targetRowId;
switch (data.tag) {
case physis_ColumnData::Tag::Int8:
case physis_Field::Tag::Int8:
targetRowId = data.int8._0;
break;
case physis_ColumnData::Tag::UInt8:
case physis_Field::Tag::UInt8:
targetRowId = data.u_int8._0;
break;
case physis_ColumnData::Tag::Int16:
case physis_Field::Tag::Int16:
targetRowId = data.int16._0;
break;
case physis_ColumnData::Tag::UInt16:
case physis_Field::Tag::UInt16:
targetRowId = data.u_int16._0;
break;
case physis_ColumnData::Tag::Int32:
case physis_Field::Tag::Int32:
targetRowId = data.int32._0;
break;
case physis_ColumnData::Tag::UInt32:
case physis_Field::Tag::UInt32:
targetRowId = data.u_int32._0;
break;
case physis_ColumnData::Tag::Int64:
case physis_Field::Tag::Int64:
targetRowId = data.int64._0;
break;
case physis_ColumnData::Tag::UInt64:
case physis_Field::Tag::UInt64:
targetRowId = data.u_int64._0;
break;
default:
Expand Down Expand Up @@ -222,35 +220,35 @@ QHash<int, QByteArray> ExcelModel::roleNames() const
};
}

QVariant ExcelModel::displayForColumn(const uint32_t column, const physis_ColumnData &data) const
QVariant ExcelModel::displayForColumn(const uint32_t column, const physis_Field &data) const
{
// Check to see if there's any targets
const auto targetSheets = m_schema.targetSheetsForColumn(column);
if (!targetSheets.isEmpty()) {
uint32_t targetRowId;
switch (data.tag) {
case physis_ColumnData::Tag::Int8:
case physis_Field::Tag::Int8:
targetRowId = data.int8._0;
break;
case physis_ColumnData::Tag::UInt8:
case physis_Field::Tag::UInt8:
targetRowId = data.u_int8._0;
break;
case physis_ColumnData::Tag::Int16:
case physis_Field::Tag::Int16:
targetRowId = data.int16._0;
break;
case physis_ColumnData::Tag::UInt16:
case physis_Field::Tag::UInt16:
targetRowId = data.u_int16._0;
break;
case physis_ColumnData::Tag::Int32:
case physis_Field::Tag::Int32:
targetRowId = data.int32._0;
break;
case physis_ColumnData::Tag::UInt32:
case physis_Field::Tag::UInt32:
targetRowId = data.u_int32._0;
break;
case physis_ColumnData::Tag::Int64:
case physis_Field::Tag::Int64:
targetRowId = data.int64._0;
break;
case physis_ColumnData::Tag::UInt64:
case physis_Field::Tag::UInt64:
targetRowId = data.u_int64._0;
break;
default:
Expand All @@ -268,7 +266,7 @@ QVariant ExcelModel::displayForColumn(const uint32_t column, const physis_Column
const Schema schema(schemaDir.absoluteFilePath(QStringLiteral("%1.yml").arg(sheetName)));

if (const auto displayFieldIndex = schema.displayFieldIndex()) {
return displayForData(m_resolver->translateSchemaColumn(sheetName, &row.row_data[0], *displayFieldIndex));
return displayForData(m_resolver->translateSchemaColumn(sheetName, &row, *displayFieldIndex));
}
}
}
Expand All @@ -277,55 +275,68 @@ QVariant ExcelModel::displayForColumn(const uint32_t column, const physis_Column
return displayForData(data);
}

QVariant ExcelModel::displayForData(const physis_ColumnData &data)
QVariant ExcelModel::displayForData(const physis_Field &data)
{
QString columnString;
switch (data.tag) {
case physis_ColumnData::Tag::String:
case physis_Field::Tag::String:
columnString = QString::fromStdString(data.string._0);
break;
case physis_ColumnData::Tag::Bool:
case physis_Field::Tag::Bool:
columnString = data.bool_._0 ? i18nc("Value is true", "True") : i18nc("Value is false", "False");
break;
case physis_ColumnData::Tag::Int8:
case physis_Field::Tag::Int8:
columnString = QString::number(data.int8._0);
break;
case physis_ColumnData::Tag::UInt8:
case physis_Field::Tag::UInt8:
columnString = QString::number(data.u_int8._0);
break;
case physis_ColumnData::Tag::Int16:
case physis_Field::Tag::Int16:
columnString = QString::number(data.int16._0);
break;
case physis_ColumnData::Tag::UInt16:
case physis_Field::Tag::UInt16:
columnString = QString::number(data.u_int16._0);
break;
case physis_ColumnData::Tag::Int32:
case physis_Field::Tag::Int32:
columnString = QString::number(data.int32._0);
break;
case physis_ColumnData::Tag::UInt32:
case physis_Field::Tag::UInt32:
columnString = QString::number(data.u_int32._0);
break;
case physis_ColumnData::Tag::Float32:
case physis_Field::Tag::Float32:
columnString = QString::number(data.float32._0);
break;
case physis_ColumnData::Tag::Int64:
case physis_Field::Tag::Int64:
columnString = QString::number(data.int64._0);
break;
case physis_ColumnData::Tag::UInt64:
case physis_Field::Tag::UInt64:
columnString = QString::number(data.u_int64._0);
break;
}

return columnString;
}

physis_ColumnData &ExcelModel::dataForIndex(const QModelIndex &index) const
physis_Field &ExcelModel::dataForIndex(const QModelIndex &index) const
{
const auto [row_index, _, subrow_id] = m_rowIndices[index.row()];
const auto &row = m_page.rows[row_index];
const auto &subrow = row.row_data[subrow_id];
const auto [row_index, _, subrow_index] = m_rowIndices[index.row()];
if (row_index < m_page.entry_count) {
const auto &row = m_page.entries[row_index];

return subrow.column_data[index.column()];
if (subrow_index < row.subrow_count) {
const auto &subrow = row.subrows[subrow_index];

if (index.column() < static_cast<int>(m_page.column_count)) {
return subrow.columns[index.column()];
}
qFatal() << "Requesting column" << index.column() << "despite the column count being" << m_page.column_count;
Q_UNREACHABLE();
}
qFatal() << "Requesting subrow of index" << subrow_index << "despite the subrow count for" << row.row_id << "being" << subrow_index;
Q_UNREACHABLE();
}
qFatal() << "Requesting entry of index" << row_index << "despite the entry count being" << m_page.entry_count;
Q_UNREACHABLE();
}

#include "moc_excelmodel.cpp"
8 changes: 4 additions & 4 deletions parts/exd/excelmodel.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,22 +35,22 @@ class ExcelModel : public QAbstractTableModel
/**
* @brief Returns a nice display for a given column data, including resolving other sheets..
*/
QVariant displayForColumn(uint32_t column, const physis_ColumnData &data) const;
QVariant displayForColumn(uint32_t column, const physis_Field &data) const;

/**
* @brief Returns a nice display for a given column data.
*/
static QVariant displayForData(const physis_ColumnData &data);
static QVariant displayForData(const physis_Field &data);

/**
* @brief Returns the column data for a given QModelIndex.
*/
physis_ColumnData &dataForIndex(const QModelIndex &index) const;
physis_Field &dataForIndex(const QModelIndex &index) const;

physis_EXH m_exh;
physis_ExcelSheetPage m_page;
uint32_t m_rowCount = 0;
std::vector<std::tuple<int, int, int>> m_rowIndices;
std::vector<std::tuple<uint32_t, uint32_t, uint32_t>> m_rowIndices;
Schema m_schema; // TODO: don't copy
bool m_hasSubrows = false;
// Mapping from a regular index to a list of columns that were sorted by offset
Expand Down
13 changes: 6 additions & 7 deletions parts/exd/excelresolver.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,28 +7,27 @@

#include <KLocalizedString>

std::optional<std::pair<QString, physis_ExcelRows>>
AbstractExcelResolver::resolveRow(const QStringList &sheetNames, const uint32_t row, const Language language)
std::optional<std::pair<QString, physis_ExcelRow>> AbstractExcelResolver::resolveRow(const QStringList &sheetNames, const uint32_t row, const Language language)
{
Q_UNUSED(sheetNames)
Q_UNUSED(row)
Q_UNUSED(language)
return std::nullopt;
}

physis_ColumnData &AbstractExcelResolver::translateSchemaColumn(const QString &sheetName, physis_ExcelRow const *row, uint32_t column)
physis_Field &AbstractExcelResolver::translateSchemaColumn(const QString &sheetName, physis_ExcelRow const *row, uint32_t column)
{
Q_UNUSED(sheetName)
Q_UNUSED(column)
return row->column_data[0];
return row->columns[0];
}

CachingExcelResolver::CachingExcelResolver(physis_SqPackResource *resource)
: m_resource(resource)
{
}

std::optional<std::pair<QString, physis_ExcelRows>> CachingExcelResolver::resolveRow(const QStringList &sheetNames, const uint32_t row, const Language language)
std::optional<std::pair<QString, physis_ExcelRow>> CachingExcelResolver::resolveRow(const QStringList &sheetNames, const uint32_t row, const Language language)
{
for (const auto &sheetName : sheetNames) {
const auto exh = getCachedEXH(sheetName);
Expand All @@ -51,7 +50,7 @@ std::optional<std::pair<QString, physis_ExcelRows>> CachingExcelResolver::resolv
return AbstractExcelResolver::resolveRow(sheetNames, row, language);
}

physis_ColumnData &CachingExcelResolver::translateSchemaColumn(const QString &sheetName, physis_ExcelRow const *row, const uint32_t column)
physis_Field &CachingExcelResolver::translateSchemaColumn(const QString &sheetName, physis_ExcelRow const *row, const uint32_t column)
{
const auto exh = getCachedEXH(sheetName);
Q_ASSERT(exh.p_ptr);
Expand All @@ -70,7 +69,7 @@ physis_ColumnData &CachingExcelResolver::translateSchemaColumn(const QString &sh
sortedColumnIndices.push_back(sortedColumns[i].second);
}

return row->column_data[sortedColumnIndices[column]];
return row->columns[sortedColumnIndices[column]];
}

physis_EXH &CachingExcelResolver::getCachedEXH(const QString &sheetName)
Expand Down
8 changes: 4 additions & 4 deletions parts/exd/excelresolver.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,9 @@ class AbstractExcelResolver
*
* The first sheet that contains said row ID will be returned.
*/
virtual std::optional<std::pair<QString, physis_ExcelRows>> resolveRow(const QStringList &sheetNames, uint32_t row, Language language);
virtual std::optional<std::pair<QString, physis_ExcelRow>> resolveRow(const QStringList &sheetNames, uint32_t row, Language language);

virtual physis_ColumnData &translateSchemaColumn(const QString &sheetName, physis_ExcelRow const *row, uint32_t column);
virtual physis_Field &translateSchemaColumn(const QString &sheetName, physis_ExcelRow const *row, uint32_t column);
};

struct EXDSelector {
Expand All @@ -50,9 +50,9 @@ class CachingExcelResolver : public AbstractExcelResolver
public:
explicit CachingExcelResolver(physis_SqPackResource *resource);

std::optional<std::pair<QString, physis_ExcelRows>> resolveRow(const QStringList &sheetNames, uint32_t row, Language language) override;
std::optional<std::pair<QString, physis_ExcelRow>> resolveRow(const QStringList &sheetNames, uint32_t row, Language language) override;

physis_ColumnData &translateSchemaColumn(const QString &sheetName, physis_ExcelRow const *row, uint32_t column) override;
physis_Field &translateSchemaColumn(const QString &sheetName, physis_ExcelRow const *row, uint32_t column) override;

private:
/**
Expand Down