Validate map layout and tileset loading
This commit is contained in:
parent
8a4456f7b0
commit
cd9b8b12a5
7 changed files with 78 additions and 45 deletions
|
@ -45,7 +45,7 @@ public:
|
|||
bool setMap(QString map_name);
|
||||
void saveUiFields();
|
||||
void saveEncounterTabData();
|
||||
void displayMap();
|
||||
bool displayMap();
|
||||
void displayMetatileSelector();
|
||||
void displayMapMetatiles();
|
||||
void displayMapMovementPermissions();
|
||||
|
|
|
@ -187,7 +187,7 @@ private:
|
|||
bool setMap(QString, bool scrollTreeView = false);
|
||||
void redrawMapScene();
|
||||
bool loadDataStructures();
|
||||
void populateMapList();
|
||||
bool populateMapList();
|
||||
void sortMapList();
|
||||
QString getExistingDirectory(QString);
|
||||
bool openProject(QString dir);
|
||||
|
|
|
@ -74,13 +74,13 @@ public:
|
|||
QMap<QString, QStringList> tilesetLabels;
|
||||
|
||||
Blockdata* readBlockdata(QString);
|
||||
void loadBlockdata(Map*);
|
||||
bool loadBlockdata(Map*);
|
||||
|
||||
void saveTextFile(QString path, QString text);
|
||||
void appendTextFile(QString path, QString text);
|
||||
void deleteFile(QString path);
|
||||
|
||||
void readMapGroups();
|
||||
bool readMapGroups();
|
||||
Map* addNewMapToGroup(QString mapName, int groupNum);
|
||||
Map* addNewMapToGroup(QString, int, Map*, bool);
|
||||
QString getNewMapName();
|
||||
|
@ -101,8 +101,8 @@ public:
|
|||
QMap<QString, bool> getTopLevelMapFields();
|
||||
bool loadMapData(Map*);
|
||||
bool readMapLayouts();
|
||||
void loadMapLayout(Map*);
|
||||
void loadMapTilesets(Map*);
|
||||
bool loadMapLayout(Map*);
|
||||
bool loadMapTilesets(Map*);
|
||||
void loadTilesetAssets(Tileset*);
|
||||
void loadTilesetTiles(Tileset*, QImage);
|
||||
void loadTilesetMetatiles(Tileset*);
|
||||
|
@ -154,7 +154,7 @@ public:
|
|||
QString getScriptFileExtension(bool usePoryScript);
|
||||
QString getScriptDefaultString(bool usePoryScript, QString mapName);
|
||||
|
||||
void loadMapBorder(Map *map);
|
||||
bool loadMapBorder(Map *map);
|
||||
|
||||
void saveMapHealEvents(Map *map);
|
||||
|
||||
|
|
|
@ -908,7 +908,7 @@ void Editor::setConnectionsVisibility(bool visible) {
|
|||
}
|
||||
|
||||
bool Editor::setMap(QString map_name) {
|
||||
if (map_name.isNull()) {
|
||||
if (map_name.isEmpty()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -920,7 +920,9 @@ bool Editor::setMap(QString map_name) {
|
|||
|
||||
map = loadedMap;
|
||||
selected_events->clear();
|
||||
displayMap();
|
||||
if (!displayMap()) {
|
||||
return false;
|
||||
}
|
||||
updateSelectedEvents();
|
||||
}
|
||||
|
||||
|
@ -1045,7 +1047,7 @@ void Editor::mouseEvent_collision(QGraphicsSceneMouseEvent *event, CollisionPixm
|
|||
}
|
||||
}
|
||||
|
||||
void Editor::displayMap() {
|
||||
bool Editor::displayMap() {
|
||||
if (!scene) {
|
||||
scene = new QGraphicsScene;
|
||||
MapSceneEventFilter *filter = new MapSceneEventFilter();
|
||||
|
@ -1086,6 +1088,7 @@ void Editor::displayMap() {
|
|||
if (events_group) {
|
||||
events_group->setVisible(false);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void Editor::displayMetatileSelector() {
|
||||
|
|
|
@ -281,16 +281,11 @@ bool MainWindow::openProject(QString dir) {
|
|||
if (!already_open) {
|
||||
editor->project = new Project;
|
||||
editor->project->set_root(dir);
|
||||
success = loadDataStructures();
|
||||
if (success) {
|
||||
populateMapList();
|
||||
success = setMap(getDefaultMap(), true);
|
||||
}
|
||||
success = loadDataStructures()
|
||||
&& populateMapList()
|
||||
&& setMap(getDefaultMap(), true);
|
||||
} else {
|
||||
success = loadDataStructures();
|
||||
if (success) {
|
||||
populateMapList();
|
||||
}
|
||||
success = loadDataStructures() && populateMapList();
|
||||
}
|
||||
|
||||
if (success) {
|
||||
|
@ -350,7 +345,7 @@ void MainWindow::on_action_Open_Project_triggered()
|
|||
|
||||
bool MainWindow::setMap(QString map_name, bool scrollTreeView) {
|
||||
logInfo(QString("Setting map to '%1'").arg(map_name));
|
||||
if (map_name.isNull()) {
|
||||
if (map_name.isEmpty()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -388,7 +383,9 @@ bool MainWindow::setMap(QString map_name, bool scrollTreeView) {
|
|||
|
||||
void MainWindow::redrawMapScene()
|
||||
{
|
||||
editor->displayMap();
|
||||
if (!editor->displayMap())
|
||||
return;
|
||||
|
||||
on_tabWidget_currentChanged(ui->tabWidget->currentIndex());
|
||||
|
||||
double base = editor->scale_base;
|
||||
|
@ -644,10 +641,13 @@ bool MainWindow::loadDataStructures() {
|
|||
return true;
|
||||
}
|
||||
|
||||
void MainWindow::populateMapList() {
|
||||
editor->project->readMapGroups();
|
||||
bool MainWindow::populateMapList() {
|
||||
bool success = editor->project->readMapGroups();
|
||||
if (success) {
|
||||
sortMapList();
|
||||
}
|
||||
return success;
|
||||
}
|
||||
|
||||
void MainWindow::sortMapList() {
|
||||
Project *project = editor->project;
|
||||
|
|
|
@ -74,10 +74,9 @@ Map* Project::loadMap(QString map_name) {
|
|||
map->setName(map_name);
|
||||
}
|
||||
|
||||
if (!loadMapData(map))
|
||||
if (!(loadMapData(map) && loadMapLayout(map)))
|
||||
return nullptr;
|
||||
|
||||
loadMapLayout(map);
|
||||
map->commit();
|
||||
map->metatileHistory.save();
|
||||
map_cache->insert(map_name, map);
|
||||
|
@ -387,21 +386,21 @@ void Project::setNewMapHeader(Map* map, int mapIndex) {
|
|||
map->battle_scene = "MAP_BATTLE_SCENE_NORMAL";
|
||||
}
|
||||
|
||||
void Project::loadMapLayout(Map* map) {
|
||||
bool Project::loadMapLayout(Map* map) {
|
||||
if (!map->isPersistedToFile) {
|
||||
return;
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!mapLayouts.contains(map->layoutId)) {
|
||||
logError(QString("Error: Map '%1' has an unknown layout '%2'").arg(map->name).arg(map->layoutId));
|
||||
return;
|
||||
} else {
|
||||
if (mapLayouts.contains(map->layoutId)) {
|
||||
map->layout = mapLayouts[map->layoutId];
|
||||
} else {
|
||||
logError(QString("Error: Map '%1' has an unknown layout '%2'").arg(map->name).arg(map->layoutId));
|
||||
return false;
|
||||
}
|
||||
|
||||
loadMapTilesets(map);
|
||||
loadBlockdata(map);
|
||||
loadMapBorder(map);
|
||||
return loadMapTilesets(map)
|
||||
&& loadBlockdata(map)
|
||||
&& loadMapBorder(map);
|
||||
}
|
||||
|
||||
bool Project::readMapLayouts() {
|
||||
|
@ -906,13 +905,23 @@ void Project::saveTilesetPalettes(Tileset *tileset, bool /*primary*/) {
|
|||
}
|
||||
}
|
||||
|
||||
void Project::loadMapTilesets(Map* map) {
|
||||
bool Project::loadMapTilesets(Map* map) {
|
||||
if (map->layout->has_unsaved_changes) {
|
||||
return;
|
||||
return true;
|
||||
}
|
||||
|
||||
map->layout->tileset_primary = getTileset(map->layout->tileset_primary_label);
|
||||
if (!map->layout->tileset_primary) {
|
||||
logError(QString("Map layout %1 has invalid primary tileset '%2'").arg(map->layout->id).arg(map->layout->tileset_primary_label));
|
||||
return false;
|
||||
}
|
||||
|
||||
map->layout->tileset_secondary = getTileset(map->layout->tileset_secondary_label);
|
||||
if (!map->layout->tileset_secondary) {
|
||||
logError(QString("Map layout %1 has invalid secondary tileset '%2'").arg(map->layout->id).arg(map->layout->tileset_secondary_label));
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
Tileset* Project::loadTileset(QString label, Tileset *tileset) {
|
||||
|
@ -939,9 +948,9 @@ Tileset* Project::loadTileset(QString label, Tileset *tileset) {
|
|||
return tileset;
|
||||
}
|
||||
|
||||
void Project::loadBlockdata(Map* map) {
|
||||
bool Project::loadBlockdata(Map* map) {
|
||||
if (!map->isPersistedToFile || map->layout->has_unsaved_changes) {
|
||||
return;
|
||||
return true;
|
||||
}
|
||||
|
||||
QString path = QString("%1/%2").arg(root).arg(map->layout->blockdata_path);
|
||||
|
@ -955,6 +964,7 @@ void Project::loadBlockdata(Map* map) {
|
|||
.arg(map->getWidth() * map->getHeight()));
|
||||
map->layout->blockdata->blocks->resize(map->getWidth() * map->getHeight());
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void Project::setNewMapBlockdata(Map* map) {
|
||||
|
@ -965,13 +975,21 @@ void Project::setNewMapBlockdata(Map* map) {
|
|||
map->layout->blockdata = blockdata;
|
||||
}
|
||||
|
||||
void Project::loadMapBorder(Map *map) {
|
||||
bool Project::loadMapBorder(Map *map) {
|
||||
if (!map->isPersistedToFile || map->layout->has_unsaved_changes) {
|
||||
return;
|
||||
return true;
|
||||
}
|
||||
|
||||
QString path = QString("%1/%2").arg(root).arg(map->layout->border_path);
|
||||
map->layout->border = readBlockdata(path);
|
||||
int borderLength = 4;
|
||||
if (map->layout->border->blocks->count() != borderLength) {
|
||||
logWarn(QString("Layout border blockdata length %1 must be %2. Resizing border blockdata.")
|
||||
.arg(map->layout->border->blocks->count())
|
||||
.arg(borderLength));
|
||||
map->layout->border->blocks->resize(borderLength);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void Project::setNewMapBorder(Map *map) {
|
||||
|
@ -1265,7 +1283,12 @@ void Project::loadTilesetAssets(Tileset* tileset) {
|
|||
|
||||
tiles_path = fixGraphicPath(tiles_path);
|
||||
tileset->tilesImagePath = tiles_path;
|
||||
QImage image = QImage(tileset->tilesImagePath);
|
||||
QImage image;
|
||||
if (QFile::exists(tileset->tilesImagePath)) {
|
||||
image = QImage(tileset->tilesImagePath);
|
||||
} else {
|
||||
image = QImage(8, 8, QImage::Format_Indexed8);
|
||||
}
|
||||
this->loadTilesetTiles(tileset, image);
|
||||
this->loadTilesetMetatiles(tileset);
|
||||
this->loadTilesetMetatileLabels(tileset);
|
||||
|
@ -1518,12 +1541,16 @@ bool Project::readWildMonData() {
|
|||
return true;
|
||||
}
|
||||
|
||||
void Project::readMapGroups() {
|
||||
bool Project::readMapGroups() {
|
||||
mapConstantsToMapNames->clear();
|
||||
mapNamesToMapConstants->clear();
|
||||
map_groups->clear();
|
||||
|
||||
QString mapGroupsFilepath = QString("%1/data/maps/map_groups.json").arg(root);
|
||||
QJsonDocument mapGroupsDoc;
|
||||
if (!parser.tryParseJsonFile(&mapGroupsDoc, mapGroupsFilepath)) {
|
||||
logError(QString("Failed to read map groups from %1").arg(mapGroupsFilepath));
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
|
||||
QJsonObject mapGroupsObj = mapGroupsDoc.object();
|
||||
|
@ -1557,6 +1584,7 @@ void Project::readMapGroups() {
|
|||
groupNames = groups;
|
||||
groupedMapNames = groupedMaps;
|
||||
mapNames = maps;
|
||||
return true;
|
||||
}
|
||||
|
||||
Map* Project::addNewMapToGroup(QString mapName, int groupNum) {
|
||||
|
|
|
@ -157,7 +157,9 @@ void NewMapPopup::on_pushButton_NewMap_Accept_clicked() {
|
|||
group = project->groupNames->indexOf(this->ui->comboBox_NewMap_Group->currentText());
|
||||
newMap->layout = layout;
|
||||
newMap->layoutId = layout->id;
|
||||
if (this->existingLayout) project->loadMapLayout(newMap);
|
||||
if (this->existingLayout) {
|
||||
project->loadMapLayout(newMap);
|
||||
}
|
||||
newMap->group_num = QString::number(group);
|
||||
map = newMap;
|
||||
emit applied();
|
||||
|
|
Loading…
Reference in a new issue