diff --git a/forms/mainwindow.ui b/forms/mainwindow.ui
index 61aaa45a..4e60a96a 100644
--- a/forms/mainwindow.ui
+++ b/forms/mainwindow.ui
@@ -2976,6 +2976,7 @@
Cursor Tile Outline
+
Region Map Editor
diff --git a/forms/regionmapeditor.ui b/forms/regionmapeditor.ui
index 6e2e06ce..1d521a36 100644
--- a/forms/regionmapeditor.ui
+++ b/forms/regionmapeditor.ui
@@ -61,8 +61,8 @@
0
0
- 345
- 188
+ 348
+ 225
@@ -182,8 +182,8 @@
0
0
- 345
- 188
+ 348
+ 225
@@ -332,8 +332,8 @@
8
0
- 281
- 225
+ 278
+ 262
@@ -652,7 +652,7 @@
0
0
440
- 267
+ 230
@@ -788,7 +788,7 @@
8
0
254
- 311
+ 274
@@ -902,6 +902,9 @@
160
+
+ Qt::StrongFocus
+
1
@@ -946,6 +949,9 @@
160
+
+ Qt::StrongFocus
+
1
@@ -981,6 +987,9 @@
160
+
+ Qt::StrongFocus
+
1
@@ -1025,6 +1034,9 @@
160
+
+ Qt::StrongFocus
+
1
diff --git a/include/core/historyitem.h b/include/core/historyitem.h
index 7d87795d..92675055 100644
--- a/include/core/historyitem.h
+++ b/include/core/historyitem.h
@@ -2,7 +2,6 @@
#define HISTORYITEM_H
#include "blockdata.h"
-//#include "regionmap.h"
class HistoryItem {
public:
@@ -16,17 +15,15 @@ public:
enum RegionMapEditorBox {
BackgroundImage = 1,
CityMapImage = 2,
- BackroundResize = 3,
};
class RegionMapHistoryItem {
public:
int which;
- int mapWidth;
- int mapHeight;
+ int mapWidth = 0;
+ int mapHeight = 0;
QVector tiles;
QString cityMap;
- RegionMapHistoryItem(int type, QVector tiles);
RegionMapHistoryItem(int type, QVector tiles, QString cityMap);
RegionMapHistoryItem(int type, QVector tiles, int width, int height);
~RegionMapHistoryItem();
diff --git a/include/core/regionmap.h b/include/core/regionmap.h
index 7c4b70a9..7e7733e3 100644
--- a/include/core/regionmap.h
+++ b/include/core/regionmap.h
@@ -15,15 +15,6 @@
#include
#include
-
-
-struct CityMapPosition
-{
- QString tilemap;
- int x;
- int y;
-};
-
struct RegionMapEntry
{
int x;
@@ -38,14 +29,14 @@ class RegionMapSquare
public:
int x = -1;
int y = -1;
- uint8_t tile_img_id;
+ uint8_t tile_img_id = 0x00;
+ uint8_t secid = 0x00;
bool has_map = false;
+ bool has_city_map = false;
+ bool duplicated = false;
QString map_name;
QString mapsec;
- uint8_t secid;
- bool has_city_map = false;
QString city_map_name;
- bool duplicated = false;
};
class RegionMap : public QObject
@@ -57,18 +48,45 @@ public:
~RegionMap() {};
- static QString mapSecToMapConstant(QString);
-
Project *project;
QVector map_squares;
+ History history;
const int padLeft = 1;
const int padRight = 3;
const int padTop = 2;
const int padBottom = 3;
- History history;
+ void init(Project*);
+
+ void readBkgImgBin();
+ void readLayout();
+
+ void save();
+ void saveBkgImgBin();
+ void saveLayout();
+ void saveOptions(int id, QString sec, QString name, int x, int y);
+
+ void resize(int width, int height);
+ void resetSquare(int index);
+
+ int width();
+ int height();
+ QSize imgSize();
+ unsigned getTileId(int x, int y);
+ int getMapSquareIndex(int x, int y);
+ QString pngPath();
+ QString cityTilesPath();
+
+ QVector getTiles();
+ void setTiles(QVector tileIds);
+
+private:
+ int layout_width_;
+ int layout_height_;
+ int img_width_;
+ int img_height_;
QString region_map_png_path;
QString region_map_bin_path;
@@ -76,65 +94,14 @@ public:
QString region_map_layout_bin_path;
QString city_map_tiles_path;
- QByteArray mapBinData;
-
- QMap sMapNamesMap;// {"{/sMapName_/}LittlerootTown" : "LITTLEROOT{NAME_END} TOWN"}
- QMap mapSecToMapName;// {"MAPSEC_LITTLEROOT_TOWN" : "LITTLEROOT{NAME_END} TOWN"}
- QMap mapSecToMapEntry;// TODO: add to this on creation of new map
-
+ QMap sMapNamesMap;
+ QMap mapSecToMapEntry;
QVector sMapNames;
- bool hasUnsavedChanges();
-
- void init(Project*);
-
- void readBkgImgBin();
- void readCityMaps();
- void readLayout();
-
- QString newAbbr(QString);// makes a *unique* 5 character abbreviation from mapname to add to mapname_abbr
-
- // TODO: did I use these like, at all?
- // editing functions
- // if they are booleans, returns true if successful?
- bool placeTile(char, int, int);// place tile at x, y
- bool removeTile(char, int, int);// replaces with 0x00 byte at x,y
- bool placeMap(QString, int, int);
- bool removeMap(QString, int, int);
- bool removeMap(QString);// remove all instances of map
-
- void save();
- void saveBkgImgBin();
- void saveLayout();
- void saveOptions(int, QString, QString, int, int);
- void saveCityMaps();
-
- void resize(int, int);
- void setWidth(int);
- void setHeight(int);
- void setBackgroundImageData(QVector *);
- int width();
- int height();
- QSize imgSize();
- unsigned getTileId(int, int);
- int getMapSquareIndex(int, int);
-
- QVector getTiles();
- void setTiles(QVector);
-
- void resetSquare(int);
-
-// TODO: move read / write functions to private (and others)
-private:
- int layout_width_;
- int layout_height_;
- int img_width_;
- int img_height_;
- int img_index_(int, int);// returns index int at x,y args (x + y * width_ * 2) // 2 because
- int layout_index_(int, int);
- void fillMapSquaresFromLayout();
- QString fix_case(QString);// CAPS_WITH_UNDERSCORE to CamelCase
+ int img_index_(int x, int y);
+ int layout_index_(int x, int y);
+ QString fix_case(QString);
};
#endif // REGIONMAP_H
diff --git a/include/ui/regionmapeditor.h b/include/ui/regionmapeditor.h
index 1a44a873..b9af6fd4 100644
--- a/include/ui/regionmapeditor.h
+++ b/include/ui/regionmapeditor.h
@@ -30,19 +30,19 @@ public:
void loadRegionMapData();
void loadCityMaps();
- void onRegionMapTileSelectorSelectedTileChanged(unsigned);
- void onCityMapTileSelectorSelectedTileChanged(unsigned);
- void onRegionMapTileSelectorHoveredTileChanged(unsigned);
+ void onRegionMapTileSelectorSelectedTileChanged(unsigned id);
+ void onCityMapTileSelectorSelectedTileChanged(unsigned id);
+ void onRegionMapTileSelectorHoveredTileChanged(unsigned id);
void onRegionMapTileSelectorHoveredTileCleared();
- void onRegionMapLayoutSelectedTileChanged(int);
- void onRegionMapLayoutHoveredTileChanged(int);
+ void onRegionMapLayoutSelectedTileChanged(int index);
+ void onRegionMapLayoutHoveredTileChanged(int index);
void onRegionMapLayoutHoveredTileCleared();
void undo();
void redo();
- void resize(int, int);
+ void resize(int width, int height);
private:
Ui::RegionMapEditor *ui;
@@ -55,6 +55,8 @@ private:
unsigned selectedImageTile;
bool hasUnsavedChanges = false;
+ bool cityMapFirstDraw = true;
+ bool regionMapFirstDraw = true;
double scaleUpFactor = 2.0;
double scaleDownFactor = 1.0 / scaleUpFactor;
@@ -81,14 +83,14 @@ private:
void displayRegionMapImage();
void displayRegionMapLayout();
void displayRegionMapLayoutOptions();
- void updateRegionMapLayoutOptions(int);
+ void updateRegionMapLayoutOptions(int index);
void displayRegionMapTileSelector();
void displayCityMapTileSelector();
- void displayCityMap(QString);
+ void displayCityMap(QString name);
- bool createCityMap(QString);
+ bool createCityMap(QString name);
- void closeEvent(QCloseEvent*);
+ void closeEvent(QCloseEvent* event);
private slots:
void on_action_RegionMap_Save_triggered();
@@ -98,20 +100,20 @@ private slots:
void on_action_RegionMap_Generate_triggered();
void on_tabWidget_Region_Map_currentChanged(int);
void on_pushButton_RM_Options_delete_clicked();
- void on_comboBox_RM_ConnectedMap_activated(const QString &);
+ void on_comboBox_RM_ConnectedMap_activated(const QString &text);
void on_pushButton_CityMap_add_clicked();
void on_verticalSlider_Zoom_Map_Image_valueChanged(int);
void on_verticalSlider_Zoom_Image_Tiles_valueChanged(int);
void on_verticalSlider_Zoom_City_Map_valueChanged(int);
void on_verticalSlider_Zoom_City_Tiles_valueChanged(int);
- void on_comboBox_CityMap_picker_currentTextChanged(const QString &);
- void on_spinBox_RM_Options_x_valueChanged(int);
- void on_spinBox_RM_Options_y_valueChanged(int);
- void on_lineEdit_RM_MapName_textEdited(const QString &);
- void onHoveredRegionMapTileChanged(int, int);
+ void on_comboBox_CityMap_picker_currentTextChanged(const QString &text);
+ void on_spinBox_RM_Options_x_valueChanged(int val);
+ void on_spinBox_RM_Options_y_valueChanged(int val);
+ void on_lineEdit_RM_MapName_textEdited(const QString &text);
+ void onHoveredRegionMapTileChanged(int x, int y);
void onHoveredRegionMapTileCleared();
- void mouseEvent_region_map(QGraphicsSceneMouseEvent *, RegionMapPixmapItem *);
- void mouseEvent_city_map(QGraphicsSceneMouseEvent *, CityMapPixmapItem *);
+ void mouseEvent_region_map(QGraphicsSceneMouseEvent *event, RegionMapPixmapItem *item);
+ void mouseEvent_city_map(QGraphicsSceneMouseEvent *event, CityMapPixmapItem *item);
};
#endif // REGIONMAPEDITOR_H
diff --git a/include/ui/tilemaptileselector.h b/include/ui/tilemaptileselector.h
index 7bf2b632..293ad3af 100644
--- a/include/ui/tilemaptileselector.h
+++ b/include/ui/tilemaptileselector.h
@@ -6,9 +6,10 @@
class TilemapTileSelector: public SelectablePixmapItem {
Q_OBJECT
public:
- TilemapTileSelector(QPixmap pixmap): SelectablePixmapItem(8, 8, 1, 1) {
- this->pixmap = pixmap;
- this->numTilesWide = pixmap.width() / 8;
+ TilemapTileSelector(QPixmap pixmap_): SelectablePixmapItem(8, 8, 1, 1) {
+ this->tilemap = pixmap_;
+ this->setPixmap(this->tilemap);
+ this->numTilesWide = tilemap.width() / 8;
this->selectedTile = 0x00;
setAcceptHoverEvents(true);
}
@@ -21,10 +22,7 @@ public:
unsigned selectedTile = 0;
- // TODO: which of these need to be made public?
- // call this tilemap? or is tilemap the binary file?
- QPixmap pixmap;// pointer?
- QImage currTile;// image of just the currently selected tile to draw onto graphicsview
+ QPixmap tilemap;
QImage tileImg(unsigned tileId);
protected:
@@ -40,7 +38,6 @@ private:
void updateSelectedTile();
unsigned getTileId(int x, int y);
QPoint getTileIdCoords(unsigned);
- unsigned getValidTileId(unsigned);// TODO: implement this to prevent segfaults
signals:
void hoveredTileChanged(unsigned);
diff --git a/porymap.pro b/porymap.pro
index 7a72c3d8..754f45f1 100644
--- a/porymap.pro
+++ b/porymap.pro
@@ -28,7 +28,6 @@ SOURCES += src/core/block.cpp \
src/core/parseutil.cpp \
src/core/tile.cpp \
src/core/tileset.cpp \
- src/core/regionmapeditor.cpp \
src/core/regionmap.cpp \
src/core/regionmapgenerator.cpp \
src/ui/aboutporymap.cpp \
@@ -86,7 +85,6 @@ HEADERS += include/core/block.h \
include/core/parseutil.h \
include/core/tile.h \
include/core/tileset.h \
- include/core/regionmapeditor.h \
include/core/regionmap.h \
include/core/regionmapgenerator.h \
include/ui/aboutporymap.h \
diff --git a/src/core/historyitem.cpp b/src/core/historyitem.cpp
index 997de9f6..1b0f3888 100644
--- a/src/core/historyitem.cpp
+++ b/src/core/historyitem.cpp
@@ -10,11 +10,6 @@ HistoryItem::~HistoryItem() {
if (this->metatiles) delete this->metatiles;
}
-RegionMapHistoryItem::RegionMapHistoryItem(int which, QVector tiles) {
- this->which = which;
- this->tiles = tiles;
-}
-
RegionMapHistoryItem::RegionMapHistoryItem(int which, QVector tiles, QString cityMap) {
this->which = which;
this->tiles = tiles;
diff --git a/src/core/regionmap.cpp b/src/core/regionmap.cpp
index 678ed2a2..3720e03d 100644
--- a/src/core/regionmap.cpp
+++ b/src/core/regionmap.cpp
@@ -7,8 +7,7 @@
#include
#include
#include
-
-
+#include
void RegionMap::init(Project *pro) {
QString path = pro->root;
@@ -29,10 +28,15 @@ void RegionMap::init(Project *pro) {
readBkgImgBin();
readLayout();
- readCityMaps();
}
-// TODO: if the tileId is not valid for the provided image, make sure it does not crash
+void RegionMap::save() {
+ logInfo("Saving region map data.");
+ saveBkgImgBin();
+ saveLayout();
+ porymapConfig.setRegionMapDimensions(this->img_width_, this->img_height_);
+}
+
void RegionMap::readBkgImgBin() {
QFile binFile(region_map_bin_path);
if (!binFile.open(QIODevice::ReadOnly)) return;
@@ -54,7 +58,7 @@ void RegionMap::readBkgImgBin() {
}
void RegionMap::saveBkgImgBin() {
- QByteArray data(4096,0);// use a constant here? maybe read the original size?
+ QByteArray data(pow(img_width_ * 2, 2),0);
for (int m = 0; m < img_height_; m++) {
for (int n = 0; n < img_width_; n++) {
@@ -68,9 +72,7 @@ void RegionMap::saveBkgImgBin() {
file.close();
}
-// TODO: reorganize this into project? the i/o stuff. use regionMapSections
void RegionMap::readLayout() {
- //
QFile file(region_map_entries_path);
if (!file.open(QIODevice::ReadOnly)) return;
@@ -111,17 +113,16 @@ void RegionMap::readLayout() {
QByteArray mapBinData = binFile.readAll();
binFile.close();
- // TODO: improve this?
- for (int m = 0; m < layout_height_; m++) {
- for (int n = 0; n < layout_width_; n++) {
- int i = img_index_(n,m);
- map_squares[i].secid = static_cast(mapBinData.at(layout_index_(n,m)));
- QString secname = (*(project->regionMapSections))[static_cast(mapBinData.at(layout_index_(n,m)))];
+ for (int y = 0; y < layout_height_; y++) {
+ for (int x = 0; x < layout_width_; x++) {
+ int i = img_index_(x,y);
+ map_squares[i].secid = static_cast(mapBinData.at(layout_index_(x,y)));
+ QString secname = (*(project->regionMapSections))[static_cast(mapBinData.at(layout_index_(x,y)))];
if (secname != "MAPSEC_NONE") map_squares[i].has_map = true;
map_squares[i].mapsec = secname;
- map_squares[i].map_name = sMapNamesMap.value(mapSecToMapEntry.value(secname).name);// TODO: this is atrocious
- map_squares[i].x = n;
- map_squares[i].y = m;
+ map_squares[i].map_name = sMapNamesMap.value(mapSecToMapEntry.value(secname).name);
+ map_squares[i].x = x;
+ map_squares[i].y = y;
}
}
}
@@ -162,69 +163,11 @@ void RegionMap::saveLayout() {
bfile.close();
}
-void RegionMap::readCityMaps() {}
-
-// layout coords to image index
-int RegionMap::img_index_(int x, int y) {
- return ((x + this->padLeft) + (y + this->padTop) * img_width_);
-}
-
-// layout coords to layout index
-int RegionMap::layout_index_(int x, int y) {
- return (x + y * layout_width_);
-}
-
-int RegionMap::width() {
- return this->img_width_;
-}
-
-int RegionMap::height() {
- return this->img_height_;
-}
-
-QSize RegionMap::imgSize() {
- return QSize(img_width_ * 8, img_height_ * 8);
-}
-
-QVector RegionMap::getTiles() {
- //
- QVector tileIds;
- for (auto square : map_squares) {
- tileIds.append(square.tile_img_id);
- }
- return tileIds;
-}
-
-void RegionMap::setTiles(QVector tileIds) {
- //
- if (tileIds.size() != map_squares.size()) {
- qDebug() << "YOU SHOULD RESIZE";
- return;
- }
- int i = 0;
- for (uint8_t tileId : tileIds) {
- map_squares[i].tile_img_id = tileId;
- i++;
- }
-}
-
-// TODO: rename to getTileIdAt()?
-unsigned RegionMap::getTileId(int x, int y) {
- return map_squares[x + y * img_width_].tile_img_id;
-}
-
-void RegionMap::save() {
- logInfo("Saving region map info.");
- saveBkgImgBin();
- saveLayout();
- porymapConfig.setRegionMapDimensions(this->img_width_, this->img_height_);
-}
-
void RegionMap::saveOptions(int id, QString sec, QString name, int x, int y) {
resetSquare(id);
int index = getMapSquareIndex(x + this->padLeft, y + this->padTop);
if (!sec.isEmpty()) {
- this->map_squares[index].has_map = true;
+ this->map_squares[index].has_map = sec == "MAPSEC_NONE" ? false : true;
this->map_squares[index].secid = static_cast(project->regionMapSections->indexOf(sec));
this->map_squares[index].mapsec = sec;
if (!name.isEmpty()) {
@@ -234,7 +177,7 @@ void RegionMap::saveOptions(int id, QString sec, QString name, int x, int y) {
QString sName = fix_case(sec);
sMapNames.append(sName);
sMapNamesMap.insert(sName, name);
- struct RegionMapEntry entry = {x, y, 1, 1, sName};// TODO: change width, height?
+ struct RegionMapEntry entry = {x, y, 1, 1, sName};
mapSecToMapEntry.insert(sec, entry);
}
}
@@ -242,32 +185,6 @@ void RegionMap::saveOptions(int id, QString sec, QString name, int x, int y) {
this->map_squares[index].y = y;
this->map_squares[index].duplicated = false;
}
- //resetSquare(id);
-}
-
-// from x, y of image
-int RegionMap::getMapSquareIndex(int x, int y) {
- int index = (x + y * img_width_);
- return index < map_squares.length() ? index : 0;
-}
-
-// For turning a MAPSEC_NAME into a unique identifier sMapName-style variable.
-QString RegionMap::fix_case(QString caps) {
- bool big = true;
- QString camel;
-
- for (auto ch : caps.remove(QRegularExpression("({.*})")).remove("MAPSEC")) {
- if (ch == '_' || ch == ' ') {
- big = true;
- continue;
- }
- if (big) {
- camel += ch.toUpper();
- big = false;
- }
- else camel += ch.toLower();
- }
- return camel;
}
void RegionMap::resetSquare(int index) {
@@ -282,7 +199,6 @@ void RegionMap::resetSquare(int index) {
}
void RegionMap::resize(int newWidth, int newHeight) {
- //
QVector new_squares;
for (int y = 0; y < newHeight; y++) {
@@ -301,10 +217,87 @@ void RegionMap::resize(int newWidth, int newHeight) {
new_squares.append(square);
}
}
-
this->map_squares = new_squares;
this->img_width_ = newWidth;
this->img_height_ = newHeight;
this->layout_width_ = newWidth - this->padLeft - this->padRight;
this->layout_height_ = newHeight - this->padTop - this->padBottom;
}
+
+QVector RegionMap::getTiles() {
+ QVector tileIds;
+ for (auto square : map_squares) {
+ tileIds.append(square.tile_img_id);
+ }
+ return tileIds;
+}
+
+void RegionMap::setTiles(QVector tileIds) {
+ if (tileIds.size() != map_squares.size()) return;
+
+ int i = 0;
+ for (uint8_t tileId : tileIds) {
+ map_squares[i].tile_img_id = tileId;
+ i++;
+ }
+}
+
+// Layout coords to image index.
+int RegionMap::img_index_(int x, int y) {
+ return ((x + this->padLeft) + (y + this->padTop) * img_width_);
+}
+
+// Layout coords to layout index.
+int RegionMap::layout_index_(int x, int y) {
+ return (x + y * layout_width_);
+}
+
+int RegionMap::width() {
+ return this->img_width_;
+}
+
+int RegionMap::height() {
+ return this->img_height_;
+}
+
+QSize RegionMap::imgSize() {
+ return QSize(img_width_ * 8, img_height_ * 8);
+}
+
+unsigned RegionMap::getTileId(int x, int y) {
+ return map_squares.at(x + y * img_width_).tile_img_id;
+}
+
+QString RegionMap::pngPath() {
+ return this->region_map_png_path;
+}
+
+QString RegionMap::cityTilesPath() {
+ return this->city_map_tiles_path;
+}
+
+// From x, y of image.
+int RegionMap::getMapSquareIndex(int x, int y) {
+ int index = (x + y * img_width_);
+ return index < map_squares.length() ? index : 0;
+}
+
+// For turning a MAPSEC_NAME into a unique identifier sMapName-style variable.
+// CAPS_WITH_UNDERSCORE to CamelCase
+QString RegionMap::fix_case(QString caps) {
+ bool big = true;
+ QString camel;
+
+ for (auto ch : caps.remove(QRegularExpression("({.*})")).remove("MAPSEC")) {
+ if (ch == '_' || ch == ' ') {
+ big = true;
+ continue;
+ }
+ if (big) {
+ camel += ch.toUpper();
+ big = false;
+ }
+ else camel += ch.toLower();
+ }
+ return camel;
+}
diff --git a/src/project.cpp b/src/project.cpp
index d7e99ce3..d763efba 100644
--- a/src/project.cpp
+++ b/src/project.cpp
@@ -1512,7 +1512,6 @@ void Project::readRegionMapSections() {
QString filepath = root + "/include/constants/region_map_sections.h";
QStringList prefixes = (QStringList() << "MAPSEC_");
readCDefinesSorted(filepath, prefixes, regionMapSections);
- regionMapSections->removeAll("MAPSEC_SUBTRACT_KANTO");// TODO: fix this (in repos?)
}
void Project::readItemNames() {
diff --git a/src/ui/citymappixmapitem.cpp b/src/ui/citymappixmapitem.cpp
index da920ca6..bbe31f65 100644
--- a/src/ui/citymappixmapitem.cpp
+++ b/src/ui/citymappixmapitem.cpp
@@ -6,8 +6,6 @@
#include
#include
-
-
void CityMapPixmapItem::init() {
width_ = 10;
height_ = 10;
@@ -78,7 +76,6 @@ void CityMapPixmapItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) {
}
QVector CityMapPixmapItem::getTiles() {
- //
QVector tiles;
for (auto tile : data) {
tiles.append(tile);
@@ -87,7 +84,6 @@ QVector CityMapPixmapItem::getTiles() {
}
void CityMapPixmapItem::setTiles(QVector tiles) {
- //
QByteArray newData;
for (auto tile : tiles) {
newData.append(tile);
diff --git a/src/ui/regionmapeditor.cpp b/src/ui/regionmapeditor.cpp
index 3c9ea146..42fff3ef 100644
--- a/src/ui/regionmapeditor.cpp
+++ b/src/ui/regionmapeditor.cpp
@@ -19,6 +19,7 @@ RegionMapEditor::RegionMapEditor(QWidget *parent, Project *project_) :
this->ui->setupUi(this);
this->project = project_;
this->region_map = new RegionMap;
+ this->ui->action_RegionMap_Generate->setVisible(false);
}
RegionMapEditor::~RegionMapEditor()
@@ -48,6 +49,7 @@ void RegionMapEditor::on_action_RegionMap_Save_triggered() {
this->ui->spinBox_RM_Options_x->value(),
this->ui->spinBox_RM_Options_y->value()
);
+ this->currIndex = this->region_map_layout_item->highlightedTile;
this->region_map_layout_item->highlightedTile = -1;
displayRegionMap();
}
@@ -104,8 +106,13 @@ void RegionMapEditor::displayRegionMapImage() {
this->ui->graphicsView_Region_Map_BkgImg->setFixedSize(this->region_map->imgSize().width() * scaleRegionMapImage + 2,
this->region_map->imgSize().height() * scaleRegionMapImage + 2);
- RegionMapHistoryItem *commit = new RegionMapHistoryItem(RegionMapEditorBox::BackgroundImage, this->region_map->getTiles());
- history.push(commit);
+ if (regionMapFirstDraw) {
+ RegionMapHistoryItem *commit = new RegionMapHistoryItem(
+ RegionMapEditorBox::BackgroundImage, this->region_map->getTiles(), this->region_map->width(), this->region_map->height()
+ );
+ history.push(commit);
+ regionMapFirstDraw = false;
+ }
}
void RegionMapEditor::displayRegionMapLayout() {
@@ -179,7 +186,7 @@ void RegionMapEditor::displayRegionMapTileSelector() {
delete mapsquare_selector_item;
}
- this->mapsquare_selector_item = new TilemapTileSelector(QPixmap(this->region_map->region_map_png_path));
+ this->mapsquare_selector_item = new TilemapTileSelector(QPixmap(this->region_map->pngPath()));
this->mapsquare_selector_item->draw();
this->scene_region_map_tiles->addItem(this->mapsquare_selector_item);
@@ -207,7 +214,7 @@ void RegionMapEditor::displayCityMapTileSelector() {
delete city_map_selector_item;
}
- this->city_map_selector_item = new TilemapTileSelector(QPixmap(this->region_map->city_map_tiles_path));
+ this->city_map_selector_item = new TilemapTileSelector(QPixmap(this->region_map->cityTilesPath()));
this->city_map_selector_item->draw();
this->scene_city_map_tiles->addItem(this->city_map_selector_item);
@@ -245,11 +252,6 @@ void RegionMapEditor::displayCityMap(QString f) {
this->ui->graphicsView_City_Map->setScene(scene_city_map_image);
this->ui->graphicsView_City_Map->setFixedSize(8 * city_map_item->width() * scaleCityMapImage + 2,
8 * city_map_item->height() * scaleCityMapImage + 2);
-
- RegionMapHistoryItem *commit = new RegionMapHistoryItem(
- RegionMapEditorBox::CityMapImage, this->city_map_item->getTiles(), this->city_map_item->file
- );
- history.push(commit);
}
bool RegionMapEditor::createCityMap(QString name) {
@@ -302,9 +304,10 @@ void RegionMapEditor::onRegionMapTileSelectorHoveredTileCleared() {
void RegionMapEditor::onRegionMapLayoutSelectedTileChanged(int index) {
QString message = QString();
this->currIndex = index;
+ this->region_map_layout_item->highlightedTile = index;
if (this->region_map->map_squares[index].has_map) {
message = QString("\t %1").arg(this->project->mapSecToMapHoverName->value(
- this->region_map->map_squares[index].mapsec)).remove("{NAME_END}");// ruby-specific
+ this->region_map->map_squares[index].mapsec)).remove("{NAME_END}");
}
this->ui->statusbar->showMessage(message);
@@ -319,7 +322,7 @@ void RegionMapEditor::onRegionMapLayoutHoveredTileChanged(int index) {
message = QString("(%1, %2)").arg(x).arg(y);
if (this->region_map->map_squares[index].has_map) {
message += QString("\t %1").arg(this->project->mapSecToMapHoverName->value(
- this->region_map->map_squares[index].mapsec)).remove("{NAME_END}");
+ this->region_map->map_squares[index].mapsec)).remove("{NAME_END}");
}
}
this->ui->statusbar->showMessage(message);
@@ -330,7 +333,7 @@ void RegionMapEditor::onRegionMapLayoutHoveredTileCleared() {
}
void RegionMapEditor::onHoveredRegionMapTileChanged(int x, int y) {
- QString message = QString("x: %1, y: %2 Tile: 0x").arg(x).arg(y)
+ QString message = QString("x: %1, y: %2 Tile: 0x").arg(x).arg(y)
+ QString("%1").arg(this->region_map->getTileId(x, y), 4, 16, QChar('0')).toUpper();
this->ui->statusbar->showMessage(message);
}
@@ -357,7 +360,7 @@ void RegionMapEditor::mouseEvent_region_map(QGraphicsSceneMouseEvent *event, Reg
bool addToHistory = !(current && current->tiles == this->region_map->getTiles());
if (addToHistory) {
RegionMapHistoryItem *commit = new RegionMapHistoryItem(
- RegionMapEditorBox::BackgroundImage, this->region_map->getTiles()
+ RegionMapEditorBox::BackgroundImage, this->region_map->getTiles(), this->region_map->width(), this->region_map->height()
);
history.push(commit);
}
@@ -366,12 +369,19 @@ void RegionMapEditor::mouseEvent_region_map(QGraphicsSceneMouseEvent *event, Reg
}
void RegionMapEditor::mouseEvent_city_map(QGraphicsSceneMouseEvent *event, CityMapPixmapItem *item) {
- //
QPointF pos = event->pos();
int x = static_cast(pos.x()) / 8;
int y = static_cast(pos.y()) / 8;
int index = this->city_map_item->getIndexAt(x, y);
+ if (cityMapFirstDraw) {
+ RegionMapHistoryItem *commit = new RegionMapHistoryItem(
+ RegionMapEditorBox::CityMapImage, this->city_map_item->getTiles(), this->city_map_item->file
+ );
+ history.push(commit);
+ cityMapFirstDraw = false;
+ }
+
if (event->buttons() & Qt::RightButton) {// TODO
//} else if (event->buttons() & Qt::MiddleButton) {// TODO
} else {
@@ -473,7 +483,7 @@ void RegionMapEditor::on_action_RegionMap_Resize_triggered() {
QSpinBox *heightSpinBox = new QSpinBox();
widthSpinBox->setMinimum(32);
heightSpinBox->setMinimum(20);
- widthSpinBox->setMaximum(60);// w * h * 2 <= 4960
+ widthSpinBox->setMaximum(60);// TODO: find real limits
heightSpinBox->setMaximum(40);
widthSpinBox->setValue(this->region_map->width());
heightSpinBox->setValue(this->region_map->height());
@@ -488,6 +498,10 @@ void RegionMapEditor::on_action_RegionMap_Resize_triggered() {
if (popup.exec() == QDialog::Accepted) {
resize(widthSpinBox->value(), heightSpinBox->value());
+ RegionMapHistoryItem *commit = new RegionMapHistoryItem(
+ RegionMapEditorBox::BackgroundImage, this->region_map->getTiles(), widthSpinBox->value(), heightSpinBox->value()
+ );
+ history.push(commit);
}
this->hasUnsavedChanges = true;
@@ -498,7 +512,6 @@ void RegionMapEditor::on_action_RegionMap_Undo_triggered() {
this->hasUnsavedChanges = true;
}
-// TODO: add resizing
void RegionMapEditor::undo() {
RegionMapHistoryItem *commit = history.back();
if (!commit) return;
@@ -506,6 +519,8 @@ void RegionMapEditor::undo() {
switch (commit->which)
{
case RegionMapEditorBox::BackgroundImage:
+ if (commit->mapWidth != this->region_map->width() || commit->mapHeight != this->region_map->height())
+ this->resize(commit->mapWidth, commit->mapHeight);
this->region_map->setTiles(commit->tiles);
this->region_map_item->draw();
break;
@@ -514,10 +529,6 @@ void RegionMapEditor::undo() {
this->city_map_item->setTiles(commit->tiles);
this->city_map_item->draw();
break;
- case RegionMapEditorBox::BackroundResize:
- this->region_map->resize(commit->mapWidth, commit->mapHeight);
- displayRegionMap();
- break;
}
}
@@ -533,6 +544,8 @@ void RegionMapEditor::redo() {
switch (commit->which)
{
case RegionMapEditorBox::BackgroundImage:
+ if (commit->mapWidth != this->region_map->width() || commit->mapHeight != this->region_map->height())
+ this->resize(commit->mapWidth, commit->mapHeight);
this->region_map->setTiles(commit->tiles);
this->region_map_item->draw();
break;
@@ -540,31 +553,20 @@ void RegionMapEditor::redo() {
this->city_map_item->setTiles(commit->tiles);
this->city_map_item->draw();
break;
- case RegionMapEditorBox::BackroundResize:
- this->region_map->resize(commit->mapWidth, commit->mapHeight);
- displayRegionMap();
- break;
}
}
void RegionMapEditor::resize(int w, int h) {
- RegionMapHistoryItem *commitOld = new RegionMapHistoryItem(
- RegionMapEditorBox::BackroundResize, this->region_map->getTiles(), this->region_map->width(), this->region_map->height()
- );
- RegionMapHistoryItem *commitNew = new RegionMapHistoryItem(
- RegionMapEditorBox::BackroundResize, this->region_map->getTiles(), w, h
- );
- history.push(commitOld);
- history.push(commitNew);
- history.back();
-
this->region_map->resize(w, h);
- this->currIndex = 2 * w + 1;
- displayRegionMap();
+ this->currIndex = this->region_map->padLeft * w + this->region_map->padTop;
+ displayRegionMapImage();
+ displayRegionMapLayout();
+ displayRegionMapLayoutOptions();
}
void RegionMapEditor::on_comboBox_CityMap_picker_currentTextChanged(const QString &file) {
this->displayCityMap(file);
+ this->cityMapFirstDraw = true;
}
void RegionMapEditor::closeEvent(QCloseEvent *event)
@@ -652,7 +654,6 @@ void RegionMapEditor::on_verticalSlider_Zoom_City_Tiles_valueChanged(int val) {
}
void RegionMapEditor::on_action_RegionMap_Generate_triggered() {
- //
RegionMapGenerator generator(this->project);
generator.generate("LittlerootTown");
this->hasUnsavedChanges = true;
diff --git a/src/ui/regionmaplayoutpixmapitem.cpp b/src/ui/regionmaplayoutpixmapitem.cpp
index 8654b66b..82edc5ba 100644
--- a/src/ui/regionmaplayoutpixmapitem.cpp
+++ b/src/ui/regionmaplayoutpixmapitem.cpp
@@ -1,7 +1,5 @@
#include "regionmaplayoutpixmapitem.h"
-
-
void RegionMapLayoutPixmapItem::draw() {
if (!region_map) return;
@@ -76,9 +74,7 @@ void RegionMapLayoutPixmapItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
mousePressEvent(event);
}
-void RegionMapLayoutPixmapItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) {
- //
-}
+void RegionMapLayoutPixmapItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) {}
void RegionMapLayoutPixmapItem::hoverMoveEvent(QGraphicsSceneHoverEvent *event) {
QPoint pos = this->getCellPos(event->pos());
diff --git a/src/ui/regionmappixmapitem.cpp b/src/ui/regionmappixmapitem.cpp
index 6f3886c7..976d1ae9 100644
--- a/src/ui/regionmappixmapitem.cpp
+++ b/src/ui/regionmappixmapitem.cpp
@@ -1,7 +1,4 @@
#include "regionmappixmapitem.h"
-#include "imageproviders.h"
-
-
void RegionMapPixmapItem::draw() {
if (!region_map) return;
diff --git a/src/ui/tilemaptileselector.cpp b/src/ui/tilemaptileselector.cpp
index af7dfdc5..770b20b5 100644
--- a/src/ui/tilemaptileselector.cpp
+++ b/src/ui/tilemaptileselector.cpp
@@ -3,16 +3,15 @@
#include
void TilemapTileSelector::draw() {
- size_t width_ = this->pixmap.width();
+ size_t width_ = this->tilemap.width();
this->pixelWidth = width_;
- size_t height_ = this->pixmap.height();
+ size_t height_ = this->tilemap.height();
this->pixelHeight = height_;
size_t ntiles_ = (width_/8) * (height_/8);
this->numTilesWide = width_ / 8;
this->numTiles = ntiles_;
- this->setPixmap(this->pixmap);
this->drawSelection();
}
@@ -37,6 +36,16 @@ unsigned TilemapTileSelector::getTileId(int x, int y) {
return index < this->numTiles ? index : this->numTiles % index;
}
+QPoint TilemapTileSelector::getTileIdCoords(unsigned tileId) {
+ int index = tileId < this->numTiles ? tileId : this->numTiles % tileId;
+ return QPoint(index % this->numTilesWide, index / this->numTilesWide);
+}
+
+QImage TilemapTileSelector::tileImg(unsigned tileId) {
+ QPoint pos = getTileIdCoords(tileId);
+ return this->tilemap.copy(pos.x() * 8, pos.y() * 8, 8, 8).toImage();
+}
+
void TilemapTileSelector::mousePressEvent(QGraphicsSceneMouseEvent *event) {
SelectablePixmapItem::mousePressEvent(event);
this->updateSelectedTile();
@@ -65,14 +74,3 @@ void TilemapTileSelector::hoverMoveEvent(QGraphicsSceneHoverEvent *event) {
void TilemapTileSelector::hoverLeaveEvent(QGraphicsSceneHoverEvent* event) {
emit this->hoveredTileCleared();
}
-
-QPoint TilemapTileSelector::getTileIdCoords(unsigned tileId) {
- int index = tileId < this->numTiles ? tileId : this->numTiles % tileId;
- return QPoint(index % this->numTilesWide, index / this->numTilesWide);
-}
-
-QImage TilemapTileSelector::tileImg(unsigned tileId) {
- //
- QPoint pos = getTileIdCoords(tileId);
- return pixmap.copy(pos.x() * 8, pos.y() * 8, 8, 8).toImage();
-}