@@ -51,58 +51,50 @@ void RemoteTransform3D::_update_remote() {
5151 return ;
5252 }
5353
54- Node3D *n = Object::cast_to<Node3D>(ObjectDB::get_instance (cache));
55- if (!n ) {
54+ Node3D *target_node = Object::cast_to<Node3D>(ObjectDB::get_instance (cache));
55+ if (!target_node ) {
5656 return ;
5757 }
5858
59- if (!n ->is_inside_tree ()) {
59+ if (!target_node ->is_inside_tree ()) {
6060 return ;
6161 }
6262
63- // todo make faster
64- if (use_global_coordinates) {
65- if (update_remote_position && update_remote_rotation && update_remote_scale) {
66- n->set_global_transform (get_global_transform ());
67- } else {
68- Transform3D our_trans = get_global_transform ();
69-
70- if (update_remote_rotation) {
71- n->set_rotation (our_trans.basis .get_euler_normalized (EulerOrder (n->get_rotation_order ())));
72- }
73-
74- if (update_remote_scale) {
75- n->set_scale (our_trans.basis .get_scale ());
76- }
77-
78- if (update_remote_position) {
79- Transform3D n_trans = n->get_global_transform ();
63+ Transform3D our_trans = use_global_coordinates ? get_global_transform () : get_transform ();
8064
81- n_trans.set_origin (our_trans.get_origin ());
82- n->set_global_transform (n_trans);
83- }
65+ if (update_remote_position && update_remote_rotation && update_remote_scale) {
66+ if (use_global_coordinates) {
67+ target_node->set_global_transform (our_trans);
68+ } else {
69+ target_node->set_transform (our_trans);
8470 }
85-
8671 } else {
87- if (update_remote_position && update_remote_rotation && update_remote_scale) {
88- n->set_transform (get_transform ());
89- } else {
90- Transform3D our_trans = get_transform ();
91-
92- if (update_remote_rotation) {
93- n->set_rotation (our_trans.basis .get_euler_normalized (EulerOrder (n->get_rotation_order ())));
72+ Transform3D target_trans = use_global_coordinates ? target_node->get_global_transform () : target_node->get_transform ();
73+
74+ if (update_remote_rotation && update_remote_scale) {
75+ target_trans.basis = our_trans.basis ;
76+ } else if (update_remote_rotation) {
77+ for (int i = 0 ; i < 3 ; i++) {
78+ Vector3 our_col = our_trans.basis .get_column (i);
79+ Vector3 target_col = target_trans.basis .get_column (i);
80+ target_trans.basis .set_column (i, our_col.normalized () * target_col.length ());
9481 }
95-
96- if (update_remote_scale) {
97- n->set_scale (our_trans.basis .get_scale ());
82+ } else if (update_remote_scale) {
83+ for (int i = 0 ; i < 3 ; i++) {
84+ Vector3 our_col = our_trans.basis .get_column (i);
85+ Vector3 target_col = target_trans.basis .get_column (i);
86+ target_trans.basis .set_column (i, target_col.normalized () * our_col.length ());
9887 }
88+ }
9989
100- if (update_remote_position) {
101- Transform3D n_trans = n->get_transform ();
90+ if (update_remote_position) {
91+ target_trans.origin = our_trans.origin ;
92+ }
10293
103- n_trans.set_origin (our_trans.get_origin ());
104- n->set_transform (n_trans);
105- }
94+ if (use_global_coordinates) {
95+ target_node->set_global_transform (target_trans);
96+ } else {
97+ target_node->set_transform (target_trans);
10698 }
10799 }
108100}
0 commit comments