aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Skoland <davidskoland@gmail.com>2017-02-01 18:20:48 +0100
committerDavid Skoland <davidskoland@gmail.com>2017-02-01 18:20:48 +0100
commit6e7fd9c522822fab82b6b53dfd39b203a9a71091 (patch)
tree4bcb464e3ec214b1e018a853557cdb3491bcd139
parentab4de962e0bc8b2e8435af83dc568db99e1e303c (diff)
added objection handler and started on set_scene
-rw-r--r--aoapplication.h1
-rw-r--r--aomovie.cpp10
-rw-r--r--aomovie.h2
-rw-r--r--aoscene.cpp6
-rw-r--r--aoscene.h1
-rw-r--r--courtroom.cpp139
-rw-r--r--courtroom.h37
-rw-r--r--packet_distribution.cpp4
-rw-r--r--text_file_functions.cpp34
9 files changed, 203 insertions, 31 deletions
diff --git a/aoapplication.h b/aoapplication.h
index 80c18819..664bac13 100644
--- a/aoapplication.h
+++ b/aoapplication.h
@@ -89,6 +89,7 @@ public:
QVector<server_type> read_serverlist_txt();
pos_size_type get_pos_and_size(QString p_identifier, QString p_design_path);
QString get_char_side(QString p_char);
+ QString get_showname(QString p_char);
private:
const int RELEASE = 2;
diff --git a/aomovie.cpp b/aomovie.cpp
index 453fb069..2b4189e3 100644
--- a/aomovie.cpp
+++ b/aomovie.cpp
@@ -15,12 +15,18 @@ AOMovie::AOMovie(QWidget *p_parent, AOApplication *p_ao_app) : QLabel(p_parent)
connect(m_movie, SIGNAL(frameChanged(int)), this, SLOT(frame_change(int)));
}
-void AOMovie::play(QString p_gif)
+void AOMovie::play(QString p_gif, QString p_char)
{
m_movie->stop();
- QString gif_path = ao_app->get_theme_path() + p_gif + ".gif";
QString default_path = ao_app->get_default_theme_path() + p_gif + ".gif";
+ QString gif_path;
+
+ if (p_gif == "custom")
+ gif_path = ao_app->get_character_path(p_char) + "custom.gif";
+ else
+ gif_path = ao_app->get_theme_path() + p_gif + ".gif";
+
if (file_exists(gif_path))
m_movie->setFileName(gif_path);
diff --git a/aomovie.h b/aomovie.h
index 3aae8e55..93d1ef4b 100644
--- a/aomovie.h
+++ b/aomovie.h
@@ -14,7 +14,7 @@ class AOMovie : public QLabel
public:
AOMovie(QWidget *p_parent, AOApplication *p_ao_app);
- void play(QString p_gif);
+ void play(QString p_gif, QString p_char = "null");
void combo_resize(int w, int h);
void stop();
diff --git a/aoscene.cpp b/aoscene.cpp
index 1d76aed1..24096897 100644
--- a/aoscene.cpp
+++ b/aoscene.cpp
@@ -20,9 +20,13 @@ void AOScene::set_image(QString p_image)
int w = this->width();
int h = this->height();
-
if (file_exists(background_path))
this->setPixmap(background.scaled(w, h));
else
this->setPixmap(default_bg.scaled(w, h));
}
+
+void AOScene::set_legacy_desk(QString p_image)
+{
+
+}
diff --git a/aoscene.h b/aoscene.h
index f62235f4..37a3d0ca 100644
--- a/aoscene.h
+++ b/aoscene.h
@@ -12,6 +12,7 @@ public:
explicit AOScene(Courtroom *parent);
void set_image(QString p_image);
+ void set_legacy_desk(QString p_image);
private:
Courtroom *m_courtroom;
diff --git a/courtroom.cpp b/courtroom.cpp
index ce616ad8..f4884799 100644
--- a/courtroom.cpp
+++ b/courtroom.cpp
@@ -14,6 +14,14 @@ Courtroom::Courtroom(AOApplication *p_ao_app) : QMainWindow()
{
ao_app = p_ao_app;
+ chat_tick_timer = new QTimer(this);
+
+ text_delay = new QTimer(this);
+ text_delay->setSingleShot(true);
+
+ sfx_delay = new QTimer(this);
+ sfx_delay->setSingleShot(true);
+
char_button_mapper = new QSignalMapper(this);
sfx_player = new QSoundEffect(this);
@@ -25,8 +33,8 @@ Courtroom::Courtroom(AOApplication *p_ao_app) : QMainWindow()
ui_vp_desk = new AOScene(this);
ui_vp_legacy_desk = new AOScene(this);
ui_vp_chatbox = new AOImage(this, ao_app);
- ui_vp_showname = new QLabel(this);
- ui_vp_message = new QPlainTextEdit(this);
+ ui_vp_showname = new QLabel(ui_vp_chatbox);
+ ui_vp_message = new QPlainTextEdit(ui_vp_chatbox);
ui_vp_testimony = new AOImage(this, ao_app);
ui_vp_realization = new AOImage(this, ao_app);
ui_vp_wtce = new AOMovie(this, ao_app);
@@ -502,6 +510,16 @@ void Courtroom::set_char_select_page()
}
+void Courtroom::set_background(QString p_background)
+{
+ current_background = p_background;
+ QString bg_path = get_background_path();
+
+ is_ao2_bg = file_exists(bg_path + "defensedesk.png") &&
+ file_exists(bg_path + "prosecutiondesk.png") &&
+ file_exists(bg_path + "stand.png");
+}
+
void Courtroom::enter_courtroom(int p_cid)
{
m_cid = p_cid;
@@ -583,7 +601,14 @@ void Courtroom::append_server_chatmessage(QString f_message)
void Courtroom::handle_chatmessage(QStringList *p_contents)
{
- QString f_message = p_contents->at(CHAR_NAME) + ": " + p_contents->at(MESSAGE) + '\n';
+ text_state = 0;
+
+ for (int n_string = 0 ; n_string < chatmessage_size ; ++n_string)
+ {
+ m_chatmessage[n_string] = p_contents->at(n_string);
+ }
+
+ QString f_message = m_chatmessage[CHAR_NAME] + ": " + m_chatmessage[MESSAGE] + '\n';
const QTextCursor old_cursor = ui_ic_chatlog->textCursor();
const int old_scrollbar_value = ui_ic_chatlog->verticalScrollBar()->value();
@@ -606,40 +631,102 @@ void Courtroom::handle_chatmessage(QStringList *p_contents)
ui_ic_chatlog->verticalScrollBar()->setValue(ui_ic_chatlog->verticalScrollBar()->minimum());
}
- int objection_mod = p_contents->at(OBJECTION_MOD);
+ int objection_mod = m_chatmessage[OBJECTION_MOD].toInt();
- switch (objection_mod)
+ //if an objection is used
+ if (objection_mod <= 4 && objection_mod >= 1)
{
- case 1:
- ui_vp_objection->play("holdit");
- break;
- case 2:
- ui_vp_objection->play("objection");
- break;
- case 3:
- ui_vp_objection->play("takethat");
- break;
- //AO2 only
- case 4:
- //T0D0: add custom.gif here
- default:
- //T0D0: continue program flow
+ switch (objection_mod)
+ {
+ case 1:
+ ui_vp_objection->play("holdit");
+ break;
+ case 2:
+ ui_vp_objection->play("objection");
+ break;
+ case 3:
+ ui_vp_objection->play("takethat");
+ break;
+ //case 4 is AO2 only
+ case 4:
+ ui_vp_objection->play("custom", m_chatmessage[CHAR_NAME]);
+ break;
+ default:
+ qDebug() << "W: Logic error in objection switch statement!";
+ }
- }
+ //means we are in a state of objecting
+ anim_state = 0;
- //D3BUG START
+ int emote_mod = m_chatmessage[EMOTE_MOD].toInt();
- ui_vp_background->set_image("defenseempty.png");
+ switch (emote_mod)
+ {
+ //we change the chatmessage from no preanim to preanim, see documentation
+ case 0: case 2:
+ m_chatmessage[EMOTE_MOD] = QString::number(++emote_mod);
+ break;
+ case 5:
+ m_chatmessage[EMOTE_MOD] = QString::number(--emote_mod);
+ break;
+ }
+ }
- ui_vp_player_char->set(p_contents->at(CHAR_NAME), p_contents->at(EMOTE), p_contents->at(PRE_EMOTE));
- ui_vp_player_char->play_talking();
- //D3BUG END
+ else
+ handle_chatmessage_2();
}
void Courtroom::objection_done()
{
- //T0D0: play preanim, advance to step 2 in chat message handling
+ handle_chatmessage_2();
+}
+
+void Courtroom::handle_chatmessage_2()
+{
+ ui_vp_player_char->stop();
+
+ QString remote_name = m_chatmessage[CHAR_NAME];
+ QString local_showname = ao_app->get_showname(remote_name);
+
+ //empty string means we couldnt find showname in char ini
+ if (local_showname == "")
+ ui_vp_showname->remote_name;
+ else
+ ui_vp_showname->local_showname;
+
+ ui_vp_message->clear();
+ ui_vp_chatbox->hide();
+
+ set_scene();
+ set_text_color();
+
+
+ //ui_vp_player_char->set(m_chatmessage[CHAR_NAME], m_chatmessage[PRE_EMOTE], m_chatmessage[EMOTE]);
+ //ui_vp_player_char->play_pre();
+}
+
+void Courtroom::set_scene()
+{
+ //witness is default if pos is invalid
+ QString f_image = "witnessempty.png";
+
+ QString f_side = m_chatmessage[SIDE];
+
+ if (f_side == "def")
+ f_image = "defenseempty.png";
+ else if (f_side == "pro")
+ f_image = "prosecutionempty.png";
+ else if (f_side == "jud")
+ f_image = "judgestand.png";
+ else if (f_side == "hld")
+ f_image = "helperstand.png";
+ else if (f_side == "hlp")
+ f_image = "prohelperstand.png";
+
+ ui_vp_background->set_image(f_image);
+
+ //now for the hard part: desks
}
void Courtroom::handle_wtce(QString p_wtce)
diff --git a/courtroom.h b/courtroom.h
index a2902970..f15d5a01 100644
--- a/courtroom.h
+++ b/courtroom.h
@@ -39,18 +39,28 @@ public:
void set_size_and_pos(QWidget *p_widget, QString p_identifier);
void set_taken(int n_char, bool p_taken);
void set_char_select_page();
- void set_background(QString p_background){current_background = p_background;}
+ void set_background(QString p_background);
+
+ //sets desk and bg based on pos in chatmessage
+ void set_scene();
+
+ //sets text color based on text color in chatmessage
+ void set_text_color();
//implementations in path_functions.cpp
QString get_background_path();
QString get_default_background_path();
+ int get_cid() {return m_cid;}
+
void enter_courtroom(int p_cid);
void append_ms_chatmessage(QString f_message);
void append_server_chatmessage(QString f_message);
void handle_chatmessage(QStringList *p_contents);
+ void handle_chatmessage_2();
+
void handle_wtce(QString p_wtce);
~Courtroom();
@@ -73,6 +83,28 @@ private:
QSignalMapper *char_button_mapper;
+ //determines how fast messages tick onto screen
+ QTimer *chat_tick_timer;
+ int chat_tick_interval = 60;
+ //which tick position(character in chat message) we are at
+ int tick_pos = 0;
+
+ //delay before chat messages starts ticking
+ QTimer *text_delay;
+
+ //delay before sfx plays
+ QTimer *sfx_delay;
+
+ static const int chatmessage_size = 15;
+ QString m_chatmessage[chatmessage_size];
+ bool chatmessage_is_empty = false;
+
+ //state of animation, 0 = objecting, 1 = preanim, 2 = talking, 3 = idle
+ int anim_state = 0;
+
+ //state of text ticking, 0 = not yet ticking, 1 = ticking in progress, 2 = ticking done
+ int text_state = 0;
+
//0 is the first page, 1 second etc.
//makes char arithmetic easier
int current_char_page = 0;
@@ -80,6 +112,9 @@ private:
//character id, which index of the char_list the player is
int m_cid = 0;
+ //is set to true if the bg folder contains defensedesk.png, prosecutiondesk.png and stand.png
+ bool is_ao2_bg = false;
+
//wether the ooc chat is server or master chat, true is server
bool server_ooc = true;
diff --git a/packet_distribution.cpp b/packet_distribution.cpp
index 7466665e..9697ada3 100644
--- a/packet_distribution.cpp
+++ b/packet_distribution.cpp
@@ -311,6 +311,10 @@ void AOApplication::server_packet_received(AOPacket *p_packet)
w_courtroom->handle_wtce(f_contents.at(0));
}
+ else if (header == "checkconnection")
+ {
+ send_server_packet(new AOPacket("CH#" + QString::number(w_courtroom->get_cid()) + "#%"));
+ }
end:
diff --git a/text_file_functions.cpp b/text_file_functions.cpp
index dc97c607..7379e6f8 100644
--- a/text_file_functions.cpp
+++ b/text_file_functions.cpp
@@ -174,3 +174,37 @@ QString AOApplication::get_char_side(QString p_char)
return "wit";
}
+QString AOApplication::get_showname(QString p_char)
+{
+ QString char_ini_path = get_character_path(p_char) + "char.ini";
+
+ QFile char_ini;
+
+ char_ini.setFileName(char_ini_path);
+
+ if (!char_ini.open(QIODevice::ReadOnly))
+ {
+ //default to empty string
+ return "";
+ }
+
+ QTextStream in(&char_ini);
+
+ while(!in.atEnd())
+ {
+ QString line = in.readLine();
+
+ if (!line.startsWith("showname"))
+ continue;
+
+ QStringList line_elements = line.split("=");
+
+ if (line_elements.size() < 2)
+ continue;
+
+ return line_elements.at(1).trimmed().toLower();
+ }
+
+ return "";
+}
+