From 906c9016bb4660eb0445a3345a55ede959c3cb96 Mon Sep 17 00:00:00 2001 From: iamgoofball Date: Wed, 23 Jan 2019 00:58:30 -0800 Subject: Multithreaded character generation TODO: fix loading screen --- src/charselect.cpp | 48 ++++++++++++++++++++++++++++-------------------- 1 file changed, 28 insertions(+), 20 deletions(-) (limited to 'src/charselect.cpp') diff --git a/src/charselect.cpp b/src/charselect.cpp index 8e1b912..e6d9c9f 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(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(); } -- cgit From f75032840450263bfe27d3b5a68ea1458a0ce8a5 Mon Sep 17 00:00:00 2001 From: iamgoofball Date: Wed, 23 Jan 2019 01:07:20 -0800 Subject: Multithreaded filtering of the character list --- src/charselect.cpp | 52 ++++++++++++++++++++++++++++++++-------------------- 1 file changed, 32 insertions(+), 20 deletions(-) (limited to 'src/charselect.cpp') diff --git a/src/charselect.cpp b/src/charselect.cpp index e6d9c9f..c5a10bd 100644 --- a/src/charselect.cpp +++ b/src/charselect.cpp @@ -29,6 +29,35 @@ public: } }; +class AOCharSelectFilterThreading : public QRunnable +{ +public: + Courtroom *mycourt_fuck; + int char_num; + AOCharSelectFilterThreading(Courtroom *my_courtroom, int character_number){ + mycourt_fuck = my_courtroom; + char_num = character_number; + } + void run() + { + AOCharButton* current_char = mycourt_fuck->ui_char_button_list.at(char_num); + + if (!mycourt_fuck->ui_char_taken->isChecked() && mycourt_fuck->char_list.at(char_num).taken) + return; + + if (!mycourt_fuck->char_list.at(char_num).name.contains(mycourt_fuck->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(mycourt_fuck->char_list.at(char_num).taken); + + mycourt_fuck->ui_char_button_list_filtered.append(current_char); + } +}; + void Courtroom::construct_char_select() { ui_char_select_background = new AOImage(this, ao_app); @@ -234,27 +263,10 @@ 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); } + QThreadPool::globalInstance()->waitForDone(); current_char_page = 0; set_char_select_page(); -- cgit From 0649e7b28e16a054072d8656a5046c7cc3cfefb6 Mon Sep 17 00:00:00 2001 From: iamgoofball Date: Wed, 23 Jan 2019 07:35:29 -0800 Subject: Case Announcer: Witness Support also some other shit --- src/charselect.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'src/charselect.cpp') diff --git a/src/charselect.cpp b/src/charselect.cpp index c5a10bd..6edd87e 100644 --- a/src/charselect.cpp +++ b/src/charselect.cpp @@ -253,6 +253,10 @@ void Courtroom::character_loading_finished() 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); + if(QThreadPool::globalInstance()->activeThreadCount() == QThreadPool::globalInstance()->maxThreadCount()) + { + QThreadPool::globalInstance()->waitForDone(); + } } QThreadPool::globalInstance()->waitForDone(); filter_character_list(); @@ -265,6 +269,10 @@ void Courtroom::filter_character_list() { 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(); -- cgit From 8d6b69e2f26dd0d365a10d15381946f989df0875 Mon Sep 17 00:00:00 2001 From: sD Date: Fri, 21 Feb 2020 17:02:55 +0100 Subject: replace mycourt_fuck --- src/charselect.cpp | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) (limited to 'src/charselect.cpp') diff --git a/src/charselect.cpp b/src/charselect.cpp index 875c8a5..b71d9b7 100644 --- a/src/charselect.cpp +++ b/src/charselect.cpp @@ -8,11 +8,11 @@ class AOCharSelectGenerationThreading : public QRunnable { public: - Courtroom *mycourt_fuck; + Courtroom *thisCourtroom; int char_num; AOCharButton *char_button; AOCharSelectGenerationThreading(Courtroom *my_courtroom, int character_number, AOCharButton *charbut){ - mycourt_fuck = my_courtroom; + thisCourtroom = my_courtroom; char_num = character_number; char_button = charbut; } @@ -21,40 +21,40 @@ public: 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); + character->set_image(thisCourtroom->char_list.at(char_num).name); + thisCourtroom->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); + thisCourtroom->connect(character, SIGNAL(clicked()), thisCourtroom->char_button_mapper, SLOT(map())); + thisCourtroom->char_button_mapper->setMapping(character, thisCourtroom->ui_char_button_list.size() - 1); } }; class AOCharSelectFilterThreading : public QRunnable { public: - Courtroom *mycourt_fuck; + Courtroom *thisCourtroom; int char_num; AOCharSelectFilterThreading(Courtroom *my_courtroom, int character_number){ - mycourt_fuck = my_courtroom; + thisCourtroom = my_courtroom; char_num = character_number; } void run() { - AOCharButton* current_char = mycourt_fuck->ui_char_button_list.at(char_num); + AOCharButton* current_char = thisCourtroom->ui_char_button_list.at(char_num); - if (!mycourt_fuck->ui_char_taken->isChecked() && mycourt_fuck->char_list.at(char_num).taken) + if (!thisCourtroom->ui_char_taken->isChecked() && thisCourtroom->char_list.at(char_num).taken) return; - if (!mycourt_fuck->char_list.at(char_num).name.contains(mycourt_fuck->ui_char_search->text(), Qt::CaseInsensitive)) + 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(mycourt_fuck->char_list.at(char_num).taken); + current_char->set_taken(thisCourtroom->char_list.at(char_num).taken); - mycourt_fuck->ui_char_button_list_filtered.append(current_char); + thisCourtroom->ui_char_button_list_filtered.append(current_char); } }; -- cgit From 4580816f96a59ed4a7fb8b5f50f86022d97707a1 Mon Sep 17 00:00:00 2001 From: sD Date: Fri, 21 Feb 2020 18:29:36 +0100 Subject: character is a little nondescriptive for the button --- src/charselect.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/charselect.cpp') diff --git a/src/charselect.cpp b/src/charselect.cpp index b71d9b7..fb8b987 100644 --- a/src/charselect.cpp +++ b/src/charselect.cpp @@ -250,8 +250,8 @@ 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); - AOCharSelectGenerationThreading *char_generate = new AOCharSelectGenerationThreading(this, n, character); + 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()) { -- cgit From ed240c6ab010712bb67bdbbe37540c4d3d3b629d Mon Sep 17 00:00:00 2001 From: sD Date: Fri, 21 Feb 2020 18:33:04 +0100 Subject: same here --- src/charselect.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'src/charselect.cpp') diff --git a/src/charselect.cpp b/src/charselect.cpp index fb8b987..e0a3052 100644 --- a/src/charselect.cpp +++ b/src/charselect.cpp @@ -18,14 +18,14 @@ public: } void run() { - AOCharButton* character = char_button; - character->reset(); - character->hide(); - character->set_image(thisCourtroom->char_list.at(char_num).name); - thisCourtroom->ui_char_button_list.append(character); - - thisCourtroom->connect(character, SIGNAL(clicked()), thisCourtroom->char_button_mapper, SLOT(map())); - thisCourtroom->char_button_mapper->setMapping(character, thisCourtroom->ui_char_button_list.size() - 1); + 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); } }; -- cgit From 5cf1fdcc2dda1a6d9e7ec1261c8f20a9fbe79816 Mon Sep 17 00:00:00 2001 From: sD Date: Sun, 23 Feb 2020 03:13:07 +0100 Subject: connect the signal to char_clicked --- src/charselect.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'src/charselect.cpp') diff --git a/src/charselect.cpp b/src/charselect.cpp index e0a3052..1ea484a 100644 --- a/src/charselect.cpp +++ b/src/charselect.cpp @@ -97,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())); -- cgit From 3c30098360b2598dc049d779e4ffc6dbba0d1d44 Mon Sep 17 00:00:00 2001 From: sD Date: Sun, 23 Feb 2020 13:08:19 +0100 Subject: translate char not found --- src/charselect.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/charselect.cpp') diff --git a/src/charselect.cpp b/src/charselect.cpp index 1ea484a..d6ee044 100644 --- a/src/charselect.cpp +++ b/src/charselect.cpp @@ -179,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; } -- cgit