diff options
| author | stonedDiscord <stoned@derpymail.org> | 2020-03-06 16:43:03 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-03-06 16:43:03 +0100 |
| commit | b668bb227652f0b19f0d0b7251c2afa2f36473c5 (patch) | |
| tree | 9f23859a30574d9ce9220dd0f5fd2450b5ec7e2c /src/charselect.cpp | |
| parent | c2fd3796a97ee8d87544ec26df7d6797acfebd80 (diff) | |
| parent | 8c93cce0be0a316723284349d1f618dbf770ba3f (diff) | |
Merge branch 'master' into music_list_update
Diffstat (limited to 'src/charselect.cpp')
| -rw-r--r-- | src/charselect.cpp | 112 |
1 files changed, 70 insertions, 42 deletions
diff --git a/src/charselect.cpp b/src/charselect.cpp index 0cfb775..d6ee044 100644 --- a/src/charselect.cpp +++ b/src/charselect.cpp @@ -5,6 +5,59 @@ #include "debug_functions.h" #include "hardware_functions.h" +class AOCharSelectGenerationThreading : public QRunnable +{ +public: + Courtroom *thisCourtroom; + int char_num; + AOCharButton *char_button; + AOCharSelectGenerationThreading(Courtroom *my_courtroom, int character_number, AOCharButton *charbut){ + thisCourtroom = my_courtroom; + char_num = character_number; + char_button = charbut; + } + void run() + { + AOCharButton* thisCharacterButton = char_button; + thisCharacterButton->reset(); + thisCharacterButton->hide(); + thisCharacterButton->set_image(thisCourtroom->char_list.at(char_num).name); + thisCourtroom->ui_char_button_list.append(thisCharacterButton); + + thisCourtroom->connect(thisCharacterButton, SIGNAL(clicked()), thisCourtroom->char_button_mapper, SLOT(map())); + thisCourtroom->char_button_mapper->setMapping(thisCharacterButton, thisCourtroom->ui_char_button_list.size() - 1); + } +}; + +class AOCharSelectFilterThreading : public QRunnable +{ +public: + Courtroom *thisCourtroom; + int char_num; + AOCharSelectFilterThreading(Courtroom *my_courtroom, int character_number){ + thisCourtroom = my_courtroom; + char_num = character_number; + } + void run() + { + AOCharButton* current_char = thisCourtroom->ui_char_button_list.at(char_num); + + if (!thisCourtroom->ui_char_taken->isChecked() && thisCourtroom->char_list.at(char_num).taken) + return; + + if (!thisCourtroom->char_list.at(char_num).name.contains(thisCourtroom->ui_char_search->text(), Qt::CaseInsensitive)) + return; + + // We only really need to update the fact that a character is taken + // for the buttons that actually appear. + // You'd also update the passwordedness and etc. here later. + current_char->reset(); + current_char->set_taken(thisCourtroom->char_list.at(char_num).taken); + + thisCourtroom->ui_char_button_list_filtered.append(current_char); + } +}; + void Courtroom::construct_char_select() { ui_char_select_background = new AOImage(this, ao_app); @@ -44,6 +97,7 @@ void Courtroom::construct_char_select() set_size_and_pos(ui_char_buttons, "char_buttons"); + connect(char_button_mapper, SIGNAL(mapped(int)), this, SLOT(char_clicked(int))); connect(ui_back_to_lobby, SIGNAL(clicked()), this, SLOT(on_back_to_lobby_clicked())); connect(ui_char_select_left, SIGNAL(clicked()), this, SLOT(on_char_select_left_clicked())); @@ -125,7 +179,7 @@ void Courtroom::char_clicked(int n_char) if (!file_exists(char_ini_path)) { - call_notice("Could not find " + char_ini_path); + call_notice(tr("Could not find %1").arg(char_ini_path, 1)); return; } @@ -197,28 +251,15 @@ 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* char_button = new AOCharButton(ui_char_buttons, ao_app, 0, 0, char_list.at(n).taken); - char_button->reset(); - char_button->hide(); - char_button->set_image(char_list.at(n).name); - ui_char_button_list.append(char_button); - - connect(char_button, &AOCharButton::clicked, [this, n](){ - this->char_clicked(n); - }); - - // 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(tr("Generating chars:\n%1/%2").arg(QString::number(ao_app->generated_chars)).arg(QString::number(ao_app->char_list_size))); - } + AOCharButton* characterButton = new AOCharButton(ui_char_buttons, ao_app, 0, 0, char_list.at(n).taken); + AOCharSelectGenerationThreading *char_generate = new AOCharSelectGenerationThreading(this, n, characterButton); + QThreadPool::globalInstance()->start(char_generate); + if(QThreadPool::globalInstance()->activeThreadCount() == QThreadPool::globalInstance()->maxThreadCount()) + { + QThreadPool::globalInstance()->waitForDone(); + } } - + QThreadPool::globalInstance()->waitForDone(); filter_character_list(); } @@ -227,27 +268,14 @@ void Courtroom::filter_character_list() ui_char_button_list_filtered.clear(); for (int i = 0; i < char_list.size(); i++) { - AOCharButton* current_char = ui_char_button_list.at(i); - - // It seems passwording characters is unimplemented yet? - // Until then, this will stay here, I suppose. - //if (ui_char_passworded->isChecked() && character_is_passworded??) - // continue; - - if (!ui_char_taken->isChecked() && char_list.at(i).taken) - continue; - - if (!char_list.at(i).name.contains(ui_char_search->text(), Qt::CaseInsensitive)) - continue; - - // We only really need to update the fact that a character is taken - // for the buttons that actually appear. - // You'd also update the passwordedness and etc. here later. - current_char->reset(); - current_char->set_taken(char_list.at(i).taken); - - ui_char_button_list_filtered.append(current_char); + AOCharSelectFilterThreading *char_filter = new AOCharSelectFilterThreading(this, i); + QThreadPool::globalInstance()->start(char_filter); + if(QThreadPool::globalInstance()->activeThreadCount() == QThreadPool::globalInstance()->maxThreadCount()) + { + QThreadPool::globalInstance()->waitForDone(); + } } + QThreadPool::globalInstance()->waitForDone(); current_char_page = 0; set_char_select_page(); |
