I'm trying to put a spring on my character body but It keeps rotating farther than I wanted.
How would I put a limit on the rotation?
--This is the Spring Module -- Constants local ITERATIONS = 8 -- Module local SPRING = {} -- Functions function SPRING.create(self, mass, force, damping, speed) local spring = { Target = Vector3.new(); Position = Vector3.new(); Velocity = Vector3.new(); Mass = mass or 5; Force = force or 50; Damping = damping or 4; Speed = speed or 4; } function spring.shove(self, force) local x, y, z = force.X, force.Y, force.Z if x ~= x or x == math.huge or x == -math.huge then x = 0 end if y ~= y or y == math.huge or y == -math.huge then y = 0 end if z ~= z or z == math.huge or z == -math.huge then z = 0 end self.Velocity = self.Velocity + Vector3.new(x, y, z) end function spring.update(self, dt) local scaledDeltaTime = math.min(dt,1) * self.Speed / ITERATIONS for i = 1, ITERATIONS do local force = self.Target - self.Position local acceleration = (force * self.Force) / self.Mass acceleration = acceleration - self.Velocity * self.Damping self.Velocity = self.Velocity + acceleration * scaledDeltaTime self.Position = self.Position + self.Velocity * scaledDeltaTime end return self.Position end return spring end -- Return return SPRING
-- This is a localscript inside the character scripts local Player = game.Players.LocalPlayer local Character = Player.Character local spring = require(game.ReplicatedStorage.spring) local mySpring = spring.create() local Mouse = Player:GetMouse() local TurnLimit = 20 local random = Random.new() game:GetService("RunService").RenderStepped:Connect(function(deltaTime) local mouseDelta = game:GetService("UserInputService"):GetMouseDelta() print(Character.UpperTorso.Waist.C0.ToAxisAngle(Character.UpperTorso.Waist.C0)) mySpring:shove(Vector3.new(mouseDelta.x / 500,mouseDelta.y / 200, 0)) local movement = mySpring:update(deltaTime) Character.UpperTorso.Waist.C0 = Character.UpperTorso.Waist.C0 * CFrame.Angles(0,-movement.x,0) end)