From 051d9dc4ddde110b3916a7019c0a4e12ad35a245 Mon Sep 17 00:00:00 2001 From: David Skoland Date: Thu, 2 Feb 2017 01:31:03 +0100 Subject: [PATCH] made ao2 desks work on chatmessages and made set_text_color --- aoscene.cpp | 26 ++++++++++++++ courtroom.cpp | 98 +++++++++++++++++++++++++++++++++++++++++++++------ courtroom.h | 5 +++ 3 files changed, 119 insertions(+), 10 deletions(-) diff --git a/aoscene.cpp b/aoscene.cpp index 2409689..c925f9c 100644 --- a/aoscene.cpp +++ b/aoscene.cpp @@ -4,6 +4,8 @@ #include "file_functions.h" +#include + AOScene::AOScene(Courtroom *parent) : QLabel(parent) { m_courtroom = parent; @@ -18,7 +20,9 @@ void AOScene::set_image(QString p_image) QPixmap default_bg(default_path); int w = this->width(); + qDebug() << "AOScene width found to be " << w; int h = this->height(); + qDebug() << "AOScene height found to be " << h; if (file_exists(background_path)) this->setPixmap(background.scaled(w, h)); @@ -28,5 +32,27 @@ void AOScene::set_image(QString p_image) void AOScene::set_legacy_desk(QString p_image) { + //vanilla desks vary in both width and height. in order to make that work with viewport rescaling, + //some INTENSE math is needed. + + QImage f_image(p_image); + + int vp_x = m_courtroom->get_vp_x(); + int vp_y = m_courtroom->get_vp_y(); + int vp_width = m_courtroom->get_vp_w(); + int vp_height = m_courtroom->get_vp_h(); + + double y_modifier = 147 / 192; + double w_modifier = vp_width / 256; + double h_modifier = vp_height / 192; + + int final_x = vp_x; + int final_y = vp_y + y_modifier * vp_height; + int final_w = w_modifier * f_image.width(); + int final_h = h_modifier * f_image.height(); + + this->move(final_x, final_y); + this->resize(final_w, final_h); + } diff --git a/courtroom.cpp b/courtroom.cpp index f488479..a93bbf7 100644 --- a/courtroom.cpp +++ b/courtroom.cpp @@ -246,6 +246,7 @@ void Courtroom::set_widgets() ui_vp_desk->move(m_viewport_x, m_viewport_y); ui_vp_desk->resize(m_viewport_width, m_viewport_height); + qDebug() << "resized ui_vp_desk to " << m_viewport_width << " and " << m_viewport_height; ui_vp_chatbox->move(m_viewport_x, m_viewport_y); ui_vp_chatbox->resize(m_viewport_width, m_viewport_height); @@ -294,7 +295,7 @@ void Courtroom::set_widgets() ui_area_list->setStyleSheet("background-color: rgba(0, 0, 0, 0);"); set_size_and_pos(ui_ic_chat_message, "ic_chat_message"); - ui_ic_chat_message->setStyleSheet("background-color: rgba(0, 0, 0, 0);"); + ui_ic_chat_message->setStyleSheet("background-color: rgba(89, 89, 89, 0);"); set_size_and_pos(ui_ooc_chat_message, "ooc_chat_message"); ui_ooc_chat_message->setStyleSheet("background-color: rgba(0, 0, 0, 0);"); @@ -518,6 +519,8 @@ void Courtroom::set_background(QString p_background) is_ao2_bg = file_exists(bg_path + "defensedesk.png") && file_exists(bg_path + "prosecutiondesk.png") && file_exists(bg_path + "stand.png"); + + //T0D0: find some way to compensate for legacy resolution } void Courtroom::enter_courtroom(int p_cid) @@ -603,6 +606,8 @@ void Courtroom::handle_chatmessage(QStringList *p_contents) { text_state = 0; + chatmessage_is_empty = m_chatmessage[MESSAGE] == " " || m_chatmessage[MESSAGE] == ""; + for (int n_string = 0 ; n_string < chatmessage_size ; ++n_string) { m_chatmessage[n_string] = p_contents->at(n_string); @@ -671,8 +676,6 @@ void Courtroom::handle_chatmessage(QStringList *p_contents) break; } } - - else handle_chatmessage_2(); } @@ -691,19 +694,15 @@ void Courtroom::handle_chatmessage_2() //empty string means we couldnt find showname in char ini if (local_showname == "") - ui_vp_showname->remote_name; + ui_vp_showname->setText(remote_name); else - ui_vp_showname->local_showname; + ui_vp_showname->setText(local_showname); ui_vp_message->clear(); ui_vp_chatbox->hide(); set_scene(); set_text_color(); - - - //ui_vp_player_char->set(m_chatmessage[CHAR_NAME], m_chatmessage[PRE_EMOTE], m_chatmessage[EMOTE]); - //ui_vp_player_char->play_pre(); } void Courtroom::set_scene() @@ -716,7 +715,7 @@ void Courtroom::set_scene() if (f_side == "def") f_image = "defenseempty.png"; else if (f_side == "pro") - f_image = "prosecutionempty.png"; + f_image = "prosecutorempty.png"; else if (f_side == "jud") f_image = "judgestand.png"; else if (f_side == "hld") @@ -727,6 +726,83 @@ void Courtroom::set_scene() ui_vp_background->set_image(f_image); //now for the hard part: desks + int emote_mod = m_chatmessage[EMOTE_MOD].toInt(); + + //desks show on emote modifier 0, 1 and 4, we're done with this function if theyre not any of those + //we're also done if one of the non-desk positions is the current one(jud, hlp and hld) + if (emote_mod == 2 || + emote_mod == 3 || + emote_mod == 5 || + f_side == "jud" || + f_side == "hlp" || + f_side == "hld") + { + ui_vp_desk->hide(); + ui_vp_legacy_desk->hide(); + return; + } + + if (is_ao2_bg) + { + qDebug() << "found is_ao2_bg to be true"; + QString desk_image = "stand.png"; + + if (f_side == "def") + desk_image = "defensedesk.png"; + else if (f_side == "pro") + desk_image = "prosecutiondesk.png"; + + ui_vp_desk->set_image(desk_image); + ui_vp_legacy_desk->hide(); + ui_vp_desk->show(); + } + else if (f_side == "def" || f_side == "pro") + { + QString desk_image; + + if (f_side == "def") + desk_image = "bancodefensa.png"; + else + desk_image = "bancoacusacion.png"; + + ui_vp_legacy_desk->set_legacy_desk(desk_image); + ui_vp_desk->hide(); + ui_vp_legacy_desk->show(); + } + //assume wit or invalid side + else + { + ui_vp_desk->set_image("estrado.png"); + ui_vp_legacy_desk->hide(); + ui_vp_desk->show(); + } +} + +void Courtroom::set_text_color() +{ + switch(m_chatmessage[TEXT_COLOR].toInt()) + { + case 0: + ui_vp_message->setStyleSheet("QPlainTextEdit{color: white;}"); + break; + case 1: + ui_vp_message->setStyleSheet("QPlainTextEdit{color: rgb(0, 255, 0);}"); + break; + case 2: + ui_vp_message->setStyleSheet("QPlainTextEdit{color: red;}"); + break; + case 3: + ui_vp_message->setStyleSheet("QPlainTextEdit{color: orange;}"); + break; + case 4: + ui_vp_message->setStyleSheet("QPlainTextEdit{color: rgb(45, 150, 255);}"); + break; + case 5: + ui_vp_message->setStyleSheet("QPlainTextEdit{color: yellow;}"); + break; + default: + ui_vp_message->setStyleSheet("QPlainTextEdit{color: white;}"); + } } void Courtroom::handle_wtce(QString p_wtce) @@ -816,6 +892,8 @@ void Courtroom::on_reload_theme_clicked() ao_app->set_user_theme(); set_widgets(); + //to update status on the background + set_background(current_background); } void Courtroom::on_back_to_lobby_clicked() diff --git a/courtroom.h b/courtroom.h index f15d5a0..eb660b9 100644 --- a/courtroom.h +++ b/courtroom.h @@ -52,6 +52,11 @@ public: QString get_default_background_path(); int get_cid() {return m_cid;} + int get_vp_x(){return m_viewport_x;} + int get_vp_y(){return m_viewport_y;} + int get_vp_w(){return m_viewport_width;} + int get_vp_h(){return m_viewport_height;} + void enter_courtroom(int p_cid);