diff --git a/forms/mainwindow.ui b/forms/mainwindow.ui
index 93bc2c79..762c2cd4 100644
--- a/forms/mainwindow.ui
+++ b/forms/mainwindow.ui
@@ -1112,7 +1112,7 @@
0
- -
+
-
@@ -1128,20 +1128,20 @@
- -
-
+
-
+
- Qt::Horizontal
+ Qt::Vertical
- 40
- 20
+ 20
+ 40
- -
+
-
Qt::Horizontal
@@ -1154,19 +1154,42 @@
- -
-
+
-
+
- Qt::Vertical
+ Qt::Horizontal
- 20
- 40
+ 40
+ 20
+ -
+
+
+ 0
+
+
+ 100
+
+
+ 50
+
+
+ Qt::Horizontal
+
+
+
+ -
+
+
+ Transparency
+
+
+
diff --git a/include/config.h b/include/config.h
index a8979e96..31c91d9f 100644
--- a/include/config.h
+++ b/include/config.h
@@ -31,15 +31,18 @@ public:
this->recentMap = "";
this->mapSortOrder = MapSortOrder::Group;
this->prettyCursors = true;
+ this->collisionOpacity = 50;
}
void setRecentProject(QString project);
void setRecentMap(QString map);
void setMapSortOrder(MapSortOrder order);
void setPrettyCursors(bool enabled);
+ void setCollisionOpacity(int opacity);
QString getRecentProject();
QString getRecentMap();
MapSortOrder getMapSortOrder();
bool getPrettyCursors();
+ int getCollisionOpacity();
protected:
QString getConfigFilepath();
void parseConfigKeyValue(QString key, QString value);
@@ -50,6 +53,7 @@ private:
QString recentMap;
MapSortOrder mapSortOrder;
bool prettyCursors;
+ int collisionOpacity;
};
extern PorymapConfig porymapConfig;
diff --git a/include/core/map.h b/include/core/map.h
index 252a8666..94dda0cf 100644
--- a/include/core/map.h
+++ b/include/core/map.h
@@ -59,7 +59,7 @@ public:
int getWidth();
int getHeight();
QPixmap render(bool ignoreCache);
- QPixmap renderCollision(bool ignoreCache);
+ QPixmap renderCollision(qreal opacity, bool ignoreCache);
bool blockChanged(int, Blockdata*);
void cacheBlockdata();
void cacheCollision();
diff --git a/include/editor.h b/include/editor.h
index 622588ba..82a3ca9b 100644
--- a/include/editor.h
+++ b/include/editor.h
@@ -114,6 +114,7 @@ public:
int scale_exp = 0;
double scale_base = sqrt(2); // adjust scale factor with this
+ qreal collisionOpacity = 0.5;
void objectsView_onMousePress(QMouseEvent *event);
void objectsView_onMouseMove(QMouseEvent *event);
diff --git a/include/mainwindow.h b/include/mainwindow.h
index 2823ccff..a71e57e1 100644
--- a/include/mainwindow.h
+++ b/include/mainwindow.h
@@ -8,6 +8,7 @@
#include
#include
#include
+#include
#include
#include "project.h"
#include "config.h"
@@ -52,7 +53,6 @@ private slots:
void on_action_Exit_triggered();
void on_comboBox_Song_activated(const QString &arg1);
void on_comboBox_Location_activated(const QString &arg1);
- void on_comboBox_Visibility_activated(const QString &arg1);
void on_comboBox_Weather_activated(const QString &arg1);
void on_comboBox_Type_activated(const QString &arg1);
void on_comboBox_BattleScene_activated(const QString &arg1);
@@ -137,10 +137,14 @@ private slots:
void on_lineEdit_filterBox_textChanged(const QString &arg1);
+ void closeEvent(QCloseEvent *);
+
void eventTabChanged(int index);
void selectedEventIndexChanged(int index);
+ void on_horizontalSlider_CollisionTransparency_valueChanged(int value);
+
private:
Ui::MainWindow *ui;
TilesetEditor *tilesetEditor = nullptr;
diff --git a/include/ui/collisionpixmapitem.h b/include/ui/collisionpixmapitem.h
index 8fa87aff..63af0f6c 100644
--- a/include/ui/collisionpixmapitem.h
+++ b/include/ui/collisionpixmapitem.h
@@ -10,17 +10,19 @@
class CollisionPixmapItem : public MapPixmapItem {
Q_OBJECT
public:
- CollisionPixmapItem(Map *map, MovementPermissionsSelector *movementPermissionsSelector, MetatileSelector *metatileSelector, Settings *settings)
+ CollisionPixmapItem(Map *map, MovementPermissionsSelector *movementPermissionsSelector, MetatileSelector *metatileSelector, Settings *settings, qreal *opacity)
: MapPixmapItem(map, metatileSelector, settings){
this->movementPermissionsSelector = movementPermissionsSelector;
+ this->opacity = opacity;
}
MovementPermissionsSelector *movementPermissionsSelector;
+ qreal *opacity;
void updateMovementPermissionSelection(QGraphicsSceneMouseEvent *event);
virtual void paint(QGraphicsSceneMouseEvent*);
virtual void floodFill(QGraphicsSceneMouseEvent*);
virtual void magicFill(QGraphicsSceneMouseEvent*);
virtual void pick(QGraphicsSceneMouseEvent*);
- virtual void draw(bool ignoreCache = false);
+ void draw(bool ignoreCache = false);
signals:
void mouseEvent(QGraphicsSceneMouseEvent *, CollisionPixmapItem *);
diff --git a/src/config.cpp b/src/config.cpp
index 0fa7e01e..1a7a529f 100644
--- a/src/config.cpp
+++ b/src/config.cpp
@@ -119,6 +119,13 @@ void PorymapConfig::parseConfigKeyValue(QString key, QString value) {
this->mapSortOrder = MapSortOrder::Group;
logWarn(QString("Invalid config value for map_sort_order: '%1'. Must be 'group', 'area', or 'layout'.").arg(value));
}
+ } else if (key == "collision_opacity") {
+ bool ok;
+ this->collisionOpacity = qMax(0, qMin(100, value.toInt(&ok)));
+ if (!ok) {
+ logWarn(QString("Invalid config value for collision_opacity: '%1'. Must be an integer.").arg(value));
+ this->collisionOpacity = 50;
+ }
} else {
logWarn(QString("Invalid config key found in config file %1: '%2'").arg(this->getConfigFilepath()).arg(key));
}
@@ -130,6 +137,7 @@ QMap PorymapConfig::getKeyValueMap() {
map.insert("recent_map", this->recentMap);
map.insert("pretty_cursors", this->prettyCursors ? "1" : "0");
map.insert("map_sort_order", mapSortOrderMap.value(this->mapSortOrder));
+ map.insert("collision_opacity", QString("%1").arg(this->collisionOpacity));
return map;
}
@@ -153,6 +161,11 @@ void PorymapConfig::setPrettyCursors(bool enabled) {
this->save();
}
+void PorymapConfig::setCollisionOpacity(int opacity) {
+ this->collisionOpacity = opacity;
+ // don't auto-save here because this can be called very frequently.
+}
+
QString PorymapConfig::getRecentProject() {
return this->recentProject;
}
@@ -169,6 +182,10 @@ bool PorymapConfig::getPrettyCursors() {
return this->prettyCursors;
}
+int PorymapConfig::getCollisionOpacity() {
+ return this->collisionOpacity;
+}
+
const QMap baseGameVersionMap = {
{BaseGameVersion::pokeruby, "pokeruby"},
{BaseGameVersion::pokeemerald, "pokeemerald"},
diff --git a/src/core/map.cpp b/src/core/map.cpp
index 16b436ab..e31825b3 100644
--- a/src/core/map.cpp
+++ b/src/core/map.cpp
@@ -110,7 +110,7 @@ void Map::cacheCollision() {
}
}
-QPixmap Map::renderCollision(bool ignoreCache) {
+QPixmap Map::renderCollision(qreal opacity, bool ignoreCache) {
bool changed_any = false;
int width_ = getWidth();
int height_ = getHeight();
@@ -141,7 +141,7 @@ QPixmap Map::renderCollision(bool ignoreCache) {
painter.setOpacity(1);
painter.drawImage(metatile_origin, metatile_image);
painter.save();
- painter.setOpacity(0.55);
+ painter.setOpacity(opacity);
painter.drawImage(metatile_origin, collision_metatile_image);
painter.restore();
}
diff --git a/src/editor.cpp b/src/editor.cpp
index deec11cc..c3de616a 100644
--- a/src/editor.cpp
+++ b/src/editor.cpp
@@ -575,7 +575,7 @@ void Editor::displayMapMovementPermissions() {
scene->removeItem(collision_item);
delete collision_item;
}
- collision_item = new CollisionPixmapItem(map, this->movement_permissions_selector_item, this->metatile_selector_item, this->settings);
+ collision_item = new CollisionPixmapItem(map, this->movement_permissions_selector_item, this->metatile_selector_item, this->settings, &this->collisionOpacity);
connect(collision_item, SIGNAL(mouseEvent(QGraphicsSceneMouseEvent*,CollisionPixmapItem*)),
this, SLOT(mouseEvent_collision(QGraphicsSceneMouseEvent*,CollisionPixmapItem*)));
connect(collision_item, SIGNAL(hoveredMapMovementPermissionChanged(int, int)),
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp
index 241ac028..150ef37e 100644
--- a/src/mainwindow.cpp
+++ b/src/mainwindow.cpp
@@ -204,6 +204,10 @@ void MainWindow::loadUserSettings() {
ui->actionBetter_Cursors->setChecked(porymapConfig.getPrettyCursors());
this->editor->settings->betterCursors = porymapConfig.getPrettyCursors();
mapSortOrder = porymapConfig.getMapSortOrder();
+ ui->horizontalSlider_CollisionTransparency->blockSignals(true);
+ this->editor->collisionOpacity = static_cast(porymapConfig.getCollisionOpacity()) / 100;
+ ui->horizontalSlider_CollisionTransparency->setValue(porymapConfig.getCollisionOpacity());
+ ui->horizontalSlider_CollisionTransparency->blockSignals(false);
}
bool MainWindow::openRecentProject() {
@@ -482,13 +486,6 @@ void MainWindow::on_comboBox_Location_activated(const QString &location)
}
}
-void MainWindow::on_comboBox_Visibility_activated(const QString &requiresFlash)
-{
- if (editor && editor->map) {
- editor->map->requiresFlash = requiresFlash;
- }
-}
-
void MainWindow::on_comboBox_Weather_activated(const QString &weather)
{
if (editor && editor->map) {
@@ -1483,6 +1480,12 @@ void MainWindow::selectedEventIndexChanged(int index)
editor->selectMapEvent(selectedEvent);
}
+void MainWindow::on_horizontalSlider_CollisionTransparency_valueChanged(int value) {
+ this->editor->collisionOpacity = static_cast(value) / 100;
+ porymapConfig.setCollisionOpacity(value);
+ this->editor->collision_item->draw(true);
+}
+
void MainWindow::on_toolButton_deleteObject_clicked()
{
if (editor && editor->selected_events) {
@@ -1753,3 +1756,9 @@ void MainWindow::on_actionTileset_Editor_triggered()
this->tilesetEditor->activateWindow();
}
}
+
+void MainWindow::closeEvent(QCloseEvent *event) {
+ porymapConfig.save();
+
+ QMainWindow::closeEvent(event);
+}
diff --git a/src/ui/collisionpixmapitem.cpp b/src/ui/collisionpixmapitem.cpp
index c2bb34e5..723fe0da 100644
--- a/src/ui/collisionpixmapitem.cpp
+++ b/src/ui/collisionpixmapitem.cpp
@@ -26,7 +26,7 @@ void CollisionPixmapItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) {
void CollisionPixmapItem::draw(bool ignoreCache) {
if (map) {
- setPixmap(map->renderCollision(ignoreCache));
+ setPixmap(map->renderCollision(*this->opacity, ignoreCache));
}
}