Scripting Helpers is winding down operations and is now read-only. More info→
Ad
Log in to vote
0

Altering code to create a consistant "Boost" length?

Asked by
Edenojack 171
8 years ago

So in my game I have a check to see if the player is above, or looking in the direction of a boost pad (a wedge part), if they are, they are then sent flying in the direction the pad is facing. This works fine as long as the player has a high framerate, however I've been consistnantly seeing players with framerates of >30/20 who are overshooting the arc considerably. The way the Boost reduction works is tied to framerate, so this will give some players a huge advantage/disadvantage.

I have the following code:

local BoostStart
local BoostEnd
local Speed
local Boosted = false

local function Boost(Pad)
    if Pad.Name == "Boost" and Boosted == false then
        Boosted = true
        BoostStart = Pad.CFrame*CFrame.new(0,-Pad.Size.Y/2,-Pad.Size.Z/2)
        BoostEnd = Pad.CFrame*CFrame.new(0,Pad.Size.Y/2,Pad.Size.Z/2)
        Speed = 100
        if Pad:findFirstChild("Speed") then
            Speed = Pad.Speed.Value
        end
    end
end

which is called by:

local ray = Ray.new(humanoid.Torso.Position,Vector3.new(0,-5,0))
            local hit,pos = game.Workspace:FindPartOnRay(ray,LocalPlayer.Character)
            if hit then
            Boost(hit)
            end
            local ray = Ray.new(humanoid.Torso.Position,(humanoid.Torso.CFrame.lookVector)*3)
            local ignore = {LocalPlayer.Character; workspace.CurrentCamera}
            local hit,pos = game.Workspace:FindPartOnRayWithIgnoreList(ray,ignore)
            if hit then
            Boost(hit)
            end

            moveFunc(LocalPlayer, adjustedMoveValue, true)  
            local Herp = humanoid.Torso.Velocity:lerp(Vector3.new(humanoid.MoveDirection.X*(30),humanoid.Torso.Velocity.Y,humanoid.MoveDirection.Z*(30)),.1)
            if Boosted == true then
                BoostEnd=BoostEnd*CFrame.new(0,-.1,0)
                humanoid.Torso.Velocity = (BoostEnd.p-BoostStart.p).unit*Speed
                if BoostEnd.p.Y < BoostStart.p.Y then
                    Boosted = false
                end
            else
                humanoid.Torso.Velocity = Herp
            end         

This is within the ControlScript's master script, updating every frame, is there anything I can change here to create a consistant "arc" regardless of framerate, or to make it as close as possible? Many thanks!

Answer this question