Multithreaded character generation TODO: fix loading screen
This commit is contained in:
parent
13bc82094f
commit
906c9016bb
@ -58,6 +58,7 @@
|
|||||||
#include <QThread>
|
#include <QThread>
|
||||||
#include <QThreadPool>
|
#include <QThreadPool>
|
||||||
#include <QFuture>
|
#include <QFuture>
|
||||||
|
#include <QMetaObject>
|
||||||
#include <stack>
|
#include <stack>
|
||||||
|
|
||||||
class AOApplication;
|
class AOApplication;
|
||||||
@ -81,6 +82,15 @@ public:
|
|||||||
QString current_char = "";
|
QString current_char = "";
|
||||||
int current_emote = 0;
|
int current_emote = 0;
|
||||||
AOApplication *ao_app;
|
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_pre_framegetter(int frameNumber);
|
||||||
void mt_framegetter(int frameNumber);
|
void mt_framegetter(int frameNumber);
|
||||||
void reset_music_list()
|
void reset_music_list()
|
||||||
@ -280,18 +290,11 @@ private:
|
|||||||
// The offset this user has given if they want to appear alongside someone.
|
// The offset this user has given if they want to appear alongside someone.
|
||||||
int offset_with_pair = 0;
|
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<int> arup_players;
|
||||||
QVector<QString> arup_statuses;
|
QVector<QString> arup_statuses;
|
||||||
QVector<QString> arup_cms;
|
QVector<QString> arup_cms;
|
||||||
QVector<QString> arup_locks;
|
QVector<QString> arup_locks;
|
||||||
|
|
||||||
QSignalMapper *char_button_mapper;
|
|
||||||
|
|
||||||
QVector<chatlogpiece> ic_chatlog_history;
|
QVector<chatlogpiece> ic_chatlog_history;
|
||||||
|
|
||||||
// These map music row items and area row items to their actual IDs.
|
// These map music row items and area row items to their actual IDs.
|
||||||
@ -534,11 +537,6 @@ private:
|
|||||||
|
|
||||||
AOImage *ui_char_select_background;
|
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;
|
AOImage *ui_selector;
|
||||||
|
|
||||||
AOButton *ui_back_to_lobby;
|
AOButton *ui_back_to_lobby;
|
||||||
|
@ -76,7 +76,8 @@ private:
|
|||||||
AOButton *ui_cancel;
|
AOButton *ui_cancel;
|
||||||
|
|
||||||
void set_size_and_pos(QWidget *p_widget, QString p_identifier);
|
void set_size_and_pos(QWidget *p_widget, QString p_identifier);
|
||||||
|
public slots:
|
||||||
|
void fucking_threading_goddamn_it(QString fuckshitassgoddamnfuck);
|
||||||
private slots:
|
private slots:
|
||||||
void on_public_servers_clicked();
|
void on_public_servers_clicked();
|
||||||
void on_favorites_clicked();
|
void on_favorites_clicked();
|
||||||
|
@ -5,6 +5,30 @@
|
|||||||
#include "debug_functions.h"
|
#include "debug_functions.h"
|
||||||
#include "hardware_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()
|
void Courtroom::construct_char_select()
|
||||||
{
|
{
|
||||||
ui_char_select_background = new AOImage(this, ao_app);
|
ui_char_select_background = new AOImage(this, ao_app);
|
||||||
@ -198,26 +222,10 @@ void Courtroom::character_loading_finished()
|
|||||||
for (int n = 0; n < char_list.size(); n++)
|
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);
|
AOCharButton* character = new AOCharButton(ui_char_buttons, ao_app, 0, 0, char_list.at(n).taken);
|
||||||
character->reset();
|
AOCharSelectGenerationThreading *char_generate = new AOCharSelectGenerationThreading(this, n, character);
|
||||||
character->hide();
|
QThreadPool::globalInstance()->start(char_generate);
|
||||||
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));
|
|
||||||
}
|
}
|
||||||
}
|
QThreadPool::globalInstance()->waitForDone();
|
||||||
|
|
||||||
filter_character_list();
|
filter_character_list();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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)
|
void Lobby::set_loading_text(QString p_text)
|
||||||
{
|
{
|
||||||
ui_loading_text->clear();
|
ui_loading_text->clear();
|
||||||
|
Loading…
Reference in New Issue
Block a user