22
33#include " bitmaps/bitmap_group.hpp"
44#include " gui_custom_bitmap_storage.hpp"
5+ #include " interface/c_controller.hpp"
6+ #include " interface/c_gui_list_widget.hpp"
7+ #include " interface/c_gui_screen_widget.hpp"
58#include " interface/interface_constants.hpp"
9+ #include " interface/user_interface_data.hpp"
10+ #include " math/color_math.hpp"
611#include " memory/module.hpp"
712#include " rasterizer/rasterizer.hpp"
813#include " render/screen_postprocess.hpp"
914
15+ HOOK_DECLARE_CLASS_MEMBER (0x00B167B0 , c_gui_bitmap_widget, assemble_render_data_);
1016HOOK_DECLARE (0x00B170F0 , render_bitmap);
1117
1218// .text:00B16670 ; public: __cdecl c_gui_bitmap_widget::c_gui_bitmap_widget()
@@ -18,7 +24,114 @@ HOOK_DECLARE(0x00B170F0, render_bitmap);
1824
1925// .text:00B166E0 ; public: static void __cdecl c_gui_bitmap_widget::add_definition_fields(s_bitmap_widget_definition const*, s_runtime_bitmap_widget_definition*, real_rectangle2d*, bool)
2026// .text:00B16760 ; public: static void __cdecl c_gui_bitmap_widget::assemble_definition(s_bitmap_widget_block const*, s_runtime_bitmap_widget_definition*, real_rectangle2d*)
21- // .text:00B167B0 ; public: virtual void __cdecl c_gui_bitmap_widget::assemble_render_data(s_gui_widget_render_data*, rectangle2d const*, e_controller_index, int32, bool, bool, bool)
27+
28+ void __thiscall c_gui_bitmap_widget::assemble_render_data_ (
29+ s_gui_bitmap_widget_render_data* render_data,
30+ rectangle2d* window_bounds,
31+ e_controller_index local_controller_index,
32+ bool apply_translation,
33+ bool apply_scale,
34+ bool apply_rotation)
35+ {
36+ // INVOKE_CLASS_MEMBER(0x00B167B0, c_gui_bitmap_widget, assemble_render_data,
37+ // render_data,
38+ // window_bounds,
39+ // local_controller_index,
40+ // apply_translation,
41+ // apply_scale,
42+ // apply_rotation);
43+
44+ c_gui_widget::assemble_render_data (
45+ render_data,
46+ window_bounds,
47+ local_controller_index,
48+ apply_translation,
49+ apply_scale,
50+ apply_rotation);
51+ // INVOKE_CLASS_MEMBER(0x00AB7330, c_gui_widget, assemble_render_data,
52+ // render_data,
53+ // window_bounds,
54+ // local_controller_index,
55+ // apply_translation,
56+ // apply_scale,
57+ // apply_rotation);
58+
59+ bool render_blurred_back_buffer = TEST_BIT (m_definition.flags , 4 );
60+ render_data->flags .set (s_gui_widget_render_data::_render_blurred_back_buffer_bit, render_blurred_back_buffer);
61+
62+ bool render_as_player_emblem = TEST_BIT (m_definition.flags , 5 );
63+ render_data->flags .set (s_gui_widget_render_data::_render_as_player_emblem_bit, render_as_player_emblem);
64+
65+ if (m_override_sprite_bitmap_index != NONE)
66+ {
67+ render_data->bitmap_definition_index = m_override_sprite_bitmap_index;
68+ }
69+ else
70+ {
71+ render_data->bitmap_definition_index = m_definition.bitmap_reference_index ;
72+ }
73+
74+ if (render_blurred_back_buffer)
75+ {
76+ real_rectangle2d pin_bounds
77+ {
78+ .x0 = (real32)window_bounds->x0 ,
79+ .x1 = (real32)window_bounds->x1 ,
80+ .y0 = (real32)window_bounds->y0 ,
81+ .y1 = (real32)window_bounds->y1 ,
82+ };
83+ render_data->projected_bounds .pin (&pin_bounds);
84+ }
85+ else if (render_as_player_emblem)
86+ {
87+ c_gui_screen_widget* parent_screen = get_parent_screen ();
88+ ASSERT (parent_screen != NULL );
89+
90+ bool emblem_info_valid = false ;// parent_screen->try_and_get_render_data_emblem_info(&render_data->source.emblem);
91+ if (!emblem_info_valid)
92+ {
93+ s_player_appearance player_appearance{};
94+
95+ if (get_element_handle () != NONE)
96+ {
97+ if (c_gui_list_widget* parent_list = get_parent_list ())
98+ {
99+ if (c_gui_data* data = parent_list->get_data ())
100+ {
101+ // emblem_info_valid = data->get_player_appearance(get_element_handle(), &player_appearance);
102+
103+ render_data->source .emblem = controller_get (_controller0)->get_player_profile_interface ()->get_emblem_info ();
104+ emblem_info_valid = true ;
105+ }
106+ }
107+ }
108+
109+ if (emblem_info_valid)
110+ {
111+ render_data->source .emblem = player_appearance.emblem_info ;
112+ }
113+ else if (VALID_CONTROLLER (render_data->local_controller_index ))
114+ {
115+ render_data->source .emblem = controller_get (render_data->local_controller_index )->get_player_profile_interface ()->get_emblem_info ();
116+ emblem_info_valid = true ;
117+ }
118+ }
119+
120+ render_data->flags .set (s_gui_widget_render_data::_emblem_info_valid_bit, emblem_info_valid);
121+ }
122+ else
123+ {
124+ render_data->source .sprite .sequence = m_animated_state.bitmap_sprite_sequence ;
125+ render_data->source .sprite .frame = m_animated_state.bitmap_sprite_frame ;
126+ }
127+
128+ real_argb_color argb_tint_color{};
129+ render_data->argb_tint = real_argb_color_to_pixel32 (get_cumulative_color_tint (&argb_tint_color));
130+ render_data->texture_uv_offset = m_animated_state.texture_uv ;
131+ render_data->frame_buffer_blend_function = MIN (MAX (m_definition.render_blend_mode , 0 ), 12 );
132+ render_data->explicit_shader_index = m_definition.explicit_shader_reference_index ;
133+ }
134+
22135// .text:00B168F0 ; public: virtual bool __cdecl c_gui_bitmap_widget::can_receive_focus()
23136
24137// e_animation_state c_gui_bitmap_widget::get_ambient_state()
@@ -162,24 +275,10 @@ void __cdecl render_bitmap(s_gui_bitmap_widget_render_data const* render_data, r
162275 }
163276 else if (render_data->flags .test (s_gui_widget_render_data::_render_as_player_emblem_bit))
164277 {
165- int16 background_emblem_index = 0 ;
166- int16 foreground_emblem_index = 0 ;
167-
168- bool v39 = false ;
169- if (VALID_CONTROLLER (render_data->local_controller_index ))
170- {
171- v39 = emblem_set_render_constants_for_local_user (render_data->local_controller_index , &foreground_emblem_index, &background_emblem_index);
172- }
173- else
174- {
175- v39 = emblem_set_render_constants_for_local_user (render_data->local_controller_index , &foreground_emblem_index, &background_emblem_index);
176- }
177-
178- // /*render_data->flags.test(s_gui_widget_render_data::_emblem_info_valid_bit) &&*/ emblem_set_render_constants_from_user_interface(&render_data->source.emblem)
179- if (v39)
278+ if (render_data->flags .test (s_gui_widget_render_data::_emblem_info_valid_bit) && emblem_set_render_constants_from_user_interface (&render_data->source .emblem ))
180279 {
181- get_bitmap_and_hardware_format (render_data->bitmap_definition_index , 0 , background_emblem_index, &hardware_format_primary);
182- get_bitmap_and_hardware_format (render_data->bitmap_definition_index , 0 , foreground_emblem_index, &hardware_format_secondary);
280+ get_bitmap_and_hardware_format (render_data->bitmap_definition_index , 0 , render_data-> source . emblem . background_emblem_index , &hardware_format_primary);
281+ get_bitmap_and_hardware_format (render_data->bitmap_definition_index , 0 , render_data-> source . emblem . foreground_emblem_index , &hardware_format_secondary);
183282 explicit_shader_index = c_rasterizer_globals::_shader_player_emblem_screen;
184283 }
185284 }
@@ -300,12 +399,12 @@ void __cdecl render_bitmap(s_gui_bitmap_widget_render_data const* render_data, r
300399
301400void c_gui_bitmap_widget::set_sprite_frame (int32 sprite_frame)
302401{
303- m_sprite_frame = sprite_frame;
402+ m_override_sprite_frame = sprite_frame;
304403}
305404
306405void c_gui_bitmap_widget::set_sprite_sequence (int32 sprite_sequence)
307406{
308- m_sprite_sequence = sprite_sequence;
407+ m_override_sprite_sequence = sprite_sequence;
309408}
310409
311410// .text:00B17690 ; public: virtual void __cdecl c_gui_bitmap_widget::update_render_state(uns32)
0 commit comments