Raycast Suspension Flings

The title just says it all:)

The code

local runService = game:GetService("RunService")

local vehicle = script.Parent
local chassis = vehicle.Chassis

local platform = chassis.Platform

local wheelRadius = 0.5
local suspensionDistanceConstant = 1
local springConstant = 300
local damperConstant = 5000

local rayParameters = RaycastParams.new()
rayParameters.FilterDescendantsInstances = {vehicle}
rayParameters.FilterType = Enum.RaycastFilterType.Blacklist

local vehicleFloats = {}

local updateSprings = function(spring, delta)
    if not spring then return end
    
    local springTable = vehicleFloats[spring]
        
    if not springTable then
        springTable = {}
        springTable.currentSuspensionDistance = 0
        springTable.prevousSuspensionDistance = 0
        springTable.springVelocity = 0
        springTable.springForce = 0
        springTable.damperForce = 0
    end
    
    local currentSuspension = springTable.currentSuspensionDistance
    local prevousSuspensionDistance = springTable.prevousSuspensionDistance
    local springVelocity = springTable.springVelocity
    local springForce = springTable.springForce
    local damperForce = springTable.damperForce
    
    local ray = workspace:Raycast(spring.WorldPosition, Vector3.new(0, -1000, 0), rayParameters)

    if ray then
        local distance = (ray.Instance.Position - spring.WorldPosition).Magnitude

        prevousSuspensionDistance = currentSuspension
        currentSuspension = suspensionDistanceConstant - (distance - wheelRadius)
        springVelocity = (currentSuspension - prevousSuspensionDistance) / delta
        springForce = springConstant * currentSuspension
        damperForce = damperConstant * springVelocity
        
        local force = (springForce + damperForce)

        print(force)
        spring.Force.Force = Vector3.new(0, force, 0)
    end
end

local getSprings = function(delta)
    for _, spring in pairs(platform:GetChildren()) do
        
        if string.match(spring.Name, "Spring") then
            updateSprings(spring, delta)
        end
    end
end
runService.Heartbeat:Connect(getSprings)

No, it really doesn’t…

What is the problem?

Could you provide a video?