fix secondary tileset metatile values; format save file
This commit is contained in:
parent
edcb8f9285
commit
e7732bfb42
1 changed files with 31 additions and 17 deletions
|
@ -719,7 +719,7 @@ void Project::saveTilesetMetatileLabels(Tileset *primaryTileset, Tileset *second
|
||||||
Metatile *metatile = secondaryTileset->metatiles->at(i);
|
Metatile *metatile = secondaryTileset->metatiles->at(i);
|
||||||
if (metatile->label.size() != 0) {
|
if (metatile->label.size() != 0) {
|
||||||
QString defineName = QString("%1%2").arg(secondaryPrefix, metatile->label);
|
QString defineName = QString("%1%2").arg(secondaryPrefix, metatile->label);
|
||||||
defines.insert(defineName, i);
|
defines.insert(defineName, i + Project::num_tiles_primary);
|
||||||
definesFileModified = true;
|
definesFileModified = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -728,24 +728,37 @@ void Project::saveTilesetMetatileLabels(Tileset *primaryTileset, Tileset *second
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Setup pretty formatting.
|
auto getTilesetFromLabel = [](QString labelName) {
|
||||||
int longestDefineNameLength = 0;
|
return QRegularExpression("METATILE_(?<tileset>[A-Za-z0-9]+)_").match(labelName).captured("tileset");
|
||||||
for (QString defineName : defines.keys()) {
|
};
|
||||||
if (defineName.size() > longestDefineNameLength) {
|
|
||||||
longestDefineNameLength = defineName.size();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Write the file.
|
|
||||||
QString outputText = "#ifndef GUARD_METATILE_LABELS_H\n";
|
QString outputText = "#ifndef GUARD_METATILE_LABELS_H\n";
|
||||||
outputText += "#define GUARD_METATILE_LABELS_H\n\n";
|
outputText += "#define GUARD_METATILE_LABELS_H\n";
|
||||||
|
|
||||||
for (QString defineName : defines.keys()) {
|
for (int i = 0; i < defines.size();) {
|
||||||
int value = defines[defineName];
|
QString defineName = defines.keys()[i];
|
||||||
QString line = QString("#define %1 0x%2\n")
|
QString currentTileset = getTilesetFromLabel(defineName);
|
||||||
.arg(defineName, -1 * longestDefineNameLength)
|
outputText += QString("\n// gTileset_%1\n").arg(currentTileset);
|
||||||
.arg(QString("%1").arg(value, 3, 16, QChar('0')).toUpper());
|
|
||||||
outputText += line;
|
int j = 0, longestLength = 0;
|
||||||
|
QMap<QString, int> definesOut;
|
||||||
|
|
||||||
|
// Setup for pretty formatting.
|
||||||
|
while (i + j < defines.size() && getTilesetFromLabel(defines.keys()[i + j]) == currentTileset) {
|
||||||
|
defineName = defines.keys()[i + j];
|
||||||
|
if (defineName.size() > longestLength)
|
||||||
|
longestLength = defineName.size();
|
||||||
|
definesOut.insert(defineName, defines[defineName]);
|
||||||
|
j++;
|
||||||
|
}
|
||||||
|
for (QString defineName : definesOut.keys()) {
|
||||||
|
int value = defines[defineName];
|
||||||
|
QString line = QString("#define %1 0x%2\n")
|
||||||
|
.arg(defineName, -1 * longestLength)
|
||||||
|
.arg(QString("%1").arg(value, 3, 16, QChar('0')).toUpper());
|
||||||
|
outputText += line;
|
||||||
|
}
|
||||||
|
i += j;
|
||||||
}
|
}
|
||||||
|
|
||||||
outputText += "\n#endif // GUARD_METATILE_LABELS_H\n";
|
outputText += "\n#endif // GUARD_METATILE_LABELS_H\n";
|
||||||
|
@ -1283,7 +1296,8 @@ void Project::loadTilesetMetatileLabels(Tileset* tileset) {
|
||||||
|
|
||||||
for (QString labelName : labels.keys()) {
|
for (QString labelName : labels.keys()) {
|
||||||
int metatileId = labels[labelName];
|
int metatileId = labels[labelName];
|
||||||
Metatile *metatile = Tileset::getMetatile(metatileId, tileset, nullptr);
|
// subtract Project::num_tiles_primary from secondary metatiles
|
||||||
|
Metatile *metatile = Tileset::getMetatile(metatileId - (tileset->is_secondary == "TRUE" ? Project::num_tiles_primary : 0), tileset, nullptr);
|
||||||
if (metatile) {
|
if (metatile) {
|
||||||
metatile->label = labelName.replace(tilesetPrefix, "");
|
metatile->label = labelName.replace(tilesetPrefix, "");
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Reference in a new issue