add region map data to config, fix some bugs
This commit is contained in:
parent
c75ce5db1d
commit
41f3780c8a
16 changed files with 399 additions and 154 deletions
|
@ -1031,8 +1031,15 @@
|
|||
<addaction name="action_RegionMap_Redo"/>
|
||||
<addaction name="action_RegionMap_Resize"/>
|
||||
</widget>
|
||||
<widget class="QMenu" name="menuTools">
|
||||
<property name="title">
|
||||
<string>Tools</string>
|
||||
</property>
|
||||
<addaction name="action_RegionMap_Generate"/>
|
||||
</widget>
|
||||
<addaction name="menuFile"/>
|
||||
<addaction name="menuEdit"/>
|
||||
<addaction name="menuTools"/>
|
||||
</widget>
|
||||
<widget class="QStatusBar" name="statusbar"/>
|
||||
<action name="action_RegionMap_Save">
|
||||
|
@ -1067,6 +1074,11 @@
|
|||
<string>Ctrl+R</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_RegionMap_Generate">
|
||||
<property name="text">
|
||||
<string>Generate...</string>
|
||||
</property>
|
||||
</action>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections/>
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
#include <QString>
|
||||
#include <QObject>
|
||||
#include <QByteArrayList>
|
||||
#include <QSize>
|
||||
|
||||
enum MapSortOrder {
|
||||
Group = 0,
|
||||
|
@ -36,6 +37,7 @@ public:
|
|||
this->metatilesZoom = 30;
|
||||
this->showPlayerView = false;
|
||||
this->showCursorTile = true;
|
||||
this->regionMapDimensions = QSize(32, 20);
|
||||
}
|
||||
void setRecentProject(QString project);
|
||||
void setRecentMap(QString map);
|
||||
|
@ -46,6 +48,7 @@ public:
|
|||
void setMetatilesZoom(int zoom);
|
||||
void setShowPlayerView(bool enabled);
|
||||
void setShowCursorTile(bool enabled);
|
||||
void setRegionMapDimensions(int width, int height);
|
||||
QString getRecentProject();
|
||||
QString getRecentMap();
|
||||
MapSortOrder getMapSortOrder();
|
||||
|
@ -55,6 +58,7 @@ public:
|
|||
int getMetatilesZoom();
|
||||
bool getShowPlayerView();
|
||||
bool getShowCursorTile();
|
||||
QSize getRegionMapDimensions();
|
||||
protected:
|
||||
QString getConfigFilepath();
|
||||
void parseConfigKeyValue(QString key, QString value);
|
||||
|
@ -76,6 +80,7 @@ private:
|
|||
int metatilesZoom;
|
||||
bool showPlayerView;
|
||||
bool showCursorTile;
|
||||
QSize regionMapDimensions;
|
||||
};
|
||||
|
||||
extern PorymapConfig porymapConfig;
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
#define MAPCONNECTION_H
|
||||
|
||||
#include <QString>
|
||||
#include <QHash>
|
||||
|
||||
class MapConnection {
|
||||
public:
|
||||
|
@ -10,4 +11,12 @@ public:
|
|||
QString map_name;
|
||||
};
|
||||
|
||||
inline bool operator==(const MapConnection &c1, const MapConnection &c2) {
|
||||
return c1.map_name == c2.map_name;
|
||||
}
|
||||
|
||||
inline uint qHash(const MapConnection &key) {
|
||||
return qHash(key.map_name);
|
||||
}
|
||||
|
||||
#endif // MAPCONNECTION_H
|
||||
|
|
|
@ -61,9 +61,13 @@ public:
|
|||
|
||||
Project *project;
|
||||
|
||||
//QList<RegionMapSquare> map_squares;
|
||||
QVector<RegionMapSquare> map_squares;
|
||||
|
||||
const int padLeft = 1;
|
||||
const int padRight = 3;
|
||||
const int padTop = 2;
|
||||
const int padBottom = 3;
|
||||
|
||||
History<RegionMapHistoryItem*> history;
|
||||
|
||||
QString region_map_png_path;
|
||||
|
@ -115,8 +119,6 @@ public:
|
|||
|
||||
void resetSquare(int);
|
||||
|
||||
void test();// remove
|
||||
|
||||
// TODO: move read / write functions to private (and others)
|
||||
private:
|
||||
int layout_width_;
|
||||
|
|
77
include/core/regionmapgenerator.h
Normal file
77
include/core/regionmapgenerator.h
Normal file
|
@ -0,0 +1,77 @@
|
|||
#ifndef GUARD_REGIONMAPGENERATOR_H
|
||||
#define GUARD_REGIONMAPGENERATOR_H
|
||||
|
||||
#include "project.h"
|
||||
#include "regionmap.h"
|
||||
#include "map.h"
|
||||
|
||||
#include <QDebug>
|
||||
#include <QString>
|
||||
#include <QVector>
|
||||
#include <QStack>
|
||||
#include <QPair>
|
||||
#include <QSet>
|
||||
|
||||
class GeneratorEntry
|
||||
{
|
||||
GeneratorEntry(QString name_, int x_, int y_, int width_, int height_) {
|
||||
this->name = name_;
|
||||
this->x = x_;
|
||||
this->y = y_;
|
||||
this->width = width_;
|
||||
this->height = height_;
|
||||
}
|
||||
int x;
|
||||
int y;
|
||||
int width;
|
||||
int height;
|
||||
QString name;
|
||||
friend class RegionMapGenerator;
|
||||
public:
|
||||
friend QDebug operator<<(QDebug, const GeneratorEntry &);
|
||||
};
|
||||
|
||||
class RegionMapGenerator
|
||||
{
|
||||
//
|
||||
public:
|
||||
//
|
||||
RegionMapGenerator() = default;
|
||||
RegionMapGenerator(Project *);
|
||||
~RegionMapGenerator() {};
|
||||
|
||||
Project *project = nullptr;
|
||||
|
||||
QVector<RegionMapSquare> map_squares;
|
||||
|
||||
QStack<QPair<QString, int>> forks;//?
|
||||
QSet<MapConnection> connections;//
|
||||
// <MapConnection>
|
||||
|
||||
void generate(QString);
|
||||
|
||||
void center();// center the map squares so they arent hanging over
|
||||
|
||||
private:
|
||||
//
|
||||
int square_block_width_ = 20;
|
||||
int square_block_height_ = 20;
|
||||
|
||||
int width_;
|
||||
int height_;
|
||||
|
||||
//QPoint
|
||||
|
||||
QList<struct RegionMapEntry> entries_;
|
||||
QMap<QString, GeneratorEntry> entries;
|
||||
|
||||
void bfs(int);// breadth first search of a graph
|
||||
void search(int);
|
||||
void dfs(int, QVector<bool> &);// depth first search
|
||||
void sort();
|
||||
void ts();// topological sort
|
||||
void populateSquares();
|
||||
|
||||
};
|
||||
|
||||
#endif // GUARD_REGIONMAPGENERATOR_H
|
|
@ -47,8 +47,7 @@ public:
|
|||
Map* loadMap(QString);
|
||||
Map* getMap(QString);
|
||||
|
||||
// other options include: InGameName, PopUpName, ????
|
||||
QMap<QString, QString> *mapSecToMapHoverName;// {"MAPSEC_LITTLEROOT_TOWN" : "LITTLEROOT{NAME_END} TOWN"}
|
||||
QMap<QString, QString> *mapSecToMapHoverName;
|
||||
|
||||
QMap<QString, Tileset*> *tileset_cache = nullptr;
|
||||
Tileset* loadTileset(QString, Tileset *tileset = nullptr);
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
#define CITYMAPPIXMAPITEM_H
|
||||
|
||||
#include "tilemaptileselector.h"
|
||||
|
||||
#include <QGraphicsPixmapItem>
|
||||
#include <QByteArray>
|
||||
|
||||
|
@ -18,10 +19,6 @@ public:
|
|||
|
||||
QString file;
|
||||
|
||||
// TODO: make private and use access functions
|
||||
int width;
|
||||
int height;
|
||||
|
||||
QByteArray data;
|
||||
|
||||
void init();
|
||||
|
@ -30,10 +27,12 @@ public:
|
|||
virtual void paint(QGraphicsSceneMouseEvent*);
|
||||
virtual void draw();
|
||||
int getIndexAt(int, int);
|
||||
int width();
|
||||
int height();
|
||||
|
||||
//private:
|
||||
// int width;
|
||||
// int height;
|
||||
private:
|
||||
int width_;
|
||||
int height_;
|
||||
|
||||
signals:
|
||||
void mouseEvent(QGraphicsSceneMouseEvent *, CityMapPixmapItem *);
|
||||
|
|
|
@ -29,6 +29,8 @@ public:
|
|||
void loadRegionMapData();
|
||||
void loadCityMaps();
|
||||
|
||||
void onRegionMapTileSelectorSelectedTileChanged(unsigned);
|
||||
void onCityMapTileSelectorSelectedTileChanged(unsigned);
|
||||
void onRegionMapTileSelectorHoveredTileChanged(unsigned);
|
||||
void onRegionMapTileSelectorHoveredTileCleared();
|
||||
|
||||
|
@ -47,9 +49,11 @@ private:
|
|||
|
||||
History<RegionMapHistoryItem*> history;
|
||||
|
||||
int currIndex = 65;// TODO: automatic this from width * 2 + 1
|
||||
int currIndex;
|
||||
unsigned selectedCityTile;
|
||||
unsigned selectedImageTile;
|
||||
|
||||
double scaleUpFactor = 2.0;// TODO
|
||||
double scaleUpFactor = 2.0;
|
||||
double scaleDownFactor = 1.0 / scaleUpFactor;
|
||||
|
||||
double scaleRegionMapTiles = 1.0;
|
||||
|
@ -86,6 +90,7 @@ private slots:
|
|||
void on_action_RegionMap_Undo_triggered();
|
||||
void on_action_RegionMap_Redo_triggered();
|
||||
void on_action_RegionMap_Resize_triggered();
|
||||
void on_action_RegionMap_Generate_triggered();
|
||||
void on_tabWidget_Region_Map_currentChanged(int);
|
||||
void on_pushButton_RM_Options_save_clicked();
|
||||
void on_pushButton_RM_Options_delete_clicked();
|
||||
|
|
|
@ -30,6 +30,7 @@ SOURCES += src/core/block.cpp \
|
|||
src/core/tileset.cpp \
|
||||
src/core/regionmapeditor.cpp \
|
||||
src/core/regionmap.cpp \
|
||||
src/core/regionmapgenerator.cpp \
|
||||
src/ui/aboutporymap.cpp \
|
||||
src/ui/bordermetatilespixmapitem.cpp \
|
||||
src/ui/collisionpixmapitem.cpp \
|
||||
|
@ -87,6 +88,7 @@ HEADERS += include/core/block.h \
|
|||
include/core/tileset.h \
|
||||
include/core/regionmapeditor.h \
|
||||
include/core/regionmap.h \
|
||||
include/core/regionmapgenerator.h \
|
||||
include/ui/aboutporymap.h \
|
||||
include/ui/bordermetatilespixmapitem.h \
|
||||
include/ui/collisionpixmapitem.h \
|
||||
|
|
|
@ -156,6 +156,17 @@ void PorymapConfig::parseConfigKeyValue(QString key, QString value) {
|
|||
if (!ok) {
|
||||
logWarn(QString("Invalid config value for show_cursor_tile: '%1'. Must be 0 or 1.").arg(value));
|
||||
}
|
||||
} else if (key == "region_map_dimensions") {
|
||||
bool ok1, ok2;
|
||||
QStringList dims = value.split("x");
|
||||
int w = dims[0].toInt(&ok1);
|
||||
int h = dims[1].toInt(&ok2);
|
||||
if (!ok1 || !ok2) {
|
||||
logWarn("Cannot parse region map dimensions. Using default values instead.");
|
||||
this->regionMapDimensions = QSize(32, 20);
|
||||
} else {
|
||||
this->regionMapDimensions = QSize(w, h);
|
||||
}
|
||||
} else {
|
||||
logWarn(QString("Invalid config key found in config file %1: '%2'").arg(this->getConfigFilepath()).arg(key));
|
||||
}
|
||||
|
@ -176,6 +187,8 @@ QMap<QString, QString> PorymapConfig::getKeyValueMap() {
|
|||
map.insert("metatiles_zoom", QString("%1").arg(this->metatilesZoom));
|
||||
map.insert("show_player_view", this->showPlayerView ? "1" : "0");
|
||||
map.insert("show_cursor_tile", this->showCursorTile ? "1" : "0");
|
||||
map.insert("region_map_dimensions", QString("%1x%2").arg(this->regionMapDimensions.width())
|
||||
.arg(this->regionMapDimensions.height()));
|
||||
return map;
|
||||
}
|
||||
|
||||
|
@ -246,6 +259,10 @@ void PorymapConfig::setShowCursorTile(bool enabled) {
|
|||
this->save();
|
||||
}
|
||||
|
||||
void PorymapConfig::setRegionMapDimensions(int width, int height) {
|
||||
this->regionMapDimensions = QSize(width, height);//QString("%1x%2").arg(width).arg(height);
|
||||
}
|
||||
|
||||
QString PorymapConfig::getRecentProject() {
|
||||
return this->recentProject;
|
||||
}
|
||||
|
@ -290,6 +307,10 @@ bool PorymapConfig::getShowCursorTile() {
|
|||
return this->showCursorTile;
|
||||
}
|
||||
|
||||
QSize PorymapConfig::getRegionMapDimensions() {
|
||||
return this->regionMapDimensions;
|
||||
}
|
||||
|
||||
const QMap<BaseGameVersion, QString> baseGameVersionMap = {
|
||||
{BaseGameVersion::pokeruby, "pokeruby"},
|
||||
{BaseGameVersion::pokeemerald, "pokeemerald"},
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
#include "regionmap.h"
|
||||
#include "log.h"
|
||||
#include "config.h"
|
||||
|
||||
#include <QByteArray>
|
||||
#include <QFile>
|
||||
|
@ -9,31 +10,26 @@
|
|||
|
||||
|
||||
|
||||
// TODO: add version arg to this from Editor Setings
|
||||
void RegionMap::init(Project *pro) {
|
||||
QString path = pro->root;
|
||||
this->project = pro;
|
||||
|
||||
// TODO: in the future, allow these to be adjustable (and save values)
|
||||
// possibly use a config file? save to include/constants/region_map.h?
|
||||
layout_width_ = 36;//28;
|
||||
layout_height_ = 25;//15;
|
||||
QSize dimensions = porymapConfig.getRegionMapDimensions();
|
||||
img_width_ = dimensions.width();
|
||||
img_height_ = dimensions.height();
|
||||
|
||||
img_width_ = layout_width_ + 4;
|
||||
img_height_ = layout_height_ + 5;
|
||||
layout_width_ = img_width_ - this->padLeft - this->padRight;
|
||||
layout_height_ = img_height_ - this->padTop - this->padBottom;
|
||||
|
||||
region_map_bin_path = path + "/graphics/pokenav/region_map_map.bin";
|
||||
region_map_png_path = path + "/graphics/pokenav/region_map.png";
|
||||
region_map_entries_path = path + "/src/data/region_map/region_map_entries.h";
|
||||
region_map_layout_bin_path = path + "/graphics/pokenav/region_map_section_layout.bin";
|
||||
city_map_tiles_path = path + "/graphics/pokenav/zoom_tiles.png";
|
||||
// TODO: rename png to map_squares in pokeemerald
|
||||
|
||||
readBkgImgBin();
|
||||
readLayout();
|
||||
readCityMaps();
|
||||
|
||||
//resize(40,30);
|
||||
}
|
||||
|
||||
// TODO: if the tileId is not valid for the provided image, make sure it does not crash
|
||||
|
@ -58,7 +54,7 @@ void RegionMap::readBkgImgBin() {
|
|||
}
|
||||
|
||||
void RegionMap::saveBkgImgBin() {
|
||||
QByteArray data(4096,0);// use a constant here? maybe read the original size?
|
||||
QByteArray data(4096,0);// use a constant here? maybe read the original size?
|
||||
|
||||
for (int m = 0; m < img_height_; m++) {
|
||||
for (int n = 0; n < img_width_; n++) {
|
||||
|
@ -79,12 +75,7 @@ void RegionMap::readLayout() {
|
|||
if (!file.open(QIODevice::ReadOnly)) return;
|
||||
|
||||
QString line;
|
||||
// TODO: put these in Project, and keep in order
|
||||
//QMap<QString, QString> sMapNamesMap;// {"sMapName_LittlerootTown" : "LITTLEROOT{NAME_END} TOWN"}
|
||||
//QMap<QString, QString> mapSecToMapName;// {"MAPSEC_LITTLEROOT_TOWN" : "LITTLEROOT{NAME_END} TOWN"}
|
||||
//QList<> mapSecToMapEntry;// {"MAPSEC_LITTLEROOT_TOWN" : }
|
||||
|
||||
// new map ffor mapSecToMapHoverName
|
||||
QMap<QString, QString> *qmap = new QMap<QString, QString>;
|
||||
|
||||
QTextStream in(&file);
|
||||
|
@ -103,23 +94,16 @@ void RegionMap::readLayout() {
|
|||
QStringList entry = reAfter.match(line).captured(1).remove(" ").split(",");
|
||||
QString mapsec = reBefore.match(line).captured(1);
|
||||
QString insertion = entry[4].remove("sMapName_");
|
||||
qmap->insert(mapsec, sMapNamesMap[insertion]);
|
||||
// can make this a map, the order doesn't really matter
|
||||
mapSecToMapEntry[mapsec] =
|
||||
// x y width height name
|
||||
{entry[0].toInt(), entry[1].toInt(), entry[2].toInt(), entry[3].toInt(), insertion}
|
||||
;
|
||||
// ^ when loading this info to city maps, loop over mapSecToMapEntry and
|
||||
// add x and y map sqyare when width or height >1
|
||||
// indexOf because mapsecs is just a qstringlist
|
||||
//text += line.remove(" ");
|
||||
qmap->insert(mapsec, sMapNamesMap.value(insertion));
|
||||
mapSecToMapEntry[mapsec] = {
|
||||
// x y width height name
|
||||
entry[0].toInt(), entry[1].toInt(), entry[2].toInt(), entry[3].toInt(), insertion
|
||||
};
|
||||
}
|
||||
}
|
||||
file.close();
|
||||
|
||||
//qDebug() << "sMapNames" << sMapNames;
|
||||
|
||||
project->mapSecToMapHoverName = qmap;// TODO: is this map necessary?
|
||||
project->mapSecToMapHoverName = qmap;
|
||||
|
||||
QFile binFile(region_map_layout_bin_path);
|
||||
if (!binFile.open(QIODevice::ReadOnly)) return;
|
||||
|
@ -154,7 +138,8 @@ void RegionMap::saveLayout() {
|
|||
|
||||
entries_text += "\nconst struct RegionMapLocation gRegionMapEntries[] = {\n";
|
||||
|
||||
for (auto sec : mapSecToMapEntry.keys()) {
|
||||
for (auto sec : *(project->regionMapSections)) {
|
||||
if (!mapSecToMapEntry.contains(sec)) continue;
|
||||
struct RegionMapEntry entry = mapSecToMapEntry.value(sec);
|
||||
entries_text += " [" + sec + "] = {" + QString::number(entry.x) + ", " + QString::number(entry.y) + ", "
|
||||
+ QString::number(entry.width) + ", " + QString::number(entry.height) + ", sMapName_" + entry.name + "},\n";
|
||||
|
@ -180,7 +165,7 @@ void RegionMap::readCityMaps() {}
|
|||
|
||||
// layout coords to image index
|
||||
int RegionMap::img_index_(int x, int y) {
|
||||
return ((x + 1) + (y + 2) * img_width_);
|
||||
return ((x + this->padLeft) + (y + this->padTop) * img_width_);
|
||||
}
|
||||
|
||||
// layout coords to layout index
|
||||
|
@ -188,26 +173,6 @@ int RegionMap::layout_index_(int x, int y) {
|
|||
return (x + y * layout_width_);
|
||||
}
|
||||
|
||||
void RegionMap::test() {
|
||||
//
|
||||
bool debug_rmap = false;
|
||||
|
||||
if (debug_rmap) {
|
||||
for (auto square : map_squares) {
|
||||
qDebug() << "(" << square.x << "," << square.y << ")"
|
||||
<< square.tile_img_id
|
||||
<< square.has_map
|
||||
<< square.map_name
|
||||
<< square.has_city_map
|
||||
<< square.city_map_name
|
||||
;
|
||||
}
|
||||
|
||||
QPixmap png(region_map_png_path);
|
||||
qDebug() << "png num 8x8 tiles" << QString("0x%1").arg((png.width()/8) * (png.height() / 8), 2, 16, QChar('0'));
|
||||
}
|
||||
}
|
||||
|
||||
int RegionMap::width() {
|
||||
return this->img_width_;
|
||||
}
|
||||
|
@ -229,12 +194,12 @@ void RegionMap::save() {
|
|||
logInfo("Saving region map info.");
|
||||
saveBkgImgBin();
|
||||
saveLayout();
|
||||
// TODO: re-select proper tile
|
||||
// TODO: add region map dimensions to config
|
||||
porymapConfig.setRegionMapDimensions(this->img_width_, this->img_height_);
|
||||
}
|
||||
|
||||
void RegionMap::saveOptions(int id, QString sec, QString name, int x, int y) {
|
||||
int index = getMapSquareIndex(x + 1, y + 2);
|
||||
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].secid = static_cast<uint8_t>(project->regionMapSections->indexOf(sec));
|
||||
|
@ -254,14 +219,12 @@ 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);
|
||||
//resetSquare(id);
|
||||
}
|
||||
|
||||
// from x, y of image
|
||||
int RegionMap::getMapSquareIndex(int x, int y) {
|
||||
//
|
||||
int index = (x + y * img_width_);
|
||||
//qDebug() << "index:" << index;
|
||||
return index < map_squares.length() ? index : 0;
|
||||
}
|
||||
|
||||
|
@ -304,7 +267,7 @@ void RegionMap::resize(int newWidth, int newHeight) {
|
|||
RegionMapSquare square;
|
||||
if (x < img_width_ && y < img_height_) {
|
||||
square = map_squares[getMapSquareIndex(x, y)];
|
||||
} else if (x < newWidth - 3 && y < newHeight - 3) {
|
||||
} else if (x < newWidth - this->padRight && y < newHeight - this->padBottom) {
|
||||
square.tile_img_id = 0;
|
||||
square.x = x;
|
||||
square.y = y;
|
||||
|
@ -319,34 +282,6 @@ void RegionMap::resize(int newWidth, int newHeight) {
|
|||
this->map_squares = new_squares;
|
||||
this->img_width_ = newWidth;
|
||||
this->img_height_ = newHeight;
|
||||
this->layout_width_ = newWidth - 4;
|
||||
this->layout_height_ = newHeight - 5;
|
||||
this->layout_width_ = newWidth - this->padLeft - this->padRight;
|
||||
this->layout_height_ = newHeight - this->padTop - this->padBottom;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
148
src/core/regionmapgenerator.cpp
Normal file
148
src/core/regionmapgenerator.cpp
Normal file
|
@ -0,0 +1,148 @@
|
|||
#include "regionmapgenerator.h"
|
||||
|
||||
|
||||
|
||||
RegionMapGenerator::RegionMapGenerator(Project *project_) {
|
||||
this->project = project_;
|
||||
}
|
||||
|
||||
QDebug operator<<(QDebug debug, const GeneratorEntry &entry)
|
||||
{
|
||||
debug.nospace() << "Entry_" << entry.name
|
||||
<< " (" << entry.x << ", " << entry.y << ")"
|
||||
<< " [" << entry.width << " x " << entry.height << "]"
|
||||
;
|
||||
return debug;
|
||||
}
|
||||
|
||||
//
|
||||
void RegionMapGenerator::generate(QString mapName) {
|
||||
//
|
||||
int i = project->mapNames->indexOf(mapName);
|
||||
//Map *map = project->loadMap(mapName);
|
||||
qDebug() << "generating region map from:" << mapName;
|
||||
search(i);
|
||||
|
||||
populateSquares();
|
||||
}
|
||||
|
||||
// use a progress bar because this is rather slow (because loadMap)
|
||||
// TODO: use custom functions to load only necessary data from maps?
|
||||
// need connections and dimensions
|
||||
// maybe use gMapGroup0.numMaps as hint for size of progress
|
||||
void RegionMapGenerator::bfs(int start) {
|
||||
//
|
||||
int size = project->mapNames->size();
|
||||
|
||||
//*
|
||||
|
||||
QVector<bool> visited(size, false);
|
||||
QList<int> queue;
|
||||
|
||||
visited[start] = true;
|
||||
queue.append(start);
|
||||
|
||||
while (!queue.isEmpty()) {
|
||||
start = queue.first();
|
||||
|
||||
qDebug() << project->mapNames->at(start);
|
||||
Map *map = project->loadMap(project->mapNames->at(start));
|
||||
|
||||
if (!map) break;
|
||||
|
||||
this->entries.insert(map->location, {
|
||||
map->name, 0, 0, map->getWidth() / square_block_width_, map->getHeight() / square_block_height_
|
||||
});
|
||||
|
||||
queue.removeFirst();
|
||||
|
||||
// get all connected map indexes
|
||||
// if not visited, mark it visited and insert into queue
|
||||
for (auto c : map->connections) {
|
||||
int i = project->mapNames->indexOf(c->map_name);
|
||||
if (!visited[i] && c->direction != "dive") {
|
||||
visited[i] = true;
|
||||
queue.append(i);
|
||||
}
|
||||
}
|
||||
//delete map;
|
||||
}
|
||||
//*/
|
||||
qDebug() << "search complete";// << entries.keys();
|
||||
//return;
|
||||
}
|
||||
|
||||
//
|
||||
void RegionMapGenerator::dfs(int start, QVector<bool> &visited) {
|
||||
//
|
||||
visited[start] = true;
|
||||
|
||||
Map *map = project->loadMap(project->mapNames->at(start));
|
||||
//qDebug() << map->name;
|
||||
this->entries.insert(map->location, {
|
||||
map->name, 0, 0, map->getWidth() / square_block_width_, map->getHeight() / square_block_height_
|
||||
});
|
||||
|
||||
// place map on the grid?
|
||||
|
||||
for (auto c : map->connections) {
|
||||
int i = project->mapNames->indexOf(c->map_name);
|
||||
if (!visited[i] && c->direction != "dive") {
|
||||
dfs(i, visited);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void RegionMapGenerator::search(int start) {
|
||||
//
|
||||
int size = project->mapNames->size();
|
||||
QVector<bool> visited(size, false);
|
||||
|
||||
dfs(start, visited);
|
||||
}
|
||||
|
||||
void RegionMapGenerator::populateSquares() {
|
||||
//
|
||||
for (auto entry : entries.values()) {
|
||||
qDebug() << entry;//.name << entry.width << "x" << entry.height;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -1,5 +1,6 @@
|
|||
#include "citymappixmapitem.h"
|
||||
#include "imageproviders.h"
|
||||
#include "log.h"
|
||||
|
||||
#include <QFile>
|
||||
#include <QPainter>
|
||||
|
@ -7,11 +8,9 @@
|
|||
|
||||
|
||||
|
||||
// read to byte array from filename
|
||||
void CityMapPixmapItem::init() {
|
||||
// TODO: are they always 10x10 squares?
|
||||
width = 10;
|
||||
height = 10;
|
||||
width_ = 10;
|
||||
height_ = 10;
|
||||
|
||||
QFile binFile(file);
|
||||
if (!binFile.open(QIODevice::ReadOnly)) return;
|
||||
|
@ -21,13 +20,13 @@ void CityMapPixmapItem::init() {
|
|||
}
|
||||
|
||||
void CityMapPixmapItem::draw() {
|
||||
QImage image(width * 8, height * 8, QImage::Format_RGBA8888);
|
||||
QImage image(width_ * 8, height_ * 8, QImage::Format_RGBA8888);
|
||||
|
||||
QPainter painter(&image);
|
||||
for (int i = 0; i < data.size() / 2; i++) {
|
||||
QImage img = this->tile_selector->tileImg(data[i * 2]);// need to skip every other tile
|
||||
int x = i % width;
|
||||
int y = i / width;
|
||||
int x = i % width_;
|
||||
int y = i / width_;
|
||||
QPoint pos = QPoint(x * 8, y * 8);
|
||||
painter.drawImage(pos, img);
|
||||
}
|
||||
|
@ -37,15 +36,16 @@ void CityMapPixmapItem::draw() {
|
|||
}
|
||||
|
||||
void CityMapPixmapItem::save() {
|
||||
// TODO: logError / logWarn if fail
|
||||
QFile binFile(file);
|
||||
if (!binFile.open(QIODevice::WriteOnly)) return;
|
||||
if (!binFile.open(QIODevice::WriteOnly)) {
|
||||
logError(QString("Cannot save city map tilemap to %1.").arg(file));
|
||||
return;
|
||||
}
|
||||
binFile.write(data);
|
||||
binFile.close();
|
||||
}
|
||||
|
||||
void CityMapPixmapItem::paint(QGraphicsSceneMouseEvent *event) {
|
||||
//
|
||||
QPointF pos = event->pos();
|
||||
int x = static_cast<int>(pos.x()) / 8;
|
||||
int y = static_cast<int>(pos.y()) / 8;
|
||||
|
@ -63,6 +63,13 @@ void CityMapPixmapItem::mousePressEvent(QGraphicsSceneMouseEvent *event) {
|
|||
}
|
||||
|
||||
int CityMapPixmapItem::getIndexAt(int x, int y) {
|
||||
//
|
||||
return 2 * (x + y * width);
|
||||
return 2 * (x + y * this->width_);
|
||||
}
|
||||
|
||||
int CityMapPixmapItem::width() {
|
||||
return this->width_;
|
||||
}
|
||||
|
||||
int CityMapPixmapItem::height() {
|
||||
return this->height_;
|
||||
}
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
#include "regionmapeditor.h"
|
||||
#include "ui_regionmapeditor.h"
|
||||
#include "regionmapgenerator.h"
|
||||
#include "config.h"
|
||||
|
||||
#include <QDir>
|
||||
#include <QDialog>
|
||||
|
@ -43,7 +45,7 @@ void RegionMapEditor::on_action_RegionMap_Save_triggered() {
|
|||
|
||||
void RegionMapEditor::loadRegionMapData() {
|
||||
this->region_map->init(project);
|
||||
this->currIndex = this->region_map->width() * 2 + 1;
|
||||
this->currIndex = this->region_map->width() * this->region_map->padTop + this->region_map->padLeft;
|
||||
displayRegionMap();
|
||||
}
|
||||
|
||||
|
@ -85,7 +87,7 @@ void RegionMapEditor::displayRegionMapImage() {
|
|||
this, &RegionMapEditor::onHoveredRegionMapTileCleared);
|
||||
|
||||
this->scene_region_map_image->addItem(this->region_map_item);
|
||||
//this->scene_region_map_image->setSceneRect(this->scene_region_map_image->sceneRect());
|
||||
this->scene_region_map_image->setSceneRect(this->scene_region_map_image->itemsBoundingRect());
|
||||
|
||||
this->ui->graphicsView_Region_Map_BkgImg->setScene(this->scene_region_map_image);
|
||||
this->ui->graphicsView_Region_Map_BkgImg->setFixedSize(this->region_map->imgSize() * scaleRegionMapImage);
|
||||
|
@ -113,20 +115,24 @@ void RegionMapEditor::displayRegionMapLayout() {
|
|||
this->region_map_layout_item->select(this->currIndex);
|
||||
|
||||
this->scene_region_map_layout->addItem(region_map_layout_item);
|
||||
//this->scene_region_map_layout->setSceneRect(this->scene_region_map_layout->sceneRect());
|
||||
this->scene_region_map_layout->setSceneRect(this->scene_region_map_layout->itemsBoundingRect());
|
||||
|
||||
this->ui->graphicsView_Region_Map_Layout->setScene(this->scene_region_map_layout);
|
||||
this->ui->graphicsView_Region_Map_Layout->setFixedSize(this->region_map->imgSize() * scaleRegionMapImage);
|
||||
}
|
||||
|
||||
void RegionMapEditor::displayRegionMapLayoutOptions() {
|
||||
this->ui->comboBox_RM_ConnectedMap->clear();
|
||||
this->ui->comboBox_RM_ConnectedMap->addItems(*(this->project->regionMapSections));
|
||||
|
||||
this->ui->frame_RM_Options->setEnabled(true);
|
||||
|
||||
// TODO: change these values to variables
|
||||
this->ui->spinBox_RM_Options_x->setMaximum(this->region_map->width() - 5);
|
||||
this->ui->spinBox_RM_Options_y->setMaximum(this->region_map->height() - 4);
|
||||
this->ui->spinBox_RM_Options_x->setMaximum(
|
||||
this->region_map->width() - this->region_map->padLeft - this->region_map->padRight - 1
|
||||
);
|
||||
this->ui->spinBox_RM_Options_y->setMaximum(
|
||||
this->region_map->height() - this->region_map->padTop - this->region_map->padBottom - 1
|
||||
);
|
||||
|
||||
updateRegionMapLayoutOptions(currIndex);
|
||||
}
|
||||
|
@ -134,7 +140,7 @@ void RegionMapEditor::displayRegionMapLayoutOptions() {
|
|||
void RegionMapEditor::updateRegionMapLayoutOptions(int index) {
|
||||
this->ui->spinBox_RM_Options_x->blockSignals(true);
|
||||
this->ui->spinBox_RM_Options_y->blockSignals(true);
|
||||
this->ui->lineEdit_RM_MapName->setText(this->project->mapSecToMapHoverName->value(this->region_map->map_squares[index].mapsec));//this->region_map->map_squares[index].map_name);
|
||||
this->ui->lineEdit_RM_MapName->setText(this->project->mapSecToMapHoverName->value(this->region_map->map_squares[index].mapsec));
|
||||
this->ui->comboBox_RM_ConnectedMap->setCurrentText(this->region_map->map_squares[index].mapsec);
|
||||
this->ui->spinBox_RM_Options_x->setValue(this->region_map->map_squares[index].x);
|
||||
this->ui->spinBox_RM_Options_y->setValue(this->region_map->map_squares[index].y);
|
||||
|
@ -156,6 +162,8 @@ void RegionMapEditor::displayRegionMapTileSelector() {
|
|||
|
||||
this->scene_region_map_tiles->addItem(this->mapsquare_selector_item);
|
||||
|
||||
connect(this->mapsquare_selector_item, &TilemapTileSelector::selectedTileChanged,
|
||||
this, &RegionMapEditor::onRegionMapTileSelectorSelectedTileChanged);
|
||||
connect(this->mapsquare_selector_item, &TilemapTileSelector::hoveredTileChanged,
|
||||
this, &RegionMapEditor::onRegionMapTileSelectorHoveredTileChanged);
|
||||
connect(this->mapsquare_selector_item, &TilemapTileSelector::hoveredTileCleared,
|
||||
|
@ -164,6 +172,8 @@ void RegionMapEditor::displayRegionMapTileSelector() {
|
|||
this->ui->graphicsView_RegionMap_Tiles->setScene(this->scene_region_map_tiles);
|
||||
this->ui->graphicsView_RegionMap_Tiles->setFixedSize(this->mapsquare_selector_item->pixelWidth * scaleRegionMapTiles + 2,
|
||||
this->mapsquare_selector_item->pixelHeight * scaleRegionMapTiles + 2);
|
||||
|
||||
this->mapsquare_selector_item->select(this->selectedImageTile);
|
||||
}
|
||||
|
||||
void RegionMapEditor::displayCityMapTileSelector() {
|
||||
|
@ -179,17 +189,15 @@ void RegionMapEditor::displayCityMapTileSelector() {
|
|||
this->city_map_selector_item->draw();
|
||||
|
||||
this->scene_city_map_tiles->addItem(this->city_map_selector_item);
|
||||
this->scene_city_map_tiles->setSceneRect(this->scene_city_map_tiles->sceneRect());// ?
|
||||
|
||||
// TODO:
|
||||
/*connect(this->city_map_selector_item, &TilemapTileSelector::hoveredTileChanged,
|
||||
this, &RegionMapEditor::onRegionMapTileSelectorHoveredTileChanged);
|
||||
connect(this->city_map_selector_item, &TilemapTileSelector::hoveredTileCleared,
|
||||
this, &RegionMapEditor::onRegionMapTileSelectorHoveredTileCleared);*/
|
||||
connect(this->city_map_selector_item, &TilemapTileSelector::selectedTileChanged,
|
||||
this, &RegionMapEditor::onCityMapTileSelectorSelectedTileChanged);
|
||||
|
||||
this->ui->graphicsView_City_Map_Tiles->setScene(this->scene_city_map_tiles);
|
||||
this->ui->graphicsView_City_Map_Tiles->setFixedSize(this->city_map_selector_item->pixelWidth * scaleCityMapTiles + 2,
|
||||
this->city_map_selector_item->pixelHeight * scaleCityMapTiles + 2);
|
||||
|
||||
this->city_map_selector_item->select(this->selectedCityTile);
|
||||
}
|
||||
|
||||
void RegionMapEditor::displayCityMap(QString f) {
|
||||
|
@ -213,8 +221,8 @@ void RegionMapEditor::displayCityMap(QString f) {
|
|||
scene_city_map_image->setSceneRect(this->scene_city_map_image->sceneRect());
|
||||
|
||||
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);
|
||||
this->ui->graphicsView_City_Map->setFixedSize(8 * city_map_item->width() * scaleCityMapImage + 2,
|
||||
8 * city_map_item->height() * scaleCityMapImage + 2);
|
||||
}
|
||||
|
||||
bool RegionMapEditor::createCityMap(QString name) {
|
||||
|
@ -222,7 +230,6 @@ bool RegionMapEditor::createCityMap(QString name) {
|
|||
|
||||
QString file = this->project->root + "/graphics/pokenav/city_maps/" + name + ".bin";
|
||||
|
||||
// TODO: use project config for these values?
|
||||
uint8_t filler = 0x30;
|
||||
uint8_t border = 0x7;
|
||||
uint8_t blank = 0x1;
|
||||
|
@ -248,6 +255,14 @@ bool RegionMapEditor::createCityMap(QString name) {
|
|||
return !errored;
|
||||
}
|
||||
|
||||
void RegionMapEditor::onRegionMapTileSelectorSelectedTileChanged(unsigned id) {
|
||||
this->selectedImageTile = id;
|
||||
}
|
||||
|
||||
void RegionMapEditor::onCityMapTileSelectorSelectedTileChanged(unsigned id) {
|
||||
this->selectedCityTile = id;
|
||||
}
|
||||
|
||||
void RegionMapEditor::onRegionMapTileSelectorHoveredTileChanged(unsigned tileId) {
|
||||
QString message = QString("Tile: 0x") + QString("%1").arg(tileId, 4, 16, QChar('0')).toUpper();
|
||||
this->ui->statusbar->showMessage(message);
|
||||
|
@ -270,7 +285,6 @@ void RegionMapEditor::onRegionMapLayoutSelectedTileChanged(int index) {
|
|||
}
|
||||
|
||||
void RegionMapEditor::onRegionMapLayoutHoveredTileChanged(int index) {
|
||||
// TODO: change to x, y coords not index
|
||||
QString message = QString();
|
||||
int x = this->region_map->map_squares[index].x;
|
||||
int y = this->region_map->map_squares[index].y;
|
||||
|
@ -289,7 +303,8 @@ void RegionMapEditor::onRegionMapLayoutHoveredTileCleared() {
|
|||
}
|
||||
|
||||
void RegionMapEditor::onHoveredRegionMapTileChanged(int x, int 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();
|
||||
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);
|
||||
}
|
||||
|
||||
|
@ -300,7 +315,7 @@ void RegionMapEditor::onHoveredRegionMapTileCleared() {
|
|||
void RegionMapEditor::mouseEvent_region_map(QGraphicsSceneMouseEvent *event, RegionMapPixmapItem *item) {
|
||||
if (event->buttons() & Qt::RightButton) {
|
||||
item->select(event);
|
||||
} else if (event->buttons() & Qt::MiddleButton) {// TODO
|
||||
//} else if (event->buttons() & Qt::MiddleButton) {// TODO
|
||||
} else {
|
||||
QPointF pos = event->pos();
|
||||
int x = static_cast<int>(pos.x()) / 8;
|
||||
|
@ -310,14 +325,14 @@ void RegionMapEditor::mouseEvent_region_map(QGraphicsSceneMouseEvent *event, Reg
|
|||
RegionMapHistoryItem *commit = new RegionMapHistoryItem(RegionMapEditorBox::BackgroundImage, index,
|
||||
this->region_map->map_squares[index].tile_img_id, this->mapsquare_selector_item->getSelectedTile());
|
||||
history.push(commit);
|
||||
item->paint(event);//*/
|
||||
item->paint(event);
|
||||
}
|
||||
}
|
||||
|
||||
void RegionMapEditor::mouseEvent_city_map(QGraphicsSceneMouseEvent *event, CityMapPixmapItem *item) {
|
||||
//
|
||||
if (event->buttons() & Qt::RightButton) {// TODO
|
||||
} else if (event->buttons() & Qt::MiddleButton) {// TODO
|
||||
//} else if (event->buttons() & Qt::MiddleButton) {// TODO
|
||||
} else {
|
||||
QPointF pos = event->pos();
|
||||
int x = static_cast<int>(pos.x()) / 8;
|
||||
|
@ -332,23 +347,34 @@ void RegionMapEditor::mouseEvent_city_map(QGraphicsSceneMouseEvent *event, CityM
|
|||
|
||||
void RegionMapEditor::on_tabWidget_Region_Map_currentChanged(int index) {
|
||||
this->ui->stackedWidget_RM_Options->setCurrentIndex(index);
|
||||
switch (index)
|
||||
{
|
||||
case 0:
|
||||
this->ui->pushButton_Zoom_In_Image_Tiles->setVisible(true);
|
||||
this->ui->pushButton_Zoom_Out_Image_Tiles->setVisible(true);
|
||||
break;
|
||||
case 1:
|
||||
this->ui->pushButton_Zoom_In_Image_Tiles->setVisible(false);
|
||||
this->ui->pushButton_Zoom_Out_Image_Tiles->setVisible(false);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void RegionMapEditor::on_spinBox_RM_Options_x_valueChanged(int x) {
|
||||
int y = this->ui->spinBox_RM_Options_y->value();
|
||||
int red = this->region_map->getMapSquareIndex(x + 1, y + 2);
|
||||
int red = this->region_map->getMapSquareIndex(x + this->region_map->padLeft, y + this->region_map->padTop);
|
||||
this->region_map_layout_item->highlight(x, y, red);
|
||||
}
|
||||
|
||||
void RegionMapEditor::on_spinBox_RM_Options_y_valueChanged(int y) {
|
||||
int x = this->ui->spinBox_RM_Options_x->value();
|
||||
int red = this->region_map->getMapSquareIndex(x + 1, y + 2);
|
||||
int red = this->region_map->getMapSquareIndex(x + this->region_map->padLeft, y + this->region_map->padTop);
|
||||
this->region_map_layout_item->highlight(x, y, red);
|
||||
}
|
||||
|
||||
void RegionMapEditor::on_pushButton_RM_Options_save_clicked() {
|
||||
this->region_map->saveOptions(
|
||||
this->region_map_layout_item->selectedTile,// TODO: remove
|
||||
this->region_map_layout_item->selectedTile,
|
||||
this->ui->comboBox_RM_ConnectedMap->currentText(),
|
||||
this->ui->lineEdit_RM_MapName->text(),
|
||||
this->ui->spinBox_RM_Options_x->value(),
|
||||
|
@ -356,7 +382,6 @@ void RegionMapEditor::on_pushButton_RM_Options_save_clicked() {
|
|||
);
|
||||
this->region_map_layout_item->highlightedTile = -1;
|
||||
this->region_map_layout_item->draw();
|
||||
// TODO: update selected tile index
|
||||
}
|
||||
|
||||
void RegionMapEditor::on_pushButton_CityMap_save_clicked() {
|
||||
|
@ -407,7 +432,7 @@ void RegionMapEditor::on_action_RegionMap_Resize_triggered() {
|
|||
QSpinBox *heightSpinBox = new QSpinBox();
|
||||
widthSpinBox->setMinimum(32);
|
||||
heightSpinBox->setMinimum(20);
|
||||
widthSpinBox->setMaximum(64);// TODO: come up with real (meaningful) limits?
|
||||
widthSpinBox->setMaximum(60);// w * h * 2 <= 4960
|
||||
heightSpinBox->setMaximum(40);
|
||||
widthSpinBox->setValue(this->region_map->width());
|
||||
heightSpinBox->setValue(this->region_map->height());
|
||||
|
@ -520,22 +545,20 @@ void RegionMapEditor::on_pushButton_Zoom_Out_City_Tiles_clicked() {
|
|||
void RegionMapEditor::on_pushButton_Zoom_In_City_Map_clicked() {
|
||||
if (scaleCityMapImage >= 8.0) return;
|
||||
scaleCityMapImage *= 2.0;
|
||||
this->ui->graphicsView_City_Map->setFixedSize(8 * city_map_item->width * scaleCityMapImage + 2,
|
||||
8 * city_map_item->height * scaleCityMapImage + 2);
|
||||
this->ui->graphicsView_City_Map->setFixedSize(8 * city_map_item->width() * scaleCityMapImage + 2,
|
||||
8 * city_map_item->height() * scaleCityMapImage + 2);
|
||||
this->ui->graphicsView_City_Map->scale(2.0,2.0);
|
||||
}
|
||||
|
||||
void RegionMapEditor::on_pushButton_Zoom_Out_City_Map_clicked() {
|
||||
if (scaleCityMapImage <= 1.0) return;
|
||||
scaleCityMapImage /= 2.0;
|
||||
this->ui->graphicsView_City_Map->setFixedSize(8 * city_map_item->width * scaleCityMapImage + 2,
|
||||
8 * city_map_item->height * scaleCityMapImage + 2);
|
||||
this->ui->graphicsView_City_Map->setFixedSize(8 * city_map_item->width() * scaleCityMapImage + 2,
|
||||
8 * city_map_item->height() * scaleCityMapImage + 2);
|
||||
this->ui->graphicsView_City_Map->scale(0.5,0.5);
|
||||
}
|
||||
|
||||
void RegionMapEditor::on_pushButton_Zoom_In_Map_Image_clicked() {
|
||||
resize(40,30);// test
|
||||
return;
|
||||
if (scaleRegionMapImage >= 8.0) return;
|
||||
scaleRegionMapImage *= 2.0;
|
||||
this->ui->graphicsView_Region_Map_BkgImg->setFixedSize(this->region_map->imgSize() * scaleRegionMapImage);
|
||||
|
@ -552,3 +575,9 @@ void RegionMapEditor::on_pushButton_Zoom_Out_Map_Image_clicked() {
|
|||
this->ui->graphicsView_Region_Map_BkgImg->scale(0.5,0.5);
|
||||
this->ui->graphicsView_Region_Map_Layout->scale(0.5,0.5);
|
||||
}
|
||||
|
||||
void RegionMapEditor::on_action_RegionMap_Generate_triggered() {
|
||||
//
|
||||
RegionMapGenerator generator(this->project);
|
||||
generator.generate("LittlerootTown");
|
||||
}
|
||||
|
|
|
@ -56,11 +56,9 @@ void RegionMapLayoutPixmapItem::select(int index) {
|
|||
}
|
||||
|
||||
void RegionMapLayoutPixmapItem::highlight(int x, int y, int red) {
|
||||
// TODO: check if out of bounds and return
|
||||
// if it is not empty, color it red
|
||||
this->highlightedTile = red;
|
||||
draw();
|
||||
SelectablePixmapItem::select(x + 1, y + 2, 0, 0);
|
||||
SelectablePixmapItem::select(x + this->region_map->padLeft, y + this->region_map->padTop, 0, 0);
|
||||
}
|
||||
|
||||
void RegionMapLayoutPixmapItem::mousePressEvent(QGraphicsSceneMouseEvent *event) {
|
||||
|
@ -68,7 +66,6 @@ void RegionMapLayoutPixmapItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
|
|||
int index = this->region_map->getMapSquareIndex(pos.x(), pos.y());
|
||||
if (this->region_map->map_squares[index].x >= 0
|
||||
&& this->region_map->map_squares[index].y >= 0) {
|
||||
//if (index > this->region_map->width() * 2) {
|
||||
SelectablePixmapItem::mousePressEvent(event);
|
||||
this->updateSelectedTile();
|
||||
emit selectedTileChanged(this->selectedTile);
|
||||
|
@ -99,4 +96,6 @@ void RegionMapLayoutPixmapItem::hoverLeaveEvent(QGraphicsSceneHoverEvent* event)
|
|||
void RegionMapLayoutPixmapItem::updateSelectedTile() {
|
||||
QPoint origin = this->getSelectionStart();
|
||||
this->selectedTile = this->region_map->getMapSquareIndex(origin.x(), origin.y());
|
||||
this->highlightedTile = -1;
|
||||
draw();
|
||||
}
|
||||
|
|
|
@ -3,10 +3,6 @@
|
|||
|
||||
|
||||
|
||||
// the function that draws the map on the scene
|
||||
// (qnqlogous to Map::render)
|
||||
// TODO: figure out why this is being called twice!!
|
||||
// (this also affects the history)
|
||||
void RegionMapPixmapItem::draw() {
|
||||
if (!region_map) return;
|
||||
|
||||
|
|
Loading…
Reference in a new issue