Repository: godot
Issue: RemoteTransform flips target node upside-down if update_rotation is false
Labels: discussion,needs testing,topic:2d

### Tested versions

Reproducible in:
- v3.0.stable.official 
- v3.5.3.stable.official [6c814135b]
- v4.0.stable.official [92bee43ad]
- v4.2.1.stable.official [b09f793f5]
- v4.2.2.stable.official [15073afe3]
- v4.3.dev6.official [89850d553] 
  - Has the RemoteTransform2D behaving like the RemoteTransform3D, in that it doesn't toggle the target node's scale.y between 1 and -1 when the scale.x is updated, but just keeps it at -1
  - Crashes when loading the MRP

Not reproducible in: 
- v2.1.6-stable 
  - Last version I could download before update_rotation was first added. I couldn't download versions v3.0-alpha1 to v3.0-rc3 from [https://godotengine.org/download/archive/](https://godotengine.org/download/archive/)
  - The target node just flips in the x axis as expected

### System information

Godot v4.2.1.stable - Windows 10.0.22631 - GLES3 (Compatibility) - Intel(R) HD Graphics Gen11 () - Intel(R) Celeron(R) N4500 @ 1.10GHz (2 Threads)

### Issue description

A node being controlled by a RemoteTransform node will have its y scale set to -1, if
  - The RemoteTransform has a negative scale value on only one axis (eg., global_scale.x < 0 and global_scale.y > 0), **AND**
  - The RemoteTransform is NOT updating rotation (update_rotation = false)

![screenshot_transform2D_target_node_is_flipped](https://github.com/godotengine/godot/assets/143042196/4d3afcdd-0885-4aa8-af42-8deaebebffec)

![screenshot_transform_2D_target_node_is_not_flipped](https://github.com/godotengine/godot/assets/143042196/aa53e67a-dbfb-47e0-b907-0d77ec8de5b2)


This issue occurs with both RemoteTransform2D and RemoteTransform3D nodes. Both of them are solved by switching off update_rotation.

With the RemoteTransform2D, though, the targeted node's y scale will update to either 1 or -1 in a weird way. If I toggle the scale.x value on the RemoteTransform2D from 1, -1, 1, -1, the targeted node's scale.y will be 1, -1 -1, 1.

It's like it checks if the new value is negative or positive, and if it's the same sign (positive or negative) as the current value, it toggles, and if it's not, it is the opposite of the sign of the new value.

When the scale values are printed in the console, they are sometimes inaccurate and better describe the values just before they were last updated.
![screenshot_target_node_flipped_but_scale_is_printed_as_1_1](https://github.com/godotengine/godot/assets/143042196/2ebbd177-4ccb-4aba-aa45-eb73cd9b1518)

The scale value on the RemoteTransform can be its own or inherited from a parent.



### Steps to reproduce

**From scratch**

1. Create a new 2D scene
2. Create a Sprite2D node 
3. Set its texture to the icon.svg file
4. Create a RemoteTransform2D node
5. Disable update_position in the Inspector
6. Set the Sprite2D as the RemoteTransform2D's remote_path
7. Change the RemoteTransform2D's scale.x to a negative value
8. The Sprite should flip upside down

**With minimal reproduction project**

1. Import the minimal reproduction project .zip as a new project
2. Run the project or the remote_transform_3D_bug.tscn scene
3. Press the Spacebar to toggle the parent node's scale.x to 1 or -1. In the 2D scene, with the RemoteTransform2D's update_rotation disabled, it won't actually change any values until the Spacebar has been pressed twice
4. The broom should flip upside down
5. In the editor (keep the game window running), select the RemoteTransform2D or RemoteTransform3D
6. Set the RemoteTransform's update_rotation to true
7. The broom should now no longer flip upside down when the scale changes

### Minimal reproduction project (MRP)

Completely unnecessary but could be convenient.

[RemoteTransformMRP.zip](https://github.com/godotengine/godot/files/15208272/RemoteTransformMRP.zip)

Image Attribution:
gBot_complete.png, from [https://docs.godotengine.org/en/stable/tutorials/animation/2d_skeletons.html](https://docs.godotengine.org/en/stable/tutorials/animation/2d_skeletons.html) © Copyright 2014-present Juan Linietsky, Ariel Manzur and the Godot community (CC BY 3.0).