diff --git a/rpcs3/Emu/Io/Dimensions.cpp b/rpcs3/Emu/Io/Dimensions.cpp index afc527ecab..c43cb2936d 100644 --- a/rpcs3/Emu/Io/Dimensions.cpp +++ b/rpcs3/Emu/Io/Dimensions.cpp @@ -403,7 +403,20 @@ bool dimensions_toypad::remove_figure(u8 pad, u8 index, bool save) bool dimensions_toypad::move_figure(u8 pad, u8 index, u8 old_pad, u8 old_index) { - // When moving figures between spaces on the portal, remove any figure from the space they are moving to, + if (old_index == index) + { + // Don't bother removing and loading again, just send response to the game + const dimensions_figure& figure = get_figure_by_index(old_index); + std::array figure_remove_response = {0x56, 0x0b, pad, 0x00, figure.index, 0x01}; + figure_remove_response[13] = generate_checksum(figure_remove_response, 13); + std::array figure_add_response = {0x56, 0x0b, pad, 0x00, figure.index, 0x00}; + figure_add_response[13] = generate_checksum(figure_add_response, 13); + m_figure_added_removed_responses.push(std::move(figure_remove_response)); + m_figure_added_removed_responses.push(std::move(figure_add_response)); + return true; + } + + // When moving figures between spaces on the toypad, remove any figure from the space they are moving to, // then remove them from their current space, then load them to the space they are moving to remove_figure(pad, index, true); diff --git a/rpcs3/rpcs3qt/dimensions_dialog.cpp b/rpcs3/rpcs3qt/dimensions_dialog.cpp index 0d07492023..6fdad9cd45 100644 --- a/rpcs3/rpcs3qt/dimensions_dialog.cpp +++ b/rpcs3/rpcs3qt/dimensions_dialog.cpp @@ -543,19 +543,20 @@ void minifig_move_dialog::add_minifig_position(QGridLayout* grid_panel, u8 index { vbox_panel->addWidget(new QLabel(tr("None"))); } - if (old_index != index) + auto* btn_move = new QPushButton(tr("Move Here"), this); + if (old_index == index) { - auto* btn_move = new QPushButton(tr("Move Here"), this); - vbox_panel->addWidget(btn_move); - connect(btn_move, &QAbstractButton::clicked, this, [this, index] - { - m_index = index; - m_pad = index == 1 ? 1 : - index == 0 || index == 3 || index == 4 ? 2 : - 3; - accept(); - }); + btn_move->setText(tr("Pick up and Place")); } + vbox_panel->addWidget(btn_move); + connect(btn_move, &QAbstractButton::clicked, this, [this, index] + { + m_index = index; + m_pad = index == 1 ? 1 : + index == 0 || index == 3 || index == 4 ? 2 : + 3; + accept(); + }); grid_panel->addLayout(vbox_panel, row, column); } @@ -726,10 +727,13 @@ void dimensions_dialog::move_figure(u8 pad, u8 index) if (move_dlg.exec() == Accepted) { g_dimensionstoypad.move_figure(move_dlg.get_new_pad(), move_dlg.get_new_index(), pad, index); - figure_slots[move_dlg.get_new_index()] = figure_slots[index]; - m_edit_figures[move_dlg.get_new_index()]->setText(m_edit_figures[index]->text()); - figure_slots[index] = std::nullopt; - m_edit_figures[index]->setText(tr("None")); + if (index != move_dlg.get_new_index()) + { + figure_slots[move_dlg.get_new_index()] = figure_slots[index]; + m_edit_figures[move_dlg.get_new_index()]->setText(m_edit_figures[index]->text()); + figure_slots[index] = std::nullopt; + m_edit_figures[index]->setText(tr("None")); + } } }