Merge branch 'master' into feature/mounting
This commit is contained in:
commit
9ecd7c453c
@ -3,7 +3,7 @@ QT += core gui widgets network
|
|||||||
TARGET = Attorney_Online
|
TARGET = Attorney_Online
|
||||||
TEMPLATE = app
|
TEMPLATE = app
|
||||||
|
|
||||||
VERSION = 2.9.0.0
|
VERSION = 2.9.1.0
|
||||||
|
|
||||||
INCLUDEPATH += $$PWD/include
|
INCLUDEPATH += $$PWD/include
|
||||||
DESTDIR = $$PWD/bin
|
DESTDIR = $$PWD/bin
|
||||||
|
@ -1 +1 @@
|
|||||||
Subproject commit 126447457906992e0096c4c9416f2b1f7986ff40
|
Subproject commit 7c036c09ddfadc2680a2c5dbfa188dc98142a427
|
@ -299,6 +299,9 @@ public:
|
|||||||
// Returns whether the user would like to have custom shownames on by default.
|
// Returns whether the user would like to have custom shownames on by default.
|
||||||
bool get_showname_enabled_by_default();
|
bool get_showname_enabled_by_default();
|
||||||
|
|
||||||
|
//Returns the showname the user may have set in config.ini.
|
||||||
|
QString get_default_showname();
|
||||||
|
|
||||||
// Returns the list of words in callwords.ini
|
// Returns the list of words in callwords.ini
|
||||||
QStringList get_call_words();
|
QStringList get_call_words();
|
||||||
|
|
||||||
@ -401,10 +404,6 @@ public:
|
|||||||
// Returns the preanim duration of p_char's p_emote
|
// Returns the preanim duration of p_char's p_emote
|
||||||
int get_preanim_duration(QString p_char, QString p_emote);
|
int get_preanim_duration(QString p_char, QString p_emote);
|
||||||
|
|
||||||
// Same as above, but only returns if it has a % in front(refer to Preanims
|
|
||||||
// section in the manual)
|
|
||||||
int get_ao2_preanim_duration(QString p_char, QString p_emote);
|
|
||||||
|
|
||||||
// Not in use
|
// Not in use
|
||||||
int get_text_delay(QString p_char, QString p_emote);
|
int get_text_delay(QString p_char, QString p_emote);
|
||||||
|
|
||||||
@ -513,6 +512,9 @@ public:
|
|||||||
// Get if the theme is animated
|
// Get if the theme is animated
|
||||||
bool get_animated_theme();
|
bool get_animated_theme();
|
||||||
|
|
||||||
|
// Get the default scaling method
|
||||||
|
QString get_default_scaling();
|
||||||
|
|
||||||
// Get a list of custom mount paths
|
// Get a list of custom mount paths
|
||||||
QStringList get_mount_paths();
|
QStringList get_mount_paths();
|
||||||
|
|
||||||
@ -525,6 +527,16 @@ public:
|
|||||||
// The file name of the log file in base/logs.
|
// The file name of the log file in base/logs.
|
||||||
QString log_filename;
|
QString log_filename;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief A QString of an URL that defines the content repository
|
||||||
|
* send by the server.
|
||||||
|
*
|
||||||
|
* @details Introduced in Version 2.9.2.
|
||||||
|
* Addresses the issue of contenturl devlivery for WebAO
|
||||||
|
* without relying on someone adding the link manually.
|
||||||
|
*/
|
||||||
|
QString asset_url;
|
||||||
|
|
||||||
void initBASS();
|
void initBASS();
|
||||||
static void load_bass_opus_plugin();
|
static void load_bass_opus_plugin();
|
||||||
static void CALLBACK BASSreset(HSTREAM handle, DWORD channel, DWORD data,
|
static void CALLBACK BASSreset(HSTREAM handle, DWORD channel, DWORD data,
|
||||||
@ -537,7 +549,7 @@ public:
|
|||||||
private:
|
private:
|
||||||
const int RELEASE = 2;
|
const int RELEASE = 2;
|
||||||
const int MAJOR_VERSION = 9;
|
const int MAJOR_VERSION = 9;
|
||||||
const int MINOR_VERSION = 0;
|
const int MINOR_VERSION = 1;
|
||||||
|
|
||||||
QVector<server_type> server_list;
|
QVector<server_type> server_list;
|
||||||
QVector<server_type> favorite_list;
|
QVector<server_type> favorite_list;
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
|
|
||||||
class AOImage : public QLabel {
|
class AOImage : public QLabel {
|
||||||
public:
|
public:
|
||||||
AOImage(QWidget *parent, AOApplication *p_ao_app);
|
AOImage(QWidget *parent, AOApplication *p_ao_app, bool make_static = false);
|
||||||
~AOImage();
|
~AOImage();
|
||||||
|
|
||||||
QWidget *m_parent;
|
QWidget *m_parent;
|
||||||
@ -20,6 +20,8 @@ public:
|
|||||||
|
|
||||||
QString path;
|
QString path;
|
||||||
|
|
||||||
|
bool is_static = false;
|
||||||
|
|
||||||
bool set_image(QString p_image, QString p_misc = "");
|
bool set_image(QString p_image, QString p_misc = "");
|
||||||
void set_size_and_pos(QString identifier);
|
void set_size_and_pos(QString identifier);
|
||||||
};
|
};
|
||||||
|
@ -53,6 +53,7 @@ public:
|
|||||||
bool force_continuous = false;
|
bool force_continuous = false;
|
||||||
Qt::TransformationMode transform_mode = Qt::FastTransformation; // transformation mode to use for this image
|
Qt::TransformationMode transform_mode = Qt::FastTransformation; // transformation mode to use for this image
|
||||||
bool stretch = false; // Should we stretch/squash this image to fill the screen?
|
bool stretch = false; // Should we stretch/squash this image to fill the screen?
|
||||||
|
bool masked = true; // Set a mask to the dimensions of the widget?
|
||||||
|
|
||||||
// Set the movie's image to provided paths, preparing for playback.
|
// Set the movie's image to provided paths, preparing for playback.
|
||||||
void start_playback(QString p_image);
|
void start_playback(QString p_image);
|
||||||
@ -104,10 +105,6 @@ protected:
|
|||||||
|
|
||||||
QElapsedTimer actual_time;
|
QElapsedTimer actual_time;
|
||||||
|
|
||||||
// Usually used to turn seconds into milliseconds such as for [Time] tag in
|
|
||||||
// char.ini (which is no longer used)
|
|
||||||
const int tick_ms = 60;
|
|
||||||
|
|
||||||
// These are the X and Y values before they are fixed based on the sprite's
|
// These are the X and Y values before they are fixed based on the sprite's
|
||||||
// width.
|
// width.
|
||||||
int x = 0;
|
int x = 0;
|
||||||
|
@ -25,7 +25,7 @@ public:
|
|||||||
int loop_end[4] = {0, 0, 0, 0};
|
int loop_end[4] = {0, 0, 0, 0};
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void play(QString p_song, int channel = 0, bool loop = false,
|
int play(QString p_song, int channel = 0, bool loop = false,
|
||||||
int effect_flags = 0);
|
int effect_flags = 0);
|
||||||
void stop(int channel = 0);
|
void stop(int channel = 0);
|
||||||
|
|
||||||
|
@ -79,6 +79,8 @@ private:
|
|||||||
QLabel *ui_username_lbl;
|
QLabel *ui_username_lbl;
|
||||||
QLabel *ui_showname_lbl;
|
QLabel *ui_showname_lbl;
|
||||||
QCheckBox *ui_showname_cb;
|
QCheckBox *ui_showname_cb;
|
||||||
|
QLabel *ui_default_showname_lbl;
|
||||||
|
QLineEdit *ui_default_showname_textbox;
|
||||||
QFrame *ui_net_divider;
|
QFrame *ui_net_divider;
|
||||||
QLabel *ui_ms_lbl;
|
QLabel *ui_ms_lbl;
|
||||||
QLineEdit *ui_ms_textbox;
|
QLineEdit *ui_ms_textbox;
|
||||||
@ -86,6 +88,8 @@ private:
|
|||||||
QCheckBox *ui_discord_cb;
|
QCheckBox *ui_discord_cb;
|
||||||
QLabel *ui_language_label;
|
QLabel *ui_language_label;
|
||||||
QComboBox *ui_language_combobox;
|
QComboBox *ui_language_combobox;
|
||||||
|
QLabel *ui_scaling_label;
|
||||||
|
QComboBox *ui_scaling_combobox;
|
||||||
|
|
||||||
QLabel *ui_shake_lbl;
|
QLabel *ui_shake_lbl;
|
||||||
QCheckBox *ui_shake_cb;
|
QCheckBox *ui_shake_cb;
|
||||||
|
@ -226,13 +226,16 @@ public:
|
|||||||
// Parse the chat message packet and unpack it into the m_chatmessage[ITEM] format
|
// Parse the chat message packet and unpack it into the m_chatmessage[ITEM] format
|
||||||
void unpack_chatmessage(QStringList p_contents);
|
void unpack_chatmessage(QStringList p_contents);
|
||||||
|
|
||||||
|
// Skip the current queue, adding all the queue messages to the logs if desynchronized logs are disabled
|
||||||
|
void skip_chatmessage_queue();
|
||||||
|
|
||||||
enum LogMode {
|
enum LogMode {
|
||||||
IO_ONLY,
|
IO_ONLY,
|
||||||
DISPLAY_ONLY,
|
DISPLAY_ONLY,
|
||||||
DISPLAY_AND_IO
|
DISPLAY_AND_IO
|
||||||
};
|
};
|
||||||
// Log the message contents and information such as evidence presenting etc. into the log file, the IC log, or both.
|
// Log the message contents and information such as evidence presenting etc. into the log file, the IC log, or both.
|
||||||
void log_chatmessage(QString f_message, int f_char_id, QString f_showname = "", int f_color = 0, LogMode f_log_mode=IO_ONLY);
|
void log_chatmessage(QString f_message, int f_char_id, QString f_showname = "", QString f_char = "", QString f_objection_mod = "", int f_evi_id = 0, int f_color = 0, LogMode f_log_mode=IO_ONLY);
|
||||||
|
|
||||||
// Log the message contents and information such as evidence presenting etc. into the IC logs
|
// Log the message contents and information such as evidence presenting etc. into the IC logs
|
||||||
void handle_callwords();
|
void handle_callwords();
|
||||||
@ -752,7 +755,6 @@ private:
|
|||||||
|
|
||||||
QVector<AOCharButton *> ui_char_button_list;
|
QVector<AOCharButton *> ui_char_button_list;
|
||||||
QVector<AOCharButton *> ui_char_button_list_filtered;
|
QVector<AOCharButton *> ui_char_button_list_filtered;
|
||||||
AOImage *ui_selector;
|
|
||||||
|
|
||||||
AOButton *ui_back_to_lobby;
|
AOButton *ui_back_to_lobby;
|
||||||
|
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
#include <QTcpSocket>
|
#include <QTcpSocket>
|
||||||
#include <QTimer>
|
#include <QTimer>
|
||||||
#include <QFileDialog>
|
#include <QFileDialog>
|
||||||
|
#include <QMessageBox>
|
||||||
|
|
||||||
class DemoServer : public QObject
|
class DemoServer : public QObject
|
||||||
{
|
{
|
||||||
@ -24,6 +25,7 @@ public:
|
|||||||
private:
|
private:
|
||||||
void handle_packet(AOPacket packet);
|
void handle_packet(AOPacket packet);
|
||||||
void load_demo(QString filename);
|
void load_demo(QString filename);
|
||||||
|
void reset_state();
|
||||||
|
|
||||||
QTcpServer* tcp_server;
|
QTcpServer* tcp_server;
|
||||||
QTcpSocket* client_sock = nullptr;
|
QTcpSocket* client_sock = nullptr;
|
||||||
|
@ -15,19 +15,19 @@ AOCharButton::AOCharButton(QWidget *parent, AOApplication *p_ao_app, int x_pos,
|
|||||||
this->resize(60, 60);
|
this->resize(60, 60);
|
||||||
this->move(x_pos, y_pos);
|
this->move(x_pos, y_pos);
|
||||||
|
|
||||||
ui_taken = new AOImage(this, ao_app);
|
ui_taken = new AOImage(this, ao_app, true);
|
||||||
ui_taken->resize(60, 60);
|
ui_taken->resize(60, 60);
|
||||||
ui_taken->set_image("char_taken");
|
ui_taken->set_image("char_taken");
|
||||||
ui_taken->setAttribute(Qt::WA_TransparentForMouseEvents);
|
ui_taken->setAttribute(Qt::WA_TransparentForMouseEvents);
|
||||||
ui_taken->hide();
|
ui_taken->hide();
|
||||||
|
|
||||||
ui_passworded = new AOImage(this, ao_app);
|
ui_passworded = new AOImage(this, ao_app, true);
|
||||||
ui_passworded->resize(60, 60);
|
ui_passworded->resize(60, 60);
|
||||||
ui_passworded->set_image("char_passworded");
|
ui_passworded->set_image("char_passworded");
|
||||||
ui_passworded->setAttribute(Qt::WA_TransparentForMouseEvents);
|
ui_passworded->setAttribute(Qt::WA_TransparentForMouseEvents);
|
||||||
ui_passworded->hide();
|
ui_passworded->hide();
|
||||||
|
|
||||||
ui_selector = new AOImage(parent, ao_app);
|
ui_selector = new AOImage(parent, ao_app, true);
|
||||||
ui_selector->resize(62, 62);
|
ui_selector->resize(62, 62);
|
||||||
ui_selector->move(x_pos - 1, y_pos - 1);
|
ui_selector->move(x_pos - 1, y_pos - 1);
|
||||||
ui_selector->set_image("char_selector");
|
ui_selector->set_image("char_selector");
|
||||||
|
@ -9,14 +9,14 @@ AOEvidenceButton::AOEvidenceButton(QWidget *p_parent, AOApplication *p_ao_app,
|
|||||||
ao_app = p_ao_app;
|
ao_app = p_ao_app;
|
||||||
m_parent = p_parent;
|
m_parent = p_parent;
|
||||||
|
|
||||||
ui_selected = new AOImage(this, ao_app);
|
ui_selected = new AOImage(this, ao_app, true);
|
||||||
ui_selected->resize(p_w, p_h);
|
ui_selected->resize(p_w, p_h);
|
||||||
// ui_selected->move(p_x, p_y);
|
// ui_selected->move(p_x, p_y);
|
||||||
ui_selected->set_image("evidence_selected");
|
ui_selected->set_image("evidence_selected");
|
||||||
ui_selected->setAttribute(Qt::WA_TransparentForMouseEvents);
|
ui_selected->setAttribute(Qt::WA_TransparentForMouseEvents);
|
||||||
ui_selected->hide();
|
ui_selected->hide();
|
||||||
|
|
||||||
ui_selector = new AOImage(this, ao_app);
|
ui_selector = new AOImage(this, ao_app, true);
|
||||||
ui_selector->resize(p_w, p_h);
|
ui_selector->resize(p_w, p_h);
|
||||||
// ui_selector->move(p_x - 1, p_y - 1);
|
// ui_selector->move(p_x - 1, p_y - 1);
|
||||||
ui_selector->set_image("evidence_selector");
|
ui_selector->set_image("evidence_selector");
|
||||||
|
@ -4,11 +4,14 @@
|
|||||||
|
|
||||||
#include <QBitmap>
|
#include <QBitmap>
|
||||||
|
|
||||||
AOImage::AOImage(QWidget *parent, AOApplication *p_ao_app) : QLabel(parent)
|
AOImage::AOImage(QWidget *parent, AOApplication *p_ao_app, bool make_static) : QLabel(parent)
|
||||||
{
|
{
|
||||||
m_parent = parent;
|
m_parent = parent;
|
||||||
ao_app = p_ao_app;
|
ao_app = p_ao_app;
|
||||||
movie = new QMovie();
|
is_static = make_static;
|
||||||
|
if (!is_static) // Only create the QMovie if we're non-static
|
||||||
|
{
|
||||||
|
movie = new QMovie(this);
|
||||||
connect(movie, &QMovie::frameChanged, [=]{
|
connect(movie, &QMovie::frameChanged, [=]{
|
||||||
QPixmap f_pixmap = movie->currentPixmap();
|
QPixmap f_pixmap = movie->currentPixmap();
|
||||||
f_pixmap =
|
f_pixmap =
|
||||||
@ -16,6 +19,7 @@ AOImage::AOImage(QWidget *parent, AOApplication *p_ao_app) : QLabel(parent)
|
|||||||
this->setPixmap(f_pixmap);
|
this->setPixmap(f_pixmap);
|
||||||
this->setMask(f_pixmap.mask());
|
this->setMask(f_pixmap.mask());
|
||||||
});
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
AOImage::~AOImage() {}
|
AOImage::~AOImage() {}
|
||||||
@ -23,19 +27,21 @@ AOImage::~AOImage() {}
|
|||||||
bool AOImage::set_image(QString p_image, QString p_misc)
|
bool AOImage::set_image(QString p_image, QString p_misc)
|
||||||
{
|
{
|
||||||
p_image = ao_app->get_image(p_image, ao_app->current_theme, ao_app->get_subtheme(),
|
p_image = ao_app->get_image(p_image, ao_app->current_theme, ao_app->get_subtheme(),
|
||||||
ao_app->default_theme, p_misc, "", "", !ao_app->get_animated_theme());
|
ao_app->default_theme, p_misc, "", "", is_static || !ao_app->get_animated_theme());
|
||||||
|
|
||||||
if (!file_exists(p_image)) {
|
if (!file_exists(p_image)) {
|
||||||
qDebug() << "Warning: Image" << p_image << "not found! Can't set!";
|
qDebug() << "Warning: Image" << p_image << "not found! Can't set!";
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
path = p_image;
|
path = p_image;
|
||||||
|
if (!is_static) {
|
||||||
movie->stop();
|
movie->stop();
|
||||||
movie->setFileName(path);
|
movie->setFileName(path);
|
||||||
if (ao_app->get_animated_theme() && movie->frameCount() > 1) {
|
if (ao_app->get_animated_theme() && movie->frameCount() > 1) {
|
||||||
movie->start();
|
movie->start();
|
||||||
}
|
}
|
||||||
else {
|
}
|
||||||
|
if (is_static || !ao_app->get_animated_theme() || movie->frameCount() <= 1) {
|
||||||
QPixmap f_pixmap(path);
|
QPixmap f_pixmap(path);
|
||||||
|
|
||||||
f_pixmap =
|
f_pixmap =
|
||||||
|
@ -98,6 +98,7 @@ void AOLayer::center_pixmap(QPixmap f_pixmap) {
|
|||||||
x + (f_w - f_pixmap.width()) / 2,
|
x + (f_w - f_pixmap.width()) / 2,
|
||||||
y + (f_h - f_pixmap.height())); // Always center horizontally, always put
|
y + (f_h - f_pixmap.height())); // Always center horizontally, always put
|
||||||
// at the bottom vertically
|
// at the bottom vertically
|
||||||
|
if (masked)
|
||||||
this->setMask(
|
this->setMask(
|
||||||
QRegion((f_pixmap.width() - f_w) / 2, (f_pixmap.height() - f_h) / 2, f_w,
|
QRegion((f_pixmap.width() - f_w) / 2, (f_pixmap.height() - f_h) / 2, f_w,
|
||||||
f_h)); // make sure we don't escape the area we've been given
|
f_h)); // make sure we don't escape the area we've been given
|
||||||
@ -145,6 +146,7 @@ void BackgroundLayer::load_image(QString p_filename)
|
|||||||
qDebug() << "[BackgroundLayer] BG loaded: " << p_filename;
|
qDebug() << "[BackgroundLayer] BG loaded: " << p_filename;
|
||||||
#endif
|
#endif
|
||||||
start_playback(ao_app->get_image_suffix(ao_app->get_background_path(p_filename)));
|
start_playback(ao_app->get_image_suffix(ao_app->get_background_path(p_filename)));
|
||||||
|
play();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CharLayer::load_image(QString p_filename, QString p_charname,
|
void CharLayer::load_image(QString p_filename, QString p_charname,
|
||||||
@ -156,7 +158,7 @@ void CharLayer::load_image(QString p_filename, QString p_charname,
|
|||||||
transform_mode = ao_app->get_scaling(
|
transform_mode = ao_app->get_scaling(
|
||||||
ao_app->get_emote_property(p_charname, p_filename, "scaling"));
|
ao_app->get_emote_property(p_charname, p_filename, "scaling"));
|
||||||
stretch = ao_app->get_emote_property(p_charname, p_filename, "stretch")
|
stretch = ao_app->get_emote_property(p_charname, p_filename, "stretch")
|
||||||
.startsWith(true);
|
.startsWith("true");
|
||||||
if ((p_charname == last_char) &&
|
if ((p_charname == last_char) &&
|
||||||
((p_filename == last_emote) ||
|
((p_filename == last_emote) ||
|
||||||
(p_filename.mid(3, -1) == last_emote.mid(3, -1))) &&
|
(p_filename.mid(3, -1) == last_emote.mid(3, -1))) &&
|
||||||
@ -188,28 +190,29 @@ void CharLayer::load_image(QString p_filename, QString p_charname,
|
|||||||
}
|
}
|
||||||
is_preanim = true;
|
is_preanim = true;
|
||||||
play_once = true;
|
play_once = true;
|
||||||
preanim_timer->start(duration * tick_ms);
|
preanim_timer->start(duration);
|
||||||
}
|
}
|
||||||
#ifdef DEBUG_MOVIE
|
#ifdef DEBUG_MOVIE
|
||||||
qDebug() << "[CharLayer] anim loaded: prefix " << prefix << " filename "
|
qDebug() << "[CharLayer] anim loaded: prefix " << prefix << " filename "
|
||||||
<< current_emote << " from character: " << p_charname
|
<< current_emote << " from character: " << p_charname
|
||||||
<< " continuous: " << continuous;
|
<< " continuous: " << continuous;
|
||||||
#endif
|
#endif
|
||||||
QStringList pathlist = {
|
QVector<VPath> pathlist {
|
||||||
ao_app->get_image_suffix(ao_app->get_character_path(
|
ao_app->get_character_path(
|
||||||
p_charname, prefix + current_emote)), // Default path
|
p_charname, prefix + current_emote), // Default path
|
||||||
ao_app->get_image_suffix(ao_app->get_character_path(
|
ao_app->get_character_path(
|
||||||
p_charname,
|
p_charname,
|
||||||
prefix + "/" + current_emote)), // Path check if it's categorized
|
prefix + "/" + current_emote), // Path check if it's categorized
|
||||||
// into a folder
|
// into a folder
|
||||||
ao_app->get_image_suffix(ao_app->get_character_path(
|
ao_app->get_character_path(
|
||||||
p_charname,
|
p_charname,
|
||||||
current_emote)), // Just use the non-prefixed image, animated or not
|
current_emote), // Just use the non-prefixed image, animated or not
|
||||||
ao_app->get_image_suffix(
|
VPath(current_emote), // The path by itself after the above fail
|
||||||
ao_app->get_theme_path("placeholder")), // Theme placeholder path
|
ao_app->get_theme_path("placeholder"), // Theme placeholder path
|
||||||
ao_app->get_image_suffix(ao_app->get_theme_path(
|
ao_app->get_theme_path(
|
||||||
"placeholder", ao_app->default_theme))}; // Default theme placeholder path
|
"placeholder", ao_app->default_theme)}; // Default theme placeholder path
|
||||||
start_playback(find_image(pathlist));
|
start_playback(ao_app->get_image_path(pathlist));
|
||||||
|
play();
|
||||||
}
|
}
|
||||||
|
|
||||||
void SplashLayer::load_image(QString p_filename, QString p_charname,
|
void SplashLayer::load_image(QString p_filename, QString p_charname,
|
||||||
@ -218,6 +221,7 @@ void SplashLayer::load_image(QString p_filename, QString p_charname,
|
|||||||
transform_mode = ao_app->get_misc_scaling(p_miscname);
|
transform_mode = ao_app->get_misc_scaling(p_miscname);
|
||||||
QString final_image = ao_app->get_image(p_filename, ao_app->current_theme, ao_app->get_subtheme(), ao_app->default_theme, p_miscname, p_charname, "placeholder");
|
QString final_image = ao_app->get_image(p_filename, ao_app->current_theme, ao_app->get_subtheme(), ao_app->default_theme, p_miscname, p_charname, "placeholder");
|
||||||
start_playback(final_image);
|
start_playback(final_image);
|
||||||
|
play();
|
||||||
}
|
}
|
||||||
|
|
||||||
void EffectLayer::load_image(QString p_filename, bool p_looping)
|
void EffectLayer::load_image(QString p_filename, bool p_looping)
|
||||||
@ -229,13 +233,16 @@ void EffectLayer::load_image(QString p_filename, bool p_looping)
|
|||||||
continuous = false;
|
continuous = false;
|
||||||
force_continuous = true;
|
force_continuous = true;
|
||||||
start_playback(p_filename); // handled in its own file before we see it
|
start_playback(p_filename); // handled in its own file before we see it
|
||||||
|
play();
|
||||||
}
|
}
|
||||||
|
|
||||||
void InterfaceLayer::load_image(QString p_filename, QString p_miscname)
|
void InterfaceLayer::load_image(QString p_filename, QString p_miscname)
|
||||||
{
|
{
|
||||||
|
last_path = "";
|
||||||
stretch = true;
|
stretch = true;
|
||||||
QString final_image = ao_app->get_image(p_filename, ao_app->current_theme, ao_app->get_subtheme(), ao_app->default_theme, p_miscname);
|
QString final_image = ao_app->get_image(p_filename, ao_app->current_theme, ao_app->get_subtheme(), ao_app->default_theme, p_miscname);
|
||||||
start_playback(final_image);
|
start_playback(final_image);
|
||||||
|
play();
|
||||||
}
|
}
|
||||||
|
|
||||||
void StickerLayer::load_image(QString p_charname)
|
void StickerLayer::load_image(QString p_charname)
|
||||||
@ -246,6 +253,7 @@ void StickerLayer::load_image(QString p_charname)
|
|||||||
transform_mode = ao_app->get_misc_scaling(p_miscname);
|
transform_mode = ao_app->get_misc_scaling(p_miscname);
|
||||||
QString final_image = ao_app->get_image("sticker/" + p_charname, ao_app->current_theme, ao_app->get_subtheme(), ao_app->default_theme, p_miscname);
|
QString final_image = ao_app->get_image("sticker/" + p_charname, ao_app->current_theme, ao_app->get_subtheme(), ao_app->default_theme, p_miscname);
|
||||||
start_playback(final_image);
|
start_playback(final_image);
|
||||||
|
play();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CharLayer::start_playback(QString p_image)
|
void CharLayer::start_playback(QString p_image)
|
||||||
@ -256,6 +264,7 @@ void CharLayer::start_playback(QString p_image)
|
|||||||
load_network_effects();
|
load_network_effects();
|
||||||
else // Use default ini FX
|
else // Use default ini FX
|
||||||
load_effects();
|
load_effects();
|
||||||
|
play();
|
||||||
}
|
}
|
||||||
|
|
||||||
void AOLayer::start_playback(QString p_image)
|
void AOLayer::start_playback(QString p_image)
|
||||||
@ -274,7 +283,7 @@ void AOLayer::start_playback(QString p_image)
|
|||||||
actual_time.restart();
|
actual_time.restart();
|
||||||
#endif
|
#endif
|
||||||
this->clear();
|
this->clear();
|
||||||
freeze();
|
this->freeze();
|
||||||
movie_frames.clear();
|
movie_frames.clear();
|
||||||
movie_delays.clear();
|
movie_delays.clear();
|
||||||
QString scaling_override =
|
QString scaling_override =
|
||||||
@ -328,14 +337,12 @@ void AOLayer::start_playback(QString p_image)
|
|||||||
}
|
}
|
||||||
else if (max_frames <= 1) {
|
else if (max_frames <= 1) {
|
||||||
duration = static_duration;
|
duration = static_duration;
|
||||||
play_once = false;
|
|
||||||
#ifdef DEBUG_MOVIE
|
#ifdef DEBUG_MOVIE
|
||||||
qDebug() << "max_frames is <= 1, using static duration";
|
qDebug() << "max_frames is <= 1, using static duration";
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
if (duration > 0 && cull_image == true)
|
if (duration > 0 && cull_image == true)
|
||||||
shfx_timer->start(duration);
|
shfx_timer->start(duration);
|
||||||
play();
|
|
||||||
#ifdef DEBUG_MOVIE
|
#ifdef DEBUG_MOVIE
|
||||||
qDebug() << max_frames << "Setting image to " << image_path
|
qDebug() << max_frames << "Setting image to " << image_path
|
||||||
<< "Time taken to process image:" << actual_time.elapsed();
|
<< "Time taken to process image:" << actual_time.elapsed();
|
||||||
@ -346,6 +353,12 @@ void AOLayer::start_playback(QString p_image)
|
|||||||
|
|
||||||
void CharLayer::play()
|
void CharLayer::play()
|
||||||
{
|
{
|
||||||
|
if (max_frames <= 1) {
|
||||||
|
if (play_once) {
|
||||||
|
preanim_timer->start(qMax(0, duration));
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
play_frame_effect(frame);
|
play_frame_effect(frame);
|
||||||
AOLayer::play();
|
AOLayer::play();
|
||||||
}
|
}
|
||||||
@ -353,8 +366,12 @@ void CharLayer::play()
|
|||||||
void AOLayer::play()
|
void AOLayer::play()
|
||||||
{
|
{
|
||||||
if (max_frames <= 1) {
|
if (max_frames <= 1) {
|
||||||
if (play_once)
|
if (play_once) {
|
||||||
ticker->start(tick_ms);
|
if (duration > 0)
|
||||||
|
ticker->start(duration);
|
||||||
|
else
|
||||||
|
preanim_done();
|
||||||
|
}
|
||||||
else
|
else
|
||||||
this->freeze();
|
this->freeze();
|
||||||
}
|
}
|
||||||
|
@ -13,12 +13,12 @@ AOMusicPlayer::~AOMusicPlayer()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void AOMusicPlayer::play(QString p_song, int channel, bool loop,
|
int AOMusicPlayer::play(QString p_song, int channel, bool loop,
|
||||||
int effect_flags)
|
int effect_flags)
|
||||||
{
|
{
|
||||||
channel = channel % m_channelmax;
|
channel = channel % m_channelmax;
|
||||||
if (channel < 0) // wtf?
|
if (channel < 0) // wtf?
|
||||||
return;
|
return BASS_ERROR_NOCHAN;
|
||||||
QString f_path = ao_app->get_real_path(ao_app->get_music_path(p_song));
|
QString f_path = ao_app->get_real_path(ao_app->get_music_path(p_song));
|
||||||
|
|
||||||
unsigned int flags = BASS_STREAM_PRESCAN | BASS_STREAM_AUTOFREE |
|
unsigned int flags = BASS_STREAM_PRESCAN | BASS_STREAM_AUTOFREE |
|
||||||
@ -125,6 +125,7 @@ void AOMusicPlayer::play(QString p_song, int channel, bool loop,
|
|||||||
|
|
||||||
this->set_looping(loop, channel); // Have to do this here due to any
|
this->set_looping(loop, channel); // Have to do this here due to any
|
||||||
// crossfading-related changes, etc.
|
// crossfading-related changes, etc.
|
||||||
|
return BASS_ErrorGetCode();
|
||||||
}
|
}
|
||||||
|
|
||||||
void AOMusicPlayer::stop(int channel)
|
void AOMusicPlayer::stop(int channel)
|
||||||
|
@ -334,6 +334,20 @@ AOOptionsDialog::AOOptionsDialog(QWidget *parent, AOApplication *p_ao_app)
|
|||||||
|
|
||||||
ui_gameplay_form->setWidget(row, QFormLayout::FieldRole, ui_showname_cb);
|
ui_gameplay_form->setWidget(row, QFormLayout::FieldRole, ui_showname_cb);
|
||||||
|
|
||||||
|
row +=1;
|
||||||
|
ui_default_showname_lbl = new QLabel(ui_form_layout_widget);
|
||||||
|
ui_default_showname_lbl->setText(tr("Default showname:"));
|
||||||
|
ui_default_showname_lbl->setToolTip(
|
||||||
|
tr("Your showname will be automatically set to this value "
|
||||||
|
"when you join a server."));
|
||||||
|
|
||||||
|
ui_gameplay_form->setWidget(row, QFormLayout::LabelRole, ui_default_showname_lbl);
|
||||||
|
|
||||||
|
ui_default_showname_textbox = new QLineEdit(ui_form_layout_widget);
|
||||||
|
ui_default_showname_textbox->setMaxLength(30);
|
||||||
|
|
||||||
|
ui_gameplay_form->setWidget(row, QFormLayout::FieldRole, ui_default_showname_textbox);
|
||||||
|
|
||||||
row += 1;
|
row += 1;
|
||||||
ui_net_divider = new QFrame(ui_form_layout_widget);
|
ui_net_divider = new QFrame(ui_form_layout_widget);
|
||||||
ui_net_divider->setFrameShape(QFrame::HLine);
|
ui_net_divider->setFrameShape(QFrame::HLine);
|
||||||
@ -390,6 +404,20 @@ AOOptionsDialog::AOOptionsDialog(QWidget *parent, AOApplication *p_ao_app)
|
|||||||
ui_gameplay_form->setWidget(row, QFormLayout::FieldRole,
|
ui_gameplay_form->setWidget(row, QFormLayout::FieldRole,
|
||||||
ui_language_combobox);
|
ui_language_combobox);
|
||||||
|
|
||||||
|
row += 1;
|
||||||
|
ui_scaling_label = new QLabel(ui_form_layout_widget);
|
||||||
|
ui_scaling_label->setText(tr("Scaling:"));
|
||||||
|
ui_scaling_label->setToolTip(
|
||||||
|
tr("Sets the default scaling method, if there is not one already defined "
|
||||||
|
"specifically for the character."));
|
||||||
|
ui_gameplay_form->setWidget(row, QFormLayout::LabelRole, ui_scaling_label);
|
||||||
|
|
||||||
|
ui_scaling_combobox = new QComboBox(ui_form_layout_widget);
|
||||||
|
// Corresponds with Qt::TransformationMode enum. Please don't change the order.
|
||||||
|
ui_scaling_combobox->addItem(tr("Pixel"), "fast");
|
||||||
|
ui_scaling_combobox->addItem(tr("Smooth"), "smooth");
|
||||||
|
ui_gameplay_form->setWidget(row, QFormLayout::FieldRole, ui_scaling_combobox);
|
||||||
|
|
||||||
row += 1;
|
row += 1;
|
||||||
ui_shake_lbl = new QLabel(ui_form_layout_widget);
|
ui_shake_lbl = new QLabel(ui_form_layout_widget);
|
||||||
ui_shake_lbl->setText(tr("Allow Screenshake:"));
|
ui_shake_lbl->setText(tr("Allow Screenshake:"));
|
||||||
@ -1029,6 +1057,9 @@ void AOOptionsDialog::update_values() {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Qt::TransformationMode scaling = ao_app->get_scaling(ao_app->get_default_scaling());
|
||||||
|
ui_scaling_combobox->setCurrentIndex(scaling);
|
||||||
|
|
||||||
// Let's fill the callwords text edit with the already present callwords.
|
// Let's fill the callwords text edit with the already present callwords.
|
||||||
ui_callwords_textbox->document()->clear();
|
ui_callwords_textbox->document()->clear();
|
||||||
foreach (QString callword, ao_app->get_call_words()) {
|
foreach (QString callword, ao_app->get_call_words()) {
|
||||||
@ -1042,7 +1073,7 @@ void AOOptionsDialog::update_values() {
|
|||||||
ui_log_newline_cb->setChecked(ao_app->get_log_newline());
|
ui_log_newline_cb->setChecked(ao_app->get_log_newline());
|
||||||
ui_log_timestamp_cb->setChecked(ao_app->get_log_timestamp());
|
ui_log_timestamp_cb->setChecked(ao_app->get_log_timestamp());
|
||||||
ui_log_ic_actions_cb->setChecked(ao_app->get_log_ic_actions());
|
ui_log_ic_actions_cb->setChecked(ao_app->get_log_ic_actions());
|
||||||
ui_desync_logs_cb->setChecked(ao_app->get_log_timestamp());
|
ui_desync_logs_cb->setChecked(ao_app->is_desyncrhonized_logs_enabled());
|
||||||
ui_instant_objection_cb->setChecked(ao_app->is_instant_objection_enabled());
|
ui_instant_objection_cb->setChecked(ao_app->is_instant_objection_enabled());
|
||||||
ui_showname_cb->setChecked(ao_app->get_showname_enabled_by_default());
|
ui_showname_cb->setChecked(ao_app->get_showname_enabled_by_default());
|
||||||
ui_discord_cb->setChecked(ao_app->is_discord_enabled());
|
ui_discord_cb->setChecked(ao_app->is_discord_enabled());
|
||||||
@ -1077,6 +1108,7 @@ void AOOptionsDialog::update_values() {
|
|||||||
ui_sfx_volume_spinbox->setValue(ao_app->get_default_sfx());
|
ui_sfx_volume_spinbox->setValue(ao_app->get_default_sfx());
|
||||||
ui_blips_volume_spinbox->setValue(ao_app->get_default_blip());
|
ui_blips_volume_spinbox->setValue(ao_app->get_default_blip());
|
||||||
ui_bliprate_spinbox->setValue(ao_app->read_blip_rate());
|
ui_bliprate_spinbox->setValue(ao_app->read_blip_rate());
|
||||||
|
ui_default_showname_textbox->setText(ao_app->get_default_showname());
|
||||||
|
|
||||||
auto *defaultMount = new QListWidgetItem(tr("%1 (default)")
|
auto *defaultMount = new QListWidgetItem(tr("%1 (default)")
|
||||||
.arg(ao_app->get_base_path()));
|
.arg(ao_app->get_base_path()));
|
||||||
@ -1109,9 +1141,11 @@ void AOOptionsDialog::save_pressed()
|
|||||||
configini->setValue("chat_ratelimit", ui_chat_ratelimit_spinbox->value());
|
configini->setValue("chat_ratelimit", ui_chat_ratelimit_spinbox->value());
|
||||||
configini->setValue("default_username", ui_username_textbox->text());
|
configini->setValue("default_username", ui_username_textbox->text());
|
||||||
configini->setValue("show_custom_shownames", ui_showname_cb->isChecked());
|
configini->setValue("show_custom_shownames", ui_showname_cb->isChecked());
|
||||||
|
configini->setValue("default_showname", ui_default_showname_textbox->text());
|
||||||
configini->setValue("master", ui_ms_textbox->text());
|
configini->setValue("master", ui_ms_textbox->text());
|
||||||
configini->setValue("discord", ui_discord_cb->isChecked());
|
configini->setValue("discord", ui_discord_cb->isChecked());
|
||||||
configini->setValue("language", ui_language_combobox->currentText().left(2));
|
configini->setValue("language", ui_language_combobox->currentText().left(2));
|
||||||
|
configini->setValue("default_scaling", ui_scaling_combobox->currentData());
|
||||||
configini->setValue("shake", ui_shake_cb->isChecked());
|
configini->setValue("shake", ui_shake_cb->isChecked());
|
||||||
configini->setValue("effects", ui_effects_cb->isChecked());
|
configini->setValue("effects", ui_effects_cb->isChecked());
|
||||||
configini->setValue("framenetwork", ui_framenetwork_cb->isChecked());
|
configini->setValue("framenetwork", ui_framenetwork_cb->isChecked());
|
||||||
|
@ -10,6 +10,7 @@ void Courtroom::construct_char_select()
|
|||||||
this->setWindowFlags( (this->windowFlags() | Qt::CustomizeWindowHint) & ~Qt::WindowMaximizeButtonHint);
|
this->setWindowFlags( (this->windowFlags() | Qt::CustomizeWindowHint) & ~Qt::WindowMaximizeButtonHint);
|
||||||
|
|
||||||
ui_char_select_background = new AOImage(this, ao_app);
|
ui_char_select_background = new AOImage(this, ao_app);
|
||||||
|
ui_char_select_background->setObjectName("ui_char_select_background");
|
||||||
|
|
||||||
ui_char_list = new QTreeWidget(ui_char_select_background);
|
ui_char_list = new QTreeWidget(ui_char_select_background);
|
||||||
ui_char_list->setColumnCount(2);
|
ui_char_list->setColumnCount(2);
|
||||||
@ -18,32 +19,38 @@ void Courtroom::construct_char_select()
|
|||||||
ui_char_list->header()->setSectionResizeMode(QHeaderView::ResizeToContents);
|
ui_char_list->header()->setSectionResizeMode(QHeaderView::ResizeToContents);
|
||||||
ui_char_list->hideColumn(1);
|
ui_char_list->hideColumn(1);
|
||||||
ui_char_list->setDropIndicatorShown(true);
|
ui_char_list->setDropIndicatorShown(true);
|
||||||
|
ui_char_list->setObjectName("ui_char_list");
|
||||||
|
|
||||||
ui_char_buttons = new QWidget(ui_char_select_background);
|
ui_char_buttons = new QWidget(ui_char_select_background);
|
||||||
|
ui_char_buttons->setObjectName("ui_char_buttons");
|
||||||
ui_selector = new AOImage(ui_char_select_background, ao_app);
|
|
||||||
ui_selector->setAttribute(Qt::WA_TransparentForMouseEvents);
|
|
||||||
ui_selector->resize(62, 62);
|
|
||||||
|
|
||||||
ui_back_to_lobby = new AOButton(ui_char_select_background, ao_app);
|
ui_back_to_lobby = new AOButton(ui_char_select_background, ao_app);
|
||||||
|
ui_back_to_lobby->setObjectName("ui_back_to_lobby");
|
||||||
|
|
||||||
ui_char_password = new QLineEdit(ui_char_select_background);
|
ui_char_password = new QLineEdit(ui_char_select_background);
|
||||||
ui_char_password->setPlaceholderText(tr("Password"));
|
ui_char_password->setPlaceholderText(tr("Password"));
|
||||||
|
ui_char_password->setObjectName("ui_char_password");
|
||||||
|
|
||||||
ui_char_select_left = new AOButton(ui_char_select_background, ao_app);
|
ui_char_select_left = new AOButton(ui_char_select_background, ao_app);
|
||||||
|
ui_char_select_left->setObjectName("ui_char_select_left");
|
||||||
ui_char_select_right = new AOButton(ui_char_select_background, ao_app);
|
ui_char_select_right = new AOButton(ui_char_select_background, ao_app);
|
||||||
|
ui_char_select_right->setObjectName("ui_char_select_right");
|
||||||
|
|
||||||
ui_spectator = new AOButton(ui_char_select_background, ao_app);
|
ui_spectator = new AOButton(ui_char_select_background, ao_app);
|
||||||
ui_spectator->setText(tr("Spectator"));
|
ui_spectator->setText(tr("Spectator"));
|
||||||
|
ui_spectator->setObjectName("ui_spectator");
|
||||||
|
|
||||||
ui_char_search = new QLineEdit(ui_char_select_background);
|
ui_char_search = new QLineEdit(ui_char_select_background);
|
||||||
ui_char_search->setPlaceholderText(tr("Search"));
|
ui_char_search->setPlaceholderText(tr("Search"));
|
||||||
|
ui_char_search->setObjectName("ui_char_search");
|
||||||
|
|
||||||
ui_char_passworded = new QCheckBox(ui_char_select_background);
|
ui_char_passworded = new QCheckBox(ui_char_select_background);
|
||||||
ui_char_passworded->setText(tr("Passworded"));
|
ui_char_passworded->setText(tr("Passworded"));
|
||||||
|
ui_char_passworded->setObjectName("ui_char_passworded");
|
||||||
|
|
||||||
ui_char_taken = new QCheckBox(ui_char_select_background);
|
ui_char_taken = new QCheckBox(ui_char_select_background);
|
||||||
ui_char_taken->setText(tr("Taken"));
|
ui_char_taken->setText(tr("Taken"));
|
||||||
|
ui_char_taken->setObjectName("ui_char_taken");
|
||||||
|
|
||||||
connect(ui_char_list, SIGNAL(itemDoubleClicked(QTreeWidgetItem *, int)),
|
connect(ui_char_list, SIGNAL(itemDoubleClicked(QTreeWidgetItem *, int)),
|
||||||
this, SLOT(on_char_list_double_clicked(QTreeWidgetItem *, int)));
|
this, SLOT(on_char_list_double_clicked(QTreeWidgetItem *, int)));
|
||||||
@ -168,14 +175,14 @@ void Courtroom::char_clicked(int n_char)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (n_char != m_cid) {
|
if (n_char != m_cid || n_char == -1) {
|
||||||
ao_app->send_server_packet(
|
ao_app->send_server_packet(
|
||||||
new AOPacket("PW#" + ui_char_password->text() + "#%"));
|
new AOPacket("PW#" + ui_char_password->text() + "#%"));
|
||||||
ao_app->send_server_packet(
|
ao_app->send_server_packet(
|
||||||
new AOPacket("CC#" + QString::number(ao_app->s_pv) + "#" +
|
new AOPacket("CC#" + QString::number(ao_app->s_pv) + "#" +
|
||||||
QString::number(n_char) + "#" + get_hdid() + "#%"));
|
QString::number(n_char) + "#" + get_hdid() + "#%"));
|
||||||
}
|
}
|
||||||
else {
|
if (n_char == m_cid || n_char == -1) {
|
||||||
update_character(n_char);
|
update_character(n_char);
|
||||||
enter_courtroom();
|
enter_courtroom();
|
||||||
set_courtroom_size();
|
set_courtroom_size();
|
||||||
|
@ -41,48 +41,67 @@ Courtroom::Courtroom(AOApplication *p_ao_app) : QMainWindow()
|
|||||||
modcall_player->set_volume(50);
|
modcall_player->set_volume(50);
|
||||||
|
|
||||||
ui_background = new AOImage(this, ao_app);
|
ui_background = new AOImage(this, ao_app);
|
||||||
|
ui_background->setObjectName("ui_background");
|
||||||
|
|
||||||
ui_viewport = new QWidget(this);
|
ui_viewport = new QWidget(this);
|
||||||
|
ui_viewport->setObjectName("ui_viewport");
|
||||||
ui_vp_background = new BackgroundLayer(ui_viewport, ao_app);
|
ui_vp_background = new BackgroundLayer(ui_viewport, ao_app);
|
||||||
|
ui_vp_background->setObjectName("ui_vp_background");
|
||||||
ui_vp_speedlines = new SplashLayer(ui_viewport, ao_app);
|
ui_vp_speedlines = new SplashLayer(ui_viewport, ao_app);
|
||||||
|
ui_vp_speedlines->setObjectName("ui_vp_speedlines");
|
||||||
ui_vp_player_char = new CharLayer(ui_viewport, ao_app);
|
ui_vp_player_char = new CharLayer(ui_viewport, ao_app);
|
||||||
|
ui_vp_player_char->setObjectName("ui_vp_player_char");
|
||||||
|
ui_vp_player_char->masked = false;
|
||||||
ui_vp_sideplayer_char = new CharLayer(ui_viewport, ao_app);
|
ui_vp_sideplayer_char = new CharLayer(ui_viewport, ao_app);
|
||||||
|
ui_vp_sideplayer_char->setObjectName("ui_vp_sideplayer_char");
|
||||||
|
ui_vp_sideplayer_char->masked = false;
|
||||||
ui_vp_sideplayer_char->hide();
|
ui_vp_sideplayer_char->hide();
|
||||||
ui_vp_desk = new BackgroundLayer(ui_viewport, ao_app);
|
ui_vp_desk = new BackgroundLayer(ui_viewport, ao_app);
|
||||||
|
ui_vp_desk->setObjectName("ui_vp_desk");
|
||||||
|
|
||||||
ui_vp_effect = new EffectLayer(this, ao_app);
|
ui_vp_effect = new EffectLayer(this, ao_app);
|
||||||
ui_vp_effect->setAttribute(Qt::WA_TransparentForMouseEvents);
|
ui_vp_effect->setAttribute(Qt::WA_TransparentForMouseEvents);
|
||||||
|
ui_vp_effect->setObjectName("ui_vp_effect");
|
||||||
|
|
||||||
ui_vp_evidence_display = new AOEvidenceDisplay(ui_viewport, ao_app);
|
ui_vp_evidence_display = new AOEvidenceDisplay(ui_viewport, ao_app);
|
||||||
|
ui_vp_evidence_display->setObjectName("ui_vp_evidence_display");
|
||||||
|
|
||||||
ui_vp_chatbox = new AOImage(this, ao_app);
|
ui_vp_chatbox = new AOImage(this, ao_app);
|
||||||
|
ui_vp_chatbox->setObjectName("ui_vp_chatbox");
|
||||||
ui_vp_showname = new QLabel(ui_vp_chatbox);
|
ui_vp_showname = new QLabel(ui_vp_chatbox);
|
||||||
|
ui_vp_showname->setObjectName("ui_vp_showname");
|
||||||
ui_vp_showname->setAlignment(Qt::AlignLeft);
|
ui_vp_showname->setAlignment(Qt::AlignLeft);
|
||||||
ui_vp_chat_arrow = new InterfaceLayer(this, ao_app);
|
ui_vp_chat_arrow = new InterfaceLayer(this, ao_app);
|
||||||
ui_vp_chat_arrow->set_play_once(false);
|
ui_vp_chat_arrow->set_play_once(false);
|
||||||
|
ui_vp_chat_arrow->setObjectName("ui_vp_chat_arrow");
|
||||||
|
|
||||||
ui_vp_message = new QTextEdit(this);
|
ui_vp_message = new QTextEdit(this);
|
||||||
ui_vp_message->setFrameStyle(QFrame::NoFrame);
|
ui_vp_message->setFrameStyle(QFrame::NoFrame);
|
||||||
ui_vp_message->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
ui_vp_message->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
||||||
ui_vp_message->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
ui_vp_message->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
||||||
ui_vp_message->setReadOnly(true);
|
ui_vp_message->setReadOnly(true);
|
||||||
|
ui_vp_message->setObjectName("ui_vp_message");
|
||||||
|
|
||||||
ui_vp_testimony = new SplashLayer(this, ao_app);
|
ui_vp_testimony = new SplashLayer(this, ao_app);
|
||||||
ui_vp_testimony->set_play_once(false);
|
ui_vp_testimony->set_play_once(false);
|
||||||
ui_vp_testimony->setAttribute(Qt::WA_TransparentForMouseEvents);
|
ui_vp_testimony->setAttribute(Qt::WA_TransparentForMouseEvents);
|
||||||
|
ui_vp_testimony->setObjectName("ui_vp_testimony");
|
||||||
ui_vp_wtce = new SplashLayer(this, ao_app);
|
ui_vp_wtce = new SplashLayer(this, ao_app);
|
||||||
ui_vp_wtce->set_play_once(true);
|
ui_vp_wtce->set_play_once(true);
|
||||||
ui_vp_wtce->continuous = false;
|
ui_vp_wtce->continuous = false;
|
||||||
ui_vp_wtce->force_continuous = true;
|
ui_vp_wtce->force_continuous = true;
|
||||||
ui_vp_wtce->setAttribute(Qt::WA_TransparentForMouseEvents);
|
ui_vp_wtce->setAttribute(Qt::WA_TransparentForMouseEvents);
|
||||||
|
ui_vp_wtce->setObjectName("ui_vp_wtce");
|
||||||
ui_vp_objection = new SplashLayer(this, ao_app);
|
ui_vp_objection = new SplashLayer(this, ao_app);
|
||||||
ui_vp_objection->set_play_once(true);
|
ui_vp_objection->set_play_once(true);
|
||||||
ui_vp_objection->continuous = false;
|
ui_vp_objection->continuous = false;
|
||||||
ui_vp_objection->force_continuous = true;
|
ui_vp_objection->force_continuous = true;
|
||||||
ui_vp_objection->setAttribute(Qt::WA_TransparentForMouseEvents);
|
ui_vp_objection->setAttribute(Qt::WA_TransparentForMouseEvents);
|
||||||
|
ui_vp_objection->setObjectName("ui_vp_objection");
|
||||||
|
|
||||||
ui_ic_chatlog = new QTextEdit(this);
|
ui_ic_chatlog = new QTextEdit(this);
|
||||||
ui_ic_chatlog->setReadOnly(true);
|
ui_ic_chatlog->setReadOnly(true);
|
||||||
|
ui_ic_chatlog->setObjectName("ui_ic_chatlog");
|
||||||
|
|
||||||
log_maximum_blocks = ao_app->get_max_log_size();
|
log_maximum_blocks = ao_app->get_max_log_size();
|
||||||
log_goes_downwards = ao_app->get_log_goes_downwards();
|
log_goes_downwards = ao_app->get_log_goes_downwards();
|
||||||
@ -95,10 +114,12 @@ Courtroom::Courtroom(AOApplication *p_ao_app) : QMainWindow()
|
|||||||
ui_ms_chatlog->setReadOnly(true);
|
ui_ms_chatlog->setReadOnly(true);
|
||||||
ui_ms_chatlog->setOpenExternalLinks(true);
|
ui_ms_chatlog->setOpenExternalLinks(true);
|
||||||
ui_ms_chatlog->hide();
|
ui_ms_chatlog->hide();
|
||||||
|
ui_ms_chatlog->setObjectName("ui_ms_chatlog");
|
||||||
|
|
||||||
ui_server_chatlog = new AOTextArea(this);
|
ui_server_chatlog = new AOTextArea(this);
|
||||||
ui_server_chatlog->setReadOnly(true);
|
ui_server_chatlog->setReadOnly(true);
|
||||||
ui_server_chatlog->setOpenExternalLinks(true);
|
ui_server_chatlog->setOpenExternalLinks(true);
|
||||||
|
ui_server_chatlog->setObjectName("ui_server_chatlog");
|
||||||
|
|
||||||
ui_area_list = new QTreeWidget(this);
|
ui_area_list = new QTreeWidget(this);
|
||||||
ui_area_list->setColumnCount(2);
|
ui_area_list->setColumnCount(2);
|
||||||
@ -107,6 +128,7 @@ Courtroom::Courtroom(AOApplication *p_ao_app) : QMainWindow()
|
|||||||
ui_area_list->header()->setStretchLastSection(false);
|
ui_area_list->header()->setStretchLastSection(false);
|
||||||
ui_area_list->header()->setSectionResizeMode(QHeaderView::ResizeToContents);
|
ui_area_list->header()->setSectionResizeMode(QHeaderView::ResizeToContents);
|
||||||
ui_area_list->hide();
|
ui_area_list->hide();
|
||||||
|
ui_area_list->setObjectName("ui_area_list");
|
||||||
|
|
||||||
ui_music_list = new QTreeWidget(this);
|
ui_music_list = new QTreeWidget(this);
|
||||||
ui_music_list->setColumnCount(2);
|
ui_music_list->setColumnCount(2);
|
||||||
@ -116,170 +138,259 @@ Courtroom::Courtroom(AOApplication *p_ao_app) : QMainWindow()
|
|||||||
ui_music_list->header()->setSectionResizeMode(QHeaderView::ResizeToContents);
|
ui_music_list->header()->setSectionResizeMode(QHeaderView::ResizeToContents);
|
||||||
ui_music_list->setContextMenuPolicy(Qt::CustomContextMenu);
|
ui_music_list->setContextMenuPolicy(Qt::CustomContextMenu);
|
||||||
ui_music_list->setUniformRowHeights(true);
|
ui_music_list->setUniformRowHeights(true);
|
||||||
|
ui_music_list->setObjectName("ui_music_list");
|
||||||
|
|
||||||
ui_music_display = new InterfaceLayer(this, ao_app);
|
ui_music_display = new InterfaceLayer(this, ao_app);
|
||||||
ui_music_display->set_play_once(false);
|
ui_music_display->set_play_once(false);
|
||||||
ui_music_display->transform_mode = Qt::SmoothTransformation;
|
ui_music_display->transform_mode = Qt::SmoothTransformation;
|
||||||
ui_music_display->setAttribute(Qt::WA_TransparentForMouseEvents);
|
ui_music_display->setAttribute(Qt::WA_TransparentForMouseEvents);
|
||||||
|
ui_music_display->setObjectName("ui_music_display");
|
||||||
|
|
||||||
ui_music_name = new ScrollText(ui_music_display);
|
ui_music_name = new ScrollText(ui_music_display);
|
||||||
ui_music_name->setText(tr("None"));
|
ui_music_name->setText(tr("None"));
|
||||||
ui_music_name->setAttribute(Qt::WA_TransparentForMouseEvents);
|
ui_music_name->setAttribute(Qt::WA_TransparentForMouseEvents);
|
||||||
|
ui_music_name->setObjectName("ui_music_name");
|
||||||
|
|
||||||
for (int i = 0; i < max_clocks; i++) {
|
for (int i = 0; i < max_clocks; i++) {
|
||||||
ui_clock[i] = new AOClockLabel(this);
|
ui_clock[i] = new AOClockLabel(this);
|
||||||
ui_clock[i]->setAttribute(Qt::WA_TransparentForMouseEvents);
|
ui_clock[i]->setAttribute(Qt::WA_TransparentForMouseEvents);
|
||||||
ui_clock[i]->hide();
|
ui_clock[i]->hide();
|
||||||
|
ui_clock[i]->setObjectName("ui_clock" + QString::number(i));
|
||||||
}
|
}
|
||||||
|
|
||||||
ui_ic_chat_name = new QLineEdit(this);
|
ui_ic_chat_name = new QLineEdit(this);
|
||||||
ui_ic_chat_name->setFrame(false);
|
ui_ic_chat_name->setFrame(false);
|
||||||
ui_ic_chat_name->setPlaceholderText(tr("Showname"));
|
ui_ic_chat_name->setPlaceholderText(tr("Showname"));
|
||||||
|
ui_ic_chat_name->setText(p_ao_app->get_default_showname());
|
||||||
|
ui_ic_chat_name->setObjectName("ui_ic_chat_name");
|
||||||
|
|
||||||
ui_ic_chat_message = new AOLineEdit(this);
|
ui_ic_chat_message = new AOLineEdit(this);
|
||||||
ui_ic_chat_message->setFrame(false);
|
ui_ic_chat_message->setFrame(false);
|
||||||
ui_ic_chat_message->setPlaceholderText(tr("Message"));
|
ui_ic_chat_message->setPlaceholderText(tr("Message"));
|
||||||
ui_ic_chat_message->preserve_selection(true);
|
ui_ic_chat_message->preserve_selection(true);
|
||||||
// ui_ic_chat_message->setValidator(new QRegExpValidator(QRegExp("^\\S+(?:
|
ui_ic_chat_message->setObjectName("ui_ic_chat_message");
|
||||||
// \\S+)*$"), ui_ic_chat_message));
|
|
||||||
// todo: filter out \n from showing up as that commonly breaks the chatlog and
|
|
||||||
// can be spammed to hell
|
|
||||||
|
|
||||||
ui_vp_sticker = new StickerLayer(ui_viewport, ao_app);
|
ui_vp_sticker = new StickerLayer(ui_viewport, ao_app);
|
||||||
ui_vp_sticker->set_play_once(false);
|
ui_vp_sticker->set_play_once(false);
|
||||||
ui_vp_sticker->setAttribute(Qt::WA_TransparentForMouseEvents);
|
ui_vp_sticker->setAttribute(Qt::WA_TransparentForMouseEvents);
|
||||||
|
ui_vp_sticker->setObjectName("ui_vp_sticker");
|
||||||
|
|
||||||
ui_muted = new AOImage(ui_ic_chat_message, ao_app);
|
ui_muted = new AOImage(ui_ic_chat_message, ao_app);
|
||||||
ui_muted->hide();
|
ui_muted->hide();
|
||||||
|
ui_muted->setObjectName("ui_muted");
|
||||||
|
|
||||||
ui_ooc_chat_message = new QLineEdit(this);
|
ui_ooc_chat_message = new QLineEdit(this);
|
||||||
ui_ooc_chat_message->setFrame(false);
|
ui_ooc_chat_message->setFrame(false);
|
||||||
|
ui_ooc_chat_message->setObjectName("ui_ooc_chat_message");
|
||||||
|
|
||||||
ui_ooc_chat_name = new QLineEdit(this);
|
ui_ooc_chat_name = new QLineEdit(this);
|
||||||
ui_ooc_chat_name->setFrame(false);
|
ui_ooc_chat_name->setFrame(false);
|
||||||
ui_ooc_chat_name->setPlaceholderText(tr("Name"));
|
ui_ooc_chat_name->setPlaceholderText(tr("Name"));
|
||||||
ui_ooc_chat_name->setMaxLength(30);
|
ui_ooc_chat_name->setMaxLength(30);
|
||||||
ui_ooc_chat_name->setText(p_ao_app->get_default_username());
|
ui_ooc_chat_name->setText(p_ao_app->get_default_username());
|
||||||
|
ui_ooc_chat_name->setObjectName("ui_ooc_chat_name");
|
||||||
|
|
||||||
// ui_area_password = new QLineEdit(this);
|
// ui_area_password = new QLineEdit(this);
|
||||||
// ui_area_password->setFrame(false);
|
// ui_area_password->setFrame(false);
|
||||||
ui_music_search = new QLineEdit(this);
|
ui_music_search = new QLineEdit(this);
|
||||||
ui_music_search->setFrame(false);
|
ui_music_search->setFrame(false);
|
||||||
ui_music_search->setPlaceholderText(tr("Search"));
|
ui_music_search->setPlaceholderText(tr("Search"));
|
||||||
|
ui_music_search->setObjectName("ui_music_search");
|
||||||
|
|
||||||
initialize_emotes();
|
initialize_emotes();
|
||||||
|
|
||||||
ui_pos_dropdown = new QComboBox(this);
|
ui_pos_dropdown = new QComboBox(this);
|
||||||
|
ui_pos_dropdown->view()->setTextElideMode(Qt::ElideLeft);
|
||||||
|
ui_pos_dropdown->setObjectName("ui_pos_dropdown");
|
||||||
|
|
||||||
ui_pos_remove = new AOButton(this, ao_app);
|
ui_pos_remove = new AOButton(this, ao_app);
|
||||||
|
ui_pos_remove->setObjectName("ui_pos_remove");
|
||||||
|
|
||||||
ui_iniswap_dropdown = new QComboBox(this);
|
ui_iniswap_dropdown = new QComboBox(this);
|
||||||
ui_iniswap_dropdown->setContextMenuPolicy(Qt::CustomContextMenu);
|
ui_iniswap_dropdown->setContextMenuPolicy(Qt::CustomContextMenu);
|
||||||
|
ui_iniswap_dropdown->view()->setTextElideMode(Qt::ElideLeft);
|
||||||
|
ui_iniswap_dropdown->setObjectName("ui_iniswap_dropdown");
|
||||||
|
|
||||||
ui_iniswap_remove = new AOButton(this, ao_app);
|
ui_iniswap_remove = new AOButton(this, ao_app);
|
||||||
|
ui_iniswap_remove->setObjectName("ui_iniswap_remove");
|
||||||
|
|
||||||
ui_sfx_dropdown = new QComboBox(this);
|
ui_sfx_dropdown = new QComboBox(this);
|
||||||
ui_sfx_dropdown->setContextMenuPolicy(Qt::CustomContextMenu);
|
ui_sfx_dropdown->setContextMenuPolicy(Qt::CustomContextMenu);
|
||||||
|
ui_sfx_dropdown->view()->setTextElideMode(Qt::ElideLeft);
|
||||||
|
ui_sfx_dropdown->setObjectName("ui_sfx_dropdown");
|
||||||
|
|
||||||
ui_sfx_remove = new AOButton(this, ao_app);
|
ui_sfx_remove = new AOButton(this, ao_app);
|
||||||
|
ui_sfx_remove->setObjectName("ui_sfx_remove");
|
||||||
|
|
||||||
ui_effects_dropdown = new QComboBox(this);
|
ui_effects_dropdown = new QComboBox(this);
|
||||||
|
ui_effects_dropdown->view()->setTextElideMode(Qt::ElideLeft);
|
||||||
ui_effects_dropdown->setContextMenuPolicy(Qt::CustomContextMenu);
|
ui_effects_dropdown->setContextMenuPolicy(Qt::CustomContextMenu);
|
||||||
|
ui_effects_dropdown->setObjectName("ui_effects_dropdown");
|
||||||
|
|
||||||
ui_defense_bar = new AOImage(this, ao_app);
|
ui_defense_bar = new AOImage(this, ao_app);
|
||||||
|
ui_defense_bar->setObjectName("ui_defense_bar");
|
||||||
|
|
||||||
ui_prosecution_bar = new AOImage(this, ao_app);
|
ui_prosecution_bar = new AOImage(this, ao_app);
|
||||||
|
ui_prosecution_bar->setObjectName("ui_prosecution_bar");
|
||||||
|
|
||||||
ui_music_label = new QLabel(this);
|
ui_music_label = new QLabel(this);
|
||||||
|
ui_music_label->setObjectName("ui_music_label");
|
||||||
|
|
||||||
ui_sfx_label = new QLabel(this);
|
ui_sfx_label = new QLabel(this);
|
||||||
|
ui_sfx_label->setObjectName("ui_sfx_label");
|
||||||
|
|
||||||
ui_blip_label = new QLabel(this);
|
ui_blip_label = new QLabel(this);
|
||||||
|
ui_blip_label->setObjectName("ui_blip_label");
|
||||||
|
|
||||||
ui_hold_it = new AOButton(this, ao_app);
|
ui_hold_it = new AOButton(this, ao_app);
|
||||||
|
ui_hold_it->setObjectName("ui_hold_it");
|
||||||
|
|
||||||
ui_objection = new AOButton(this, ao_app);
|
ui_objection = new AOButton(this, ao_app);
|
||||||
|
ui_objection->setObjectName("ui_objection");
|
||||||
|
|
||||||
ui_take_that = new AOButton(this, ao_app);
|
ui_take_that = new AOButton(this, ao_app);
|
||||||
|
ui_take_that->setObjectName("ui_take_that");
|
||||||
|
|
||||||
ui_ooc_toggle = new AOButton(this, ao_app);
|
ui_ooc_toggle = new AOButton(this, ao_app);
|
||||||
|
ui_ooc_toggle->setObjectName("ui_ooc_toggle");
|
||||||
|
|
||||||
ui_witness_testimony = new AOButton(this, ao_app);
|
ui_witness_testimony = new AOButton(this, ao_app);
|
||||||
|
ui_witness_testimony->setObjectName("ui_witness_testimony");
|
||||||
|
|
||||||
ui_cross_examination = new AOButton(this, ao_app);
|
ui_cross_examination = new AOButton(this, ao_app);
|
||||||
|
ui_cross_examination->setObjectName("ui_cross_examination");
|
||||||
|
|
||||||
ui_guilty = new AOButton(this, ao_app);
|
ui_guilty = new AOButton(this, ao_app);
|
||||||
|
ui_guilty->setObjectName("ui_guilty");
|
||||||
|
|
||||||
ui_not_guilty = new AOButton(this, ao_app);
|
ui_not_guilty = new AOButton(this, ao_app);
|
||||||
|
ui_not_guilty->setObjectName("ui_not_guilty");
|
||||||
|
|
||||||
ui_change_character = new AOButton(this, ao_app);
|
ui_change_character = new AOButton(this, ao_app);
|
||||||
|
ui_change_character->setObjectName("ui_change_character");
|
||||||
|
|
||||||
ui_reload_theme = new AOButton(this, ao_app);
|
ui_reload_theme = new AOButton(this, ao_app);
|
||||||
|
ui_reload_theme->setObjectName("ui_reload_theme");
|
||||||
|
|
||||||
ui_call_mod = new AOButton(this, ao_app);
|
ui_call_mod = new AOButton(this, ao_app);
|
||||||
|
ui_call_mod->setObjectName("ui_call_mod");
|
||||||
|
|
||||||
ui_settings = new AOButton(this, ao_app);
|
ui_settings = new AOButton(this, ao_app);
|
||||||
|
ui_settings->setObjectName("ui_settings");
|
||||||
|
|
||||||
ui_announce_casing = new AOButton(this, ao_app);
|
ui_announce_casing = new AOButton(this, ao_app);
|
||||||
|
ui_announce_casing->setObjectName("ui_announce_casing");
|
||||||
|
|
||||||
ui_switch_area_music = new AOButton(this, ao_app);
|
ui_switch_area_music = new AOButton(this, ao_app);
|
||||||
|
ui_switch_area_music->setObjectName("ui_switch_area_music");
|
||||||
|
|
||||||
ui_pre = new QCheckBox(this);
|
ui_pre = new QCheckBox(this);
|
||||||
ui_pre->setText(tr("Pre"));
|
ui_pre->setText(tr("Pre"));
|
||||||
|
ui_pre->setObjectName("ui_pre");
|
||||||
|
|
||||||
ui_flip = new QCheckBox(this);
|
ui_flip = new QCheckBox(this);
|
||||||
ui_flip->setText(tr("Flip"));
|
ui_flip->setText(tr("Flip"));
|
||||||
ui_flip->hide();
|
ui_flip->hide();
|
||||||
|
ui_flip->setObjectName("ui_flip");
|
||||||
|
|
||||||
ui_guard = new QCheckBox(this);
|
ui_guard = new QCheckBox(this);
|
||||||
ui_guard->setText(tr("Guard"));
|
ui_guard->setText(tr("Guard"));
|
||||||
ui_guard->hide();
|
ui_guard->hide();
|
||||||
|
ui_guard->setObjectName("ui_guard");
|
||||||
|
|
||||||
ui_additive = new QCheckBox(this);
|
ui_additive = new QCheckBox(this);
|
||||||
ui_additive->setText(tr("Additive"));
|
ui_additive->setText(tr("Additive"));
|
||||||
ui_additive->hide();
|
ui_additive->hide();
|
||||||
|
ui_additive->setObjectName("ui_additive");
|
||||||
|
|
||||||
ui_casing = new QCheckBox(this);
|
ui_casing = new QCheckBox(this);
|
||||||
ui_casing->setChecked(ao_app->get_casing_enabled());
|
ui_casing->setChecked(ao_app->get_casing_enabled());
|
||||||
ui_casing->setText(tr("Casing"));
|
ui_casing->setText(tr("Casing"));
|
||||||
ui_casing->hide();
|
ui_casing->hide();
|
||||||
|
ui_casing->setObjectName("ui_casing");
|
||||||
|
|
||||||
ui_showname_enable = new QCheckBox(this);
|
ui_showname_enable = new QCheckBox(this);
|
||||||
ui_showname_enable->setChecked(ao_app->get_showname_enabled_by_default());
|
ui_showname_enable->setChecked(ao_app->get_showname_enabled_by_default());
|
||||||
ui_showname_enable->setText(tr("Shownames"));
|
ui_showname_enable->setText(tr("Shownames"));
|
||||||
|
ui_showname_enable->setObjectName("ui_showname_enable");
|
||||||
|
|
||||||
ui_immediate = new QCheckBox(this);
|
ui_immediate = new QCheckBox(this);
|
||||||
ui_immediate->setText(tr("Immediate"));
|
ui_immediate->setText(tr("Immediate"));
|
||||||
ui_immediate->hide();
|
ui_immediate->hide();
|
||||||
|
ui_immediate->setObjectName("ui_immediate");
|
||||||
|
|
||||||
ui_custom_objection = new AOButton(this, ao_app);
|
ui_custom_objection = new AOButton(this, ao_app);
|
||||||
ui_custom_objection->setContextMenuPolicy(Qt::CustomContextMenu);
|
ui_custom_objection->setContextMenuPolicy(Qt::CustomContextMenu);
|
||||||
|
ui_custom_objection->setObjectName("ui_custom_objection");
|
||||||
|
|
||||||
custom_obj_menu = new QMenu(this);
|
custom_obj_menu = new QMenu(this);
|
||||||
|
custom_obj_menu->setObjectName("ui_custom_obj_menu");
|
||||||
|
|
||||||
ui_realization = new AOButton(this, ao_app);
|
ui_realization = new AOButton(this, ao_app);
|
||||||
|
ui_realization->setObjectName("ui_realization");
|
||||||
|
|
||||||
ui_screenshake = new AOButton(this, ao_app);
|
ui_screenshake = new AOButton(this, ao_app);
|
||||||
|
ui_screenshake->setObjectName("ui_screenshake");
|
||||||
|
|
||||||
ui_mute = new AOButton(this, ao_app);
|
ui_mute = new AOButton(this, ao_app);
|
||||||
|
ui_mute->setObjectName("ui_mute");
|
||||||
|
|
||||||
ui_defense_plus = new AOButton(this, ao_app);
|
ui_defense_plus = new AOButton(this, ao_app);
|
||||||
|
ui_defense_plus->setObjectName("ui_defense_plus");
|
||||||
|
|
||||||
ui_defense_minus = new AOButton(this, ao_app);
|
ui_defense_minus = new AOButton(this, ao_app);
|
||||||
|
ui_defense_minus->setObjectName("ui_defense_minus");
|
||||||
|
|
||||||
ui_prosecution_plus = new AOButton(this, ao_app);
|
ui_prosecution_plus = new AOButton(this, ao_app);
|
||||||
|
ui_prosecution_plus->setObjectName("ui_prosecution_plus");
|
||||||
|
|
||||||
ui_prosecution_minus = new AOButton(this, ao_app);
|
ui_prosecution_minus = new AOButton(this, ao_app);
|
||||||
|
ui_prosecution_minus->setObjectName("ui_prosecution_minus");
|
||||||
|
|
||||||
ui_text_color = new QComboBox(this);
|
ui_text_color = new QComboBox(this);
|
||||||
|
ui_text_color->setObjectName("ui_text_color");
|
||||||
|
|
||||||
ui_music_slider = new QSlider(Qt::Horizontal, this);
|
ui_music_slider = new QSlider(Qt::Horizontal, this);
|
||||||
ui_music_slider->setRange(0, 100);
|
ui_music_slider->setRange(0, 100);
|
||||||
ui_music_slider->setValue(ao_app->get_default_music());
|
ui_music_slider->setValue(ao_app->get_default_music());
|
||||||
|
ui_music_slider->setObjectName("ui_music_slider");
|
||||||
|
|
||||||
ui_sfx_slider = new QSlider(Qt::Horizontal, this);
|
ui_sfx_slider = new QSlider(Qt::Horizontal, this);
|
||||||
ui_sfx_slider->setRange(0, 100);
|
ui_sfx_slider->setRange(0, 100);
|
||||||
ui_sfx_slider->setValue(ao_app->get_default_sfx());
|
ui_sfx_slider->setValue(ao_app->get_default_sfx());
|
||||||
|
ui_sfx_slider->setObjectName("ui_sfx_slider");
|
||||||
|
|
||||||
ui_blip_slider = new QSlider(Qt::Horizontal, this);
|
ui_blip_slider = new QSlider(Qt::Horizontal, this);
|
||||||
ui_blip_slider->setRange(0, 100);
|
ui_blip_slider->setRange(0, 100);
|
||||||
ui_blip_slider->setValue(ao_app->get_default_blip());
|
ui_blip_slider->setValue(ao_app->get_default_blip());
|
||||||
|
ui_blip_slider->setObjectName("ui_blip_slider");
|
||||||
|
|
||||||
ui_mute_list = new QListWidget(this);
|
ui_mute_list = new QListWidget(this);
|
||||||
|
ui_mute_list->setObjectName("ui_mute_list");
|
||||||
|
|
||||||
ui_pair_list = new QListWidget(this);
|
ui_pair_list = new QListWidget(this);
|
||||||
|
ui_pair_list->setObjectName("ui_pair_list");
|
||||||
|
|
||||||
ui_pair_offset_spinbox = new QSpinBox(this);
|
ui_pair_offset_spinbox = new QSpinBox(this);
|
||||||
ui_pair_offset_spinbox->setRange(-100, 100);
|
ui_pair_offset_spinbox->setRange(-100, 100);
|
||||||
ui_pair_offset_spinbox->setSuffix(tr("% x offset"));
|
ui_pair_offset_spinbox->setSuffix(tr("% x offset"));
|
||||||
|
ui_pair_offset_spinbox->setObjectName("ui_pair_offset_spinbox");
|
||||||
|
|
||||||
ui_pair_vert_offset_spinbox = new QSpinBox(this);
|
ui_pair_vert_offset_spinbox = new QSpinBox(this);
|
||||||
ui_pair_vert_offset_spinbox->setRange(-100, 100);
|
ui_pair_vert_offset_spinbox->setRange(-100, 100);
|
||||||
ui_pair_vert_offset_spinbox->setSuffix(tr("% y offset"));
|
ui_pair_vert_offset_spinbox->setSuffix(tr("% y offset"));
|
||||||
|
ui_pair_vert_offset_spinbox->setObjectName("ui_pair_vert_offset_spinbox");
|
||||||
|
|
||||||
ui_pair_order_dropdown = new QComboBox(this);
|
ui_pair_order_dropdown = new QComboBox(this);
|
||||||
ui_pair_order_dropdown->addItem(tr("To front"));
|
ui_pair_order_dropdown->addItem(tr("To front"));
|
||||||
ui_pair_order_dropdown->addItem(tr("To behind"));
|
ui_pair_order_dropdown->addItem(tr("To behind"));
|
||||||
|
ui_pair_order_dropdown->setObjectName("ui_pair_order_dropdown");
|
||||||
|
|
||||||
ui_pair_button = new AOButton(this, ao_app);
|
ui_pair_button = new AOButton(this, ao_app);
|
||||||
|
ui_pair_button->setObjectName("ui_pair_button");
|
||||||
|
|
||||||
ui_evidence_button = new AOButton(this, ao_app);
|
ui_evidence_button = new AOButton(this, ao_app);
|
||||||
|
ui_evidence_button->setObjectName("ui_evidence_button");
|
||||||
|
|
||||||
initialize_evidence();
|
initialize_evidence();
|
||||||
|
|
||||||
@ -606,8 +717,8 @@ void Courtroom::set_widgets()
|
|||||||
|
|
||||||
set_size_and_pos(ui_ic_chatlog, "ic_chatlog");
|
set_size_and_pos(ui_ic_chatlog, "ic_chatlog");
|
||||||
ui_ic_chatlog->setFrameShape(QFrame::NoFrame);
|
ui_ic_chatlog->setFrameShape(QFrame::NoFrame);
|
||||||
ui_ic_chatlog->setPlaceholderText(log_goes_downwards ? "▼ Log goes down ▼"
|
ui_ic_chatlog->setPlaceholderText(log_goes_downwards ? "▼ " + tr("Log goes down") + " ▼"
|
||||||
: "▲ Log goes up ▲");
|
: "▲ " + tr("Log goes up") + " ▲");
|
||||||
|
|
||||||
set_size_and_pos(ui_ms_chatlog, "ms_chatlog");
|
set_size_and_pos(ui_ms_chatlog, "ms_chatlog");
|
||||||
ui_ms_chatlog->setFrameShape(QFrame::NoFrame);
|
ui_ms_chatlog->setFrameShape(QFrame::NoFrame);
|
||||||
@ -972,9 +1083,6 @@ void Courtroom::set_widgets()
|
|||||||
set_size_and_pos(ui_sfx_slider, "sfx_slider");
|
set_size_and_pos(ui_sfx_slider, "sfx_slider");
|
||||||
set_size_and_pos(ui_blip_slider, "blip_slider");
|
set_size_and_pos(ui_blip_slider, "blip_slider");
|
||||||
|
|
||||||
ui_selector->set_image("char_selector");
|
|
||||||
ui_selector->hide();
|
|
||||||
|
|
||||||
set_size_and_pos(ui_back_to_lobby, "back_to_lobby");
|
set_size_and_pos(ui_back_to_lobby, "back_to_lobby");
|
||||||
ui_back_to_lobby->setText(tr("Back to Lobby"));
|
ui_back_to_lobby->setText(tr("Back to Lobby"));
|
||||||
ui_back_to_lobby->setToolTip(tr("Return back to the server list."));
|
ui_back_to_lobby->setToolTip(tr("Return back to the server list."));
|
||||||
@ -1247,7 +1355,7 @@ void Courtroom::set_background(QString p_background, bool display)
|
|||||||
|
|
||||||
// Clear the message queue
|
// Clear the message queue
|
||||||
text_queue_timer->stop();
|
text_queue_timer->stop();
|
||||||
chatmessage_queue.clear();
|
skip_chatmessage_queue();
|
||||||
|
|
||||||
text_state = 2;
|
text_state = 2;
|
||||||
anim_state = 3;
|
anim_state = 3;
|
||||||
@ -1641,6 +1749,11 @@ void Courtroom::append_server_chatmessage(QString p_name, QString p_message,
|
|||||||
|
|
||||||
|
|
||||||
ui_server_chatlog->append_chatmessage(p_name, p_message, color);
|
ui_server_chatlog->append_chatmessage(p_name, p_message, color);
|
||||||
|
|
||||||
|
if (ao_app->get_auto_logging_enabled() && !ao_app->log_filename.isEmpty()) {
|
||||||
|
QString full = "[OOC][" + QDateTime::currentDateTime().toUTC().toString() + "] " + p_name + ": " + p_message;
|
||||||
|
ao_app->append_to_file(full, ao_app->log_filename, true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Courtroom::on_authentication_state_received(int p_state)
|
void Courtroom::on_authentication_state_received(int p_state)
|
||||||
@ -1663,7 +1776,7 @@ void Courtroom::on_chat_return_pressed()
|
|||||||
if (is_muted)
|
if (is_muted)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if ((anim_state < 3 || text_state < 2) && objection_state == 0)
|
if (text_state < 2 && objection_state == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
ui_ic_chat_message->blockSignals(true);
|
ui_ic_chat_message->blockSignals(true);
|
||||||
@ -1961,8 +2074,10 @@ void Courtroom::chatmessage_enqueue(QStringList p_contents)
|
|||||||
int objection_mod = p_contents[OBJECTION_MOD].split("&")[0].toInt();
|
int objection_mod = p_contents[OBJECTION_MOD].split("&")[0].toInt();
|
||||||
is_objection = objection_mod >= 1 && objection_mod <= 5;
|
is_objection = objection_mod >= 1 && objection_mod <= 5;
|
||||||
// If this is an objection, nuke the queue
|
// If this is an objection, nuke the queue
|
||||||
if (is_objection)
|
if (is_objection) {
|
||||||
chatmessage_queue.clear();
|
text_queue_timer->stop();
|
||||||
|
skip_chatmessage_queue();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Record the log I/O, log files should be accurate.
|
// Record the log I/O, log files should be accurate.
|
||||||
@ -1974,7 +2089,7 @@ void Courtroom::chatmessage_enqueue(QStringList p_contents)
|
|||||||
if (SHOWNAME < p_contents.size())
|
if (SHOWNAME < p_contents.size())
|
||||||
showname = p_contents[SHOWNAME];
|
showname = p_contents[SHOWNAME];
|
||||||
|
|
||||||
log_chatmessage(p_contents[MESSAGE], f_char_id, showname, p_contents[TEXT_COLOR].toInt(), log_mode);
|
log_chatmessage(p_contents[MESSAGE], f_char_id, showname, p_contents[CHAR_NAME], p_contents[OBJECTION_MOD], p_contents[EVIDENCE_ID].toInt(), p_contents[TEXT_COLOR].toInt(), log_mode);
|
||||||
// Send this boi into the queue
|
// Send this boi into the queue
|
||||||
chatmessage_queue.enqueue(p_contents);
|
chatmessage_queue.enqueue(p_contents);
|
||||||
|
|
||||||
@ -1988,15 +2103,6 @@ void Courtroom::chatmessage_enqueue(QStringList p_contents)
|
|||||||
|
|
||||||
void Courtroom::chatmessage_dequeue()
|
void Courtroom::chatmessage_dequeue()
|
||||||
{
|
{
|
||||||
// Chat stopped being processed, indicate that the user can post their message now.
|
|
||||||
QString f_custom_theme;
|
|
||||||
if (ao_app->is_customchat_enabled()) {
|
|
||||||
QString f_char = m_chatmessage[CHAR_NAME];
|
|
||||||
f_custom_theme = ao_app->get_chat(f_char);
|
|
||||||
}
|
|
||||||
ui_vp_chat_arrow->transform_mode = ao_app->get_misc_scaling(f_custom_theme);
|
|
||||||
ui_vp_chat_arrow->load_image("chat_arrow", f_custom_theme);
|
|
||||||
|
|
||||||
// Nothing to parse in the queue
|
// Nothing to parse in the queue
|
||||||
if (chatmessage_queue.isEmpty())
|
if (chatmessage_queue.isEmpty())
|
||||||
return;
|
return;
|
||||||
@ -2008,6 +2114,19 @@ void Courtroom::chatmessage_dequeue()
|
|||||||
unpack_chatmessage(chatmessage_queue.dequeue());
|
unpack_chatmessage(chatmessage_queue.dequeue());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Courtroom::skip_chatmessage_queue()
|
||||||
|
{
|
||||||
|
if (ao_app->is_desyncrhonized_logs_enabled()) {
|
||||||
|
chatmessage_queue.clear();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (!chatmessage_queue.isEmpty()) {
|
||||||
|
QStringList p_contents = chatmessage_queue.dequeue();
|
||||||
|
log_chatmessage(p_contents[MESSAGE], p_contents[CHAR_ID].toInt(), p_contents[SHOWNAME], p_contents[CHAR_NAME], p_contents[OBJECTION_MOD], p_contents[EVIDENCE_ID].toInt(), p_contents[TEXT_COLOR].toInt(), DISPLAY_ONLY);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void Courtroom::unpack_chatmessage(QStringList p_contents)
|
void Courtroom::unpack_chatmessage(QStringList p_contents)
|
||||||
{
|
{
|
||||||
for (int n_string = 0; n_string < MS_MAXIMUM; ++n_string) {
|
for (int n_string = 0; n_string < MS_MAXIMUM; ++n_string) {
|
||||||
@ -2027,7 +2146,7 @@ void Courtroom::unpack_chatmessage(QStringList p_contents)
|
|||||||
|
|
||||||
if (!ao_app->is_desyncrhonized_logs_enabled()) {
|
if (!ao_app->is_desyncrhonized_logs_enabled()) {
|
||||||
// We have logs displaying as soon as we reach the message in our queue, which is a less confusing but also less accurate experience for the user.
|
// We have logs displaying as soon as we reach the message in our queue, which is a less confusing but also less accurate experience for the user.
|
||||||
log_chatmessage(m_chatmessage[MESSAGE], m_chatmessage[CHAR_ID].toInt(), m_chatmessage[SHOWNAME], m_chatmessage[TEXT_COLOR].toInt(), DISPLAY_ONLY);
|
log_chatmessage(m_chatmessage[MESSAGE], m_chatmessage[CHAR_ID].toInt(), m_chatmessage[SHOWNAME], m_chatmessage[CHAR_NAME], m_chatmessage[OBJECTION_MOD], m_chatmessage[EVIDENCE_ID].toInt(), m_chatmessage[TEXT_COLOR].toInt(), DISPLAY_ONLY);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Process the callwords for this message
|
// Process the callwords for this message
|
||||||
@ -2046,18 +2165,13 @@ void Courtroom::unpack_chatmessage(QStringList p_contents)
|
|||||||
handle_ic_message();
|
handle_ic_message();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Courtroom::log_chatmessage(QString f_message, int f_char_id, QString f_showname, int f_color, LogMode f_log_mode)
|
void Courtroom::log_chatmessage(QString f_message, int f_char_id, QString f_showname, QString f_char, QString f_objection_mod, int f_evi_id, int f_color, LogMode f_log_mode)
|
||||||
{
|
{
|
||||||
// Display name will use the showname
|
// Display name will use the showname
|
||||||
QString f_displayname = f_showname;
|
QString f_displayname = f_showname;
|
||||||
if (f_char_id != -1) {
|
if (f_char_id != -1) {
|
||||||
// Grab the char.ini showname
|
// Grab the char.ini showname
|
||||||
f_showname = ao_app->get_showname(char_list.at(f_char_id).name);
|
f_showname = ao_app->get_showname(char_list.at(f_char_id).name);
|
||||||
// If custom serversided shownames are not enabled
|
|
||||||
if (!ui_showname_enable->isChecked()) {
|
|
||||||
// Set the display name to the char.ini showname
|
|
||||||
f_displayname = f_showname;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
// If display name is just whitespace, use the char.ini showname.
|
// If display name is just whitespace, use the char.ini showname.
|
||||||
if (f_displayname.trimmed().isEmpty())
|
if (f_displayname.trimmed().isEmpty())
|
||||||
@ -2067,16 +2181,15 @@ void Courtroom::log_chatmessage(QString f_message, int f_char_id, QString f_show
|
|||||||
// Check if a custom objection is in use
|
// Check if a custom objection is in use
|
||||||
int objection_mod = 0;
|
int objection_mod = 0;
|
||||||
QString custom_objection = "";
|
QString custom_objection = "";
|
||||||
if (m_chatmessage[OBJECTION_MOD].contains("4&")) {
|
if (f_objection_mod.contains("4&")) {
|
||||||
objection_mod = 4;
|
objection_mod = 4;
|
||||||
custom_objection = m_chatmessage[OBJECTION_MOD].split(
|
custom_objection = f_objection_mod.split(
|
||||||
"4&")[1]; // takes the name of custom objection.
|
"4&")[1]; // takes the name of custom objection.
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
objection_mod = m_chatmessage[OBJECTION_MOD].toInt();
|
objection_mod = f_objection_mod.toInt();
|
||||||
}
|
}
|
||||||
|
|
||||||
QString f_char = m_chatmessage[CHAR_NAME];
|
|
||||||
QString f_custom_theme = ao_app->get_chat(f_char);
|
QString f_custom_theme = ao_app->get_chat(f_char);
|
||||||
if (objection_mod <= 4 && objection_mod >= 1) {
|
if (objection_mod <= 4 && objection_mod >= 1) {
|
||||||
QString shout_message;
|
QString shout_message;
|
||||||
@ -2123,8 +2236,6 @@ void Courtroom::log_chatmessage(QString f_message, int f_char_id, QString f_show
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Obtain evidence ID we're trying to work with
|
|
||||||
int f_evi_id = m_chatmessage[EVIDENCE_ID].toInt();
|
|
||||||
// If the evidence ID is in the valid range
|
// If the evidence ID is in the valid range
|
||||||
if (f_evi_id > 0 && f_evi_id <= local_evidence_list.size()) {
|
if (f_evi_id > 0 && f_evi_id <= local_evidence_list.size()) {
|
||||||
// Obtain the evidence name
|
// Obtain the evidence name
|
||||||
@ -2160,6 +2271,8 @@ void Courtroom::log_chatmessage(QString f_message, int f_char_id, QString f_show
|
|||||||
append_ic_text(f_message, f_displayname, "",f_color);
|
append_ic_text(f_message, f_displayname, "",f_color);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
if (!ui_showname_enable->isChecked())
|
||||||
|
regenerate_ic_chatlog();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Courtroom::handle_objection()
|
bool Courtroom::handle_objection()
|
||||||
@ -2176,8 +2289,6 @@ bool Courtroom::handle_objection()
|
|||||||
objection_mod = m_chatmessage[OBJECTION_MOD].toInt();
|
objection_mod = m_chatmessage[OBJECTION_MOD].toInt();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// if an objection is used
|
// if an objection is used
|
||||||
if (objection_mod <= 4 && objection_mod >= 1) {
|
if (objection_mod <= 4 && objection_mod >= 1) {
|
||||||
ui_vp_objection->set_static_duration(shout_static_time);
|
ui_vp_objection->set_static_duration(shout_static_time);
|
||||||
@ -2221,8 +2332,10 @@ bool Courtroom::handle_objection()
|
|||||||
filename, m_chatmessage[CHAR_NAME],
|
filename, m_chatmessage[CHAR_NAME],
|
||||||
ao_app->get_chat(m_chatmessage[CHAR_NAME]));
|
ao_app->get_chat(m_chatmessage[CHAR_NAME]));
|
||||||
sfx_player->clear(); // Objection played! Cut all sfx.
|
sfx_player->clear(); // Objection played! Cut all sfx.
|
||||||
|
ui_vp_player_char->set_play_once(true);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
if (m_chatmessage[EMOTE] != "")
|
||||||
display_character();
|
display_character();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -2381,6 +2494,9 @@ void Courtroom::handle_ic_message()
|
|||||||
// Update the chatbox information
|
// Update the chatbox information
|
||||||
initialize_chatbox();
|
initialize_chatbox();
|
||||||
|
|
||||||
|
int emote_mod = m_chatmessage[EMOTE_MOD].toInt();
|
||||||
|
bool immediate = m_chatmessage[IMMEDIATE].toInt() == 1;
|
||||||
|
if (m_chatmessage[EMOTE] != "") {
|
||||||
// Display our own character
|
// Display our own character
|
||||||
display_character();
|
display_character();
|
||||||
|
|
||||||
@ -2389,14 +2505,20 @@ void Courtroom::handle_ic_message()
|
|||||||
ui_vp_sideplayer_char->move(0, 0);
|
ui_vp_sideplayer_char->move(0, 0);
|
||||||
|
|
||||||
// If the emote_mod is not zooming
|
// If the emote_mod is not zooming
|
||||||
int emote_mod = m_chatmessage[EMOTE_MOD].toInt();
|
|
||||||
if (emote_mod != 5 && emote_mod != 6) {
|
if (emote_mod != 5 && emote_mod != 6) {
|
||||||
// Display the pair character
|
// Display the pair character
|
||||||
display_pair_character(m_chatmessage[OTHER_CHARID], m_chatmessage[OTHER_OFFSET]);
|
display_pair_character(m_chatmessage[OTHER_CHARID], m_chatmessage[OTHER_OFFSET]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Parse the emote_mod part of the chat message
|
// Parse the emote_mod part of the chat message
|
||||||
handle_emote_mod(m_chatmessage[EMOTE_MOD].toInt(), m_chatmessage[IMMEDIATE].toInt() == 1);
|
handle_emote_mod(emote_mod, immediate);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
start_chat_ticking();
|
||||||
|
if (emote_mod == 1 || emote_mod == 2 || emote_mod == 6 || immediate)
|
||||||
|
play_sfx();
|
||||||
|
}
|
||||||
|
|
||||||
// if we have instant objections disabled, and queue is not empty, check if next message after this is an objection.
|
// if we have instant objections disabled, and queue is not empty, check if next message after this is an objection.
|
||||||
if (!ao_app->is_instant_objection_enabled() && chatmessage_queue.size() > 0)
|
if (!ao_app->is_instant_objection_enabled() && chatmessage_queue.size() > 0)
|
||||||
@ -2513,7 +2635,6 @@ void Courtroom::initialize_chatbox()
|
|||||||
if (f_charid >= 0 && f_charid < char_list.size() &&
|
if (f_charid >= 0 && f_charid < char_list.size() &&
|
||||||
(m_chatmessage[SHOWNAME].isEmpty() || !ui_showname_enable->isChecked())) {
|
(m_chatmessage[SHOWNAME].isEmpty() || !ui_showname_enable->isChecked())) {
|
||||||
QString real_name = char_list.at(f_charid).name;
|
QString real_name = char_list.at(f_charid).name;
|
||||||
ui_vp_player_char->set_static_duration(0);
|
|
||||||
QString f_showname = ao_app->get_showname(real_name);
|
QString f_showname = ao_app->get_showname(real_name);
|
||||||
|
|
||||||
ui_vp_showname->setText(f_showname);
|
ui_vp_showname->setText(f_showname);
|
||||||
@ -2542,19 +2663,6 @@ void Courtroom::initialize_chatbox()
|
|||||||
if (!ui_vp_chatbox->set_image("chat", p_misc))
|
if (!ui_vp_chatbox->set_image("chat", p_misc))
|
||||||
ui_vp_chatbox->set_image("chatbox", p_misc);
|
ui_vp_chatbox->set_image("chatbox", p_misc);
|
||||||
|
|
||||||
// This should probably be called only if any change from the last chat
|
|
||||||
// arrow was actually detected.
|
|
||||||
pos_size_type design_ini_result = ao_app->get_element_dimensions(
|
|
||||||
"chat_arrow", "courtroom_design.ini", p_misc);
|
|
||||||
if (design_ini_result.width < 0 || design_ini_result.height < 0) {
|
|
||||||
qDebug() << "W: could not find \"chat_arrow\" in courtroom_design.ini";
|
|
||||||
ui_vp_chat_arrow->hide();
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
ui_vp_chat_arrow->move(design_ini_result.x + ui_vp_chatbox->x(), design_ini_result.y + ui_vp_chatbox->y());
|
|
||||||
ui_vp_chat_arrow->combo_resize(design_ini_result.width,
|
|
||||||
design_ini_result.height);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Remember to set the showname font before the font metrics check.
|
// Remember to set the showname font before the font metrics check.
|
||||||
set_font(ui_vp_showname, "", "showname", customchar);
|
set_font(ui_vp_showname, "", "showname", customchar);
|
||||||
@ -2610,6 +2718,20 @@ void Courtroom::initialize_chatbox()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// This should probably be called only if any change from the last chat
|
||||||
|
// arrow was actually detected.
|
||||||
|
pos_size_type design_ini_result = ao_app->get_element_dimensions(
|
||||||
|
"chat_arrow", "courtroom_design.ini", p_misc);
|
||||||
|
if (design_ini_result.width < 0 || design_ini_result.height < 0) {
|
||||||
|
qDebug() << "W: could not find \"chat_arrow\" in courtroom_design.ini";
|
||||||
|
ui_vp_chat_arrow->hide();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
ui_vp_chat_arrow->move(design_ini_result.x + ui_vp_chatbox->x(), design_ini_result.y + ui_vp_chatbox->y());
|
||||||
|
ui_vp_chat_arrow->combo_resize(design_ini_result.width,
|
||||||
|
design_ini_result.height);
|
||||||
|
}
|
||||||
|
|
||||||
QString font_name;
|
QString font_name;
|
||||||
QString chatfont = ao_app->get_chat_font(m_chatmessage[CHAR_NAME]);
|
QString chatfont = ao_app->get_chat_font(m_chatmessage[CHAR_NAME]);
|
||||||
if (chatfont != "")
|
if (chatfont != "")
|
||||||
@ -2660,8 +2782,6 @@ void Courtroom::display_evidence_image()
|
|||||||
|
|
||||||
void Courtroom::handle_ic_speaking()
|
void Courtroom::handle_ic_speaking()
|
||||||
{
|
{
|
||||||
// Display the evidence
|
|
||||||
display_evidence_image();
|
|
||||||
QString side = m_chatmessage[SIDE];
|
QString side = m_chatmessage[SIDE];
|
||||||
int emote_mod = m_chatmessage[EMOTE_MOD].toInt();
|
int emote_mod = m_chatmessage[EMOTE_MOD].toInt();
|
||||||
// emote_mod 5 is zoom and emote_mod 6 is zoom w/ preanim.
|
// emote_mod 5 is zoom and emote_mod 6 is zoom w/ preanim.
|
||||||
@ -3104,17 +3224,10 @@ void Courtroom::play_preanim(bool immediate)
|
|||||||
QString f_preanim = m_chatmessage[PRE_EMOTE];
|
QString f_preanim = m_chatmessage[PRE_EMOTE];
|
||||||
// all time values in char.inis are multiplied by a constant(time_mod) to get
|
// all time values in char.inis are multiplied by a constant(time_mod) to get
|
||||||
// the actual time
|
// the actual time
|
||||||
int ao2_duration = ao_app->get_ao2_preanim_duration(f_char, f_preanim);
|
int preanim_duration = ao_app->get_preanim_duration(f_char, f_preanim);
|
||||||
int stay_time = ao_app->get_text_delay(f_char, f_preanim) * time_mod;
|
int stay_time = ao_app->get_text_delay(f_char, f_preanim) * time_mod;
|
||||||
int sfx_delay = m_chatmessage[SFX_DELAY].toInt() * time_mod;
|
int sfx_delay = m_chatmessage[SFX_DELAY].toInt() * time_mod;
|
||||||
|
|
||||||
int preanim_duration;
|
|
||||||
|
|
||||||
if (ao2_duration < 0)
|
|
||||||
preanim_duration = ao_app->get_preanim_duration(f_char, f_preanim);
|
|
||||||
else
|
|
||||||
preanim_duration = ao2_duration;
|
|
||||||
|
|
||||||
sfx_delay_timer->start(sfx_delay);
|
sfx_delay_timer->start(sfx_delay);
|
||||||
QString anim_to_find =
|
QString anim_to_find =
|
||||||
ao_app->get_image_suffix(ao_app->get_character_path(f_char, f_preanim));
|
ao_app->get_image_suffix(ao_app->get_character_path(f_char, f_preanim));
|
||||||
@ -3127,15 +3240,6 @@ void Courtroom::play_preanim(bool immediate)
|
|||||||
qDebug() << "W: could not find " + anim_to_find;
|
qDebug() << "W: could not find " + anim_to_find;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
QImageReader s_reader(anim_to_find);
|
|
||||||
int image_count = s_reader.imageCount();
|
|
||||||
if (image_count <= 1) {
|
|
||||||
preanim_done();
|
|
||||||
qDebug() << "W: tried to play static preanim " + anim_to_find;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ui_vp_player_char->set_static_duration(preanim_duration);
|
ui_vp_player_char->set_static_duration(preanim_duration);
|
||||||
ui_vp_player_char->set_play_once(true);
|
ui_vp_player_char->set_play_once(true);
|
||||||
ui_vp_player_char->load_image(f_preanim, f_char, preanim_duration, true);
|
ui_vp_player_char->load_image(f_preanim, f_char, preanim_duration, true);
|
||||||
@ -3157,20 +3261,22 @@ void Courtroom::play_preanim(bool immediate)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (immediate)
|
if (immediate) {
|
||||||
anim_state = 4;
|
anim_state = 4;
|
||||||
else
|
handle_ic_speaking();
|
||||||
|
}
|
||||||
|
else {
|
||||||
anim_state = 1;
|
anim_state = 1;
|
||||||
|
|
||||||
if (stay_time >= 0)
|
if (stay_time >= 0)
|
||||||
text_delay_timer->start(stay_time);
|
text_delay_timer->start(stay_time);
|
||||||
|
}
|
||||||
if (immediate)
|
|
||||||
handle_ic_speaking();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Courtroom::preanim_done()
|
void Courtroom::preanim_done()
|
||||||
{
|
{
|
||||||
|
// Currently, someone's talking over us mid-preanim...
|
||||||
|
if (anim_state != 1 && anim_state != 4)
|
||||||
|
return;
|
||||||
anim_state = 1;
|
anim_state = 1;
|
||||||
switch(m_chatmessage[DESK_MOD].toInt()) {
|
switch(m_chatmessage[DESK_MOD].toInt()) {
|
||||||
case 4:
|
case 4:
|
||||||
@ -3195,11 +3301,15 @@ void Courtroom::preanim_done()
|
|||||||
|
|
||||||
void Courtroom::start_chat_ticking()
|
void Courtroom::start_chat_ticking()
|
||||||
{
|
{
|
||||||
|
text_delay_timer->stop();
|
||||||
// we need to ensure that the text isn't already ticking because this function
|
// we need to ensure that the text isn't already ticking because this function
|
||||||
// can be called by two logic paths
|
// can be called by two logic paths
|
||||||
if (text_state != 0)
|
if (text_state != 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
// Display the evidence
|
||||||
|
display_evidence_image();
|
||||||
|
|
||||||
if (m_chatmessage[EFFECTS] != "") {
|
if (m_chatmessage[EFFECTS] != "") {
|
||||||
QStringList fx_list = m_chatmessage[EFFECTS].split("|");
|
QStringList fx_list = m_chatmessage[EFFECTS].split("|");
|
||||||
QString fx = fx_list[0];
|
QString fx = fx_list[0];
|
||||||
@ -3231,6 +3341,14 @@ void Courtroom::start_chat_ticking()
|
|||||||
ui_vp_chatbox->show();
|
ui_vp_chatbox->show();
|
||||||
ui_vp_message->show();
|
ui_vp_message->show();
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
ui_vp_chatbox->hide();
|
||||||
|
ui_vp_message->hide();
|
||||||
|
}
|
||||||
|
// If we're not already waiting on the next message, start the timer. We could be overriden if there's an objection planned.
|
||||||
|
int delay = ao_app->stay_time();
|
||||||
|
if (delay > 0 && !text_queue_timer->isActive())
|
||||||
|
text_queue_timer->start(delay);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3284,6 +3402,8 @@ void Courtroom::chat_tick()
|
|||||||
|
|
||||||
if (tick_pos >= f_message.size()) {
|
if (tick_pos >= f_message.size()) {
|
||||||
text_state = 2;
|
text_state = 2;
|
||||||
|
// Check if we're a narrator msg
|
||||||
|
if (m_chatmessage[EMOTE] != "") {
|
||||||
if (anim_state < 3) {
|
if (anim_state < 3) {
|
||||||
QStringList c_paths = {
|
QStringList c_paths = {
|
||||||
ao_app->get_image_suffix(ao_app->get_character_path(m_chatmessage[CHAR_NAME], "(c)" + m_chatmessage[EMOTE])),
|
ao_app->get_image_suffix(ao_app->get_character_path(m_chatmessage[CHAR_NAME], "(c)" + m_chatmessage[EMOTE])),
|
||||||
@ -3304,6 +3424,9 @@ void Courtroom::chat_tick()
|
|||||||
ui_vp_player_char->load_image(filename, m_chatmessage[CHAR_NAME], 0,
|
ui_vp_player_char->load_image(filename, m_chatmessage[CHAR_NAME], 0,
|
||||||
false);
|
false);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
else // We're a narrator msg
|
||||||
|
anim_state = 3;
|
||||||
QString f_char;
|
QString f_char;
|
||||||
QString f_custom_theme;
|
QString f_custom_theme;
|
||||||
if (ao_app->is_customchat_enabled()) {
|
if (ao_app->is_customchat_enabled()) {
|
||||||
@ -3346,22 +3469,9 @@ void Courtroom::chat_tick()
|
|||||||
|
|
||||||
// Alignment characters
|
// Alignment characters
|
||||||
if (tick_pos < 2) {
|
if (tick_pos < 2) {
|
||||||
if (f_rest.startsWith("~~")) {
|
if (f_rest.startsWith("~~") || f_rest.startsWith("~>") || f_rest.startsWith("<>"))
|
||||||
tick_pos = f_rest.indexOf("~~");
|
|
||||||
f_rest.remove(tick_pos, 2);
|
|
||||||
tick_pos += 2;
|
tick_pos += 2;
|
||||||
}
|
}
|
||||||
else if (f_rest.startsWith("~>")) {
|
|
||||||
tick_pos = f_rest.indexOf("~>");
|
|
||||||
f_rest.remove(tick_pos, 2);
|
|
||||||
tick_pos += 2;
|
|
||||||
}
|
|
||||||
else if (f_rest.startsWith("<>")) {
|
|
||||||
tick_pos = f_rest.indexOf("<>");
|
|
||||||
f_rest.remove(tick_pos, 2);
|
|
||||||
tick_pos += 2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
f_rest.remove(0, tick_pos);
|
f_rest.remove(0, tick_pos);
|
||||||
QTextBoundaryFinder tbf(QTextBoundaryFinder::Grapheme, f_rest);
|
QTextBoundaryFinder tbf(QTextBoundaryFinder::Grapheme, f_rest);
|
||||||
QString f_character;
|
QString f_character;
|
||||||
@ -3504,6 +3614,7 @@ void Courtroom::chat_tick()
|
|||||||
msg_delay = qMin(max_delay, msg_delay * punctuation_modifier);
|
msg_delay = qMin(max_delay, msg_delay * punctuation_modifier);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (m_chatmessage[EMOTE] != "") {
|
||||||
// If this color is talking
|
// If this color is talking
|
||||||
if (color_is_talking && anim_state != 2 &&
|
if (color_is_talking && anim_state != 2 &&
|
||||||
anim_state <
|
anim_state <
|
||||||
@ -3527,6 +3638,7 @@ void Courtroom::chat_tick()
|
|||||||
false);
|
false);
|
||||||
anim_state = 3;
|
anim_state = 3;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
// Continue ticking
|
// Continue ticking
|
||||||
chat_tick_timer->start(msg_delay);
|
chat_tick_timer->start(msg_delay);
|
||||||
}
|
}
|
||||||
@ -3677,6 +3789,11 @@ void Courtroom::handle_song(QStringList *p_contents)
|
|||||||
if (f_contents.size() < 2)
|
if (f_contents.size() < 2)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
bool ok; // Used for charID, channel, effect check
|
||||||
|
bool looping = false; // No loop due to outdated server using serverside looping
|
||||||
|
int channel = 0; // Channel 0 is 'master music', other for ambient
|
||||||
|
int effect_flags = 0; // No effects by default - vanilla functionality
|
||||||
|
|
||||||
QString f_song = f_contents.at(0);
|
QString f_song = f_contents.at(0);
|
||||||
QString f_song_clear = f_song.left(f_song.lastIndexOf("."));
|
QString f_song_clear = f_song.left(f_song.lastIndexOf("."));
|
||||||
if (f_song.startsWith("http")) {
|
if (f_song.startsWith("http")) {
|
||||||
@ -3684,69 +3801,43 @@ void Courtroom::handle_song(QStringList *p_contents)
|
|||||||
QString f_song_decoded = QUrl::fromPercentEncoding(f_song_bytearray);
|
QString f_song_decoded = QUrl::fromPercentEncoding(f_song_bytearray);
|
||||||
f_song_clear = f_song_decoded.left(f_song_decoded.lastIndexOf("."));
|
f_song_clear = f_song_decoded.left(f_song_decoded.lastIndexOf("."));
|
||||||
}
|
}
|
||||||
f_song_clear = f_song_clear.right(f_song_clear.length() -
|
f_song_clear = f_song_clear.right(f_song_clear.length() - (f_song_clear.lastIndexOf("/") + 1));
|
||||||
(f_song_clear.lastIndexOf("/") + 1));
|
|
||||||
int n_char = f_contents.at(1).toInt();
|
|
||||||
|
|
||||||
// Assume the song doesn't loop unless told otherwise (due to most outdated
|
int n_char = f_contents.at(1).toInt(&ok);
|
||||||
// servers handling looping through serverside)
|
if (!ok)
|
||||||
bool looping = false;
|
return;
|
||||||
// Channel 0 is the 'master music', other channels would commonly be used for
|
|
||||||
// ambience
|
|
||||||
int channel = 0;
|
|
||||||
// No effects assumed by default - vanilla functionality
|
|
||||||
int effect_flags = 0;
|
|
||||||
|
|
||||||
if (n_char < 0 || n_char >= char_list.size()) {
|
|
||||||
int channel = 0;
|
|
||||||
if (p_contents->length() > 3 && p_contents->at(3) == "1")
|
if (p_contents->length() > 3 && p_contents->at(3) == "1")
|
||||||
looping = true;
|
looping = true;
|
||||||
|
|
||||||
if (p_contents->length() >
|
if (p_contents->length() > 4) {
|
||||||
4) // eyyy we want to change this song's CHANNEL huh
|
// eyyy we want to change this song's CHANNEL huh
|
||||||
channel = p_contents->at(4).toInt(); // let the music player handle it if
|
// let the music player handle it if it's bigger than the channel list
|
||||||
// it's bigger than the channel list
|
channel = p_contents->at(4).toInt(&ok);
|
||||||
|
if (!ok)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (p_contents->length() > 5) {
|
||||||
|
// Flags provided to us by server such as Fade In, Fade Out, Sync Pos etc.
|
||||||
|
effect_flags = p_contents->at(5).toInt(&ok);
|
||||||
|
if (!ok)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (p_contents->length() > 5) // Flags provided to us by server such as Fade
|
if(!file_exists(ao_app->get_sfx_suffix(ao_app->get_music_path(f_song))) && !f_song.startsWith("http")
|
||||||
// In, Fade Out, Sync Pos etc.
|
&& f_song != "~stop.mp3" && !ao_app->asset_url.isEmpty()) {
|
||||||
{
|
f_song = (ao_app->asset_url + "sounds/music/" + f_song).toLower();
|
||||||
effect_flags = p_contents->at(5).toInt();
|
|
||||||
}
|
}
|
||||||
music_player->play(f_song, channel, looping, effect_flags);
|
|
||||||
if (f_song == "~stop.mp3")
|
bool is_stop = (f_song == "~stop.mp3");
|
||||||
ui_music_name->setText(tr("None"));
|
if (n_char >= 0 && n_char < char_list.size()) {
|
||||||
else if (channel == 0) {
|
|
||||||
if (file_exists(ao_app->get_sfx_suffix(ao_app->get_music_path(f_song))) && !f_song.startsWith("http"))
|
|
||||||
ui_music_name->setText(f_song_clear);
|
|
||||||
else if (f_song.startsWith("http"))
|
|
||||||
ui_music_name->setText(tr("[STREAM] %1").arg(f_song_clear));
|
|
||||||
else
|
|
||||||
ui_music_name->setText(tr("[MISSING] %1").arg(f_song_clear));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
QString str_char = char_list.at(n_char).name;
|
QString str_char = char_list.at(n_char).name;
|
||||||
QString str_show = ao_app->get_showname(str_char);
|
QString str_show = ao_app->get_showname(str_char);
|
||||||
|
|
||||||
if (p_contents->length() > 2) {
|
if (p_contents->length() > 2) {
|
||||||
if (p_contents->at(2) != "") {
|
if (p_contents->at(2) != "") {
|
||||||
str_show = p_contents->at(2);
|
str_show = p_contents->at(2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (p_contents->length() > 3 && p_contents->at(3) == "1") {
|
|
||||||
looping = true;
|
|
||||||
}
|
|
||||||
if (p_contents->length() >
|
|
||||||
4) // eyyy we want to change this song's CHANNEL huh
|
|
||||||
channel = p_contents->at(4).toInt(); // let the music player handle it if
|
|
||||||
// it's bigger than the channel list
|
|
||||||
|
|
||||||
if (p_contents->length() > 5) // Flags provided to us by server such as Fade
|
|
||||||
// In, Fade Out, Sync Pos etc.
|
|
||||||
{
|
|
||||||
effect_flags = p_contents->at(5).toInt();
|
|
||||||
}
|
|
||||||
bool is_stop = f_song == "~stop.mp3";
|
|
||||||
if (!mute_map.value(n_char)) {
|
if (!mute_map.value(n_char)) {
|
||||||
if (is_stop) {
|
if (is_stop) {
|
||||||
log_ic_text(str_char, str_show, "", tr("has stopped the music"));
|
log_ic_text(str_char, str_show, "", tr("has stopped the music"));
|
||||||
@ -3756,18 +3847,29 @@ void Courtroom::handle_song(QStringList *p_contents)
|
|||||||
log_ic_text(str_char, str_show, f_song, tr("has played a song"));
|
log_ic_text(str_char, str_show, f_song, tr("has played a song"));
|
||||||
append_ic_text(f_song_clear, str_show, tr("has played a song"));
|
append_ic_text(f_song_clear, str_show, tr("has played a song"));
|
||||||
}
|
}
|
||||||
music_player->play(f_song, channel, looping, effect_flags);
|
}
|
||||||
if (is_stop)
|
}
|
||||||
|
|
||||||
|
int error_code = music_player->play(f_song, channel, looping, effect_flags);
|
||||||
|
|
||||||
|
if (is_stop) {
|
||||||
ui_music_name->setText(tr("None"));
|
ui_music_name->setText(tr("None"));
|
||||||
else if (channel == 0) {
|
return;
|
||||||
if (file_exists(ao_app->get_sfx_suffix(ao_app->get_music_path(f_song))) && !f_song.startsWith("http"))
|
}
|
||||||
ui_music_name->setText(f_song_clear);
|
|
||||||
else if (f_song.startsWith("http"))
|
if (error_code == BASS_ERROR_HANDLE) { // Cheap hack to see if file missing
|
||||||
ui_music_name->setText(tr("[STREAM] %1").arg(f_song_clear));
|
|
||||||
else
|
|
||||||
ui_music_name->setText(tr("[MISSING] %1").arg(f_song_clear));
|
ui_music_name->setText(tr("[MISSING] %1").arg(f_song_clear));
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (f_song.startsWith("http") && channel == 0) {
|
||||||
|
ui_music_name->setText(tr("[STREAM] %1").arg(f_song_clear));
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (channel == 0){
|
||||||
|
ui_music_name->setText(f_song_clear);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3876,15 +3978,9 @@ void Courtroom::case_called(QString msg, bool def, bool pro, bool jud, bool jur,
|
|||||||
{
|
{
|
||||||
if (ui_casing->isChecked()) {
|
if (ui_casing->isChecked()) {
|
||||||
ui_server_chatlog->append(msg);
|
ui_server_chatlog->append(msg);
|
||||||
if ((ao_app->get_casing_defence_enabled() && def) ||
|
|
||||||
(ao_app->get_casing_prosecution_enabled() && pro) ||
|
|
||||||
(ao_app->get_casing_judge_enabled() && jud) ||
|
|
||||||
(ao_app->get_casing_juror_enabled() && jur) ||
|
|
||||||
(ao_app->get_casing_steno_enabled() && steno)) {
|
|
||||||
modcall_player->play(ao_app->get_court_sfx("case_call"));
|
modcall_player->play(ao_app->get_court_sfx("case_call"));
|
||||||
ao_app->alert(this);
|
ao_app->alert(this);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Courtroom::on_ooc_return_pressed()
|
void Courtroom::on_ooc_return_pressed()
|
||||||
@ -4785,7 +4881,7 @@ void Courtroom::music_random()
|
|||||||
QTreeWidgetItemIterator::NotHidden |
|
QTreeWidgetItemIterator::NotHidden |
|
||||||
QTreeWidgetItemIterator::NoChildren);
|
QTreeWidgetItemIterator::NoChildren);
|
||||||
while (*it) {
|
while (*it) {
|
||||||
if ((*it)->parent()->isExpanded()) {
|
if (!(*it)->parent() || (*it)->parent()->isExpanded()) { // add top level songs and songs in expanded categories
|
||||||
clist += (*it);
|
clist += (*it);
|
||||||
}
|
}
|
||||||
++it;
|
++it;
|
||||||
@ -5105,7 +5201,7 @@ void Courtroom::set_text_color_dropdown()
|
|||||||
color_row_to_number.append(c);
|
color_row_to_number.append(c);
|
||||||
}
|
}
|
||||||
for (int c = 0; c < max_colors; ++c) {
|
for (int c = 0; c < max_colors; ++c) {
|
||||||
QColor color = ao_app->get_chat_color("c" + QString::number(c), "default");
|
QColor color = ao_app->get_chat_color("c" + QString::number(c), "");
|
||||||
default_color_rgb_list.append(color);
|
default_color_rgb_list.append(color);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -5245,9 +5341,8 @@ void Courtroom::on_reload_theme_clicked()
|
|||||||
set_widgets();
|
set_widgets();
|
||||||
update_character(m_cid);
|
update_character(m_cid);
|
||||||
enter_courtroom();
|
enter_courtroom();
|
||||||
|
gen_char_rgb_list(ao_app->get_chat(current_char));
|
||||||
|
|
||||||
anim_state = 4;
|
|
||||||
text_state = 3;
|
|
||||||
objection_custom = "";
|
objection_custom = "";
|
||||||
|
|
||||||
// to update status on the background
|
// to update status on the background
|
||||||
|
@ -150,7 +150,8 @@ void DemoServer::handle_packet(AOPacket packet)
|
|||||||
}
|
}
|
||||||
else if (header == "CC") {
|
else if (header == "CC") {
|
||||||
client_sock->write("PV#0#CID#-1#%");
|
client_sock->write("PV#0#CID#-1#%");
|
||||||
client_sock->write("CT#DEMO#Demo file loaded. Send /play or > in OOC to begin playback.#1#%");
|
QString packet = "CT#DEMO#" + tr("Demo file loaded. Send /play or > in OOC to begin playback.") + "#1#%";
|
||||||
|
client_sock->write(packet.toUtf8());
|
||||||
}
|
}
|
||||||
else if (header == "CT") {
|
else if (header == "CT") {
|
||||||
if (contents[1].startsWith("/load"))
|
if (contents[1].startsWith("/load"))
|
||||||
@ -159,14 +160,17 @@ void DemoServer::handle_packet(AOPacket packet)
|
|||||||
if (path.isEmpty())
|
if (path.isEmpty())
|
||||||
return;
|
return;
|
||||||
load_demo(path);
|
load_demo(path);
|
||||||
client_sock->write("CT#DEMO#Demo file loaded. Send /play or > in OOC to begin playback.#1#%");
|
QString packet = "CT#DEMO#" + tr("Demo file loaded. Send /play or > in OOC to begin playback.") + "#1#%";
|
||||||
|
client_sock->write(packet.toUtf8());
|
||||||
|
reset_state();
|
||||||
}
|
}
|
||||||
else if (contents[1].startsWith("/play") || contents[1] == ">")
|
else if (contents[1].startsWith("/play") || contents[1] == ">")
|
||||||
{
|
{
|
||||||
if (timer->interval() != 0 && !timer->isActive())
|
if (timer->interval() != 0 && !timer->isActive())
|
||||||
{
|
{
|
||||||
timer->start();
|
timer->start();
|
||||||
client_sock->write("CT#DEMO#Resuming playback.#1#%");
|
QString packet = "CT#DEMO#" + tr("Resuming playback.") + "#1#%";
|
||||||
|
client_sock->write(packet.toUtf8());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -180,7 +184,8 @@ void DemoServer::handle_packet(AOPacket packet)
|
|||||||
int timeleft = timer->remainingTime();
|
int timeleft = timer->remainingTime();
|
||||||
timer->stop();
|
timer->stop();
|
||||||
timer->setInterval(timeleft);
|
timer->setInterval(timeleft);
|
||||||
client_sock->write("CT#DEMO#Pausing playback.#1#%");
|
QString packet = "CT#DEMO#" + tr("Pausing playback.") + "#1#%";
|
||||||
|
client_sock->write(packet.toUtf8());
|
||||||
}
|
}
|
||||||
else if (contents[1].startsWith("/max_wait"))
|
else if (contents[1].startsWith("/max_wait"))
|
||||||
{
|
{
|
||||||
@ -194,29 +199,44 @@ void DemoServer::handle_packet(AOPacket packet)
|
|||||||
if (p_max_wait < 0)
|
if (p_max_wait < 0)
|
||||||
p_max_wait = -1;
|
p_max_wait = -1;
|
||||||
max_wait = p_max_wait;
|
max_wait = p_max_wait;
|
||||||
client_sock->write("CT#DEMO#Setting max_wait to ");
|
QString packet = "CT#DEMO#" + tr("Setting max_wait to") + " ";
|
||||||
|
client_sock->write(packet.toUtf8());
|
||||||
client_sock->write(QString::number(max_wait).toUtf8());
|
client_sock->write(QString::number(max_wait).toUtf8());
|
||||||
client_sock->write(" milliseconds.#1#%");
|
packet = " " + tr("milliseconds.") + "#1#%";
|
||||||
|
client_sock->write(packet.toUtf8());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
client_sock->write("CT#DEMO#Not a valid integer!#1#%");
|
QString packet = "CT#DEMO#" + tr("Not a valid integer!") + "#1#%";
|
||||||
|
client_sock->write(packet.toUtf8());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
client_sock->write("CT#DEMO#Current max_wait is ");
|
|
||||||
|
QString packet = "CT#DEMO#" + tr("Current max_wait is") + " ";
|
||||||
|
client_sock->write(packet.toUtf8());
|
||||||
client_sock->write(QString::number(max_wait).toUtf8());
|
client_sock->write(QString::number(max_wait).toUtf8());
|
||||||
client_sock->write(" milliseconds.#1#%");
|
packet = " " + tr("milliseconds.") + "#1#%";
|
||||||
|
client_sock->write(packet.toUtf8());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (contents[1].startsWith("/reload"))
|
||||||
|
{
|
||||||
|
load_demo(p_path);
|
||||||
|
QString packet = "CT#DEMO#" + tr("Current demo file reloaded. Send /play or > in OOC to begin playback.") + "#1#%";
|
||||||
|
client_sock->write(packet.toUtf8());
|
||||||
|
reset_state();
|
||||||
|
}
|
||||||
else if (contents[1].startsWith("/min_wait"))
|
else if (contents[1].startsWith("/min_wait"))
|
||||||
{
|
{
|
||||||
client_sock->write("CT#DEMO#min_wait is deprecated. Use the client Settings for minimum wait instead!");
|
QString packet = "CT#DEMO#" + tr("min_wait is deprecated. Use the client Settings for minimum wait instead!") + "#1#%";
|
||||||
|
client_sock->write(packet.toUtf8());
|
||||||
}
|
}
|
||||||
else if (contents[1].startsWith("/help"))
|
else if (contents[1].startsWith("/help"))
|
||||||
{
|
{
|
||||||
client_sock->write("CT#DEMO#Available commands:\nload, play, pause, max_wait, help#1#%");
|
QString packet = "CT#DEMO#" + tr("Available commands:\nload, reload, play, pause, max_wait, help") + "#1#%";
|
||||||
|
client_sock->write(packet.toUtf8());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -227,18 +247,96 @@ void DemoServer::load_demo(QString filename)
|
|||||||
demo_file.open(QIODevice::ReadOnly);
|
demo_file.open(QIODevice::ReadOnly);
|
||||||
if (!demo_file.isOpen())
|
if (!demo_file.isOpen())
|
||||||
return;
|
return;
|
||||||
|
// Clear demo data
|
||||||
demo_data.clear();
|
demo_data.clear();
|
||||||
|
// Set the demo filepath
|
||||||
p_path = filename;
|
p_path = filename;
|
||||||
|
// Process the demo file
|
||||||
QTextStream demo_stream(&demo_file);
|
QTextStream demo_stream(&demo_file);
|
||||||
demo_stream.setCodec("UTF-8");
|
demo_stream.setCodec("UTF-8");
|
||||||
QString line = demo_stream.readLine();
|
QString line = demo_stream.readLine();
|
||||||
while (!line.isNull()) {
|
while (!line.isNull()) {
|
||||||
if (!line.endsWith("%")) {
|
while (!line.endsWith("%")) {
|
||||||
line += "\n";
|
line += "\n";
|
||||||
|
line += demo_stream.readLine();
|
||||||
}
|
}
|
||||||
demo_data.enqueue(line);
|
demo_data.enqueue(line);
|
||||||
line = demo_stream.readLine();
|
line = demo_stream.readLine();
|
||||||
}
|
}
|
||||||
|
demo_file.flush();
|
||||||
|
demo_file.close();
|
||||||
|
|
||||||
|
// No-shenanigans 2.9.0 demo file with the dreaded demo desync bug detected https://github.com/AttorneyOnline/AO2-Client/pull/496
|
||||||
|
// If we don't start with the SC packet this means user-edited weirdo shenanigans. Don't screw around with those.
|
||||||
|
if (demo_data.head().startsWith("SC#") && demo_data.last().startsWith("wait#")) {
|
||||||
|
qDebug() << "Loaded a broken pre-2.9.1 demo file, with the wait desync issue!";
|
||||||
|
QMessageBox *msgBox = new QMessageBox;
|
||||||
|
msgBox->setAttribute(Qt::WA_DeleteOnClose);
|
||||||
|
msgBox->setTextFormat(Qt::RichText);
|
||||||
|
msgBox->setText("This appears to be a <b>broken</b> pre-2.9.1 demo file with the <a href=https://github.com/AttorneyOnline/AO2-Client/pull/496>wait desync issue</a>!<br>Do you want to correct this file? <i>If you refuse, this demo will be desynchronized!</i>");
|
||||||
|
msgBox->setWindowTitle("Pre-2.9.1 demo detected!");
|
||||||
|
msgBox->setStandardButtons(QMessageBox::NoButton);
|
||||||
|
QTimer::singleShot(2000, msgBox, std::bind(&QMessageBox::setStandardButtons,msgBox,QMessageBox::Yes|QMessageBox::No));
|
||||||
|
int ret = msgBox->exec();
|
||||||
|
QQueue <QString> p_demo_data;
|
||||||
|
switch (ret) {
|
||||||
|
case QMessageBox::Yes:
|
||||||
|
qDebug() << "Making a backup of the broken demo...";
|
||||||
|
QFile::copy(filename, filename + ".backup");
|
||||||
|
while (!demo_data.isEmpty()) {
|
||||||
|
QString current_packet = demo_data.dequeue();
|
||||||
|
// TODO: faster way of doing this, maybe with QtConcurrent's MapReduce methods?
|
||||||
|
if (!current_packet.startsWith("SC#") && current_packet.startsWith("wait#")) {
|
||||||
|
p_demo_data.insert(qMax(1, p_demo_data.size()-1), current_packet);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
p_demo_data.enqueue(current_packet);
|
||||||
|
}
|
||||||
|
if (demo_file.open(QIODevice::WriteOnly | QIODevice::Text |
|
||||||
|
QIODevice::Truncate)) {
|
||||||
|
QTextStream out(&demo_file);
|
||||||
|
out.setCodec("UTF-8");
|
||||||
|
out << p_demo_data.dequeue();
|
||||||
|
for (QString line : p_demo_data) {
|
||||||
|
out << "\n" << line;
|
||||||
|
}
|
||||||
|
demo_file.flush();
|
||||||
|
demo_file.close();
|
||||||
|
}
|
||||||
|
load_demo(filename);
|
||||||
|
break;
|
||||||
|
case QMessageBox::No:
|
||||||
|
// No was clicked
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
// should never be reached
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void DemoServer::reset_state()
|
||||||
|
{
|
||||||
|
// Reset evidence list
|
||||||
|
client_sock->write("LE##%");
|
||||||
|
|
||||||
|
// Reset timers
|
||||||
|
client_sock->write("TI#0#3#0#%");
|
||||||
|
client_sock->write("TI#0#1#0#%");
|
||||||
|
client_sock->write("TI#1#1#0#%");
|
||||||
|
client_sock->write("TI#1#3#0#%");
|
||||||
|
client_sock->write("TI#2#1#0#%");
|
||||||
|
client_sock->write("TI#2#3#0#%");
|
||||||
|
client_sock->write("TI#3#1#0#%");
|
||||||
|
client_sock->write("TI#3#3#0#%");
|
||||||
|
client_sock->write("TI#4#1#0#%");
|
||||||
|
client_sock->write("TI#4#3#0#%");
|
||||||
|
|
||||||
|
// Set the BG to default (also breaks up the message queue)
|
||||||
|
client_sock->write("BN#default#wit#%");
|
||||||
|
|
||||||
|
// Stop the wait packet timer
|
||||||
|
timer->stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
void DemoServer::playback()
|
void DemoServer::playback()
|
||||||
@ -251,25 +349,33 @@ void DemoServer::playback()
|
|||||||
if (current_packet.startsWith("MS#"))
|
if (current_packet.startsWith("MS#"))
|
||||||
elapsed_time = 0;
|
elapsed_time = 0;
|
||||||
|
|
||||||
while (!current_packet.startsWith("wait") && !demo_data.isEmpty()) {
|
while (!current_packet.startsWith("wait#")) {
|
||||||
client_sock->write(current_packet.toUtf8());
|
client_sock->write(current_packet.toUtf8());
|
||||||
|
if (demo_data.isEmpty())
|
||||||
|
break;
|
||||||
current_packet = demo_data.dequeue();
|
current_packet = demo_data.dequeue();
|
||||||
}
|
}
|
||||||
if (!demo_data.isEmpty()) {
|
if (!demo_data.isEmpty()) {
|
||||||
AOPacket wait_packet = AOPacket(current_packet);
|
AOPacket wait_packet = AOPacket(current_packet);
|
||||||
|
|
||||||
int duration = wait_packet.get_contents().at(0).toInt();
|
int duration = wait_packet.get_contents().at(0).toInt();
|
||||||
if (max_wait != -1 && duration + elapsed_time > max_wait) {
|
if (max_wait != -1) {
|
||||||
|
if (duration + elapsed_time > max_wait) {
|
||||||
duration = qMax(0, max_wait - elapsed_time);
|
duration = qMax(0, max_wait - elapsed_time);
|
||||||
// Skip the difference on the timers
|
// Skip the difference on the timers
|
||||||
emit skip_timers(wait_packet.get_contents().at(0).toInt() - duration);
|
emit skip_timers(wait_packet.get_contents().at(0).toInt() - duration);
|
||||||
}
|
}
|
||||||
|
else if (timer->interval() != 0 && duration + elapsed_time > timer->interval()) {
|
||||||
|
duration = qMax(0, timer->interval() - elapsed_time);
|
||||||
|
emit skip_timers(wait_packet.get_contents().at(0).toInt() - duration);
|
||||||
|
}
|
||||||
|
}
|
||||||
elapsed_time += duration;
|
elapsed_time += duration;
|
||||||
timer->start(duration);
|
timer->start(duration);
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
{
|
QString end_packet = "CT#DEMO#" + tr("Reached the end of the demo file. Send /play or > in OOC to restart, or /load to open a new file.") + "#1#%";
|
||||||
client_sock->write("CT#DEMO#Reached the end of the demo file. Send /play or > in OOC to restart, or /load to open a new file.#1#%");
|
client_sock->write(end_packet.toUtf8());
|
||||||
timer->setInterval(0);
|
timer->setInterval(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,11 +5,15 @@
|
|||||||
void Courtroom::initialize_emotes()
|
void Courtroom::initialize_emotes()
|
||||||
{
|
{
|
||||||
ui_emotes = new QWidget(this);
|
ui_emotes = new QWidget(this);
|
||||||
|
ui_emotes->setObjectName("ui_emotes");
|
||||||
|
|
||||||
ui_emote_left = new AOButton(this, ao_app);
|
ui_emote_left = new AOButton(this, ao_app);
|
||||||
|
ui_emote_left->setObjectName("ui_emote_left");
|
||||||
ui_emote_right = new AOButton(this, ao_app);
|
ui_emote_right = new AOButton(this, ao_app);
|
||||||
|
ui_emote_right->setObjectName("ui_emote_right");
|
||||||
|
|
||||||
ui_emote_dropdown = new QComboBox(this);
|
ui_emote_dropdown = new QComboBox(this);
|
||||||
|
ui_emote_dropdown->setObjectName("ui_emote_dropdown");
|
||||||
|
|
||||||
connect(ui_emote_left, SIGNAL(clicked()), this,
|
connect(ui_emote_left, SIGNAL(clicked()), this,
|
||||||
SLOT(on_emote_left_clicked()));
|
SLOT(on_emote_left_clicked()));
|
||||||
|
@ -3,47 +3,64 @@
|
|||||||
void Courtroom::initialize_evidence()
|
void Courtroom::initialize_evidence()
|
||||||
{
|
{
|
||||||
ui_evidence = new AOImage(this, ao_app);
|
ui_evidence = new AOImage(this, ao_app);
|
||||||
|
ui_evidence->setObjectName("ui_evidence");
|
||||||
|
|
||||||
// ui_evidence_name = new QLabel(ui_evidence);
|
// ui_evidence_name = new QLabel(ui_evidence);
|
||||||
ui_evidence_name = new AOLineEdit(ui_evidence);
|
ui_evidence_name = new AOLineEdit(ui_evidence);
|
||||||
ui_evidence_name->setAlignment(Qt::AlignCenter);
|
ui_evidence_name->setAlignment(Qt::AlignCenter);
|
||||||
ui_evidence_name->setFrame(false);
|
ui_evidence_name->setFrame(false);
|
||||||
|
ui_evidence_name->setObjectName("ui_evidence_name");
|
||||||
|
|
||||||
ui_evidence_buttons = new QWidget(ui_evidence);
|
ui_evidence_buttons = new QWidget(ui_evidence);
|
||||||
|
ui_evidence_buttons->setObjectName("ui_evidence_buttons");
|
||||||
|
|
||||||
ui_evidence_left = new AOButton(ui_evidence, ao_app);
|
ui_evidence_left = new AOButton(ui_evidence, ao_app);
|
||||||
|
ui_evidence_left->setObjectName("ui_evidence_left");
|
||||||
ui_evidence_right = new AOButton(ui_evidence, ao_app);
|
ui_evidence_right = new AOButton(ui_evidence, ao_app);
|
||||||
|
ui_evidence_right->setObjectName("ui_evidence_right");
|
||||||
ui_evidence_present = new AOButton(ui_evidence, ao_app);
|
ui_evidence_present = new AOButton(ui_evidence, ao_app);
|
||||||
ui_evidence_present->setToolTip(tr("Present this piece of evidence to "
|
ui_evidence_present->setToolTip(tr("Present this piece of evidence to "
|
||||||
"everyone on your next spoken message"));
|
"everyone on your next spoken message"));
|
||||||
|
ui_evidence_present->setObjectName("ui_evidence_present");
|
||||||
|
|
||||||
ui_evidence_switch = new AOButton(ui_evidence, ao_app);
|
ui_evidence_switch = new AOButton(ui_evidence, ao_app);
|
||||||
|
ui_evidence_switch->setObjectName("ui_evidence_switch");
|
||||||
ui_evidence_transfer = new AOButton(ui_evidence, ao_app);
|
ui_evidence_transfer = new AOButton(ui_evidence, ao_app);
|
||||||
|
ui_evidence_transfer->setObjectName("ui_evidence_transfer");
|
||||||
|
|
||||||
ui_evidence_save = new AOButton(ui_evidence, ao_app);
|
ui_evidence_save = new AOButton(ui_evidence, ao_app);
|
||||||
ui_evidence_save->setToolTip(tr("Save evidence to an .ini file."));
|
ui_evidence_save->setToolTip(tr("Save evidence to an .ini file."));
|
||||||
|
ui_evidence_save->setObjectName("ui_evidence_save");
|
||||||
ui_evidence_load = new AOButton(ui_evidence, ao_app);
|
ui_evidence_load = new AOButton(ui_evidence, ao_app);
|
||||||
ui_evidence_load->setToolTip(tr("Load evidence from an .ini file."));
|
ui_evidence_load->setToolTip(tr("Load evidence from an .ini file."));
|
||||||
|
ui_evidence_load->setObjectName("ui_evidence_load");
|
||||||
|
|
||||||
ui_evidence_overlay = new AOImage(ui_evidence, ao_app);
|
ui_evidence_overlay = new AOImage(ui_evidence, ao_app);
|
||||||
|
ui_evidence_overlay->setObjectName("ui_evidence_overlay");
|
||||||
|
|
||||||
ui_evidence_delete = new AOButton(ui_evidence_overlay, ao_app);
|
ui_evidence_delete = new AOButton(ui_evidence_overlay, ao_app);
|
||||||
ui_evidence_delete->setToolTip(tr("Destroy this piece of evidence"));
|
ui_evidence_delete->setToolTip(tr("Destroy this piece of evidence"));
|
||||||
|
ui_evidence_delete->setObjectName("ui_evidence_delete");
|
||||||
ui_evidence_image_name = new AOLineEdit(ui_evidence_overlay);
|
ui_evidence_image_name = new AOLineEdit(ui_evidence_overlay);
|
||||||
|
ui_evidence_image_name->setObjectName("ui_evidence_image_name");
|
||||||
ui_evidence_image_button = new AOButton(ui_evidence_overlay, ao_app);
|
ui_evidence_image_button = new AOButton(ui_evidence_overlay, ao_app);
|
||||||
ui_evidence_image_button->setText(tr("Choose.."));
|
ui_evidence_image_button->setText(tr("Choose.."));
|
||||||
|
ui_evidence_image_button->setObjectName("ui_evidence_image_button");
|
||||||
ui_evidence_x = new AOButton(ui_evidence_overlay, ao_app);
|
ui_evidence_x = new AOButton(ui_evidence_overlay, ao_app);
|
||||||
ui_evidence_x->setToolTip(
|
ui_evidence_x->setToolTip(
|
||||||
tr("Close the evidence display/editing overlay.\n"
|
tr("Close the evidence display/editing overlay.\n"
|
||||||
"You will be prompted if there's any unsaved changes."));
|
"You will be prompted if there's any unsaved changes."));
|
||||||
|
ui_evidence_x->setObjectName("ui_evidence_x");
|
||||||
ui_evidence_ok = new AOButton(ui_evidence_overlay, ao_app);
|
ui_evidence_ok = new AOButton(ui_evidence_overlay, ao_app);
|
||||||
ui_evidence_ok->setToolTip(tr("Save any changes made to this piece of "
|
ui_evidence_ok->setToolTip(tr("Save any changes made to this piece of "
|
||||||
"evidence and send them to server."));
|
"evidence and send them to server."));
|
||||||
|
ui_evidence_ok->setObjectName("ui_evidence_ok");
|
||||||
|
|
||||||
ui_evidence_description = new AOTextEdit(ui_evidence_overlay);
|
ui_evidence_description = new AOTextEdit(ui_evidence_overlay);
|
||||||
ui_evidence_description->setFrameStyle(QFrame::NoFrame);
|
ui_evidence_description->setFrameStyle(QFrame::NoFrame);
|
||||||
ui_evidence_description->setToolTip(
|
ui_evidence_description->setToolTip(
|
||||||
tr("Double-click to edit. Press [X] to update your changes."));
|
tr("Double-click to edit. Press [X] to update your changes."));
|
||||||
|
ui_evidence_description->setObjectName("ui_evidence_description");
|
||||||
|
|
||||||
connect(ui_evidence_name, SIGNAL(returnPressed()), this,
|
connect(ui_evidence_name, SIGNAL(returnPressed()), this,
|
||||||
SLOT(on_evidence_name_edited()));
|
SLOT(on_evidence_name_edited()));
|
||||||
|
@ -12,50 +12,68 @@ Lobby::Lobby(AOApplication *p_ao_app) : QMainWindow()
|
|||||||
{
|
{
|
||||||
ao_app = p_ao_app;
|
ao_app = p_ao_app;
|
||||||
|
|
||||||
|
//
|
||||||
this->setWindowTitle(tr("Attorney Online 2"));
|
this->setWindowTitle(tr("Attorney Online 2"));
|
||||||
this->setWindowIcon(QIcon(":/logo.png"));
|
this->setWindowIcon(QIcon(":/logo.png"));
|
||||||
this->setWindowFlags( (this->windowFlags() | Qt::CustomizeWindowHint) & ~Qt::WindowMaximizeButtonHint);
|
this->setWindowFlags( (this->windowFlags() | Qt::CustomizeWindowHint) & ~Qt::WindowMaximizeButtonHint);
|
||||||
|
|
||||||
ui_background = new AOImage(this, ao_app);
|
ui_background = new AOImage(this, ao_app);
|
||||||
|
ui_background->setObjectName("ui_background");
|
||||||
ui_public_servers = new AOButton(this, ao_app);
|
ui_public_servers = new AOButton(this, ao_app);
|
||||||
|
ui_public_servers->setObjectName("ui_public_servers");
|
||||||
ui_favorites = new AOButton(this, ao_app);
|
ui_favorites = new AOButton(this, ao_app);
|
||||||
|
ui_favorites->setObjectName("ui_favorites");
|
||||||
ui_refresh = new AOButton(this, ao_app);
|
ui_refresh = new AOButton(this, ao_app);
|
||||||
|
ui_refresh->setObjectName("ui_refresh");
|
||||||
ui_add_to_fav = new AOButton(this, ao_app);
|
ui_add_to_fav = new AOButton(this, ao_app);
|
||||||
|
ui_add_to_fav->setObjectName("ui_add_to_fav");
|
||||||
ui_connect = new AOButton(this, ao_app);
|
ui_connect = new AOButton(this, ao_app);
|
||||||
|
ui_connect->setObjectName("ui_connect");
|
||||||
ui_version = new QLabel(this);
|
ui_version = new QLabel(this);
|
||||||
|
ui_version->setObjectName("ui_version");
|
||||||
ui_about = new AOButton(this, ao_app);
|
ui_about = new AOButton(this, ao_app);
|
||||||
|
ui_about->setObjectName("ui_about");
|
||||||
ui_settings = new AOButton(this, ao_app);
|
ui_settings = new AOButton(this, ao_app);
|
||||||
|
ui_settings->setObjectName("ui_settings");
|
||||||
|
|
||||||
ui_server_list = new QTreeWidget(this);
|
ui_server_list = new QTreeWidget(this);
|
||||||
ui_server_list->setHeaderLabels({"#", "Name"}); //, "Players"});
|
ui_server_list->setHeaderLabels({"#", "Name"});
|
||||||
ui_server_list->setTextElideMode(Qt::ElideNone);
|
ui_server_list->setTextElideMode(Qt::ElideNone);
|
||||||
ui_server_list->header()->setMinimumSectionSize(24);
|
ui_server_list->header()->setMinimumSectionSize(24);
|
||||||
ui_server_list->header()->setSectionsMovable(false);
|
ui_server_list->header()->setSectionsMovable(false);
|
||||||
ui_server_list->setColumnWidth(0, 0);
|
ui_server_list->setColumnWidth(0, 0);
|
||||||
ui_server_list->setIndentation(0);
|
ui_server_list->setIndentation(0);
|
||||||
// ui_server_list->hideColumn(0);
|
ui_server_list->setObjectName("ui_server_list");
|
||||||
// ui_server_list->setHeaderHidden(true);
|
|
||||||
|
|
||||||
ui_server_search = new QLineEdit(this);
|
ui_server_search = new QLineEdit(this);
|
||||||
ui_server_search->setFrame(false);
|
ui_server_search->setFrame(false);
|
||||||
ui_server_search->setPlaceholderText(tr("Search"));
|
ui_server_search->setPlaceholderText(tr("Search"));
|
||||||
|
ui_server_search->setObjectName("ui_server_search");
|
||||||
|
|
||||||
ui_player_count = new QLabel(this);
|
ui_player_count = new QLabel(this);
|
||||||
|
ui_player_count->setObjectName("ui_player_count");
|
||||||
ui_description = new AOTextArea(this);
|
ui_description = new AOTextArea(this);
|
||||||
ui_description->setOpenExternalLinks(true);
|
ui_description->setOpenExternalLinks(true);
|
||||||
|
ui_description->setObjectName("ui_description");
|
||||||
ui_chatbox = new AOTextArea(this);
|
ui_chatbox = new AOTextArea(this);
|
||||||
ui_chatbox->setOpenExternalLinks(true);
|
ui_chatbox->setOpenExternalLinks(true);
|
||||||
|
ui_chatbox->setObjectName("ui_chatbox");
|
||||||
ui_chatname = new QLineEdit(this);
|
ui_chatname = new QLineEdit(this);
|
||||||
ui_chatname->setPlaceholderText(tr("Name"));
|
ui_chatname->setPlaceholderText(tr("Name"));
|
||||||
ui_chatname->setText(ao_app->get_ooc_name());
|
ui_chatname->setText(ao_app->get_ooc_name());
|
||||||
|
ui_chatname->setObjectName("ui_chatname");
|
||||||
ui_chatmessage = new QLineEdit(this);
|
ui_chatmessage = new QLineEdit(this);
|
||||||
|
ui_chatmessage->setObjectName("ui_chatmessage");
|
||||||
ui_loading_background = new AOImage(this, ao_app);
|
ui_loading_background = new AOImage(this, ao_app);
|
||||||
|
ui_loading_background->setObjectName("ui_loading_background");
|
||||||
ui_loading_text = new QTextEdit(ui_loading_background);
|
ui_loading_text = new QTextEdit(ui_loading_background);
|
||||||
|
ui_loading_text->setObjectName("ui_loading_text");
|
||||||
ui_progress_bar = new QProgressBar(ui_loading_background);
|
ui_progress_bar = new QProgressBar(ui_loading_background);
|
||||||
ui_progress_bar->setMinimum(0);
|
ui_progress_bar->setMinimum(0);
|
||||||
ui_progress_bar->setMaximum(100);
|
ui_progress_bar->setMaximum(100);
|
||||||
ui_progress_bar->setStyleSheet("QProgressBar{ color: white; }");
|
ui_progress_bar->setObjectName("ui_progress_bar");
|
||||||
ui_cancel = new AOButton(ui_loading_background, ao_app);
|
ui_cancel = new AOButton(ui_loading_background, ao_app);
|
||||||
|
ui_cancel->setObjectName("ui_cancel");
|
||||||
|
|
||||||
connect(ui_public_servers, SIGNAL(clicked()), this,
|
connect(ui_public_servers, SIGNAL(clicked()), this,
|
||||||
SLOT(on_public_servers_clicked()));
|
SLOT(on_public_servers_clicked()));
|
||||||
|
@ -121,6 +121,7 @@ void AOApplication::append_to_demofile(QString packet_string)
|
|||||||
void AOApplication::server_packet_received(AOPacket *p_packet)
|
void AOApplication::server_packet_received(AOPacket *p_packet)
|
||||||
{
|
{
|
||||||
QStringList f_contents_encoded = p_packet->get_contents();
|
QStringList f_contents_encoded = p_packet->get_contents();
|
||||||
|
QString f_packet_encoded = p_packet->to_string();
|
||||||
p_packet->net_decode();
|
p_packet->net_decode();
|
||||||
|
|
||||||
QString header = p_packet->get_header();
|
QString header = p_packet->get_header();
|
||||||
@ -182,7 +183,7 @@ void AOApplication::server_packet_received(AOPacket *p_packet)
|
|||||||
w_courtroom->append_server_chatmessage(f_contents.at(0),
|
w_courtroom->append_server_chatmessage(f_contents.at(0),
|
||||||
f_contents.at(1), "0");
|
f_contents.at(1), "0");
|
||||||
|
|
||||||
append_to_demofile(p_packet->to_string(true));
|
append_to_demofile(f_packet_encoded);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (header == "FL") {
|
else if (header == "FL") {
|
||||||
@ -307,7 +308,7 @@ void AOApplication::server_packet_received(AOPacket *p_packet)
|
|||||||
this->log_filename = QDateTime::currentDateTime().toUTC().toString(
|
this->log_filename = QDateTime::currentDateTime().toUTC().toString(
|
||||||
"'logs/" + server_name.remove(QRegExp("[\\\\/:*?\"<>|\']")) +
|
"'logs/" + server_name.remove(QRegExp("[\\\\/:*?\"<>|\']")) +
|
||||||
"/'yyyy-MM-dd hh-mm-ss t'.log'");
|
"/'yyyy-MM-dd hh-mm-ss t'.log'");
|
||||||
this->write_to_file("Joined server " + server_name + " on address " +
|
this->write_to_file("Joined server " + server_name + " hosted on address " +
|
||||||
server_address + " on " +
|
server_address + " on " +
|
||||||
QDateTime::currentDateTime().toUTC().toString(),
|
QDateTime::currentDateTime().toUTC().toString(),
|
||||||
log_filename, true);
|
log_filename, true);
|
||||||
@ -368,7 +369,7 @@ void AOApplication::server_packet_received(AOPacket *p_packet)
|
|||||||
}
|
}
|
||||||
|
|
||||||
send_server_packet(new AOPacket("RM#%"));
|
send_server_packet(new AOPacket("RM#%"));
|
||||||
append_to_demofile(p_packet->to_string(true));
|
append_to_demofile(f_packet_encoded);
|
||||||
}
|
}
|
||||||
else if (header == "SM") {
|
else if (header == "SM") {
|
||||||
if (!courtroom_constructed || courtroom_loaded)
|
if (!courtroom_constructed || courtroom_loaded)
|
||||||
@ -471,7 +472,7 @@ void AOApplication::server_packet_received(AOPacket *p_packet)
|
|||||||
2) // We have a pos included in the background packet!
|
2) // We have a pos included in the background packet!
|
||||||
w_courtroom->set_side(f_contents.at(1));
|
w_courtroom->set_side(f_contents.at(1));
|
||||||
w_courtroom->set_background(f_contents.at(0), f_contents.size() >= 2);
|
w_courtroom->set_background(f_contents.at(0), f_contents.size() >= 2);
|
||||||
append_to_demofile(p_packet->to_string(true));
|
append_to_demofile(f_packet_encoded);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (header == "SP") {
|
else if (header == "SP") {
|
||||||
@ -481,7 +482,7 @@ void AOApplication::server_packet_received(AOPacket *p_packet)
|
|||||||
if (courtroom_constructed) // We were sent a "set position" packet
|
if (courtroom_constructed) // We were sent a "set position" packet
|
||||||
{
|
{
|
||||||
w_courtroom->set_side(f_contents.at(0));
|
w_courtroom->set_side(f_contents.at(0));
|
||||||
append_to_demofile(p_packet->to_string(true));
|
append_to_demofile(f_packet_encoded);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (header == "SD") // Send pos dropdown
|
else if (header == "SD") // Send pos dropdown
|
||||||
@ -507,14 +508,14 @@ void AOApplication::server_packet_received(AOPacket *p_packet)
|
|||||||
if (courtroom_constructed && courtroom_loaded)
|
if (courtroom_constructed && courtroom_loaded)
|
||||||
{
|
{
|
||||||
w_courtroom->chatmessage_enqueue(p_packet->get_contents());
|
w_courtroom->chatmessage_enqueue(p_packet->get_contents());
|
||||||
append_to_demofile(p_packet->to_string(true));
|
append_to_demofile(f_packet_encoded);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (header == "MC") {
|
else if (header == "MC") {
|
||||||
if (courtroom_constructed && courtroom_loaded)
|
if (courtroom_constructed && courtroom_loaded)
|
||||||
{
|
{
|
||||||
w_courtroom->handle_song(&p_packet->get_contents());
|
w_courtroom->handle_song(&p_packet->get_contents());
|
||||||
append_to_demofile(p_packet->to_string(true));
|
append_to_demofile(f_packet_encoded);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (header == "RT") {
|
else if (header == "RT") {
|
||||||
@ -525,7 +526,7 @@ void AOApplication::server_packet_received(AOPacket *p_packet)
|
|||||||
w_courtroom->handle_wtce(f_contents.at(0), 0);
|
w_courtroom->handle_wtce(f_contents.at(0), 0);
|
||||||
else if (f_contents.size() == 2) {
|
else if (f_contents.size() == 2) {
|
||||||
w_courtroom->handle_wtce(f_contents.at(0), f_contents.at(1).toInt());
|
w_courtroom->handle_wtce(f_contents.at(0), f_contents.at(1).toInt());
|
||||||
append_to_demofile(p_packet->to_string(true));
|
append_to_demofile(f_packet_encoded);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -534,7 +535,7 @@ void AOApplication::server_packet_received(AOPacket *p_packet)
|
|||||||
{
|
{
|
||||||
w_courtroom->set_hp_bar(f_contents.at(0).toInt(),
|
w_courtroom->set_hp_bar(f_contents.at(0).toInt(),
|
||||||
f_contents.at(1).toInt());
|
f_contents.at(1).toInt());
|
||||||
append_to_demofile(p_packet->to_string(true));
|
append_to_demofile(f_packet_encoded);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (header == "LE") {
|
else if (header == "LE") {
|
||||||
@ -560,7 +561,7 @@ void AOApplication::server_packet_received(AOPacket *p_packet)
|
|||||||
}
|
}
|
||||||
|
|
||||||
w_courtroom->set_evidence_list(f_evi_list);
|
w_courtroom->set_evidence_list(f_evi_list);
|
||||||
append_to_demofile(p_packet->to_string(true));
|
append_to_demofile(f_packet_encoded);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (header == "ARUP") {
|
else if (header == "ARUP") {
|
||||||
@ -615,7 +616,7 @@ void AOApplication::server_packet_received(AOPacket *p_packet)
|
|||||||
w_courtroom->mod_called(f_contents.at(0));
|
w_courtroom->mod_called(f_contents.at(0));
|
||||||
}
|
}
|
||||||
else if (header == "CASEA") {
|
else if (header == "CASEA") {
|
||||||
if (courtroom_constructed && f_contents.size() > 6)
|
if (courtroom_constructed && f_contents.size() >= 6)
|
||||||
w_courtroom->case_called(f_contents.at(0), f_contents.at(1) == "1",
|
w_courtroom->case_called(f_contents.at(0), f_contents.at(1) == "1",
|
||||||
f_contents.at(2) == "1", f_contents.at(3) == "1",
|
f_contents.at(2) == "1", f_contents.at(3) == "1",
|
||||||
f_contents.at(4) == "1",
|
f_contents.at(4) == "1",
|
||||||
@ -665,7 +666,7 @@ void AOApplication::server_packet_received(AOPacket *p_packet)
|
|||||||
w_courtroom->set_clock_visibility(id, true);
|
w_courtroom->set_clock_visibility(id, true);
|
||||||
else if (type == 3)
|
else if (type == 3)
|
||||||
w_courtroom->set_clock_visibility(id, false);
|
w_courtroom->set_clock_visibility(id, false);
|
||||||
append_to_demofile(p_packet->to_string(true));
|
append_to_demofile(f_packet_encoded);
|
||||||
}
|
}
|
||||||
else if (header == "CHECK") {
|
else if (header == "CHECK") {
|
||||||
if (!courtroom_constructed)
|
if (!courtroom_constructed)
|
||||||
@ -702,6 +703,16 @@ void AOApplication::server_packet_received(AOPacket *p_packet)
|
|||||||
w_courtroom->on_authentication_state_received(authenticated);
|
w_courtroom->on_authentication_state_received(authenticated);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//AssetURL Packet
|
||||||
|
else if (header == "ASS") {
|
||||||
|
if (f_contents.size() > 1 || f_contents.size() == 0) { // This can never be more than one link.
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
QUrl t_asset_url = QUrl::fromPercentEncoding(f_contents.at(0).toUtf8());
|
||||||
|
if (t_asset_url.isValid())
|
||||||
|
asset_url = t_asset_url.toString();
|
||||||
|
}
|
||||||
|
|
||||||
end:
|
end:
|
||||||
|
|
||||||
delete p_packet;
|
delete p_packet;
|
||||||
|
@ -91,7 +91,6 @@ VPath AOApplication::get_evidence_path(QString p_file)
|
|||||||
QVector<VPath> AOApplication::get_asset_paths(QString p_element, QString p_theme, QString p_subtheme, QString p_default_theme, QString p_misc, QString p_character, QString p_placeholder)
|
QVector<VPath> AOApplication::get_asset_paths(QString p_element, QString p_theme, QString p_subtheme, QString p_default_theme, QString p_misc, QString p_character, QString p_placeholder)
|
||||||
{
|
{
|
||||||
QVector<VPath> pathlist;
|
QVector<VPath> pathlist;
|
||||||
pathlist += VPath(p_element); // The path by itself
|
|
||||||
if (p_character != "")
|
if (p_character != "")
|
||||||
pathlist += get_character_path(p_character, p_element); // Character folder
|
pathlist += get_character_path(p_character, p_element); // Character folder
|
||||||
if (p_misc != "" && p_theme != "" && p_subtheme != "")
|
if (p_misc != "" && p_theme != "" && p_subtheme != "")
|
||||||
@ -106,6 +105,7 @@ QVector<VPath> AOApplication::get_asset_paths(QString p_element, QString p_theme
|
|||||||
pathlist += get_theme_path(p_element, p_theme); // Theme path
|
pathlist += get_theme_path(p_element, p_theme); // Theme path
|
||||||
if (p_default_theme != "")
|
if (p_default_theme != "")
|
||||||
pathlist += get_theme_path(p_element, p_default_theme); // Default theme path
|
pathlist += get_theme_path(p_element, p_default_theme); // Default theme path
|
||||||
|
pathlist += VPath(p_element); // The path by itself
|
||||||
if (p_placeholder != "" && p_theme != "")
|
if (p_placeholder != "" && p_theme != "")
|
||||||
pathlist += get_theme_path(p_placeholder, p_theme); // Placeholder path
|
pathlist += get_theme_path(p_placeholder, p_theme); // Placeholder path
|
||||||
if (p_placeholder != "" && p_default_theme != "")
|
if (p_placeholder != "" && p_default_theme != "")
|
||||||
@ -154,6 +154,7 @@ QString AOApplication::get_config_value(QString p_identifier, QString p_config,
|
|||||||
path = get_real_path(p);
|
path = get_real_path(p);
|
||||||
if (!path.isEmpty()) {
|
if (!path.isEmpty()) {
|
||||||
QSettings settings(path, QSettings::IniFormat);
|
QSettings settings(path, QSettings::IniFormat);
|
||||||
|
settings.setIniCodec("UTF-8");
|
||||||
QVariant value = settings.value(p_identifier);
|
QVariant value = settings.value(p_identifier);
|
||||||
if (value.type() == QVariant::StringList) {
|
if (value.type() == QVariant::StringList) {
|
||||||
// qDebug() << "got" << p << "is a string list, returning" << value.toStringList().join(",");
|
// qDebug() << "got" << p << "is a string list, returning" << value.toStringList().join(",");
|
||||||
|
@ -112,6 +112,12 @@ QString AOApplication::get_default_username()
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString AOApplication::get_default_showname()
|
||||||
|
{
|
||||||
|
QString result = configini->value("default_showname", "").value<QString>();
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
QString AOApplication::get_audio_output_device()
|
QString AOApplication::get_audio_output_device()
|
||||||
{
|
{
|
||||||
QString result =
|
QString result =
|
||||||
@ -248,10 +254,7 @@ QVector<server_type> AOApplication::read_serverlist_txt()
|
|||||||
|
|
||||||
serverlist_txt.setFileName(serverlist_txt_path);
|
serverlist_txt.setFileName(serverlist_txt_path);
|
||||||
|
|
||||||
if (!serverlist_txt.open(QIODevice::ReadOnly)) {
|
if (serverlist_txt.open(QIODevice::ReadOnly)) {
|
||||||
return f_server_list;
|
|
||||||
}
|
|
||||||
|
|
||||||
QTextStream in(&serverlist_txt);
|
QTextStream in(&serverlist_txt);
|
||||||
|
|
||||||
while (!in.atEnd()) {
|
while (!in.atEnd()) {
|
||||||
@ -269,12 +272,13 @@ QVector<server_type> AOApplication::read_serverlist_txt()
|
|||||||
|
|
||||||
f_server_list.append(f_server);
|
f_server_list.append(f_server);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
server_type demo_server;
|
server_type demo_server;
|
||||||
demo_server.ip = "127.0.0.1";
|
demo_server.ip = "127.0.0.1";
|
||||||
demo_server.port = 99999;
|
demo_server.port = 99999;
|
||||||
demo_server.name = "Demo playback";
|
demo_server.name = tr("Demo playback");
|
||||||
demo_server.desc = "Play back demos you have previously recorded";
|
demo_server.desc = tr("Play back demos you have previously recorded");
|
||||||
f_server_list.append(demo_server);
|
f_server_list.append(demo_server);
|
||||||
|
|
||||||
return f_server_list;
|
return f_server_list;
|
||||||
@ -290,6 +294,7 @@ QString AOApplication::read_design_ini(QString p_identifier,
|
|||||||
QString p_design_path)
|
QString p_design_path)
|
||||||
{
|
{
|
||||||
QSettings settings(p_design_path, QSettings::IniFormat);
|
QSettings settings(p_design_path, QSettings::IniFormat);
|
||||||
|
settings.setIniCodec("UTF-8");
|
||||||
QVariant value = settings.value(p_identifier);
|
QVariant value = settings.value(p_identifier);
|
||||||
if (value.type() == QVariant::StringList) {
|
if (value.type() == QVariant::StringList) {
|
||||||
return value.toStringList().join(",");
|
return value.toStringList().join(",");
|
||||||
@ -302,6 +307,9 @@ QString AOApplication::read_design_ini(QString p_identifier,
|
|||||||
|
|
||||||
Qt::TransformationMode AOApplication::get_scaling(QString p_scaling)
|
Qt::TransformationMode AOApplication::get_scaling(QString p_scaling)
|
||||||
{
|
{
|
||||||
|
if (p_scaling.isEmpty())
|
||||||
|
p_scaling = get_default_scaling();
|
||||||
|
|
||||||
if (p_scaling == "smooth")
|
if (p_scaling == "smooth")
|
||||||
return Qt::SmoothTransformation;
|
return Qt::SmoothTransformation;
|
||||||
return Qt::FastTransformation;
|
return Qt::FastTransformation;
|
||||||
@ -448,20 +456,20 @@ QString AOApplication::get_chat_markup(QString p_identifier, QString p_chat)
|
|||||||
// New Chadly method
|
// New Chadly method
|
||||||
QString value = get_config_value(p_identifier, "chat_config.ini", current_theme, get_subtheme(), default_theme, p_chat);
|
QString value = get_config_value(p_identifier, "chat_config.ini", current_theme, get_subtheme(), default_theme, p_chat);
|
||||||
if (!value.isEmpty())
|
if (!value.isEmpty())
|
||||||
return value.toLatin1();
|
return value.toUtf8();
|
||||||
|
|
||||||
// Backwards ass compatibility
|
// Backwards ass compatibility
|
||||||
QVector<VPath> backwards_paths {
|
QVector<VPath> backwards_paths {
|
||||||
get_theme_path("misc/" + p_chat + "/config.ini"),
|
get_theme_path("misc/" + p_chat + "/config.ini"),
|
||||||
VPath("misc/" + p_chat + "/config.ini"),
|
VPath("misc/" + p_chat + "/config.ini"),
|
||||||
VPath("misc/default/config.ini"),
|
get_theme_path("misc/default/config.ini"),
|
||||||
get_theme_path("misc/default/config.ini")
|
VPath("misc/default/config.ini")
|
||||||
};
|
};
|
||||||
|
|
||||||
for (const VPath &p : backwards_paths) {
|
for (const VPath &p : backwards_paths) {
|
||||||
QString value = read_design_ini(p_identifier, p);
|
QString value = read_design_ini(p_identifier, p);
|
||||||
if (!value.isEmpty()) {
|
if (!value.isEmpty()) {
|
||||||
return value.toLatin1();
|
return value.toUtf8();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -491,7 +499,7 @@ QString AOApplication::get_court_sfx(QString p_identifier, QString p_misc)
|
|||||||
{
|
{
|
||||||
QString value = get_config_value(p_identifier, "courtroom_sounds.ini", current_theme, get_subtheme(), default_theme, p_misc);
|
QString value = get_config_value(p_identifier, "courtroom_sounds.ini", current_theme, get_subtheme(), default_theme, p_misc);
|
||||||
if (!value.isEmpty())
|
if (!value.isEmpty())
|
||||||
return value.toLatin1();
|
return value.toUtf8();
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -521,6 +529,7 @@ QString AOApplication::read_char_ini(QString p_char, QString p_search_line,
|
|||||||
QSettings settings(get_real_path(get_character_path(p_char, "char.ini")),
|
QSettings settings(get_real_path(get_character_path(p_char, "char.ini")),
|
||||||
QSettings::IniFormat);
|
QSettings::IniFormat);
|
||||||
settings.beginGroup(target_tag);
|
settings.beginGroup(target_tag);
|
||||||
|
settings.setIniCodec("UTF-8");
|
||||||
QString value = settings.value(p_search_line).value<QString>();
|
QString value = settings.value(p_search_line).value<QString>();
|
||||||
settings.endGroup();
|
settings.endGroup();
|
||||||
return value;
|
return value;
|
||||||
@ -541,6 +550,7 @@ QStringList AOApplication::read_ini_tags(VPath p_path, QString target_tag)
|
|||||||
{
|
{
|
||||||
QStringList r_values;
|
QStringList r_values;
|
||||||
QSettings settings(get_real_path(p_path), QSettings::IniFormat);
|
QSettings settings(get_real_path(p_path), QSettings::IniFormat);
|
||||||
|
settings.setIniCodec("UTF-8");
|
||||||
if (!target_tag.isEmpty())
|
if (!target_tag.isEmpty())
|
||||||
settings.beginGroup(target_tag);
|
settings.beginGroup(target_tag);
|
||||||
QStringList keys = settings.allKeys();
|
QStringList keys = settings.allKeys();
|
||||||
@ -666,15 +676,6 @@ int AOApplication::get_preanim_duration(QString p_char, QString p_emote)
|
|||||||
return f_result.toInt();
|
return f_result.toInt();
|
||||||
}
|
}
|
||||||
|
|
||||||
int AOApplication::get_ao2_preanim_duration(QString p_char, QString p_emote)
|
|
||||||
{
|
|
||||||
QString f_result = read_char_ini(p_char, "%" + p_emote, "Time");
|
|
||||||
|
|
||||||
if (f_result == "")
|
|
||||||
return -1;
|
|
||||||
return f_result.toInt();
|
|
||||||
}
|
|
||||||
|
|
||||||
int AOApplication::get_emote_number(QString p_char)
|
int AOApplication::get_emote_number(QString p_char)
|
||||||
{
|
{
|
||||||
QString f_result = read_char_ini(p_char, "number", "Emotions");
|
QString f_result = read_char_ini(p_char, "number", "Emotions");
|
||||||
@ -842,7 +843,7 @@ QStringList AOApplication::get_effects(QString p_char)
|
|||||||
{
|
{
|
||||||
QString p_misc = read_char_ini(p_char, "effects", "Options");
|
QString p_misc = read_char_ini(p_char, "effects", "Options");
|
||||||
QString p_path = get_asset("effects/effects.ini", current_theme, get_subtheme(), default_theme, "");
|
QString p_path = get_asset("effects/effects.ini", current_theme, get_subtheme(), default_theme, "");
|
||||||
QString p_misc_path = get_asset("effects/effects.ini", current_theme, get_subtheme(), default_theme, p_misc);
|
QString p_misc_path = get_asset("effects.ini", current_theme, get_subtheme(), default_theme, p_misc);
|
||||||
QStringList effects;
|
QStringList effects;
|
||||||
|
|
||||||
QStringList lines = read_file(p_path).split("\n");
|
QStringList lines = read_file(p_path).split("\n");
|
||||||
@ -865,10 +866,13 @@ QString AOApplication::get_effect(QString effect, QString p_char,
|
|||||||
if (p_folder == "")
|
if (p_folder == "")
|
||||||
p_folder = read_char_ini(p_char, "effects", "Options");
|
p_folder = read_char_ini(p_char, "effects", "Options");
|
||||||
|
|
||||||
QString p_path = get_image("effects/" + effect, current_theme, get_subtheme(), default_theme, p_folder);
|
QString p_path = get_image("effects/" + effect, current_theme, get_subtheme(), default_theme, "");
|
||||||
|
QString p_misc_path = get_image(effect, current_theme, get_subtheme(), default_theme, p_folder);
|
||||||
|
|
||||||
if (!file_exists(p_path))
|
if (!file_exists(p_misc_path) && !file_exists(p_path))
|
||||||
return "";
|
return "";
|
||||||
|
else if (file_exists(p_misc_path))
|
||||||
|
return p_misc_path;
|
||||||
return p_path;
|
return p_path;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -881,7 +885,9 @@ QString AOApplication::get_effect_property(QString fx_name, QString p_char,
|
|||||||
else
|
else
|
||||||
f_property = fx_name + "_" + p_property;
|
f_property = fx_name + "_" + p_property;
|
||||||
|
|
||||||
QString f_result = get_config_value(f_property, "effects/effects.ini", current_theme, get_subtheme(), default_theme, read_char_ini(p_char, "effects", "Options"));
|
QString f_result = get_config_value(f_property, "effects.ini", current_theme, get_subtheme(), default_theme, read_char_ini(p_char, "effects", "Options"));
|
||||||
|
if (f_result == "")
|
||||||
|
f_result = get_config_value(f_property, "effects/effects.ini", current_theme, get_subtheme(), default_theme, "");
|
||||||
if (fx_name == "realization" && p_property == "sound") {
|
if (fx_name == "realization" && p_property == "sound") {
|
||||||
f_result = get_custom_realization(p_char);
|
f_result = get_custom_realization(p_char);
|
||||||
}
|
}
|
||||||
@ -1083,6 +1089,11 @@ bool AOApplication::get_animated_theme()
|
|||||||
return result.startsWith("true");
|
return result.startsWith("true");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString AOApplication::get_default_scaling()
|
||||||
|
{
|
||||||
|
return configini->value("default_scaling", "fast").value<QString>();
|
||||||
|
}
|
||||||
|
|
||||||
QStringList AOApplication::get_mount_paths()
|
QStringList AOApplication::get_mount_paths()
|
||||||
{
|
{
|
||||||
return configini->value("mount_paths").value<QStringList>();
|
return configini->value("mount_paths").value<QStringList>();
|
||||||
|
Loading…
Reference in New Issue
Block a user