Godot Version
v4.2.2
Question
As the title suggests, I’ve discovered that tweens are able to freely reposition the children of containers. Furthermore, once the tween has finished repositioning the child control, the child can be freely repositioned using Control.position. What is happening to make this possible?
I was able to achieve this effect using the following code:
var tween: Tween = create_tween()
tween.tween_property(child_control, "position:y", 1000, 1.0)
I suspected that the tween might have been messing the the Control's parent node or top_level property, so I added the following tests:
print(child_node.get_parent())
print(child_node.top_level)
var tween: Tween = get_tree().create_tween()
tween.tween_property(child_node, "position:y", 1000, 1.0)
await tween.finished
print(child_node.get_parent())
print(child_node.top_level)
tween.kill()
print(child_node.get_parent())
print(child_node.top_level)
await get_tree().process_frame
print(child_node.get_parent())
print(child_node.top_level)
child_node.position = Vector2.ZERO
The results showed that the parent remained the same, and the top_level property remained false throughout each call. Furthermore, setting the child Control’s position to Vector2.ZERO reset the position to the local (0,0) (i.e. relative to the parent Container).
I have no idea what is going on here to allow this to happen, so if someone more knowledgeable than me on this could help me out, I would be really grateful.
Thanks!