I am trying to make a rotational recoil system but my code currently doesn’t work as it is too fast
how do I make a better torsion recoil
RunService = game:GetService("RunService")
spring = {
Target = script.Parent.Position,
OriginalOrientation = script.Parent.Orientation,
Position = script.Parent.Position,
Orientation = script.Parent.Orientation,
Velocity = Vector3.new(0,0,0),
AngularVelocity = Vector3.new(0,0,0),
Mass = 10,
VectorForce = 50,
AngularForce = 1,
Damping = 4,
Speed = 5
}
ITERATIONS = 8
function shoveSpring(force,orient)
spring.Velocity = spring.Velocity + force
spring.AngularVelocity = spring.AngularVelocity + orient * 10000
end
function updateSpring(dt)
local scaledDeltaTime = math.min(dt,1) * spring.Speed / ITERATIONS
for i = 1,ITERATIONS do
local distance = spring.Target - spring.Position -- get the inverse distance from orgin
local acceleration = (distance * spring.VectorForce) / spring.Mass -- hookes law and F = ma
acceleration = acceleration - spring.Velocity * spring.Damping --dampening this to prevent oscilation
spring.Velocity = spring.Velocity + acceleration * scaledDeltaTime -- use acceleration to factor in velocity
spring.Position = spring.Position + spring.Velocity * scaledDeltaTime -- use velocity to determine position
local angle = spring.OriginalOrientation - spring.Orientation -- inverse angle from orgin
local angularForce = (angle * spring.AngularForce) -- hookes law
local angularAcceleration = angularForce / spring.Mass -- spring.AngularVelocity * spring.Damping
spring.AngularVelocity = spring.AngularVelocity + angularAcceleration * scaledDeltaTime
spring.Orientation = spring.OriginalOrientation + spring.AngularVelocity * scaledDeltaTime
print(angle,angularAcceleration)
end
return (CFrame.new(spring.Position) * CFrame.fromEulerAnglesYXZ(math.rad(spring.Orientation.X),math.rad(spring.Orientation.Y),math.rad(spring.Orientation.Z)))
end
RunService.Heartbeat:Connect(function(dt)
local coordinateframe = updateSpring(dt)
script.Parent.CFrame = coordinateframe
end)
wait(2)
shoveSpring(Vector3.new(0,0,0),Vector3.new(3,3,3))
I took the code from blackshibe but this still isn’t working.