1
0
Fork 0

Compare commits

...

2 Commits

Author SHA1 Message Date
风青山 21a720db51
Merge 8dc6984d12 into 15ff450680 2025-02-28 01:40:49 +00:00
风青山 8dc6984d12
Fix RemoteTransform2D causing skew to be lost 2025-02-28 09:40:19 +08:00
1 changed files with 41 additions and 27 deletions

View File

@ -66,45 +66,59 @@ void RemoteTransform2D::_update_remote() {
//todo make faster
if (use_global_coordinates) {
if (update_remote_position && update_remote_rotation && update_remote_scale) {
n->set_global_transform(get_global_transform());
return;
}
Transform2D n_trans = n->get_global_transform();
Transform2D our_trans = get_global_transform();
// There are more steps in the operation of set_rotation, so avoid calling it.
Transform2D trans = update_remote_rotation ? our_trans : n_trans;
if (update_remote_rotation ^ update_remote_position) {
trans.set_origin(update_remote_position ? our_trans.get_origin() : n_trans.get_origin());
}
if (update_remote_rotation ^ update_remote_scale) {
trans.set_scale(update_remote_scale ? our_trans.get_scale() : n_trans.get_scale());
}
n->set_global_transform(trans);
} else {
if (update_remote_position && update_remote_rotation && update_remote_scale) {
n->set_transform(get_transform());
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;
}
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_global_transform(n_trans);
} else {
Transform2D n_trans = n->get_transform();
Transform2D our_trans = get_transform();
// There are more steps in the operation of set_rotation, so avoid calling it.
Transform2D trans = update_remote_rotation ? our_trans : n_trans;
if (update_remote_rotation ^ update_remote_position) {
trans.set_origin(update_remote_position ? our_trans.get_origin() : n_trans.get_origin());
}
if (update_remote_rotation ^ update_remote_scale) {
trans.set_scale(update_remote_scale ? our_trans.get_scale() : n_trans.get_scale());
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;
}
n->set_transform(trans);
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);
}
}