@@ -51,58 +51,50 @@ void RemoteTransform3D::_update_remote() {
51
51
return ;
52
52
}
53
53
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 ) {
56
56
return ;
57
57
}
58
58
59
- if (!n ->is_inside_tree ()) {
59
+ if (!target_node ->is_inside_tree ()) {
60
60
return ;
61
61
}
62
62
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 ();
80
64
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);
84
70
}
85
-
86
71
} 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 ());
94
81
}
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 ());
98
87
}
88
+ }
99
89
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
+ }
102
93
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);
106
98
}
107
99
}
108
100
}
0 commit comments