aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCrystalwarrior <varsash@gmail.com>2019-10-02 01:20:00 +0300
committerCrystalwarrior <varsash@gmail.com>2019-10-02 01:20:00 +0300
commit4c23e159350eeb3d74faf7e814f2874787e02565 (patch)
tree61afa491b0ea4bf578ea3a365231c9f5a6bbbc39
parent292c425c7895afcd8a545afa40dffefea803aabc (diff)
Rewrite pairing character ordering logic to instead operate based on a user-accessible drpodown menu (it's a dropdown for the future when there's more options)
Fix current charmovie breaking offsets Make pairing offsets applicable even without a pairing partner, making it a generic offset Fix the chat message hardcoding max colors to 8 (when it should be max_colors) Come up with a way to convey the ordering information without creating an extra new packet in a cool way (backwards compatibility AND less clutter!) More info on the evidence_x and evidence_ok tooltips Don't mute music when you switch to CSS anymore
-rw-r--r--include/courtroom.h8
-rw-r--r--src/aocharmovie.cpp2
-rw-r--r--src/courtroom.cpp152
-rw-r--r--src/evidence.cpp5
4 files changed, 69 insertions, 98 deletions
diff --git a/include/courtroom.h b/include/courtroom.h
index c680de06..aeef3caa 100644
--- a/include/courtroom.h
+++ b/include/courtroom.h
@@ -266,7 +266,10 @@ private:
int other_charid = -1;
// The offset this user has given if they want to appear alongside someone.
- int offset_with_pair = 0;
+ int char_offset = 0;
+
+ // 0 = in front, 1 = behind
+ int pair_order = 0;
QVector<char_type> char_list;
QVector<evi_type> evidence_list;
@@ -464,6 +467,8 @@ private:
QListWidget *ui_pair_list;
QSpinBox *ui_pair_offset_spinbox;
+ QComboBox *ui_pair_order_dropdown;
+
AOLineEdit *ui_ic_chat_message;
QLineEdit *ui_ic_chat_name;
@@ -672,6 +677,7 @@ private slots:
void on_mute_clicked();
void on_pair_clicked();
+ void on_pair_order_dropdown_changed(int p_index);
void on_defense_minus_clicked();
void on_defense_plus_clicked();
diff --git a/src/aocharmovie.cpp b/src/aocharmovie.cpp
index 96e84d49..6f6c3a17 100644
--- a/src/aocharmovie.cpp
+++ b/src/aocharmovie.cpp
@@ -240,7 +240,7 @@ QPixmap AOCharMovie::get_pixmap(QImage image)
f_pixmap = f_pixmap.scaledToHeight(f_h, transform_mode);
this->resize(f_pixmap.size());
- this->move((f_w - f_pixmap.width())/2, (f_h - f_pixmap.height())); //Always center horizontally, always put at the bottom vertically
+ this->move(x + (f_w - f_pixmap.width())/2, y + (f_h - f_pixmap.height())); //Always center horizontally, always put at the bottom vertically
return f_pixmap;
}
diff --git a/src/courtroom.cpp b/src/courtroom.cpp
index ce26b233..978fbbe3 100644
--- a/src/courtroom.cpp
+++ b/src/courtroom.cpp
@@ -272,6 +272,11 @@ Courtroom::Courtroom(AOApplication *p_ao_app) : QMainWindow()
ui_pair_offset_spinbox = new QSpinBox(this);
ui_pair_offset_spinbox->setRange(-100,100);
ui_pair_offset_spinbox->setSuffix(tr("% offset"));
+
+ ui_pair_order_dropdown = new QComboBox(this);
+ ui_pair_order_dropdown->addItem("To front");
+ ui_pair_order_dropdown->addItem("To behind");
+
ui_pair_button = new AOButton(this, ao_app);
ui_evidence_button = new AOButton(this, ao_app);
@@ -360,6 +365,7 @@ Courtroom::Courtroom(AOApplication *p_ao_app) : QMainWindow()
connect(ui_pair_button, SIGNAL(clicked()), this, SLOT(on_pair_clicked()));
connect(ui_pair_list, SIGNAL(clicked(QModelIndex)), this, SLOT(on_pair_list_clicked(QModelIndex)));
connect(ui_pair_offset_spinbox, SIGNAL(valueChanged(int)), this, SLOT(on_pair_offset_changed(int)));
+ connect(ui_pair_order_dropdown, SIGNAL(currentIndexChanged(int)), this, SLOT(on_pair_order_dropdown_changed(int)));
connect(ui_evidence_button, SIGNAL(clicked()), this, SLOT(on_evidence_button_clicked()));
@@ -536,9 +542,15 @@ void Courtroom::set_widgets()
set_size_and_pos(ui_pair_list, "pair_list");
ui_pair_list->hide();
ui_pair_list->setToolTip(tr("Select a character you wish to pair with."));
+
set_size_and_pos(ui_pair_offset_spinbox, "pair_offset_spinbox");
ui_pair_offset_spinbox->hide();
ui_pair_offset_spinbox->setToolTip(tr("Change the percentage offset of your character's position from the center of the screen."));
+
+ ui_pair_order_dropdown->hide();
+ set_size_and_pos(ui_pair_order_dropdown, "pair_order_dropdown");
+ ui_pair_offset_spinbox->setToolTip(tr("Change the order of appearance for your character."));
+
set_size_and_pos(ui_pair_button, "pair_button");
ui_pair_button->set_image("pair_button");
ui_pair_button->setToolTip(tr("Display the list of characters to pair with."));
@@ -1411,7 +1423,7 @@ void Courtroom::on_chat_return_pressed()
if (text_color < 0)
f_text_color = "0";
- else if (text_color > 8)
+ else if (text_color > max_colors)
f_text_color = "0";
else
f_text_color = QString::number(text_color);
@@ -1435,14 +1447,17 @@ void Courtroom::on_chat_return_pressed()
// Or a charid of -1 or lower, through some means.
if (other_charid > -1 && other_charid != m_cid)
{
- packet_contents.append(QString::number(other_charid));
- packet_contents.append(QString::number(offset_with_pair));
+ QString packet = QString::number(other_charid);
+ if (ao_app->effects_enabled) //Only servers with effects enabled will support pair reordering
+ packet += "^" + QString::number(pair_order);
+ packet_contents.append(packet);
}
else
{
packet_contents.append("-1");
- packet_contents.append("0");
}
+ //Send the offset as it's gonna be used regardless
+ packet_contents.append(QString::number(char_offset));
// Finally, we send over if we want our pres to not interrupt.
if (ui_pre_non_interrupt->isChecked() && ui_pre->isChecked())
@@ -1751,16 +1766,14 @@ void Courtroom::handle_chatmessage_2()
// Making the second character appear.
if (m_chatmessage[OTHER_CHARID].isEmpty())
{
- // If there is no second character, hide 'em, and center the first.
+ // If there is no second character, hide 'em
ui_vp_sideplayer_char->stop();
ui_vp_sideplayer_char->move(0,0);
-
- ui_vp_player_char->move(0,0);
}
else
{
bool ok;
- int got_other_charid = m_chatmessage[OTHER_CHARID].toInt(&ok);
+ int got_other_charid = m_chatmessage[OTHER_CHARID].split("^")[0].toInt(&ok);
if (ok)
{
if (got_other_charid > -1)
@@ -1768,91 +1781,27 @@ void Courtroom::handle_chatmessage_2()
// If there is, show them!
ui_vp_sideplayer_char->show();
- // Depending on where we are, we offset the characters, and reorder their stacking.
- if (side == "def")
- {
- // We also move the character down depending on how far the are to the right.
- int hor_offset = m_chatmessage[SELF_OFFSET].toInt();
- int vert_offset = 0;
- if (hor_offset > 0)
- {
- vert_offset = hor_offset / 10;
- }
- ui_vp_player_char->move(ui_viewport->width() * hor_offset / 100, ui_viewport->height() * vert_offset / 100);
-
- // We do the same with the second character.
- int hor2_offset = m_chatmessage[OTHER_OFFSET].toInt();
- int vert2_offset = 0;
- if (hor2_offset > 0)
- {
- vert2_offset = hor2_offset / 10;
- }
- ui_vp_sideplayer_char->move(ui_viewport->width() * hor2_offset / 100, ui_viewport->height() * vert2_offset / 100);
-
- // Finally, we reorder them based on who is more to the left.
- // The person more to the left is more in the front.
- if (hor2_offset >= hor_offset)
- {
- ui_vp_sideplayer_char->stackUnder(ui_vp_player_char);
- }
- else
- {
- ui_vp_player_char->stackUnder(ui_vp_sideplayer_char);
- }
- }
- else if (side == "pro")
- {
- // Almost the same thing happens here, but in reverse.
- int hor_offset = m_chatmessage[SELF_OFFSET].toInt();
- int vert_offset = 0;
- if (hor_offset < 0)
- {
- // We don't want to RAISE the char off the floor.
- vert_offset = -1 * hor_offset / 10;
- }
- ui_vp_player_char->move(ui_viewport->width() * hor_offset / 100, ui_viewport->height() * vert_offset / 100);
-
- // We do the same with the second character.
- int hor2_offset = m_chatmessage[OTHER_OFFSET].toInt();
- int vert2_offset = 0;
- if (hor2_offset < 0)
- {
- vert2_offset = -1 * hor2_offset / 10;
- }
- ui_vp_sideplayer_char->move(ui_viewport->width() * hor2_offset / 100, ui_viewport->height() * vert2_offset / 100);
+ int other_offset = m_chatmessage[OTHER_OFFSET].toInt();
+ ui_vp_sideplayer_char->move(ui_viewport->width() * other_offset / 100, 0);
+ qDebug() << "other offset" << other_offset;
- // Finally, we reorder them based on who is more to the right.
- if (hor2_offset >= hor_offset)
- {
- ui_vp_sideplayer_char->stackUnder(ui_vp_player_char);
- }
- else
- {
- ui_vp_player_char->stackUnder(ui_vp_sideplayer_char);
- }
- }
- else
+ QStringList args = m_chatmessage[OTHER_CHARID].split("^");
+ if (args.size() > 1) //This ugly workaround is so we don't make an extra packet just for this purpose. Rewrite pairing when?
{
- // In every other case, the person more to the left is on top.
- // These cases also don't move the characters down.
- int hor_offset = m_chatmessage[SELF_OFFSET].toInt();
- ui_vp_player_char->move(ui_viewport->width() * hor_offset / 100, 0);
-
- // We do the same with the second character.
- int hor2_offset = m_chatmessage[OTHER_OFFSET].toInt();
- ui_vp_sideplayer_char->move(ui_viewport->width() * hor2_offset / 100, 0);
-
- // Finally, we reorder them based on who is more to the left.
- // The person more to the left is more in the front.
- if (hor2_offset >= hor_offset)
- {
- ui_vp_sideplayer_char->stackUnder(ui_vp_player_char);
- }
- else
- {
- ui_vp_player_char->stackUnder(ui_vp_sideplayer_char);
+ //Change the order of appearance based on the pair order variable
+ int order = args.at(1).toInt();
+ switch (order) {
+ case 0:
+ ui_vp_sideplayer_char->stackUnder(ui_vp_player_char);
+ break;
+ case 1:
+ ui_vp_player_char->stackUnder(ui_vp_sideplayer_char);
+ break;
+ default:
+ break;
}
}
+
// We should probably also play the other character's idle emote.
if (ao_app->flipping_enabled && m_chatmessage[OTHER_FLIP].toInt() == 1)
ui_vp_sideplayer_char->set_flipped(true);
@@ -1866,11 +1815,19 @@ void Courtroom::handle_chatmessage_2()
// really is no second character, hide 'em, and center the first.
ui_vp_sideplayer_char->hide();
ui_vp_sideplayer_char->move(0,0);
-
- ui_vp_player_char->move(0,0);
}
}
}
+ //Set ourselves according to SELF_OFFSET
+
+ bool ok;
+ int self_offset = m_chatmessage[SELF_OFFSET].toInt(&ok);
+ if (ok)
+ ui_vp_player_char->move(ui_viewport->width() * self_offset / 100, 0);
+ else
+ ui_vp_player_char->move(0, 0);
+
+ qDebug() << "offset OK" << ok << "offset value" << self_offset;
switch (emote_mod)
{
case 1: case 2: case 6:
@@ -3077,7 +3034,7 @@ void Courtroom::on_ooc_return_pressed()
{
if (off >= -100 && off <= 100)
{
- offset_with_pair = off;
+ char_offset = off;
QString msg = tr("You have set your offset to ");
msg.append(QString::number(off));
msg.append("%.");
@@ -3852,6 +3809,7 @@ void Courtroom::on_mute_clicked()
ui_mute_list->show();
ui_pair_list->hide();
ui_pair_offset_spinbox->hide();
+ ui_pair_order_dropdown->hide();
ui_pair_button->set_image("pair_button");
ui_mute->set_image("mute_pressed");
}
@@ -3868,6 +3826,7 @@ void Courtroom::on_pair_clicked()
{
ui_pair_list->show();
ui_pair_offset_spinbox->show();
+ ui_pair_order_dropdown->show();
ui_mute_list->hide();
ui_mute->set_image("mute");
ui_pair_button->set_image("pair_button_pressed");
@@ -3876,10 +3835,16 @@ void Courtroom::on_pair_clicked()
{
ui_pair_list->hide();
ui_pair_offset_spinbox->hide();
+ ui_pair_order_dropdown->hide();
ui_pair_button->set_image("pair_button");
}
}
+void Courtroom::on_pair_order_dropdown_changed(int p_index)
+{
+ pair_order = p_index;
+}
+
void Courtroom::on_defense_minus_clicked()
{
int f_state = defense_bar_state - 1;
@@ -4014,7 +3979,7 @@ void Courtroom::on_log_limit_changed(int value)
void Courtroom::on_pair_offset_changed(int value)
{
- offset_with_pair = value;
+ char_offset = value;
}
void Courtroom::on_witness_testimony_clicked()
@@ -4059,7 +4024,6 @@ void Courtroom::on_guilty_clicked()
void Courtroom::on_change_character_clicked()
{
- music_player->set_volume(0);
sfx_player->set_volume(0);
blip_player->set_volume(0);
diff --git a/src/evidence.cpp b/src/evidence.cpp
index 6ee2b8e5..58f31811 100644
--- a/src/evidence.cpp
+++ b/src/evidence.cpp
@@ -24,9 +24,10 @@ void Courtroom::initialize_evidence()
ui_evidence_image_button = new AOButton(ui_evidence_overlay, ao_app);
ui_evidence_image_button->setText(tr("Choose..."));
ui_evidence_x = new AOButton(ui_evidence_overlay, ao_app);
- ui_evidence_x->setToolTip(tr("Close the evidence display/editing overlay"));
+ ui_evidence_x->setToolTip(tr("Close the evidence display/editing overlay.\n"
+ "You will be prompted if there's any unsaved changes."));
ui_evidence_ok = new AOButton(ui_evidence_overlay, ao_app);
- ui_evidence_ok->setToolTip(tr("Save any changes made to this piece of evidence"));
+ ui_evidence_ok->setToolTip(tr("Save any changes made to this piece of evidence and send them to server."));
ui_evidence_description = new AOTextEdit(ui_evidence_overlay);
ui_evidence_description->setStyleSheet("background-color: rgba(0, 0, 0, 0);"