mirror of
https://github.com/huderlem/porymap.git
synced 2026-09-27 10:26:33 -05:00
Clicking on a prefab will make it the current selection for painting
This commit is contained in:
@@ -554,6 +554,7 @@ bool MainWindow::openProject(QString dir) {
|
||||
|
||||
if (success) {
|
||||
prefab.initPrefabUI(
|
||||
editor->metatile_selector_item,
|
||||
ui->scrollAreaWidgetContents_Prefabs,
|
||||
ui->label_prefabHelp,
|
||||
editor->ui->comboBox_PrimaryTileset->currentText(),
|
||||
|
||||
@@ -6,22 +6,25 @@ QPixmap drawMetatileSelection(MetatileSelection selection, Map *map) {
|
||||
int width = selection.dimensions.x() * 16;
|
||||
int height = selection.dimensions.y() * 16;
|
||||
QImage image(width, height, QImage::Format_RGBA8888);
|
||||
image.fill(QColor(0, 0, 0, 0));
|
||||
QPainter painter(&image);
|
||||
|
||||
for (int i = 0; i < selection.dimensions.x(); i++) {
|
||||
for (int j = 0; j < selection.dimensions.y(); j++) {
|
||||
int x = i * 16;
|
||||
int y = j * 16;
|
||||
QPoint metatile_origin = QPoint(x, y);
|
||||
int index = j * selection.dimensions.x() + i;
|
||||
MetatileSelectionItem item = selection.metatileItems.at(index);
|
||||
QImage metatile_image = getMetatileImage(
|
||||
item.metatileId,
|
||||
map->layout->tileset_primary,
|
||||
map->layout->tileset_secondary,
|
||||
map->metatileLayerOrder,
|
||||
map->metatileLayerOpacity);
|
||||
QPoint metatile_origin = QPoint(x, y);
|
||||
painter.drawImage(metatile_origin, metatile_image);
|
||||
if (item.enabled) {
|
||||
QImage metatile_image = getMetatileImage(
|
||||
item.metatileId,
|
||||
map->layout->tileset_primary,
|
||||
map->layout->tileset_secondary,
|
||||
map->metatileLayerOrder,
|
||||
map->metatileLayerOpacity);
|
||||
painter.drawImage(metatile_origin, metatile_image);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -127,6 +127,8 @@ void MapPixmapItem::paintNormal(int x, int y, bool fromScriptCall) {
|
||||
if (map->getBlock(actualX, actualY, &block)) {
|
||||
int index = j * selection.dimensions.x() + i;
|
||||
MetatileSelectionItem item = selection.metatileItems.at(index);
|
||||
if (!item.enabled)
|
||||
continue;
|
||||
block.metatileId = item.metatileId;
|
||||
if (selection.hasCollision && selection.collisionItems.length() == selection.metatileItems.length()) {
|
||||
CollisionSelectionItem collisionItem = selection.collisionItems.at(index);
|
||||
|
||||
@@ -95,6 +95,14 @@ void MetatileSelector::setExternalSelection(int width, int height, QList<uint16_
|
||||
emit selectedMetatilesChanged();
|
||||
}
|
||||
|
||||
void MetatileSelector::setDirectSelection(MetatileSelection selection) {
|
||||
this->externalSelection = false;
|
||||
this->externalSelectedMetatiles.clear();
|
||||
this->selection = selection;
|
||||
this->draw();
|
||||
emit selectedMetatilesChanged();
|
||||
}
|
||||
|
||||
bool MetatileSelector::shouldAcceptEvent(QGraphicsSceneMouseEvent *event) {
|
||||
QPoint pos = this->getCellPos(event->pos());
|
||||
return Tileset::metatileIsValid(getMetatileId(pos.x(), pos.y()), this->primaryTileset, this->secondaryTileset);
|
||||
|
||||
@@ -86,7 +86,7 @@ QList<PrefabItem> Prefab::getPrefabsForTilesets(QString primaryTileset, QString
|
||||
return filteredPrefabs;
|
||||
}
|
||||
|
||||
void Prefab::initPrefabUI(QWidget *prefabWidget, QLabel *emptyPrefabLabel, QString primaryTileset, QString secondaryTileset, Map *map) {
|
||||
void Prefab::initPrefabUI(MetatileSelector *selector, QWidget *prefabWidget, QLabel *emptyPrefabLabel, QString primaryTileset, QString secondaryTileset, Map *map) {
|
||||
this->loadPrefabs();
|
||||
QList<PrefabItem> prefabs = this->getPrefabsForTilesets(primaryTileset, secondaryTileset);
|
||||
if (prefabs.isEmpty()) {
|
||||
@@ -107,6 +107,9 @@ void Prefab::initPrefabUI(QWidget *prefabWidget, QLabel *emptyPrefabLabel, QStri
|
||||
scene->itemsBoundingRect().height() + 2);
|
||||
|
||||
prefabWidget->layout()->addWidget(frame);
|
||||
QObject::connect(frame->ui->graphicsView_Prefab, &ClickableGraphicsView::clicked, [=](){
|
||||
selector->setDirectSelection(item.selection);
|
||||
});
|
||||
}
|
||||
auto spacer = new QSpacerItem(0, 0, QSizePolicy::Ignored, QSizePolicy::Expanding);
|
||||
prefabWidget->layout()->addItem(spacer);
|
||||
|
||||
Reference in New Issue
Block a user