Fix SFX dropdown regressions, make dropdown play sound if custom sound is listed regardless of Pre (#656)

* Fix SFX dropdown not playing a sound despite a sound being selected.
It was waiting on a preanim box to be checked, but that behavior was not intuitive. Plus this is a regression from intended behavior

* Make "default" sfx behavior behave as expected

* Tidy up the network logic for emote_mod and comment all of its behavior
Fix sfx not playing when immeidate is checked on

* make emote_mod an enum so I don't have to go scouring documentation to learn what it does anymore
not adding emote mod for enums 2, 3 and 4 cuz those are planned to be deprecated in a later PR
Make Clang happy with no bracket-less if statements
This commit is contained in:
Crystalwarrior 2022-03-24 03:05:27 +03:00 committed by GitHub
parent 35fcbdeea8
commit c3fd82eacc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 71 additions and 20 deletions

View File

@ -101,6 +101,13 @@ enum CHAT_MESSAGE {
EFFECTS EFFECTS
}; };
enum EMOTE_MOD {
IDLE = 0,
PREANIM = 1,
ZOOM = 5,
PREANIM_ZOOM = 6,
};
enum MUSIC_EFFECT { FADE_IN = 1, FADE_OUT = 2, SYNC_POS = 4 }; enum MUSIC_EFFECT { FADE_IN = 1, FADE_OUT = 2, SYNC_POS = 4 };
#endif // DATATYPES_H #endif // DATATYPES_H

View File

@ -1870,30 +1870,72 @@ void Courtroom::on_chat_return_pressed()
packet_contents.append(f_side); packet_contents.append(f_side);
packet_contents.append(get_char_sfx());
int f_emote_mod = ao_app->get_emote_mod(current_char, current_emote); int f_emote_mod = ao_app->get_emote_mod(current_char, current_emote);
QString f_sfx = "1";
// needed or else legacy won't understand what we're saying // EMOTE MOD OVERRIDES:
if (objection_state > 0 && ui_pre->isChecked()) { // Emote_mod 2 is only used by objection check later, having it in the char.ini does nothing
if (f_emote_mod == 4 || f_emote_mod == 5) if (f_emote_mod == 2) {
f_emote_mod = 6; f_emote_mod = PREANIM;
else
f_emote_mod = 2;
} }
else if (ui_pre->isChecked() && !ui_immediate->isChecked()) { // No clue what emote_mod 3 is even supposed to be.
if (f_emote_mod == 0) if (f_emote_mod == 3) {
f_emote_mod = 1; f_emote_mod = IDLE;
else if (f_emote_mod == 5 && ao_app->prezoom_enabled)
f_emote_mod = 6;
} }
// Emote_mod 4 seems to be a legacy bugfix that just refers it to emote_mod 5 which is zoom emote
if (f_emote_mod == 4) {
f_emote_mod = ZOOM;
}
// If we have "pre" on, and immediate is not checked
if (ui_pre->isChecked() && !ui_immediate->isChecked()) {
// Turn idle into preanim
if (f_emote_mod == IDLE) {
f_emote_mod = PREANIM;
}
// Turn zoom into preanim zoom
else if (f_emote_mod == ZOOM && ao_app->prezoom_enabled) {
f_emote_mod = PREANIM_ZOOM;
}
// Play the sfx
f_sfx = get_char_sfx();
}
// If we have "pre" off, or immediate is checked
else { else {
if (f_emote_mod == 1) // Turn preanim into idle
f_emote_mod = 0; if (f_emote_mod == PREANIM) {
else if (f_emote_mod == 4) f_emote_mod = IDLE;
f_emote_mod = 5; }
// Turn preanim zoom into zoom
else if (f_emote_mod == PREANIM_ZOOM) {
f_emote_mod = ZOOM;
}
// Play the sfx if pre is checked
if (ui_pre->isChecked()) {
f_sfx = get_char_sfx();
}
} }
// TODO: deprecate this garbage. See https://github.com/AttorneyOnline/AO2-Client/issues/692
// If our objection is enabled
if (objection_state > 0) {
// Turn preanim zoom emote mod into non-pre
if (f_emote_mod == ZOOM) {
f_emote_mod = PREANIM_ZOOM;
}
// Turn it into preanim objection emote mod
else {
f_emote_mod = 2;
}
// Play the sfx
f_sfx = get_char_sfx();
}
// Custom sfx override via sound list dropdown.
if (!custom_sfx.isEmpty() || ui_sfx_dropdown->currentIndex() != 0) {
f_sfx = get_char_sfx();
}
packet_contents.append(f_sfx);
packet_contents.append(QString::number(f_emote_mod)); packet_contents.append(QString::number(f_emote_mod));
packet_contents.append(QString::number(m_cid)); packet_contents.append(QString::number(m_cid));
@ -2059,7 +2101,7 @@ void Courtroom::reset_ui()
ui_screenshake->set_image("screenshake"); ui_screenshake->set_image("screenshake");
ui_evidence_present->set_image("present"); ui_evidence_present->set_image("present");
if (ui_pre->isChecked() && !ao_app->is_stickysounds_enabled()) { if (!ao_app->is_stickysounds_enabled()) {
ui_sfx_dropdown->setCurrentIndex(0); ui_sfx_dropdown->setCurrentIndex(0);
ui_sfx_remove->hide(); ui_sfx_remove->hide();
custom_sfx = ""; custom_sfx = "";
@ -2504,6 +2546,7 @@ void Courtroom::handle_emote_mod(int emote_mod, bool p_immediate)
// If immediate is not ticked on... // If immediate is not ticked on...
if (!p_immediate) if (!p_immediate)
{ {
play_sfx();
// Skip preanim. // Skip preanim.
handle_ic_speaking(); handle_ic_speaking();
} }
@ -4637,8 +4680,9 @@ QString Courtroom::get_char_sfx()
if (!custom_sfx.isEmpty()) if (!custom_sfx.isEmpty())
return custom_sfx; return custom_sfx;
int index = ui_sfx_dropdown->currentIndex(); int index = ui_sfx_dropdown->currentIndex();
if (index == 0) // Default if (index == 0) { // Default
return ao_app->get_sfx_name(current_char, current_emote); return ao_app->get_sfx_name(current_char, current_emote);
}
if (index == 1) // Nothing if (index == 1) // Nothing
return "1"; return "1";
QString sfx = sound_list[index-2].split("=")[0].trimmed(); QString sfx = sound_list[index-2].split("=")[0].trimmed();