1
0
Fork 0

Compare commits

..

2 Commits

Author SHA1 Message Date
风青山 31ed4264ff
Merge b75e82f81b into 15ff450680 2025-02-28 09:00:03 +00:00
风青山 b75e82f81b
Fix RemoteTransform2D causing skew to be lost
`set_skew()` seems to be the slowest, avoid calling it if possible.
2025-02-28 16:59:03 +08:00
1 changed files with 24 additions and 44 deletions

View File

@ -60,64 +60,44 @@ void RemoteTransform2D::_update_remote() {
return;
}
if (!(update_remote_position || update_remote_rotation || update_remote_scale)) {
int count = update_remote_position + update_remote_rotation + update_remote_scale;
if (count == 0) {
return; // The transform data of the RemoteTransform2D is not used at all.
}
//todo make faster
if (use_global_coordinates) {
Transform2D n_trans = n->get_global_transform();
Transform2D our_trans = get_global_transform();
if (update_remote_position && update_remote_rotation && update_remote_scale) {
our_trans.set_skew(n_trans.get_skew()); // Skew needs to be preserved.
n->set_global_transform(our_trans);
return;
}
if (update_remote_rotation && update_remote_scale) {
n_trans.set_rotation_and_scale(our_trans.get_rotation(), our_trans.get_scale());
n->set_global_transform(n_trans);
return;
}
Transform2D n_trans = use_global_coordinates ? n->get_global_transform() : n->get_transform();
Transform2D our_trans = use_global_coordinates ? get_global_transform() : get_transform();
if (count == 1) {
if (update_remote_position) {
n_trans.set_origin(our_trans.get_origin());
}
if (update_remote_rotation) {
} else if (update_remote_rotation) {
n_trans.set_rotation(our_trans.get_rotation());
}
if (update_remote_scale) {
} else if (update_remote_scale) {
n_trans.set_scale(our_trans.get_scale());
}
} else if (count == 2) {
if (update_remote_position) {
n_trans.set_origin(our_trans.get_origin());
if (update_remote_rotation) {
n_trans.set_rotation(our_trans.get_rotation());
} else if (update_remote_scale) {
n_trans.set_scale(our_trans.get_scale());
}
} else {
n_trans.set_rotation_and_scale(our_trans.get_rotation(), our_trans.get_scale());
}
} else if (count == 3) {
n_trans.set_origin(our_trans.get_origin());
n_trans.set_rotation_and_scale(our_trans.get_rotation(), our_trans.get_scale());
}
if (use_global_coordinates) {
n->set_global_transform(n_trans);
} else {
Transform2D n_trans = n->get_transform();
Transform2D our_trans = get_transform();
if (update_remote_position && update_remote_rotation && update_remote_scale) {
our_trans.set_skew(n_trans.get_skew()); // Skew needs to be preserved.
n->set_transform(our_trans);
return;
}
if (update_remote_rotation && update_remote_scale) {
n_trans.set_rotation_and_scale(our_trans.get_rotation(), our_trans.get_scale());
n->set_transform(n_trans);
return;
}
if (update_remote_position) {
n_trans.set_origin(our_trans.get_origin());
}
if (update_remote_rotation) {
n_trans.set_rotation(our_trans.get_rotation());
}
if (update_remote_scale) {
n_trans.set_scale(our_trans.get_scale());
}
n->set_transform(n_trans);
}
}