aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoriamgoofball <iamgoofball@gmail.com>2019-01-23 00:58:30 -0800
committeriamgoofball <iamgoofball@gmail.com>2019-01-23 00:58:30 -0800
commit906c9016bb4660eb0445a3345a55ede959c3cb96 (patch)
tree148de75964b36b749d94341aa01e3ec2b30e3bdb
parent13bc82094f76011eef371ece3b3894d7cc20eaf9 (diff)
Multithreaded character generation TODO: fix loading screen
-rw-r--r--include/courtroom.h22
-rw-r--r--include/lobby.h3
-rw-r--r--src/charselect.cpp48
-rw-r--r--src/lobby.cpp4
4 files changed, 44 insertions, 33 deletions
diff --git a/include/courtroom.h b/include/courtroom.h
index 1c739b8f..f6124127 100644
--- a/include/courtroom.h
+++ b/include/courtroom.h
@@ -58,6 +58,7 @@
#include <QThread>
#include <QThreadPool>
#include <QFuture>
+#include <QMetaObject>
#include <stack>
class AOApplication;
@@ -81,6 +82,15 @@ public:
QString current_char = "";
int current_emote = 0;
AOApplication *ao_app;
+ //abstract widget to hold char buttons
+ QWidget *ui_char_buttons;
+ QVector<char_type> char_list;
+ QVector<evi_type> evidence_list;
+ QVector<QString> music_list;
+ QVector<QString> area_list;
+ QSignalMapper *char_button_mapper;
+ QVector<AOCharButton*> ui_char_button_list;
+ QVector<AOCharButton*> ui_char_button_list_filtered;
void mt_pre_framegetter(int frameNumber);
void mt_framegetter(int frameNumber);
void reset_music_list()
@@ -280,18 +290,11 @@ private:
// The offset this user has given if they want to appear alongside someone.
int offset_with_pair = 0;
- QVector<char_type> char_list;
- QVector<evi_type> evidence_list;
- QVector<QString> music_list;
- QVector<QString> area_list;
-
QVector<int> arup_players;
QVector<QString> arup_statuses;
QVector<QString> arup_cms;
QVector<QString> arup_locks;
- QSignalMapper *char_button_mapper;
-
QVector<chatlogpiece> ic_chatlog_history;
// These map music row items and area row items to their actual IDs.
@@ -534,11 +537,6 @@ private:
AOImage *ui_char_select_background;
- //abstract widget to hold char buttons
- QWidget *ui_char_buttons;
-
- QVector<AOCharButton*> ui_char_button_list;
- QVector<AOCharButton*> ui_char_button_list_filtered;
AOImage *ui_selector;
AOButton *ui_back_to_lobby;
diff --git a/include/lobby.h b/include/lobby.h
index 19276a7d..3a34fb8e 100644
--- a/include/lobby.h
+++ b/include/lobby.h
@@ -76,7 +76,8 @@ private:
AOButton *ui_cancel;
void set_size_and_pos(QWidget *p_widget, QString p_identifier);
-
+public slots:
+ void fucking_threading_goddamn_it(QString fuckshitassgoddamnfuck);
private slots:
void on_public_servers_clicked();
void on_favorites_clicked();
diff --git a/src/charselect.cpp b/src/charselect.cpp
index 8e1b9122..e6d9c9f4 100644
--- a/src/charselect.cpp
+++ b/src/charselect.cpp
@@ -5,6 +5,30 @@
#include "debug_functions.h"
#include "hardware_functions.h"
+class AOCharSelectGenerationThreading : public QRunnable
+{
+public:
+ Courtroom *mycourt_fuck;
+ int char_num;
+ AOCharButton *char_button;
+ AOCharSelectGenerationThreading(Courtroom *my_courtroom, int character_number, AOCharButton *charbut){
+ mycourt_fuck = my_courtroom;
+ char_num = character_number;
+ char_button = charbut;
+ }
+ void run()
+ {
+ AOCharButton* character = char_button;
+ character->reset();
+ character->hide();
+ character->set_image(mycourt_fuck->char_list.at(char_num).name);
+ mycourt_fuck->ui_char_button_list.append(character);
+
+ mycourt_fuck->connect(character, SIGNAL(clicked()), mycourt_fuck->char_button_mapper, SLOT(map()));
+ mycourt_fuck->char_button_mapper->setMapping(character, mycourt_fuck->ui_char_button_list.size() - 1);
+ }
+};
+
void Courtroom::construct_char_select()
{
ui_char_select_background = new AOImage(this, ao_app);
@@ -197,27 +221,11 @@ void Courtroom::character_loading_finished()
// Later on, we'll be revealing buttons as we need them.
for (int n = 0; n < char_list.size(); n++)
{
- AOCharButton* character = new AOCharButton(ui_char_buttons, ao_app, 0, 0, char_list.at(n).taken);
- character->reset();
- character->hide();
- character->set_image(char_list.at(n).name);
- ui_char_button_list.append(character);
-
- connect(character, SIGNAL(clicked()), char_button_mapper, SLOT(map()));
- char_button_mapper->setMapping(character, ui_char_button_list.size() - 1);
-
- // This part here serves as a way of showing to the player that the game is still running, it is
- // just loading the pictures of the characters.
- if (ao_app->lobby_constructed)
- {
- ao_app->generated_chars++;
- int total_loading_size = ao_app->char_list_size * 2 + ao_app->evidence_list_size + ao_app->music_list_size;
- int loading_value = int(((ao_app->loaded_chars + ao_app->generated_chars + ao_app->loaded_music + ao_app->loaded_evidence) / static_cast<double>(total_loading_size)) * 100);
- ao_app->w_lobby->set_loading_value(loading_value);
- ao_app->w_lobby->set_loading_text("Generating chars:\n" + QString::number(ao_app->generated_chars) + "/" + QString::number(ao_app->char_list_size));
- }
+ AOCharButton* character = new AOCharButton(ui_char_buttons, ao_app, 0, 0, char_list.at(n).taken);
+ AOCharSelectGenerationThreading *char_generate = new AOCharSelectGenerationThreading(this, n, character);
+ QThreadPool::globalInstance()->start(char_generate);
}
-
+ QThreadPool::globalInstance()->waitForDone();
filter_character_list();
}
diff --git a/src/lobby.cpp b/src/lobby.cpp
index 4a96e567..6f8db065 100644
--- a/src/lobby.cpp
+++ b/src/lobby.cpp
@@ -172,6 +172,10 @@ void Lobby::set_size_and_pos(QWidget *p_widget, QString p_identifier)
}
}
+void Lobby::fucking_threading_goddamn_it(QString text){
+ this->set_loading_text(text);
+}
+
void Lobby::set_loading_text(QString p_text)
{
ui_loading_text->clear();