Save all map attributes to _assets file
This commit is contained in:
parent
50fc906971
commit
a9d71d15f8
2 changed files with 94 additions and 10 deletions
102
project.cpp
102
project.cpp
|
@ -261,7 +261,7 @@ void Project::readMapAttributes(Map* map) {
|
||||||
|
|
||||||
Asm *parser = new Asm;
|
Asm *parser = new Asm;
|
||||||
|
|
||||||
QString assets_text = readTextFile(root + "/data/maps/_assets.inc");
|
QString assets_text = readTextFile(getMapAssetsFilepath());
|
||||||
if (assets_text.isNull()) {
|
if (assets_text.isNull()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -278,7 +278,7 @@ void Project::readAllMapAttributes() {
|
||||||
mapAttributes->clear();
|
mapAttributes->clear();
|
||||||
|
|
||||||
Asm *parser = new Asm;
|
Asm *parser = new Asm;
|
||||||
QString assets_text = readTextFile(root + "/data/maps/_assets.inc");
|
QString assets_text = readTextFile(getMapAssetsFilepath());
|
||||||
if (assets_text.isNull()) {
|
if (assets_text.isNull()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -306,10 +306,12 @@ void Project::readAllMapAttributes() {
|
||||||
// Unknown map name has to match the MapAttributes label.
|
// Unknown map name has to match the MapAttributes label.
|
||||||
mapName = borderLabel.replace("Border", "Attributes");
|
mapName = borderLabel.replace("Border", "Attributes");
|
||||||
}
|
}
|
||||||
mapAttributes->insert(mapName, new QMap<QString, QString>);
|
|
||||||
mapAttributes->value(mapName)->insert("border_label", borderParams.value(1));
|
QMap<QString, QString>* attrs = new QMap<QString, QString>;
|
||||||
|
mapAttributes->insert(mapName, attrs);
|
||||||
|
attrs->insert("border_label", borderParams.value(1));
|
||||||
borderParams = commands->value(i++);
|
borderParams = commands->value(i++);
|
||||||
mapAttributes->value(mapName)->insert("border_filepath", borderParams.value(1).replace("\"", ""));
|
attrs->insert("border_filepath", borderParams.value(1).replace("\"", ""));
|
||||||
|
|
||||||
// Read MapBlockData assets.
|
// Read MapBlockData assets.
|
||||||
QStringList blockDataParams = commands->value(i++);
|
QStringList blockDataParams = commands->value(i++);
|
||||||
|
@ -319,21 +321,24 @@ void Project::readAllMapAttributes() {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
QString blockDataLabel = blockDataParams.value(1);
|
QString blockDataLabel = blockDataParams.value(1);
|
||||||
mapAttributes->value(mapName)->insert("blockdata_label", blockDataLabel);
|
attrs->insert("blockdata_label", blockDataLabel);
|
||||||
blockDataParams = commands->value(i++);
|
blockDataParams = commands->value(i++);
|
||||||
mapAttributes->value(mapName)->insert("blockdata_filepath", blockDataParams.value(1).replace("\"", ""));
|
attrs->insert("blockdata_filepath", blockDataParams.value(1).replace("\"", ""));
|
||||||
|
|
||||||
// Read MapAttributes assets.
|
// Read MapAttributes assets.
|
||||||
i++; // skip .align
|
i++; // skip .align
|
||||||
// Maps can share MapAttributes, so gather a list of them.
|
// Maps can share MapAttributes, so gather a list of them.
|
||||||
QStringList attributeMapLabels;
|
QStringList attributeMapLabels;
|
||||||
QStringList attributesParams;
|
QStringList attributesParams;
|
||||||
|
QStringList* sharedAttrMaps = new QStringList;
|
||||||
while (i < commands->length()) {
|
while (i < commands->length()) {
|
||||||
attributesParams = commands->value(i);
|
attributesParams = commands->value(i);
|
||||||
if (attributesParams.value(0) != ".label") {
|
if (attributesParams.value(0) != ".label") {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
attributeMapLabels.append(attributesParams.value(1));
|
QString attrLabel = attributesParams.value(1);
|
||||||
|
attributeMapLabels.append(attrLabel);
|
||||||
|
sharedAttrMaps->append(attrLabel);
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -359,8 +364,84 @@ void Project::readAllMapAttributes() {
|
||||||
mapAttributes->value(altMapName)->insert("blockdata_label", attrBlockdataLabel);
|
mapAttributes->value(altMapName)->insert("blockdata_label", attrBlockdataLabel);
|
||||||
mapAttributes->value(altMapName)->insert("tileset_primary", attrTilesetPrimary);
|
mapAttributes->value(altMapName)->insert("tileset_primary", attrTilesetPrimary);
|
||||||
mapAttributes->value(altMapName)->insert("tileset_secondary", attrTilesetSecondary);
|
mapAttributes->value(altMapName)->insert("tileset_secondary", attrTilesetSecondary);
|
||||||
|
|
||||||
|
if (sharedAttrMaps->length() > 1) {
|
||||||
|
mapAttributes->value(altMapName)->insert("shared_attr_maps", sharedAttrMaps->join(":"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Project::saveAllMapAttributes() {
|
||||||
|
QString text = "";
|
||||||
|
for (int i = 0; i < mapAttributesTable->count(); i++) {
|
||||||
|
int mapIndex = i + 1;
|
||||||
|
QString mapName = mapAttributesTable->value(mapIndex);
|
||||||
|
QMap<QString, QString>* attrs = mapAttributes->value(mapName);
|
||||||
|
|
||||||
|
// Find the map attributes object that contains the border data.
|
||||||
|
QMap<QString, QString>* attrsWithBorder;
|
||||||
|
if (attrs->contains("border_filepath")) {
|
||||||
|
attrsWithBorder = attrs;
|
||||||
|
} else {
|
||||||
|
QStringList labels = attrs->value("shared_attr_maps").split(":");
|
||||||
|
for (QString label : labels) {
|
||||||
|
label.remove(label.length() - 14, 14);
|
||||||
|
if (mapAttributes->contains(label) && mapAttributes->value(label)->contains("border_filepath")) {
|
||||||
|
attrsWithBorder = mapAttributes->value(label);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (attrsWithBorder != nullptr) {
|
||||||
|
text += QString("%1::\n").arg(attrsWithBorder->value("border_label"));
|
||||||
|
text += QString("\t.incbin \"%1\"\n").arg(attrsWithBorder->value("border_filepath"));
|
||||||
|
text += QString("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Find the map attributes object that contains the blockdata.
|
||||||
|
QMap<QString, QString>* attrsWithBlockdata;
|
||||||
|
if (attrs->contains("blockdata_filepath")) {
|
||||||
|
attrsWithBlockdata = attrs;
|
||||||
|
} else {
|
||||||
|
QStringList labels = attrs->value("shared_attr_maps").split(":");
|
||||||
|
for (QString label : labels) {
|
||||||
|
label.remove(label.length() - 14, 14);
|
||||||
|
if (mapAttributes->contains(label) && mapAttributes->value(label)->contains("blockdata_filepath")) {
|
||||||
|
attrsWithBlockdata = mapAttributes->value(label);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (attrsWithBlockdata != nullptr) {
|
||||||
|
text += QString("%1::\n").arg(attrsWithBlockdata->value("blockdata_label"));
|
||||||
|
text += QString("\t.incbin \"%1\"\n").arg(attrsWithBorder->value("blockdata_filepath"));
|
||||||
|
text += QString("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
text += QString("\t.align 2\n");
|
||||||
|
if (attrs->contains("shared_attr_maps")) {
|
||||||
|
QStringList labels = attrs->value("shared_attr_maps").split(":");
|
||||||
|
for (QString label : labels) {
|
||||||
|
text += QString("%1::\n").arg(label);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
text += QString("%1::\n").arg(attrs->value("attributes_label"));
|
||||||
|
}
|
||||||
|
text += QString("\t.4byte %1\n").arg(attrs->value("width"));
|
||||||
|
text += QString("\t.4byte %1\n").arg(attrs->value("height"));
|
||||||
|
text += QString("\t.4byte %1\n").arg(attrs->value("border_label"));
|
||||||
|
text += QString("\t.4byte %1\n").arg(attrs->value("blockdata_label"));
|
||||||
|
text += QString("\t.4byte %1\n").arg(attrs->value("tileset_primary"));
|
||||||
|
text += QString("\t.4byte %1\n").arg(attrs->value("tileset_secondary"));
|
||||||
|
text += QString("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
saveTextFile(getMapAssetsFilepath(), text);
|
||||||
|
}
|
||||||
|
|
||||||
|
QString Project::getMapAssetsFilepath() {
|
||||||
|
return root + "/data/maps/_assets.inc";
|
||||||
}
|
}
|
||||||
|
|
||||||
void Project::setNewMapAttributes(Map* map) {
|
void Project::setNewMapAttributes(Map* map) {
|
||||||
|
@ -400,7 +481,7 @@ Tileset* Project::loadTileset(QString label) {
|
||||||
}
|
}
|
||||||
|
|
||||||
QString Project::getBlockdataPath(Map* map) {
|
QString Project::getBlockdataPath(Map* map) {
|
||||||
QString text = readTextFile(root + "/data/maps/_assets.inc");
|
QString text = readTextFile(getMapAssetsFilepath());
|
||||||
QStringList *values = getLabelValues(parse(text), map->blockdata_label);
|
QStringList *values = getLabelValues(parse(text), map->blockdata_label);
|
||||||
QString path;
|
QString path;
|
||||||
if (!values->isEmpty()) {
|
if (!values->isEmpty()) {
|
||||||
|
@ -412,7 +493,7 @@ QString Project::getBlockdataPath(Map* map) {
|
||||||
}
|
}
|
||||||
|
|
||||||
QString Project::getMapBorderPath(Map *map) {
|
QString Project::getMapBorderPath(Map *map) {
|
||||||
QString text = readTextFile(root + "/data/maps/_assets.inc");
|
QString text = readTextFile(getMapAssetsFilepath());
|
||||||
QStringList *values = getLabelValues(parse(text), map->border_label);
|
QStringList *values = getLabelValues(parse(text), map->border_label);
|
||||||
QString path;
|
QString path;
|
||||||
if (!values->isEmpty()) {
|
if (!values->isEmpty()) {
|
||||||
|
@ -489,6 +570,7 @@ void Project::saveMap(Map *map) {
|
||||||
|
|
||||||
void Project::saveAllDataStructures() {
|
void Project::saveAllDataStructures() {
|
||||||
saveMapAttributesTable();
|
saveMapAttributesTable();
|
||||||
|
saveAllMapAttributes();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Project::loadTilesetAssets(Tileset* tileset) {
|
void Project::loadTilesetAssets(Tileset* tileset) {
|
||||||
|
|
|
@ -64,6 +64,7 @@ public:
|
||||||
void saveAllMaps();
|
void saveAllMaps();
|
||||||
void saveMap(Map*);
|
void saveMap(Map*);
|
||||||
void saveAllDataStructures();
|
void saveAllDataStructures();
|
||||||
|
void saveAllMapAttributes();
|
||||||
|
|
||||||
QList<QStringList>* parse(QString text);
|
QList<QStringList>* parse(QString text);
|
||||||
QStringList getSongNames();
|
QStringList getSongNames();
|
||||||
|
@ -91,6 +92,7 @@ public:
|
||||||
QMap<QString, int> readCDefines(QString text, QStringList prefixes);
|
QMap<QString, int> readCDefines(QString text, QStringList prefixes);
|
||||||
private:
|
private:
|
||||||
QString getMapAttributesTableFilepath();
|
QString getMapAttributesTableFilepath();
|
||||||
|
QString getMapAssetsFilepath();
|
||||||
void saveMapHeader(Map*);
|
void saveMapHeader(Map*);
|
||||||
void saveMapAttributesTable();
|
void saveMapAttributesTable();
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue