added custom classes, started working on viewport. wt/ce sfx done
This commit is contained in:
parent
ba8b0e59d8
commit
9031779bc9
@ -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
|
||||||
|
@ -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
6
aocharselect.cpp
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
#include "aocharselect.h"
|
||||||
|
|
||||||
|
AOCharSelect::AOCharSelect()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
12
aocharselect.h
Normal file
12
aocharselect.h
Normal 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
57
aomovie.cpp
Normal 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
32
aomovie.h
Normal 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
|
11
aoscene.cpp
11
aoscene.cpp
@ -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));
|
||||||
}
|
}
|
||||||
|
183
courtroom.cpp
183
courtroom.cpp
@ -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();
|
||||||
|
37
courtroom.h
37
courtroom.h
@ -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();
|
||||||
|
24
lobby.cpp
24
lobby.cpp
@ -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)
|
||||||
|
2
lobby.h
2
lobby.h
@ -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
30
misc_functions.cpp
Normal 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
7
misc_functions.h
Normal 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
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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()
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user