function SpringObject.ObserveRenderStepped(H)return H:ObserveOnSignal(RunService.RenderStepped)end function SpringObject.ObserveVelocityOnRenderStepped(H)return H:ObserveVelocityOnSignal(RunService.RenderStepped)end function SpringObject.ObserveVelocityOnSignal(G,H)return Observable.new(function(n)local Q=Maid.new()local O,Y=StepUtils.bindToSignal(H,function()local H=SpringUtils.animating(G._currentSpring)if H then n:Fire(SpringUtils.fromLinearIfNeeded(G._currentSpring.Velocity))else n:Fire(SpringUtils.fromLinearIfNeeded(0*G._currentSpring.Velocity))end return H end)Q:GiveTask(Y)Q:GiveTask(G.Changed:Connect(O))O()return Q end)end
--[=[
	Observes the spring animating
	@return Observable<T>
]=]
function SpringObject:ObserveRenderStepped()
	return self:ObserveOnSignal(RunService.RenderStepped)
end

function SpringObject:ObserveVelocityOnRenderStepped()
	return self:ObserveVelocityOnSignal(RunService.RenderStepped)
end

function SpringObject:ObserveVelocityOnSignal(signal)
	return Observable.new(function(sub)
		local maid = Maid.new()

		local startAnimate, stopAnimate = StepUtils.bindToSignal(signal, function()
			local animating = SpringUtils.animating(self._currentSpring)
			if animating then
				sub:Fire(SpringUtils.fromLinearIfNeeded(self._currentSpring.Velocity))
			else
				sub:Fire(SpringUtils.fromLinearIfNeeded(0 * self._currentSpring.Velocity))
			end
			return animating
		end)

		maid:GiveTask(stopAnimate)
		maid:GiveTask(self.Changed:Connect(startAnimate))
		startAnimate()

		return maid
	end)
end
