added custom classes, started working on viewport. wt/ce sfx done

This commit is contained in:
David Skoland 2017-01-31 00:20:08 +01:00
parent ba8b0e59d8
commit 9031779bc9
15 changed files with 425 additions and 41 deletions

View File

@ -32,7 +32,10 @@ SOURCES += main.cpp\
courtroom.cpp \ courtroom.cpp \
aocharbutton.cpp \ aocharbutton.cpp \
hardware_functions.cpp \ hardware_functions.cpp \
aoscene.cpp aoscene.cpp \
aomovie.cpp \
aocharselect.cpp \
misc_functions.cpp
HEADERS += lobby.h \ HEADERS += lobby.h \
aoimage.h \ aoimage.h \
@ -48,4 +51,7 @@ HEADERS += lobby.h \
courtroom.h \ courtroom.h \
aocharbutton.h \ aocharbutton.h \
hardware_functions.h \ hardware_functions.h \
aoscene.h aoscene.h \
aomovie.h \
aocharselect.h \
misc_functions.h

View File

@ -80,6 +80,8 @@ public:
QString get_default_theme_path(); QString get_default_theme_path();
QString get_character_path(QString p_character); QString get_character_path(QString p_character);
QString get_demothings_path(); QString get_demothings_path();
QString get_sounds_path();
QString get_music_path();
//implementation in text_file_functions.cpp //implementation in text_file_functions.cpp
QString read_user_theme(); QString read_user_theme();

6
aocharselect.cpp Normal file
View File

@ -0,0 +1,6 @@
#include "aocharselect.h"
AOCharSelect::AOCharSelect()
{
}

12
aocharselect.h Normal file
View File

@ -0,0 +1,12 @@
#ifndef AOCHARSELECT_H
#define AOCHARSELECT_H
#include <QLabel>
class AOCharSelect : public QLabel
{
public:
AOCharSelect();
};
#endif // AOCHARSELECT_H

57
aomovie.cpp Normal file
View File

@ -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);
}

32
aomovie.h Normal file
View File

@ -0,0 +1,32 @@
#ifndef AOMOVIE_H
#define AOMOVIE_H
#include <QLabel>
#include <QMovie>
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

View File

@ -14,8 +14,15 @@ void AOScene::set_image(QString p_image)
QString background_path = m_courtroom->get_background_path() + p_image; QString background_path = m_courtroom->get_background_path() + p_image;
QString default_path = m_courtroom->get_default_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)) if (file_exists(background_path))
this->setPixmap(background_path); this->setPixmap(background.scaled(w, h));
else else
this->setPixmap(default_path); this->setPixmap(default_bg.scaled(w, h));
} }

View File

@ -15,13 +15,20 @@ Courtroom::Courtroom(AOApplication *p_ao_app) : QMainWindow()
char_button_mapper = new QSignalMapper(this); char_button_mapper = new QSignalMapper(this);
sfx_player = new QSoundEffect(this);
ui_background = new AOImage(this, ao_app); ui_background = new AOImage(this, ao_app);
//viewport elements like background, desk, etc.
ui_vp_background = new AOScene(this); ui_vp_background = new AOScene(this);
ui_vp_background->move(m_viewport_x, m_viewport_y); ui_vp_player_char = new AOMovie(this, ao_app);
ui_vp_background->resize(m_viewport_width, m_viewport_height); 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 = new QPlainTextEdit(this);
ui_ic_chatlog->setReadOnly(true); 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); 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_chat_message, SIGNAL(returnPressed()), this, SLOT(on_ooc_return_pressed()));
connect(ui_ooc_toggle, SIGNAL(clicked()), this, SLOT(on_ooc_toggle_clicked())); 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_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_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_left, SIGNAL(clicked()), this, SLOT(on_char_select_left_clicked()));
connect(ui_char_select_right, SIGNAL(clicked()), this, SLOT(on_char_select_right_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() 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->setFixedSize(m_courtroom_width, m_courtroom_height);
this->setWindowTitle("Attorney Online 2: Server name here");
ui_background->set_image("courtroombackground.png"); ui_background->set_image("courtroombackground.png");
ui_background->move(0, 0); ui_background->move(0, 0);
ui_background->resize(m_courtroom_width, m_courtroom_height); 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"); set_size_and_pos(ui_ic_chatlog, "ic_chatlog");
ui_ic_chatlog->setStyleSheet("background-color: rgba(0, 0, 0, 0);" 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) 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); 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) 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); 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) void Courtroom::handle_chatmessage(QStringList *p_contents)
@ -492,11 +612,46 @@ void Courtroom::handle_chatmessage(QStringList *p_contents)
//D3BUG START //D3BUG START
//ui_vp_background->set_image("defenseempty.png"); ui_vp_background->set_image("defenseempty.png");
//D3BUG END //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() void Courtroom::on_ooc_return_pressed()
{ {
if (ui_ooc_chat_message->text() == "" || ui_ooc_chat_name->text() == "") 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() void Courtroom::on_change_character_clicked()
{ {
ui_char_select_background->show(); ui_char_select_background->show();

View File

@ -6,6 +6,7 @@
#include "aocharbutton.h" #include "aocharbutton.h"
#include "aopacket.h" #include "aopacket.h"
#include "aoscene.h" #include "aoscene.h"
#include "aomovie.h"
#include "datatypes.h" #include "datatypes.h"
#include <QMainWindow> #include <QMainWindow>
@ -18,6 +19,7 @@
#include <QVector> #include <QVector>
#include <QCloseEvent> #include <QCloseEvent>
#include <QSignalMapper> #include <QSignalMapper>
#include <QSoundEffect>
class AOApplication; class AOApplication;
@ -48,20 +50,21 @@ public:
void append_server_chatmessage(QString f_message); void append_server_chatmessage(QString f_message);
void handle_chatmessage(QStringList *p_contents); void handle_chatmessage(QStringList *p_contents);
void handle_wtce(QString p_wtce);
~Courtroom(); ~Courtroom();
private: private:
AOApplication *ao_app; AOApplication *ao_app;
const int m_courtroom_width = 714; int m_courtroom_width = 714;
const int m_courtroom_height = 668; int m_courtroom_height = 668;
const int m_viewport_x = 0; int m_viewport_x = 0;
const int m_viewport_y = 0; int m_viewport_y = 0;
const int m_viewport_width = 256; int m_viewport_width = 256;
const int m_viewport_height = 192; int m_viewport_height = 192;
QVector<char_type> char_list; QVector<char_type> char_list;
QVector<evi_type> evidence_list; QVector<evi_type> evidence_list;
@ -81,18 +84,26 @@ private:
QString current_background = "gs4"; QString current_background = "gs4";
QSoundEffect *sfx_player;
AOImage *ui_background; AOImage *ui_background;
//T0D0: add viewport elements like background, desk, etc.
AOScene *ui_vp_background; 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_ic_chatlog;
QPlainTextEdit *ui_ms_chatlog; QPlainTextEdit *ui_ms_chatlog;
QPlainTextEdit *ui_server_chatlog; QPlainTextEdit *ui_server_chatlog;
QListWidget *ui_mute_list; QListWidget *ui_mute_list;
QListWidget *ui_area_list; QListWidget *ui_area_list;
QListWidget *ui_music_list; QListWidget *ui_music_list;
@ -122,6 +133,7 @@ private:
AOButton *ui_take_that; AOButton *ui_take_that;
AOButton *ui_ooc_toggle; AOButton *ui_ooc_toggle;
AOButton *ui_witness_testimony; AOButton *ui_witness_testimony;
AOButton *ui_cross_examination; AOButton *ui_cross_examination;
@ -166,10 +178,17 @@ private:
AOButton *ui_char_select_right; AOButton *ui_char_select_right;
AOButton *ui_spectator; AOButton *ui_spectator;
public slots:
void objection_done();
private slots: private slots:
void on_ooc_return_pressed(); void on_ooc_return_pressed();
void on_ooc_toggle_clicked(); void on_ooc_toggle_clicked();
void on_witness_testimony_clicked();
void on_cross_examination_clicked();
void on_change_character_clicked(); void on_change_character_clicked();
void on_reload_theme_clicked(); void on_reload_theme_clicked();
void on_call_mod_clicked(); void on_call_mod_clicked();

View File

@ -5,6 +5,7 @@
#include "networkmanager.h" #include "networkmanager.h"
#include <QDebug> #include <QDebug>
#include <QScrollBar>
Lobby::Lobby(AOApplication *p_ao_app) : QMainWindow() 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) void Lobby::set_player_count(int players_online, int max_players)

View File

@ -24,7 +24,7 @@ public:
void set_widgets(); void set_widgets();
void list_servers(); void list_servers();
void list_favorites(); 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_player_count(int players_online, int max_players);
void set_loading_text(QString p_text); void set_loading_text(QString p_text);
void show_loading_overlay(){ui_loading_background->show();} void show_loading_overlay(){ui_loading_background->show();}

30
misc_functions.cpp Normal file
View File

@ -0,0 +1,30 @@
#include "misc_functions.h"
#include <QTime>
#include <QCoreApplication>
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;
}
}

7
misc_functions.h Normal file
View File

@ -0,0 +1,7 @@
#ifndef MISC_FUNCTIONS_H
#define MISC_FUNCTIONS_H
void delay(int p_milliseconds);
bool cyclic_function();
#endif // MISC_FUNCTIONS_H

View File

@ -55,7 +55,7 @@ void AOApplication::ms_packet_received(AOPacket *p_packet)
else if (f_contents.size() >= 2) else if (f_contents.size() >= 2)
message_line = f_contents.at(0) + ": " + f_contents.at(1); message_line = f_contents.at(0) + ": " + f_contents.at(1);
else else
return; goto end;
if (lobby_constructed) if (lobby_constructed)
{ {
@ -66,6 +66,10 @@ void AOApplication::ms_packet_received(AOPacket *p_packet)
w_courtroom->append_ms_chatmessage(message_line); w_courtroom->append_ms_chatmessage(message_line);
} }
} }
end:
delete p_packet;
} }
void AOApplication::server_packet_received(AOPacket *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 (header == "decryptor")
{ {
if (f_contents.size() == 0) if (f_contents.size() == 0)
return; goto end;
//you may ask where 322 comes from. that would be a good question. //you may ask where 322 comes from. that would be a good question.
s_decryptor = fanta_decrypt(f_contents.at(0), 322).toUInt(); 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") else if (header == "ID")
{ {
if (f_contents.size() < 1) if (f_contents.size() < 1)
return; goto end;
s_pv = f_contents.at(0).toInt(); s_pv = f_contents.at(0).toInt();
if (f_contents.size() < 2) if (f_contents.size() < 2)
return; goto end;
//T0D0: store server version //T0D0: store server version
} }
@ -110,7 +114,7 @@ void AOApplication::server_packet_received(AOPacket *p_packet)
if (f_contents.size() < 2) if (f_contents.size() < 2)
{ {
qDebug() << "W: malformed packet!"; qDebug() << "W: malformed packet!";
return; goto end;
} }
QString message_line = f_contents.at(0) + ": " + f_contents.at(1); 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") else if (header == "PN")
{ {
if (f_contents.size() < 2) if (f_contents.size() < 2)
return; goto end;
w_lobby->set_player_count(f_contents.at(0).toInt(), f_contents.at(1).toInt()); w_lobby->set_player_count(f_contents.at(0).toInt(), f_contents.at(1).toInt());
} }
else if (header == "SI") else if (header == "SI")
{ {
if (f_contents.size() < 3) if (f_contents.size() < 3)
return; goto end;
char_list_size = f_contents.at(0).toInt(); char_list_size = f_contents.at(0).toInt();
loaded_chars = 0; loaded_chars = 0;
@ -166,7 +170,7 @@ void AOApplication::server_packet_received(AOPacket *p_packet)
else if (header == "CI") else if (header == "CI")
{ {
if (!courtroom_constructed) if (!courtroom_constructed)
return; goto end;
for (int n_element = 0 ; n_element < f_contents.size() ; n_element += 2) 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"){ else if (header == "EI"){
if (!courtroom_constructed) if (!courtroom_constructed)
return; goto end;
// +1 because evidence starts at 1 rather than 0 for whatever reason // +1 because evidence starts at 1 rather than 0 for whatever reason
//enjoy fanta //enjoy fanta
if (f_contents.at(0).toInt() != loaded_evidence + 1) if (f_contents.at(0).toInt() != loaded_evidence + 1)
return; goto end;
if (f_contents.size() < 2) if (f_contents.size() < 2)
return; goto end;
QStringList sub_elements = f_contents.at(1).split("&"); QStringList sub_elements = f_contents.at(1).split("&");
if (sub_elements.size() < 4) if (sub_elements.size() < 4)
return; goto end;
evi_type f_evi; evi_type f_evi;
f_evi.name = sub_elements.at(0); f_evi.name = sub_elements.at(0);
@ -234,7 +238,7 @@ void AOApplication::server_packet_received(AOPacket *p_packet)
else if (header == "EM") else if (header == "EM")
{ {
if (!courtroom_constructed) if (!courtroom_constructed)
return; goto end;
for (int n_element = 0 ; n_element < f_contents.size() ; n_element += 2) 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") else if (header == "DONE")
{ {
if (!courtroom_constructed) if (!courtroom_constructed)
return; goto end;
w_courtroom->set_char_select_page(); w_courtroom->set_char_select_page();
@ -282,7 +286,7 @@ void AOApplication::server_packet_received(AOPacket *p_packet)
else if (header == "BN") else if (header == "BN")
{ {
if (f_contents.size() < 1) if (f_contents.size() < 1)
return; goto end;
if (courtroom_constructed) if (courtroom_constructed)
w_courtroom->set_background(f_contents.at(0)); w_courtroom->set_background(f_contents.at(0));
@ -291,7 +295,7 @@ void AOApplication::server_packet_received(AOPacket *p_packet)
else if (header == "PV") else if (header == "PV")
{ {
if (f_contents.size() < 3) if (f_contents.size() < 3)
return; goto end;
w_courtroom->enter_courtroom(f_contents.at(2).toInt()); w_courtroom->enter_courtroom(f_contents.at(2).toInt());
} }
@ -300,6 +304,15 @@ void AOApplication::server_packet_received(AOPacket *p_packet)
if (courtroom_constructed) if (courtroom_constructed)
w_courtroom->handle_chatmessage(&p_packet->get_contents()); 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; delete p_packet;
} }

View File

@ -33,6 +33,14 @@ QString AOApplication::get_demothings_path()
{ {
return get_base_path() + "misc/demothings/"; 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() QString Courtroom::get_background_path()
{ {