Hm, skeleton's themselves don't really have a timescale. The animation state and its track entries do. The skeleton is oblivious to the time scale on the animation state, so if Skeleton::update(deltaTime)
is called, it just gets added to an internal accumulator, which is then used by physics constraints to do their thing.
To complicate matters more, individual track entries in the animation state can have individual time scales (which get multiplied with the time scale on the animation state, it's time scales all the way down...). So, depending on which and how many animations you mix with different time scales, there might not be a single time scale applicable to the physics constraints that matches whatever the setup of the animation state and track entries is.
Long story short: if you apply time scale to the animation state or individual track entries and need physics constraints to match that time scale, you'll have to manually apply that time scale when calling Skeleton::update()
on the C++ side.
In GDScript, you have to set the SpineSprite update mode to manual and override the SpineSprite._process()
or SpineSprite._physics_process()
methods. In those, you'd manually call SpineSprite::update_skeleton(delta * time_scale)
to apply the time scale to your physics constraints. See also:
https://en.esotericsoftware.com/spine-godot#Setting-the-Update-Mode