Skip to content

Commit 71ae7d2

Browse files
committed
Implemented and hooked handle_list_item_chosen
`c_gui_screen_pregame_lobby_multiplayer::handle_list_item_chosen`
1 parent 9b8a4f6 commit 71ae7d2

File tree

4 files changed

+75
-0
lines changed

4 files changed

+75
-0
lines changed

game/game.vcxproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,8 @@ copy /b $(ProjectDir)source\config\version.cpp +,, $(ProjectDir)source\config\ve
271271
<ClCompile Include="source\interface\gui_pregame_setup_manager.cpp" />
272272
<ClCompile Include="source\interface\gui_screens\boot_betrayer\gui_screen_boot_betrayer.cpp" />
273273
<ClCompile Include="source\interface\gui_screens\player_select\gui_player_select_screen_widget.cpp" />
274+
<ClCompile Include="source\interface\gui_screens\pregame_lobby\gui_screen_pregame_lobby_multiplayer.cpp" />
275+
<ClCompile Include="source\interface\gui_screens\pregame_lobby\gui_screen_pregame_selection.cpp" />
274276
<ClCompile Include="source\interface\gui_screens\start_menu\panes\settings_appearance_colors\start_menu_settings_appearance_colors.cpp" />
275277
<ClCompile Include="source\interface\gui_screens\start_menu\panes\settings_appearance_model\start_menu_settings_appearance_model.cpp" />
276278
<ClCompile Include="source\interface\gui_screens\start_menu\start_menu_pane_screen_widget.cpp" />
@@ -949,6 +951,8 @@ copy /b $(ProjectDir)source\config\version.cpp +,, $(ProjectDir)source\config\ve
949951
<ClInclude Include="source\interface\gui_screens\game_browser\gui_game_browser.hpp" />
950952
<ClInclude Include="source\interface\gui_screens\motd_popup\gui_screen_motd_popup.hpp" />
951953
<ClInclude Include="source\interface\gui_screens\player_select\gui_player_select_screen_widget.hpp" />
954+
<ClInclude Include="source\interface\gui_screens\pregame_lobby\gui_screen_pregame_lobby_multiplayer.hpp" />
955+
<ClInclude Include="source\interface\gui_screens\pregame_lobby\gui_screen_pregame_selection.hpp" />
952956
<ClInclude Include="source\interface\gui_screens\start_menu\panes\hq\start_menu_headquarters.hpp" />
953957
<ClInclude Include="source\interface\gui_screens\start_menu\panes\settings_appearance_colors\start_menu_settings_appearance_colors.hpp" />
954958
<ClInclude Include="source\interface\gui_screens\start_menu\panes\settings_appearance_model\start_menu_settings_appearance_model.hpp" />

game/game.vcxproj.filters

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1812,6 +1812,10 @@
18121812
<ClCompile Include="common\havok\hkWorld.cpp">
18131813
<Filter>Source Files</Filter>
18141814
</ClCompile>
1815+
<ClCompile Include="source\interface\gui_screens\pregame_lobby\gui_screen_pregame_lobby_multiplayer.cpp">
1816+
<Filter>Source Files</Filter>
1817+
</ClCompile>
1818+
<ClCompile Include="source\interface\gui_screens\pregame_lobby\gui_screen_pregame_selection.cpp">
18151819
<Filter>Source Files</Filter>
18161820
</ClCompile>
18171821
</ItemGroup>
@@ -4129,6 +4133,9 @@
41294133
<ClInclude Include="common\havok\hkWorld.hpp">
41304134
<Filter>Header Files</Filter>
41314135
</ClInclude>
4136+
<ClInclude Include="source\interface\gui_screens\pregame_lobby\gui_screen_pregame_lobby_multiplayer.hpp">
4137+
<Filter>Header Files</Filter>
4138+
</ClInclude>
41324139
<ClInclude Include="source\interface\gui_screens\pregame_lobby\gui_screen_pregame_selection.hpp">
41334140
<Filter>Header Files</Filter>
41344141
</ClInclude>
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
#include "interface/gui_screens/pregame_lobby/gui_screen_pregame_lobby_multiplayer.hpp"
2+
3+
#include "interface/c_gui_list_item_widget.hpp"
4+
#include "interface/gui_selected_items.hpp"
5+
#include "interface/user_interface_data.hpp"
6+
#include "interface/user_interface_messages.hpp"
7+
#include "memory/module.hpp"
8+
9+
HOOK_DECLARE_CLASS_MEMBER(0x00B01250, c_gui_screen_pregame_lobby_multiplayer, handle_list_item_chosen_);
10+
11+
bool __thiscall c_gui_screen_pregame_lobby_multiplayer::handle_list_item_chosen_(c_controller_input_message const* message, long list_name, c_gui_list_item_widget* list_item_widget, c_gui_data* datasource)
12+
{
13+
if (list_name == STRING_ID(gui, lobby_list))
14+
{
15+
long target_name = _string_id_invalid;
16+
long element_handle = list_item_widget->get_element_handle();
17+
if (datasource->get_string_id_value(element_handle, STRING_ID(gui, target), &target_name))
18+
{
19+
e_gui_selected_item_type selection_type = _gui_selection_type_none;
20+
switch (target_name)
21+
{
22+
case STRING_ID(global, variant):
23+
selection_type = _gui_selection_type_game_variant;
24+
break;
25+
case STRING_ID(global, map):
26+
selection_type = _gui_selection_type_map;
27+
break;
28+
}
29+
30+
if (selection_type != _gui_selection_type_none)
31+
{
32+
if (c_load_pregame_selection_screen_message* pregame_selection_screen_message = new c_load_pregame_selection_screen_message(
33+
message->get_controller(),
34+
get_render_window(),
35+
m_name.get_value(),
36+
selection_type))
37+
{
38+
pregame_selection_screen_message->set_parent_screen_index(m_screen_index);
39+
user_interface_messaging_post(pregame_selection_screen_message);
40+
}
41+
return true;
42+
}
43+
}
44+
else if (datasource->get_string_id_value(element_handle, STRING_ID(global, name), &target_name) && target_name == STRING_ID(gui, advanced_options))
45+
{
46+
load_game_variant_editing_screen(message->get_controller());
47+
return true;
48+
}
49+
}
50+
51+
return c_gui_screen_pregame_lobby::handle_list_item_chosen(message, list_name, list_item_widget, datasource);
52+
}
53+
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
#include "cseries/cseries.hpp"
2+
3+
#include "interface/gui_screens/pregame_lobby/gui_screen_pregame_lobby.hpp"
4+
5+
struct c_gui_screen_pregame_lobby_multiplayer :
6+
public c_gui_screen_pregame_lobby
7+
{
8+
bool __thiscall handle_list_item_chosen_(c_controller_input_message const* message, long list_name, c_gui_list_item_widget* list_item_widget, c_gui_data* datasource);
9+
};
10+
static_assert(sizeof(c_gui_screen_pregame_lobby_multiplayer) == sizeof(c_gui_screen_pregame_lobby));
11+

0 commit comments

Comments
 (0)