diff --git a/charselect.cpp b/charselect.cpp index 541f1e0..c075876 100644 --- a/charselect.cpp +++ b/charselect.cpp @@ -26,42 +26,8 @@ void Courtroom::construct_char_select() ui_spectator = new AOButton(ui_char_select_background, ao_app); ui_spectator->setText("Spectator"); - QPoint f_spacing = ao_app->get_button_spacing("char_button_spacing", "courtroom_design.ini"); - - const int button_width = 60; - int x_spacing = f_spacing.x(); - int x_mod_count = 0; - - const int button_height = 60; - int y_spacing = f_spacing.y(); - int y_mod_count = 0; - set_size_and_pos(ui_char_buttons, "char_buttons"); - char_columns = ((ui_char_buttons->width() - button_width) / (x_spacing + button_width)) + 1; - char_rows = ((ui_char_buttons->height() - button_height) / (y_spacing + button_height)) + 1; - - max_chars_on_page = char_columns * char_rows; - - for (int n = 0 ; n < max_chars_on_page ; ++n) - { - int x_pos = (button_width + x_spacing) * x_mod_count; - int y_pos = (button_height + y_spacing) * y_mod_count; - - ui_char_button_list.append(new AOCharButton(ui_char_buttons, ao_app, x_pos, y_pos)); - - connect(ui_char_button_list.at(n), SIGNAL(clicked()), char_button_mapper, SLOT(map())) ; - char_button_mapper->setMapping (ui_char_button_list.at(n), n) ; - - ++x_mod_count; - - if (x_mod_count == char_columns) - { - ++y_mod_count; - x_mod_count = 0; - } - } - 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())); @@ -97,7 +63,10 @@ void Courtroom::set_char_select_page() ui_char_select_right->hide(); for (AOCharButton *i_button : ui_char_button_list) + { i_button->hide(); + i_button->move(0,0); + } int total_pages = char_list.size() / max_chars_on_page; int chars_on_page = 0; @@ -121,26 +90,24 @@ void Courtroom::set_char_select_page() if (current_char_page > 0) ui_char_select_left->show(); - for (int n_button = 0 ; n_button < chars_on_page ; ++n_button) + put_button_in_place(current_char_page * max_chars_on_page, chars_on_page); + + /*for (int n_button = 0 ; n_button < chars_on_page ; ++n_button) { int n_real_char = n_button + current_char_page * max_chars_on_page; AOCharButton *f_button = ui_char_button_list.at(n_button); - f_button->reset(); - f_button->set_image(char_list.at(n_real_char).name); f_button->show(); if (char_list.at(n_real_char).taken) f_button->set_taken(); - } + }*/ } void Courtroom::char_clicked(int n_char) { - int n_real_char = n_char + current_char_page * max_chars_on_page; - - QString char_ini_path = ao_app->get_character_path(char_list.at(n_real_char).name) + "char.ini"; + QString char_ini_path = ao_app->get_character_path(char_list.at(n_char).name) + "char.ini"; qDebug() << "char_ini_path" << char_ini_path; if (!file_exists(char_ini_path)) @@ -150,15 +117,65 @@ void Courtroom::char_clicked(int n_char) return; } - if (n_real_char == m_cid) + if (n_char == m_cid) { enter_courtroom(m_cid); } else { - ao_app->send_server_packet(new AOPacket("CC#" + QString::number(ao_app->s_pv) + "#" + QString::number(n_real_char) + "#" + get_hdid() + "#%")); + ao_app->send_server_packet(new AOPacket("CC#" + QString::number(ao_app->s_pv) + "#" + QString::number(n_char) + "#" + get_hdid() + "#%")); } - ui_ic_chat_name->setPlaceholderText(char_list.at(n_real_char).name); + ui_ic_chat_name->setPlaceholderText(char_list.at(n_char).name); } +void Courtroom::put_button_in_place(int starting, int chars_on_this_page) +{ + QPoint f_spacing = ao_app->get_button_spacing("char_button_spacing", "courtroom_design.ini"); + + int x_spacing = f_spacing.x(); + int x_mod_count = 0; + + int y_spacing = f_spacing.y(); + int y_mod_count = 0; + + char_columns = ((ui_char_buttons->width() - button_width) / (x_spacing + button_width)) + 1; + char_rows = ((ui_char_buttons->height() - button_height) / (y_spacing + button_height)) + 1; + + int startout = starting; + for (int n = starting ; n < startout+chars_on_this_page ; ++n) + { + int x_pos = (button_width + x_spacing) * x_mod_count; + int y_pos = (button_height + y_spacing) * y_mod_count; + + ui_char_button_list.at(n)->move(x_pos, y_pos); + ui_char_button_list.at(n)->show(); + + ++x_mod_count; + + if (x_mod_count == char_columns) + { + ++y_mod_count; + x_mod_count = 0; + } + } +} + +void Courtroom::character_loading_finished() +{ + // We move them out of the reachable area, so they can't be accidentally clicked. + // First, we'll make all the character buttons in the very beginning. + // We hide them too, just in case. + for (int n = 0; n < char_list.size(); n++) + { + AOCharButton* character = new AOCharButton(ui_char_buttons, ao_app, 0, 0); + 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); + } + + put_button_in_place(0, max_chars_on_page); +} diff --git a/courtroom.h b/courtroom.h index 22d2586..eb8943e 100644 --- a/courtroom.h +++ b/courtroom.h @@ -47,6 +47,8 @@ public: void append_evidence(evi_type p_evi){evidence_list.append(p_evi);} void append_music(QString f_music){music_list.append(f_music);} + void character_loading_finished(); + //sets position of widgets based on theme ini files void set_widgets(); //sets font size based on theme ini files @@ -272,6 +274,9 @@ private: int char_rows = 9; int max_chars_on_page = 90; + const int button_width = 60; + const int button_height = 60; + int current_emote_page = 0; int current_emote = 0; int emote_columns = 5; @@ -427,6 +432,7 @@ private: void construct_char_select(); void set_char_select(); void set_char_select_page(); + void put_button_in_place(int starting, int chars_on_this_page); void construct_emotes(); void set_emote_page(); diff --git a/packet_distribution.cpp b/packet_distribution.cpp index 6e94f41..fe5c534 100644 --- a/packet_distribution.cpp +++ b/packet_distribution.cpp @@ -296,11 +296,11 @@ void AOApplication::server_packet_received(AOPacket *p_packet) w_lobby->set_loading_text("Loading chars:\n" + QString::number(loaded_chars) + "/" + QString::number(char_list_size)); w_courtroom->append_char(f_char); - } - int total_loading_size = char_list_size + evidence_list_size + music_list_size; - int loading_value = (loaded_chars / static_cast(total_loading_size)) * 100; - w_lobby->set_loading_value(loading_value); + int total_loading_size = char_list_size + evidence_list_size + music_list_size; + int loading_value = int(((loaded_chars + loaded_music + loaded_evidence) / static_cast(total_loading_size)) * 100); + w_lobby->set_loading_value(loading_value); + } if (improved_loading_enabled) send_server_packet(new AOPacket("RE#%")); @@ -342,7 +342,7 @@ void AOApplication::server_packet_received(AOPacket *p_packet) w_courtroom->append_evidence(f_evi); int total_loading_size = char_list_size + evidence_list_size + music_list_size; - int loading_value = ((loaded_chars + loaded_evidence) / static_cast(total_loading_size)) * 100; + int loading_value = int(((loaded_chars + loaded_music + loaded_evidence) / static_cast(total_loading_size)) * 100); w_lobby->set_loading_value(loading_value); QString next_packet_number = QString::number(loaded_evidence); @@ -369,11 +369,11 @@ void AOApplication::server_packet_received(AOPacket *p_packet) w_lobby->set_loading_text("Loading music:\n" + QString::number(loaded_music) + "/" + QString::number(music_list_size)); w_courtroom->append_music(f_music); - } - int total_loading_size = char_list_size + evidence_list_size + music_list_size; - int loading_value = ((loaded_chars + loaded_evidence + loaded_music) / static_cast(total_loading_size)) * 100; - w_lobby->set_loading_value(loading_value); + int total_loading_size = char_list_size + evidence_list_size + music_list_size; + int loading_value = int(((loaded_chars + loaded_music + loaded_evidence) / static_cast(total_loading_size)) * 100); + w_lobby->set_loading_value(loading_value); + } QString next_packet_number = QString::number(((loaded_music - 1) / 10) + 1); send_server_packet(new AOPacket("AM#" + next_packet_number + "#%")); @@ -414,11 +414,12 @@ void AOApplication::server_packet_received(AOPacket *p_packet) w_lobby->set_loading_text("Loading chars:\n" + QString::number(loaded_chars) + "/" + QString::number(char_list_size)); w_courtroom->append_char(f_char); - } - int total_loading_size = char_list_size + evidence_list_size + music_list_size; - int loading_value = (loaded_chars / static_cast(total_loading_size)) * 100; - w_lobby->set_loading_value(loading_value); + int total_loading_size = char_list_size + evidence_list_size + music_list_size; + int loading_value = int(((loaded_chars + loaded_music + loaded_evidence) / static_cast(total_loading_size)) * 100); + w_lobby->set_loading_value(loading_value); + } + w_courtroom->character_loading_finished(); send_server_packet(new AOPacket("RM#%")); } @@ -434,11 +435,11 @@ void AOApplication::server_packet_received(AOPacket *p_packet) w_lobby->set_loading_text("Loading music:\n" + QString::number(loaded_music) + "/" + QString::number(music_list_size)); w_courtroom->append_music(f_contents.at(n_element)); - } - int total_loading_size = char_list_size + evidence_list_size + music_list_size; - int loading_value = (loaded_chars / static_cast(total_loading_size)) * 100; - w_lobby->set_loading_value(loading_value); + int total_loading_size = char_list_size + evidence_list_size + music_list_size; + int loading_value = int(((loaded_chars + loaded_music + loaded_evidence) / static_cast(total_loading_size)) * 100); + w_lobby->set_loading_value(loading_value); + } send_server_packet(new AOPacket("RD#%")); } @@ -450,6 +451,7 @@ void AOApplication::server_packet_received(AOPacket *p_packet) if (lobby_constructed) w_courtroom->append_ms_chatmessage("", w_lobby->get_chatlog()); + w_courtroom->character_loading_finished(); w_courtroom->done_received(); courtroom_loaded = true;