Skip to content

Commit 9e6ee9c

Browse files
committed
Merge pull request godotengine#102223 from MajorMcDoom/remote-transform-fix
Fix some global-space bugs in `RemoteTransform3D._update_remote` and add some optimizations
2 parents f4e929e + 7ab9fd4 commit 9e6ee9c

File tree

1 file changed

+31
-39
lines changed

1 file changed

+31
-39
lines changed

scene/3d/remote_transform_3d.cpp

+31-39
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)