Hi Eilios,
Okay so you say you have override the tick function as we disused way back when, excellent.
Now… I see the definition you put there. And in the next steps you state you are doing this next bit of logic in the sprint started function. Question… is that function called continuously or only once? If so, that may be the issue.
You may need to add a flag such as
bool isSprinting
float originalLength
That is set to true on your Sprint Start and false on Sprint End function. Sprint Start also should Set the originalLength to the current length of the Arm. (though watch out for double sprinting, it will override the originalLength of the user presses sprint and then presses it again)
Then in your Tick function move all your logic for InterpTo from the Sprint Start to the Tick function :). If isSprinting is true, interp to the 700.0f length. If isSprinting is false InterpTo the originalLength.
The problem is C++ is not like blueprints, Tick is the only function that gets fired every… well tick. Most of your button events (except for Axis mappings) are called only once and so your InterpTo logic is only being executed once.