Skip to content

Commit b75e82f

Browse files
committed
Fix RemoteTransform2D causing skew to be lost
`set_skew()` seems to be the slowest, avoid calling it if possible.
1 parent 15ff450 commit b75e82f

File tree

1 file changed

+29
-35
lines changed

1 file changed

+29
-35
lines changed

scene/2d/remote_transform_2d.cpp

+29-35
Original file line numberDiff line numberDiff line change
@@ -60,51 +60,45 @@ void RemoteTransform2D::_update_remote() {
6060
return;
6161
}
6262

63-
if (!(update_remote_position || update_remote_rotation || update_remote_scale)) {
63+
int count = update_remote_position + update_remote_rotation + update_remote_scale;
64+
65+
if (count == 0) {
6466
return; // The transform data of the RemoteTransform2D is not used at all.
6567
}
6668

6769
//todo make faster
68-
if (use_global_coordinates) {
69-
if (update_remote_position && update_remote_rotation && update_remote_scale) {
70-
n->set_global_transform(get_global_transform());
71-
return;
72-
}
7370

74-
Transform2D n_trans = n->get_global_transform();
75-
Transform2D our_trans = get_global_transform();
71+
Transform2D n_trans = use_global_coordinates ? n->get_global_transform() : n->get_transform();
72+
Transform2D our_trans = use_global_coordinates ? get_global_transform() : get_transform();
7673

77-
// There are more steps in the operation of set_rotation, so avoid calling it.
78-
Transform2D trans = update_remote_rotation ? our_trans : n_trans;
79-
80-
if (update_remote_rotation ^ update_remote_position) {
81-
trans.set_origin(update_remote_position ? our_trans.get_origin() : n_trans.get_origin());
74+
if (count == 1) {
75+
if (update_remote_position) {
76+
n_trans.set_origin(our_trans.get_origin());
77+
} else if (update_remote_rotation) {
78+
n_trans.set_rotation(our_trans.get_rotation());
79+
} else if (update_remote_scale) {
80+
n_trans.set_scale(our_trans.get_scale());
8281
}
83-
if (update_remote_rotation ^ update_remote_scale) {
84-
trans.set_scale(update_remote_scale ? our_trans.get_scale() : n_trans.get_scale());
82+
} else if (count == 2) {
83+
if (update_remote_position) {
84+
n_trans.set_origin(our_trans.get_origin());
85+
if (update_remote_rotation) {
86+
n_trans.set_rotation(our_trans.get_rotation());
87+
} else if (update_remote_scale) {
88+
n_trans.set_scale(our_trans.get_scale());
89+
}
90+
} else {
91+
n_trans.set_rotation_and_scale(our_trans.get_rotation(), our_trans.get_scale());
8592
}
93+
} else if (count == 3) {
94+
n_trans.set_origin(our_trans.get_origin());
95+
n_trans.set_rotation_and_scale(our_trans.get_rotation(), our_trans.get_scale());
96+
}
8697

87-
n->set_global_transform(trans);
98+
if (use_global_coordinates) {
99+
n->set_global_transform(n_trans);
88100
} else {
89-
if (update_remote_position && update_remote_rotation && update_remote_scale) {
90-
n->set_transform(get_transform());
91-
return;
92-
}
93-
94-
Transform2D n_trans = n->get_transform();
95-
Transform2D our_trans = get_transform();
96-
97-
// There are more steps in the operation of set_rotation, so avoid calling it.
98-
Transform2D trans = update_remote_rotation ? our_trans : n_trans;
99-
100-
if (update_remote_rotation ^ update_remote_position) {
101-
trans.set_origin(update_remote_position ? our_trans.get_origin() : n_trans.get_origin());
102-
}
103-
if (update_remote_rotation ^ update_remote_scale) {
104-
trans.set_scale(update_remote_scale ? our_trans.get_scale() : n_trans.get_scale());
105-
}
106-
107-
n->set_transform(trans);
101+
n->set_transform(n_trans);
108102
}
109103
}
110104

0 commit comments

Comments
 (0)