From 9031779bc93c376596d98ae1e3fb7df1c8742399 Mon Sep 17 00:00:00 2001 From: David Skoland Date: Tue, 31 Jan 2017 00:20:08 +0100 Subject: [PATCH] added custom classes, started working on viewport. wt/ce sfx done --- Attorney_Online_remake.pro | 10 +- aoapplication.h | 2 + aocharselect.cpp | 6 ++ aocharselect.h | 12 +++ aomovie.cpp | 57 ++++++++++++ aomovie.h | 32 +++++++ aoscene.cpp | 11 ++- courtroom.cpp | 183 +++++++++++++++++++++++++++++++++++-- courtroom.h | 37 ++++++-- lobby.cpp | 24 ++++- lobby.h | 2 +- misc_functions.cpp | 30 ++++++ misc_functions.h | 7 ++ packet_distribution.cpp | 45 +++++---- path_functions.cpp | 8 ++ 15 files changed, 425 insertions(+), 41 deletions(-) create mode 100644 aocharselect.cpp create mode 100644 aocharselect.h create mode 100644 aomovie.cpp create mode 100644 aomovie.h create mode 100644 misc_functions.cpp create mode 100644 misc_functions.h diff --git a/Attorney_Online_remake.pro b/Attorney_Online_remake.pro index 55f3d99..45d0ea7 100644 --- a/Attorney_Online_remake.pro +++ b/Attorney_Online_remake.pro @@ -32,7 +32,10 @@ SOURCES += main.cpp\ courtroom.cpp \ aocharbutton.cpp \ hardware_functions.cpp \ - aoscene.cpp + aoscene.cpp \ + aomovie.cpp \ + aocharselect.cpp \ + misc_functions.cpp HEADERS += lobby.h \ aoimage.h \ @@ -48,4 +51,7 @@ HEADERS += lobby.h \ courtroom.h \ aocharbutton.h \ hardware_functions.h \ - aoscene.h + aoscene.h \ + aomovie.h \ + aocharselect.h \ + misc_functions.h diff --git a/aoapplication.h b/aoapplication.h index 5cd255c..80c1881 100644 --- a/aoapplication.h +++ b/aoapplication.h @@ -80,6 +80,8 @@ public: QString get_default_theme_path(); QString get_character_path(QString p_character); QString get_demothings_path(); + QString get_sounds_path(); + QString get_music_path(); //implementation in text_file_functions.cpp QString read_user_theme(); diff --git a/aocharselect.cpp b/aocharselect.cpp new file mode 100644 index 0000000..1921e67 --- /dev/null +++ b/aocharselect.cpp @@ -0,0 +1,6 @@ +#include "aocharselect.h" + +AOCharSelect::AOCharSelect() +{ + +} diff --git a/aocharselect.h b/aocharselect.h new file mode 100644 index 0000000..be57dde --- /dev/null +++ b/aocharselect.h @@ -0,0 +1,12 @@ +#ifndef AOCHARSELECT_H +#define AOCHARSELECT_H + +#include + +class AOCharSelect : public QLabel +{ +public: + AOCharSelect(); +}; + +#endif // AOCHARSELECT_H diff --git a/aomovie.cpp b/aomovie.cpp new file mode 100644 index 0000000..2c848c4 --- /dev/null +++ b/aomovie.cpp @@ -0,0 +1,57 @@ +#include "aomovie.h" + +#include "file_functions.h" +#include "courtroom.h" +#include "misc_functions.h" + +AOMovie::AOMovie(QWidget *p_parent, AOApplication *p_ao_app) : QLabel(p_parent) +{ + ao_app = p_ao_app; + + m_movie = new QMovie(); + + this->setMovie(m_movie); + + connect(m_movie, SIGNAL(frameChanged(int)), this, SLOT(frame_change(int))); +} + +void AOMovie::play(QString p_gif) +{ + QString gif_path = ao_app->get_theme_path() + p_gif; + QString default_path = ao_app->get_default_theme_path() + p_gif; + + if (file_exists(gif_path)) + m_movie->setFileName(gif_path); + else + m_movie->setFileName(default_path); + + this->show(); + m_movie->start(); +} + +void AOMovie::stop() +{ + m_movie->stop(); + this->hide(); +} + +void AOMovie::frame_change(int n_frame) +{ + if (n_frame == (m_movie->frameCount() - 1)) + { + //we need this or else the last frame wont show + delay(m_movie->nextFrameDelay()); + + this->stop(); + + //signal connected to courtroom object, let it figure out what to do + done(); + } +} + +void AOMovie::combo_resize(int w, int h) +{ + QSize f_size(w, h); + this->resize(f_size); + m_movie->setScaledSize(f_size); +} diff --git a/aomovie.h b/aomovie.h new file mode 100644 index 0000000..3aae8e5 --- /dev/null +++ b/aomovie.h @@ -0,0 +1,32 @@ +#ifndef AOMOVIE_H +#define AOMOVIE_H + +#include +#include + +class Courtroom; +class AOApplication; + +class AOMovie : public QLabel +{ + Q_OBJECT + +public: + AOMovie(QWidget *p_parent, AOApplication *p_ao_app); + + void play(QString p_gif); + void combo_resize(int w, int h); + void stop(); + +private: + QMovie *m_movie; + AOApplication *ao_app; + +signals: + void done(); + +private slots: + void frame_change(int n_frame); +}; + +#endif // AOMOVIE_H diff --git a/aoscene.cpp b/aoscene.cpp index d910a3e..1d76aed 100644 --- a/aoscene.cpp +++ b/aoscene.cpp @@ -14,8 +14,15 @@ void AOScene::set_image(QString p_image) QString background_path = m_courtroom->get_background_path() + p_image; QString default_path = m_courtroom->get_default_background_path() + p_image; + QPixmap background(background_path); + QPixmap default_bg(default_path); + + int w = this->width(); + int h = this->height(); + + if (file_exists(background_path)) - this->setPixmap(background_path); + this->setPixmap(background.scaled(w, h)); else - this->setPixmap(default_path); + this->setPixmap(default_bg.scaled(w, h)); } diff --git a/courtroom.cpp b/courtroom.cpp index 434f486..6600c34 100644 --- a/courtroom.cpp +++ b/courtroom.cpp @@ -15,13 +15,20 @@ Courtroom::Courtroom(AOApplication *p_ao_app) : QMainWindow() char_button_mapper = new QSignalMapper(this); + sfx_player = new QSoundEffect(this); + ui_background = new AOImage(this, ao_app); - //viewport elements like background, desk, etc. - ui_vp_background = new AOScene(this); - ui_vp_background->move(m_viewport_x, m_viewport_y); - ui_vp_background->resize(m_viewport_width, m_viewport_height); + ui_vp_player_char = new AOMovie(this, ao_app); + ui_vp_desk = new AOScene(this); + ui_vp_chatbox = new AOImage(this, ao_app); + ui_vp_showname = new QLabel(this); + ui_vp_message = new QPlainTextEdit(this); + ui_vp_testimony = new AOImage(this, ao_app); + ui_vp_realization = new AOImage(this, ao_app); + ui_vp_wtce = new AOMovie(this, ao_app); + ui_vp_objection = new AOMovie(this, ao_app); ui_ic_chatlog = new QPlainTextEdit(this); ui_ic_chatlog->setReadOnly(true); @@ -155,14 +162,20 @@ Courtroom::Courtroom(AOApplication *p_ao_app) : QMainWindow() ui_spectator = new AOButton(ui_char_select_background, ao_app); + connect(ui_vp_objection, SIGNAL(done()), this, SLOT(objection_done())); + connect(ui_ooc_chat_message, SIGNAL(returnPressed()), this, SLOT(on_ooc_return_pressed())); connect(ui_ooc_toggle, SIGNAL(clicked()), this, SLOT(on_ooc_toggle_clicked())); - connect(ui_change_character, SIGNAL(clicked()), this, SLOT(on_change_character_clicked())); + connect(ui_witness_testimony, SIGNAL(clicked()), this, SLOT(on_witness_testimony_clicked())); + connect(ui_cross_examination, SIGNAL(clicked()), this, SLOT(on_cross_examination_clicked())); + + connect(ui_change_character, SIGNAL(clicked()), this, SLOT(on_change_character_clicked())); connect(ui_reload_theme, SIGNAL(clicked()), this, SLOT(on_reload_theme_clicked())); - connect(ui_back_to_lobby, SIGNAL(clicked()), this, SLOT(on_back_to_lobby_clicked())); connect(ui_call_mod, SIGNAL(clicked()), this, SLOT(on_call_mod_clicked())); + connect(ui_back_to_lobby, SIGNAL(clicked()), this, SLOT(on_back_to_lobby_clicked())); + connect(ui_char_select_left, SIGNAL(clicked()), this, SLOT(on_char_select_left_clicked())); connect(ui_char_select_right, SIGNAL(clicked()), this, SLOT(on_char_select_right_clicked())); @@ -173,14 +186,83 @@ Courtroom::Courtroom(AOApplication *p_ao_app) : QMainWindow() void Courtroom::set_widgets() { + QString design_ini_path = ao_app->get_theme_path() + "courtroom_design.ini"; + QString default_ini_path = ao_app->get_base_path() + "themes/default/courtroom_design.ini"; + + pos_size_type f_courtroom = ao_app->get_pos_and_size("courtroom", design_ini_path); + pos_size_type f_viewport = ao_app->get_pos_and_size("viewport", design_ini_path); + + if (f_courtroom.width < 0 || f_courtroom.height < 0) + { + f_courtroom = ao_app->get_pos_and_size("courtroom", default_ini_path); + if (f_courtroom.width < 0 || f_courtroom.height < 0) + { + qDebug() << "ERROR: did not find courtroom width or height in courtroom_design.ini!"; + //T0D0: add error box then quit application, this is not recoverable + } + } + + + + if (f_viewport.width < 0 || f_viewport.height < 0) + { + f_viewport = ao_app->get_pos_and_size("viewport", default_ini_path); + if (f_viewport.width < 0 || f_viewport.height < 0) + { + qDebug() << "ERROR: did not find viewport width or height in courtroom_design.ini!"; + //T0D0: same, critical error + } + } + + m_courtroom_width = f_courtroom.width; + m_courtroom_height = f_courtroom.height; + + m_viewport_x = f_viewport.x; + m_viewport_y = f_viewport.y; + m_viewport_width = f_viewport.width; + m_viewport_height = f_viewport.height; + this->setFixedSize(m_courtroom_width, m_courtroom_height); - this->setWindowTitle("Attorney Online 2: Server name here"); ui_background->set_image("courtroombackground.png"); ui_background->move(0, 0); ui_background->resize(m_courtroom_width, m_courtroom_height); - //viewport elements like background, desk, etc. go here + ui_vp_background->move(m_viewport_x, m_viewport_y); + ui_vp_background->resize(m_viewport_width, m_viewport_height); + + ui_vp_player_char->move(m_viewport_x, m_viewport_y); + ui_vp_player_char->combo_resize(m_viewport_width, m_viewport_height); + + ui_vp_desk->move(m_viewport_x, m_viewport_y); + ui_vp_desk->resize(m_viewport_width, m_viewport_height); + + ui_vp_chatbox->move(m_viewport_x, m_viewport_y); + ui_vp_chatbox->resize(m_viewport_width, m_viewport_height); + + ui_vp_showname->move(m_viewport_x, m_viewport_y); + ui_vp_showname->resize(m_viewport_width, m_viewport_height); + + ui_vp_message->move(m_viewport_x, m_viewport_y); + ui_vp_message->resize(m_viewport_width, m_viewport_height); + + //T0D0: resize it properly + //D3BUG START + //obscures some things + ui_vp_message->hide(); + //D3BUG END + + ui_vp_testimony->move(m_viewport_x, m_viewport_y); + ui_vp_testimony->resize(m_viewport_width, m_viewport_height); + + ui_vp_realization->move(m_viewport_x, m_viewport_y); + ui_vp_realization->resize(m_viewport_width, m_viewport_height); + + ui_vp_wtce->move(m_viewport_x, m_viewport_y); + ui_vp_wtce->combo_resize(m_viewport_width, m_viewport_height); + + ui_vp_objection->move(m_viewport_x, m_viewport_y); + ui_vp_objection->combo_resize(m_viewport_width, m_viewport_height); set_size_and_pos(ui_ic_chatlog, "ic_chatlog"); ui_ic_chatlog->setStyleSheet("background-color: rgba(0, 0, 0, 0);" @@ -453,12 +535,50 @@ void Courtroom::enter_courtroom(int p_cid) void Courtroom::append_ms_chatmessage(QString f_message) { + const QTextCursor old_cursor = ui_ms_chatlog->textCursor(); + const int old_scrollbar_value = ui_ms_chatlog->verticalScrollBar()->value(); + const bool is_scrolled_down = old_scrollbar_value == ui_ms_chatlog->verticalScrollBar()->maximum(); + + ui_ms_chatlog->moveCursor(QTextCursor::End); + ui_ms_chatlog->appendPlainText(f_message); + + if (old_cursor.hasSelection() || !is_scrolled_down) + { + // The user has selected text or scrolled away from the bottom: maintain position. + ui_ms_chatlog->setTextCursor(old_cursor); + ui_ms_chatlog->verticalScrollBar()->setValue(old_scrollbar_value); + } + else + { + // The user hasn't selected any text and the scrollbar is at the bottom: scroll to the bottom. + ui_ms_chatlog->moveCursor(QTextCursor::End); + ui_ms_chatlog->verticalScrollBar()->setValue(ui_ms_chatlog->verticalScrollBar()->maximum()); + } } void Courtroom::append_server_chatmessage(QString f_message) { + const QTextCursor old_cursor = ui_server_chatlog->textCursor(); + const int old_scrollbar_value = ui_server_chatlog->verticalScrollBar()->value(); + const bool is_scrolled_down = old_scrollbar_value == ui_server_chatlog->verticalScrollBar()->maximum(); + + ui_server_chatlog->moveCursor(QTextCursor::End); + ui_server_chatlog->appendPlainText(f_message); + + if (old_cursor.hasSelection() || !is_scrolled_down) + { + // The user has selected text or scrolled away from the bottom: maintain position. + ui_server_chatlog->setTextCursor(old_cursor); + ui_server_chatlog->verticalScrollBar()->setValue(old_scrollbar_value); + } + else + { + // The user hasn't selected any text and the scrollbar is at the bottom: scroll to the bottom. + ui_server_chatlog->moveCursor(QTextCursor::End); + ui_server_chatlog->verticalScrollBar()->setValue(ui_server_chatlog->verticalScrollBar()->maximum()); + } } void Courtroom::handle_chatmessage(QStringList *p_contents) @@ -492,11 +612,46 @@ void Courtroom::handle_chatmessage(QStringList *p_contents) //D3BUG START - //ui_vp_background->set_image("defenseempty.png"); + ui_vp_background->set_image("defenseempty.png"); //D3BUG END } +void Courtroom::objection_done() +{ + //T0D0: play preanim, advance to step 2 in chat message handling +} + +void Courtroom::handle_wtce(QString p_wtce) +{ + //witness testimony + if (p_wtce == "testimony1") + { + QString wt_path = ao_app->get_sounds_path() + "sfx-testimony2.wav"; + QUrl wt_sfx(QUrl::fromLocalFile(wt_path)); + + sfx_player->stop(); + ui_vp_wtce->stop(); + sfx_player->setSource(wt_sfx); + + sfx_player->play(); + ui_vp_wtce->play("witnesstestimony.gif"); + } + //cross examination + else if (p_wtce == "testimony2") + { + QString ce_path = ao_app->get_sounds_path() + "sfx-testimony.wav"; + QUrl ce_sfx(QUrl::fromLocalFile(ce_path)); + + sfx_player->stop(); + ui_vp_wtce->stop(); + sfx_player->setSource(ce_sfx); + + sfx_player->play(); + ui_vp_wtce->play("crossexamination.gif"); + } +} + void Courtroom::on_ooc_return_pressed() { if (ui_ooc_chat_message->text() == "" || ui_ooc_chat_name->text() == "") @@ -536,6 +691,16 @@ void Courtroom::on_ooc_toggle_clicked() } } +void Courtroom::on_witness_testimony_clicked() +{ + ao_app->send_server_packet(new AOPacket("RT#testimony1#%")); +} + +void Courtroom::on_cross_examination_clicked() +{ + ao_app->send_server_packet(new AOPacket("RT#testimony2#%")); +} + void Courtroom::on_change_character_clicked() { ui_char_select_background->show(); diff --git a/courtroom.h b/courtroom.h index 63dfe4f..63e83e3 100644 --- a/courtroom.h +++ b/courtroom.h @@ -6,6 +6,7 @@ #include "aocharbutton.h" #include "aopacket.h" #include "aoscene.h" +#include "aomovie.h" #include "datatypes.h" #include @@ -18,6 +19,7 @@ #include #include #include +#include class AOApplication; @@ -48,20 +50,21 @@ public: void append_server_chatmessage(QString f_message); void handle_chatmessage(QStringList *p_contents); + void handle_wtce(QString p_wtce); ~Courtroom(); private: AOApplication *ao_app; - const int m_courtroom_width = 714; - const int m_courtroom_height = 668; + int m_courtroom_width = 714; + int m_courtroom_height = 668; - const int m_viewport_x = 0; - const int m_viewport_y = 0; + int m_viewport_x = 0; + int m_viewport_y = 0; - const int m_viewport_width = 256; - const int m_viewport_height = 192; + int m_viewport_width = 256; + int m_viewport_height = 192; QVector char_list; QVector evidence_list; @@ -81,18 +84,26 @@ private: QString current_background = "gs4"; + QSoundEffect *sfx_player; + AOImage *ui_background; - //T0D0: add viewport elements like background, desk, etc. - AOScene *ui_vp_background; + AOMovie *ui_vp_player_char; + AOScene *ui_vp_desk; + AOImage *ui_vp_chatbox; + QLabel *ui_vp_showname; + QPlainTextEdit *ui_vp_message; + AOImage *ui_vp_testimony; + AOImage *ui_vp_realization; + AOMovie *ui_vp_wtce; + AOMovie *ui_vp_objection; QPlainTextEdit *ui_ic_chatlog; QPlainTextEdit *ui_ms_chatlog; QPlainTextEdit *ui_server_chatlog; - QListWidget *ui_mute_list; QListWidget *ui_area_list; QListWidget *ui_music_list; @@ -122,6 +133,7 @@ private: AOButton *ui_take_that; AOButton *ui_ooc_toggle; + AOButton *ui_witness_testimony; AOButton *ui_cross_examination; @@ -166,10 +178,17 @@ private: AOButton *ui_char_select_right; AOButton *ui_spectator; + +public slots: + void objection_done(); + private slots: void on_ooc_return_pressed(); void on_ooc_toggle_clicked(); + void on_witness_testimony_clicked(); + void on_cross_examination_clicked(); + void on_change_character_clicked(); void on_reload_theme_clicked(); void on_call_mod_clicked(); diff --git a/lobby.cpp b/lobby.cpp index 836c5ac..e73345c 100644 --- a/lobby.cpp +++ b/lobby.cpp @@ -5,6 +5,7 @@ #include "networkmanager.h" #include +#include Lobby::Lobby(AOApplication *p_ao_app) : QMainWindow() { @@ -307,9 +308,28 @@ void Lobby::list_favorites() } } -void Lobby::append_chatmessage(QString p_message_line) +void Lobby::append_chatmessage(QString f_message) { - ui_chatbox->appendPlainText(p_message_line); + const QTextCursor old_cursor = ui_chatbox->textCursor(); + const int old_scrollbar_value = ui_chatbox->verticalScrollBar()->value(); + const bool is_scrolled_down = old_scrollbar_value == ui_chatbox->verticalScrollBar()->maximum(); + + ui_chatbox->moveCursor(QTextCursor::End); + + ui_chatbox->appendPlainText(f_message); + + if (old_cursor.hasSelection() || !is_scrolled_down) + { + // The user has selected text or scrolled away from the bottom: maintain position. + ui_chatbox->setTextCursor(old_cursor); + ui_chatbox->verticalScrollBar()->setValue(old_scrollbar_value); + } + else + { + // The user hasn't selected any text and the scrollbar is at the bottom: scroll to the bottom. + ui_chatbox->moveCursor(QTextCursor::End); + ui_chatbox->verticalScrollBar()->setValue(ui_chatbox->verticalScrollBar()->maximum()); + } } void Lobby::set_player_count(int players_online, int max_players) diff --git a/lobby.h b/lobby.h index 843ad70..0b75b03 100644 --- a/lobby.h +++ b/lobby.h @@ -24,7 +24,7 @@ public: void set_widgets(); void list_servers(); void list_favorites(); - void append_chatmessage(QString p_message_line); + void append_chatmessage(QString f_message); void set_player_count(int players_online, int max_players); void set_loading_text(QString p_text); void show_loading_overlay(){ui_loading_background->show();} diff --git a/misc_functions.cpp b/misc_functions.cpp new file mode 100644 index 0000000..a2e19a0 --- /dev/null +++ b/misc_functions.cpp @@ -0,0 +1,30 @@ +#include "misc_functions.h" + +#include +#include + +void delay(int p_milliseconds) +{ + QTime dieTime = QTime::currentTime().addMSecs(p_milliseconds); + + while(QTime::currentTime() < dieTime) + QCoreApplication::processEvents(QEventLoop::AllEvents, 100); +} + +//alternates between true and false every time it is called. useful for certain optimization +bool cyclic_function() +{ + static bool cycle = true; + + if (cycle) + { + cycle = false; + return cycle; + } + + else + { + cycle = true; + return cycle; + } +} diff --git a/misc_functions.h b/misc_functions.h new file mode 100644 index 0000000..ef8a22b --- /dev/null +++ b/misc_functions.h @@ -0,0 +1,7 @@ +#ifndef MISC_FUNCTIONS_H +#define MISC_FUNCTIONS_H + +void delay(int p_milliseconds); +bool cyclic_function(); + +#endif // MISC_FUNCTIONS_H diff --git a/packet_distribution.cpp b/packet_distribution.cpp index 44dee2a..7466665 100644 --- a/packet_distribution.cpp +++ b/packet_distribution.cpp @@ -55,7 +55,7 @@ void AOApplication::ms_packet_received(AOPacket *p_packet) else if (f_contents.size() >= 2) message_line = f_contents.at(0) + ": " + f_contents.at(1); else - return; + goto end; if (lobby_constructed) { @@ -66,6 +66,10 @@ void AOApplication::ms_packet_received(AOPacket *p_packet) w_courtroom->append_ms_chatmessage(message_line); } } + + end: + + delete p_packet; } void AOApplication::server_packet_received(AOPacket *p_packet) @@ -82,7 +86,7 @@ void AOApplication::server_packet_received(AOPacket *p_packet) if (header == "decryptor") { if (f_contents.size() == 0) - return; + goto end; //you may ask where 322 comes from. that would be a good question. s_decryptor = fanta_decrypt(f_contents.at(0), 322).toUInt(); @@ -96,12 +100,12 @@ void AOApplication::server_packet_received(AOPacket *p_packet) else if (header == "ID") { if (f_contents.size() < 1) - return; + goto end; s_pv = f_contents.at(0).toInt(); if (f_contents.size() < 2) - return; + goto end; //T0D0: store server version } @@ -110,7 +114,7 @@ void AOApplication::server_packet_received(AOPacket *p_packet) if (f_contents.size() < 2) { qDebug() << "W: malformed packet!"; - return; + goto end; } QString message_line = f_contents.at(0) + ": " + f_contents.at(1); @@ -121,14 +125,14 @@ void AOApplication::server_packet_received(AOPacket *p_packet) else if (header == "PN") { if (f_contents.size() < 2) - return; + goto end; w_lobby->set_player_count(f_contents.at(0).toInt(), f_contents.at(1).toInt()); } else if (header == "SI") { if (f_contents.size() < 3) - return; + goto end; char_list_size = f_contents.at(0).toInt(); loaded_chars = 0; @@ -166,7 +170,7 @@ void AOApplication::server_packet_received(AOPacket *p_packet) else if (header == "CI") { if (!courtroom_constructed) - return; + goto end; for (int n_element = 0 ; n_element < f_contents.size() ; n_element += 2) { @@ -200,20 +204,20 @@ void AOApplication::server_packet_received(AOPacket *p_packet) } else if (header == "EI"){ if (!courtroom_constructed) - return; + goto end; // +1 because evidence starts at 1 rather than 0 for whatever reason //enjoy fanta if (f_contents.at(0).toInt() != loaded_evidence + 1) - return; + goto end; if (f_contents.size() < 2) - return; + goto end; QStringList sub_elements = f_contents.at(1).split("&"); if (sub_elements.size() < 4) - return; + goto end; evi_type f_evi; f_evi.name = sub_elements.at(0); @@ -234,7 +238,7 @@ void AOApplication::server_packet_received(AOPacket *p_packet) else if (header == "EM") { if (!courtroom_constructed) - return; + goto end; for (int n_element = 0 ; n_element < f_contents.size() ; n_element += 2) { @@ -269,7 +273,7 @@ void AOApplication::server_packet_received(AOPacket *p_packet) else if (header == "DONE") { if (!courtroom_constructed) - return; + goto end; w_courtroom->set_char_select_page(); @@ -282,7 +286,7 @@ void AOApplication::server_packet_received(AOPacket *p_packet) else if (header == "BN") { if (f_contents.size() < 1) - return; + goto end; if (courtroom_constructed) w_courtroom->set_background(f_contents.at(0)); @@ -291,7 +295,7 @@ void AOApplication::server_packet_received(AOPacket *p_packet) else if (header == "PV") { if (f_contents.size() < 3) - return; + goto end; w_courtroom->enter_courtroom(f_contents.at(2).toInt()); } @@ -300,6 +304,15 @@ void AOApplication::server_packet_received(AOPacket *p_packet) if (courtroom_constructed) w_courtroom->handle_chatmessage(&p_packet->get_contents()); } + else if (header == "RT") + { + if (f_contents.size() < 1) + goto end; + + w_courtroom->handle_wtce(f_contents.at(0)); + } + + end: delete p_packet; } diff --git a/path_functions.cpp b/path_functions.cpp index c4c2440..1458649 100644 --- a/path_functions.cpp +++ b/path_functions.cpp @@ -33,6 +33,14 @@ QString AOApplication::get_demothings_path() { return get_base_path() + "misc/demothings/"; } +QString AOApplication::get_sounds_path() +{ + return get_base_path() + "sounds/general/"; +} +QString AOApplication::get_music_path() +{ + return get_base_path() + "sounds/music/"; +} QString Courtroom::get_background_path() {