Stop sending updates to the character. Figure out how to pause or scale the updates leading up to the point you want to pause.
If I were writing a game where I stopped the action, I would probably slow down leading up to the stopping point, and then speed out of it. In that case I would use easing curves. There is plenty of easing code out there.
The general technique goes like this: your hero's strike animation is 0.75 seconds long and you want to stop the animation at 0.50 to show your effect and then speed back out. Instead of handing the updates directly to the animation, send them through the easing function and that supplies your updates you send to your animation.
From [0.0 -> 0.5] seconds, I would use an easing equation to slow down the updates. Something like ease_out_quadratic.
For X number of seconds, I would pause the animation.
From [0.5->0.75] I would use ease_in_quad to continue the animation.
The only real hitch there is that most easing functions return the time value and you want the delta. That simply means you need to keep track of the previous easing value (starting at zero) and subtract that from the newest value to get a delta to send to
Generally speaking, you're always using an easing equation to send updates to the animation, it's just that you are using a linear equation. Also, when you pause your animation, that's a constant update function that returns 0.0 for X seconds.
Which means that if you are clever, you should be able to write a queue of easing functions that control your character animations:
[ 0.5 ease_out_quad] [ X return 0][0.25 ease_in_quad] // slowdown / pause animation
[∞ Linear: return updateTick] // normal animation
And if that all sounds too complicated, well, just stop the skeleton Node from getting updates...
https://github.com/EsotericSoftware/spi ... n.cpp#L121