Add transparency slider for overlayed collision tiles on the map

This commit is contained in:
Marcus Huderle
2019-01-06 12:53:31 -06:00
parent 7c51f50d76
commit 022dc899da
11 changed files with 87 additions and 27 deletions

View File

@@ -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<QString, QString> 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<BaseGameVersion, QString> baseGameVersionMap = {
{BaseGameVersion::pokeruby, "pokeruby"},
{BaseGameVersion::pokeemerald, "pokeemerald"},

View File

@@ -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();
}

View File

@@ -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)),

View File

@@ -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<qreal>(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<qreal>(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);
}

View File

@@ -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));
}
}