@@ -220,10 +220,10 @@ void VR::on_view_get_size(REManagedObject* scene_view, float* result) {
220220 // but rather update the current scene view's size directly.
221221 regenny_view->size .w = wanted_width;
222222 regenny_view->size .h = wanted_height;
223- // regenny_view->custom_display_size.w = wanted_width;
224- // regenny_view->custom_display_size.h = wanted_height;
225- // regenny_view->present_rect.w = wanted_width;
226- // regenny_view->present_rect.h = wanted_height;
223+ regenny_view->custom_display_size .w = wanted_width;
224+ regenny_view->custom_display_size .h = wanted_height;
225+ regenny_view->present_rect .w = wanted_width;
226+ regenny_view->present_rect .h = wanted_height;
227227#endif
228228}
229229
@@ -1402,9 +1402,11 @@ void VR::update_hmd_state() {
14021402 // if this is not done, the left eye will jitter a lot
14031403#if defined(RE2) || defined(RE3)
14041404 auto camera = sdk::get_primary_camera ();
1405+ auto camera_game_object = utility::re_component::get_game_object (camera);
1406+ auto camera_transform = utility::re_game_object::get_transform (camera_game_object);
14051407
1406- if (camera != nullptr && camera-> ownerGameObject != nullptr && camera-> ownerGameObject -> transform != nullptr ) {
1407- FirstPerson::get ()->on_update_transform (camera-> ownerGameObject -> transform );
1408+ if (camera_transform != nullptr ) {
1409+ FirstPerson::get ()->on_update_transform (camera_transform );
14081410 }
14091411#endif
14101412}
@@ -1493,12 +1495,13 @@ void VR::update_camera() {
14931495 m_needs_camera_restore = false ;
14941496
14951497 auto camera_object = utility::re_component::get_game_object (camera);
1498+ auto camera_transform = utility::re_game_object::get_transform (camera_object);
14961499
1497- if (camera_object == nullptr || camera_object-> transform == nullptr ) {
1500+ if (camera_transform == nullptr ) {
14981501 return ;
14991502 }
15001503
1501- auto camera_joint = utility::re_transform::get_joint (*camera_object-> transform , 0 );
1504+ auto camera_joint = utility::re_transform::get_joint (*camera_transform , 0 );
15021505
15031506 if (camera_joint == nullptr ) {
15041507 return ;
@@ -1552,14 +1555,15 @@ void VR::update_camera_origin() {
15521555 }
15531556
15541557 auto camera_object = utility::re_component::get_game_object (camera);
1558+ auto camera_transform = utility::re_game_object::get_transform (camera_object);
15551559
1556- if (camera_object == nullptr || camera_object-> transform == nullptr ) {
1560+ if (camera_transform == nullptr ) {
15571561 spdlog::error (" VR: Failed to get camera game object or transform!" );
15581562 m_needs_camera_restore = false ;
15591563 return ;
15601564 }
15611565
1562- auto camera_joint = utility::re_transform::get_joint (*camera_object-> transform , 0 );
1566+ auto camera_joint = utility::re_transform::get_joint (*camera_transform , 0 );
15631567
15641568 if (camera_joint == nullptr ) {
15651569 spdlog::error (" VR: Failed to get camera joint!" );
@@ -1653,12 +1657,13 @@ void VR::update_audio_camera() {
16531657 }
16541658
16551659 auto camera_object = utility::re_component::get_game_object (camera);
1660+ auto camera_transform = utility::re_game_object::get_transform (camera_object);
16561661
1657- if (camera_object == nullptr || camera_object-> transform == nullptr ) {
1662+ if (camera_transform == nullptr ) {
16581663 return ;
16591664 }
16601665
1661- auto camera_joint = utility::re_transform::get_joint (*camera_object-> transform , 0 );
1666+ auto camera_joint = utility::re_transform::get_joint (*camera_transform , 0 );
16621667
16631668 if (camera_joint == nullptr ) {
16641669 return ;
@@ -1688,12 +1693,13 @@ void VR::update_render_matrix() {
16881693 }
16891694
16901695 auto camera_object = utility::re_component::get_game_object (camera);
1696+ auto camera_transform = utility::re_game_object::get_transform (camera_object);
16911697
1692- if (camera_object == nullptr || camera_object-> transform == nullptr ) {
1698+ if (camera_transform == nullptr ) {
16931699 return ;
16941700 }
16951701
1696- auto camera_joint = utility::re_transform::get_joint (*camera_object-> transform , 0 );
1702+ auto camera_joint = utility::re_transform::get_joint (*camera_transform , 0 );
16971703
16981704 if (camera_joint == nullptr ) {
16991705 return ;
@@ -1723,15 +1729,16 @@ void VR::restore_audio_camera() {
17231729 }
17241730
17251731 auto camera_object = utility::re_component::get_game_object (camera);
1732+ auto camera_transform = utility::re_game_object::get_transform (camera_object);
17261733
1727- if (camera_object == nullptr || camera_object-> transform == nullptr ) {
1734+ if (camera_transform == nullptr ) {
17281735 m_needs_audio_restore = false ;
17291736 return ;
17301737 }
17311738
1732- // camera_object->transform ->worldTransform = m_original_camera_matrix;
1739+ // camera_transform ->worldTransform = m_original_camera_matrix;
17331740
1734- auto joint = utility::re_transform::get_joint (*camera_object-> transform , 0 );
1741+ auto joint = utility::re_transform::get_joint (*camera_transform , 0 );
17351742
17361743 if (joint == nullptr ) {
17371744 m_needs_audio_restore = false ;
@@ -1764,15 +1771,16 @@ void VR::restore_camera() {
17641771 }
17651772
17661773 auto camera_object = utility::re_component::get_game_object (camera);
1774+ auto camera_transform = utility::re_game_object::get_transform (camera_object);
17671775
1768- if (camera_object == nullptr || camera_object-> transform == nullptr ) {
1776+ if (camera_transform == nullptr ) {
17691777 m_needs_camera_restore = false ;
17701778 return ;
17711779 }
17721780
1773- // camera_object->transform ->worldTransform = m_original_camera_matrix;
1781+ // camera_transform ->worldTransform = m_original_camera_matrix;
17741782
1775- auto joint = utility::re_transform::get_joint (*camera_object-> transform , 0 );
1783+ auto joint = utility::re_transform::get_joint (*camera_transform , 0 );
17761784
17771785 if (joint == nullptr ) {
17781786 m_needs_camera_restore = false ;
@@ -2348,6 +2356,7 @@ struct GUIRestoreData {
23482356 REComponent* element{nullptr };
23492357 REComponent* view{nullptr };
23502358 Vector4f original_position{ 0 .0f , 0 .0f , 0 .0f , 1 .0f };
2359+ Matrix4x4f original_world_matrix{};
23512360 via::gui::ViewType view_type{ via::gui::ViewType::Screen };
23522361 bool overlay{false };
23532362 bool detonemap{true };
@@ -2364,7 +2373,9 @@ bool VR::on_pre_gui_draw_element(REComponent* gui_element, void* primitive_conte
23642373
23652374 auto game_object = utility::re_component::get_game_object (gui_element);
23662375
2367- if (game_object != nullptr && game_object->transform != nullptr ) {
2376+ auto game_object_transform = utility::re_game_object::get_transform (game_object);
2377+
2378+ if (game_object != nullptr && game_object_transform != nullptr ) {
23682379 auto context = sdk::get_thread_context ();
23692380
23702381 const auto name = utility::re_game_object::get_name (game_object);
@@ -2464,7 +2475,7 @@ bool VR::on_pre_gui_draw_element(REComponent* gui_element, void* primitive_conte
24642475 // we don't want to mess with any game object that has a mesh
24652476 // because it might be something physical in the game world
24662477 // that the player can interact with
2467- if (utility::re_component::find (game_object-> transform , via_render_mesh_typedef->get_type ()) != nullptr ) {
2478+ if (utility::re_component::find (game_object_transform , via_render_mesh_typedef->get_type ()) != nullptr ) {
24682479 return true ;
24692480 }
24702481
@@ -2476,11 +2487,12 @@ bool VR::on_pre_gui_draw_element(REComponent* gui_element, void* primitive_conte
24762487 const auto world_ui_scale = m_world_ui_scale_option->value ();
24772488
24782489 auto & restore_data = g_elements_to_reset.emplace_back (std::make_unique<GUIRestoreData>());
2479- auto original_game_object_pos = sdk::get_transform_position (game_object-> transform );
2490+ auto original_game_object_pos = sdk::get_transform_position (game_object_transform );
24802491
24812492 restore_data->element = gui_element;
24822493 restore_data->view = view;
24832494 restore_data->original_position = original_game_object_pos;
2495+ restore_data->original_world_matrix = game_object_transform->worldTransform ;
24842496 restore_data->overlay = sdk::call_object_func<bool >(view, " get_Overlay" , context, view);
24852497 restore_data->detonemap = sdk::call_object_func<bool >(view, " get_Detonemap" , context, view);
24862498 restore_data->view_type = (via::gui::ViewType)current_view_type;
@@ -2511,9 +2523,10 @@ bool VR::on_pre_gui_draw_element(REComponent* gui_element, void* primitive_conte
25112523 // Set the gui element's position to be in front of the camera
25122524 if (camera != nullptr ) {
25132525 auto camera_object = utility::re_component::get_game_object (camera);
2526+ auto camera_transform = utility::re_game_object::get_transform (camera_object);
25142527
2515- if (camera_object != nullptr && camera_object-> transform != nullptr ) {
2516- auto & gui_matrix = game_object-> transform ->worldTransform ;
2528+ if (camera_transform != nullptr ) {
2529+ auto & gui_matrix = game_object_transform ->worldTransform ;
25172530 auto child = sdk::call_object_func<REManagedObject*>(view, " get_Child" , context, view);
25182531
25192532 auto fix_2d_position = [&](const Vector4f& target_position,
@@ -2543,8 +2556,8 @@ bool VR::on_pre_gui_draw_element(REComponent* gui_element, void* primitive_conte
25432556 // LESSON: DO NOT CALL THESE METHODS ON THE TRANSFORM!
25442557 // THEY CAUSE SOME STRANGE BUGS WHEN THE GUI ELEMENT HAS A PARENT TRANSFORM!
25452558 // THE GUI RENDERING FUNCTIONS PERFORM ON THE WORLD MATRIX, SO THIS IS NOT NECESSARY.
2546- // sdk::set_transform_position(game_object->transform , new_pos);
2547- // sdk::set_transform_rotation(game_object->transform , look_rot);
2559+ // sdk::set_transform_position(game_object_transform , new_pos);
2560+ // sdk::set_transform_rotation(game_object_transform , look_rot);
25482561
25492562 const auto scaled_ui_scale = *custom_ui_scale * 0 .01f ;
25502563 const auto distance = glm::length (delta);
@@ -2586,7 +2599,7 @@ bool VR::on_pre_gui_draw_element(REComponent* gui_element, void* primitive_conte
25862599 // Fix for other kinds of world pos attach elements.
25872600#ifdef RE7
25882601 if (name_hash == " InteractOperationCursor" _fnv) {
2589- auto world_pos_attach_comp = utility::re_component::find (game_object-> transform , ui_world_pos_attach_typedef->get_type ());
2602+ auto world_pos_attach_comp = utility::re_component::find (game_object_transform , ui_world_pos_attach_typedef->get_type ());
25902603
25912604 // Fix the world position of the gui element
25922605 if (world_pos_attach_comp != nullptr ) {
@@ -2607,8 +2620,6 @@ bool VR::on_pre_gui_draw_element(REComponent* gui_element, void* primitive_conte
26072620 gui_matrix = glm::scale (gui_matrix, Vector3f{ scale, scale, scale });
26082621 };
26092622
2610- auto camera_transform = camera_object->transform ;
2611-
26122623 const auto & camera_matrix = m_original_camera_matrix;
26132624 const auto & camera_position = camera_matrix[3 ];
26142625
@@ -2751,15 +2762,16 @@ bool VR::on_pre_gui_draw_element(REComponent* gui_element, void* primitive_conte
27512762
27522763 fix_2d_position (original_game_object_pos);
27532764 } else if (gui_driver_typedef != nullptr ) { // RE8
2754- auto interact_icon_comp = utility::re_component::find (game_object-> transform , gui_driver_typedef->get_type ());
2765+ auto interact_icon_comp = utility::re_component::find (game_object_transform , gui_driver_typedef->get_type ());
27552766
27562767 if (interact_icon_comp != nullptr ) {
27572768 auto interact_icon_object = sdk::call_object_func<REGameObject*>(interact_icon_comp, " get_attachTarget" , context, interact_icon_comp);
2769+ auto interact_icon_transform = utility::re_game_object::get_transform (interact_icon_object);
27582770
2759- if (interact_icon_object != nullptr && interact_icon_object-> transform != nullptr ) {
2771+ if (interact_icon_transform != nullptr ) {
27602772 // call get_Position on the object
27612773 Vector4f interact_icon_position{};
2762- sdk::call_object_func<Vector4f*>(interact_icon_object-> transform , " get_Position" , &interact_icon_position, context, interact_icon_object-> transform );
2774+ sdk::call_object_func<Vector4f*>(interact_icon_transform , " get_Position" , &interact_icon_position, context, interact_icon_transform );
27632775
27642776 fix_2d_position (interact_icon_position);
27652777 }
@@ -2771,14 +2783,14 @@ bool VR::on_pre_gui_draw_element(REComponent* gui_element, void* primitive_conte
27712783 continue ;
27722784 }
27732785
2774- auto element_comp = utility::re_component::find (game_object-> transform , element_type->get_type ());
2786+ auto element_comp = utility::re_component::find (game_object_transform , element_type->get_type ());
27752787
27762788 if (element_comp == nullptr ) {
27772789 continue ;
27782790 }
27792791
2780- static auto get_parent_method = sdk::get_object_method (game_object-> transform , " get_Parent" );
2781- auto parent = get_parent_method->call <::RETransform*>(context, game_object-> transform );
2792+ static auto get_parent_method = sdk::get_object_method (game_object_transform , " get_Parent" );
2793+ auto parent = get_parent_method->call <::RETransform*>(context, game_object_transform );
27822794
27832795 if (parent != nullptr ) {
27842796 Vector4f offset{};
@@ -2851,7 +2863,7 @@ bool VR::on_pre_gui_draw_element(REComponent* gui_element, void* primitive_conte
28512863
28522864 // ... RE7
28532865#ifdef RE7
2854- auto world_pos_attach_comp = utility::re_component::find (game_object-> transform , ui_world_pos_attach_typedef->get_type ());
2866+ auto world_pos_attach_comp = utility::re_component::find (game_object_transform , ui_world_pos_attach_typedef->get_type ());
28552867
28562868 // Fix the world position of the gui element
28572869 if (world_pos_attach_comp != nullptr ) {
@@ -2884,11 +2896,11 @@ void VR::on_gui_draw_element(REComponent* gui_element, void* primitive_context)
28842896
28852897 auto game_object = utility::re_component::get_game_object (data->element );
28862898
2887- if (game_object != nullptr && game_object->transform != nullptr ) {
2888- // sdk::set_transform_position(game_object->transform, data->original_position);
2899+ auto game_object_transform = utility::re_game_object::get_transform (game_object);
28892900
2890- auto & gui_matrix = game_object->transform ->worldTransform ;
2891- gui_matrix[3 ] = data->original_position ;
2901+ if (game_object_transform != nullptr ) {
2902+ // sdk::set_transform_position(game_object_transform, data->original_position);
2903+ game_object_transform->worldTransform = data->original_world_matrix ;
28922904 }
28932905 }
28942906
0 commit comments