My dash is working perfectly fine when I move straight or turn on the ground, but when I’m turning in the air, it speeds up significantly and I can’t figure out why. Here is a video and my code:
local plrs = game:GetService("Players")
local debris = game:GetService("Debris")
local cas = game:GetService("ContextActionService")
local rs = game:GetService("RunService")
local plr = plrs.LocalPlayer
local char = plr.Character or plr.CharacterAdded:Wait()
local params = OverlapParams.new()
params.FilterType = Enum.RaycastFilterType.Exclude
params.FilterDescendantsInstances = {char, workspace.TestingFolder}
local physics = {}
physics.vi = 80
physics.v = 10
physics.t = 0.6
physics.x = 0.5 * (physics.vi + physics.v) * physics.t
physics.a = (2 * (physics.x - (physics.vi * physics.t)))/(physics.t * physics.t)
local colorStart = Color3.new(0, 0.760784, 0.12549)
local colorEnd = Color3.new(0.568627, 0, 0)
cas:BindAction("Dash", function(name, inputState)
if inputState == Enum.UserInputState.Begin then
local humrp:Part = char:FindFirstChild("HumanoidRootPart")
if humrp and humrp:FindFirstChild("RootAttachment") then
local start = os.clock()
local watchlist = {}
local startParams = RaycastParams.new()
startParams.FilterDescendantsInstances = {char, workspace.TestingFolder}
local checkParams = RaycastParams.new()
checkParams.FilterDescendantsInstances = watchlist
checkParams.FilterType = Enum.RaycastFilterType.Include
local rootAttch = humrp.RootAttachment
local mover = Instance.new("LinearVelocity")
mover.Parent = char
mover.Attachment0 = rootAttch
mover.VelocityConstraintMode = Enum.VelocityConstraintMode.Line
mover.RelativeTo = Enum.ActuatorRelativeTo.World
mover.MaxForce = math.huge
while os.clock() - start < physics.t do
task.wait()
local time = os.clock() - start
local smallestDistance = math.huge
local slower = 1
local direction = (humrp.CFrame * humrp.CFrame.Rotation:Inverse() * CFrame.Angles(0, math.rad(humrp.Orientation.Y), 0)).LookVector
local scalar = physics.vi * slower + physics.a * time * slower
mover.LineDirection = direction
mover.LineVelocity = scalar
-- COLLISION CHECKING
if workspace:Raycast(humrp.Position, humrp.CFrame.LookVector * 2, startParams) then
mover.MaxForce = 1000
end
for i,v:Part in pairs(watchlist) do
if v:IsA("BasePart") then
for i = 0, math.pi * 2, (math.pi * 2)/360 do
local ray = Ray.new(humrp.Position, (CFrame.new(humrp.Position) * CFrame.Angles(0,i,0)).LookVector * 8)
local cast = workspace:Raycast(ray.Origin, ray.Direction, checkParams)
if cast then
if cast.Distance < smallestDistance then
smallestDistance = cast.Distance
end
end
end
end
end
if smallestDistance < 4 then
slower = math.clamp(smallestDistance/4, 0.2, 1)
end
local radiusCheck = Instance.new("Part")
radiusCheck.Shape = Enum.PartType.Ball
radiusCheck.Anchored = true
radiusCheck.CanCollide = false
radiusCheck.Transparency = 0.95
radiusCheck.Size = Vector3.new(4,4,4)
radiusCheck.Color = colorStart
local futureTime = math.clamp(time + 0.2, 0, physics.t)
local futurePos = (physics.vi * futureTime + 0.5 * physics.a * futureTime * futureTime)
radiusCheck.CFrame = (humrp.CFrame + direction * (8 - 8 * time/physics.t)) * humrp.CFrame.Rotation
local collisionCheck = workspace:GetPartsInPart(radiusCheck, params)
if #collisionCheck ~= 0 then
radiusCheck.Color = colorEnd
for i,v in pairs(collisionCheck) do
if table.find(watchlist, v) == nil then
watchlist[#watchlist + 1] = v
checkParams.FilterDescendantsInstances = watchlist
end
end
end
radiusCheck.Parent = workspace.TestingFolder
debris:AddItem(radiusCheck, physics.t + 0.2)
end
mover:Destroy()
end
end
end, false, Enum.KeyCode.Q)
plr.CharacterAdded:Connect(function(charModel)
char = charModel
params.FilterDescendantsInstances = {char, workspace.TestingFolder}
end)
I tried changing the max force of the linear velocity but the problem still shows up at lower limits