Hi,
I made a LocalScript that allows the player to sprint by holding the Shift key and walk again when releasing it.
It’s a simple functionality, but I’d like to know how I can improve my code.
Are there any more efficient approaches, cleaner structures, or best practices I should consider?
Thanks in advance for your feedback!
My code:
--------------------------------------------
-- //: Variables
local ts = game:GetService("TweenService")
local tweenDuration = 1
local plr = game:GetService("Players").LocalPlayer
local char = plr.Character or plr.CharacterAdded:Wait()
local hum = char:WaitForChild("Humanoid")
local animator = hum:FindFirstChild("Animator")
local uis = game:GetService("UserInputService")
local runKey = Enum.KeyCode.LeftShift
local runningSpeed = 20
local walkSpeed = 16
local currentCam = workspace.CurrentCamera
local zoomOutValue = 90
local normalZoomValue = 70
local runAnim = game:GetService("ReplicatedStorage").Assets.Animations.RunAnimation
local track = animator:LoadAnimation(runAnim)
local holdingW = false -- Tracks if the player is holding the 'W' key; ensure running only starts when moving forward.
--------------------------------------------
--------------------------------------------
-- //: Functions
local function zoomOut()
ts:Create(currentCam, TweenInfo.new(tweenDuration), {FieldOfView = zoomOutValue}):Play()
end
local function zoomNormal()
ts:Create(currentCam, TweenInfo.new(tweenDuration), {FieldOfView = normalZoomValue}):Play()
end
local function startRunning()
zoomOut()
hum.WalkSpeed = runningSpeed
track:Play()
end
local function startWalking()
zoomNormal()
hum.WalkSpeed = walkSpeed
track:Stop()
end
-- When you hold the W key:
uis.InputBegan:Connect(function(input, gameProcessed)
if gameProcessed then return end
if input.KeyCode ~= Enum.KeyCode.W then return end
holdingW = true
end)
-- When you release the W key:
uis.InputEnded:Connect(function(input, gameProcessed)
if gameProcessed then return end
if input.KeyCode ~= Enum.KeyCode.W then return end
holdingW = false
startWalking()
end)
--------------------------------------------
--------------------------------------------
-- //: Main Function
-- If you hold shift, you run:
uis.InputBegan:Connect(function(input, gameProcessed)
if gameProcessed then return end
if input.KeyCode ~= runKey then return end
if holdingW == false then return end
startRunning()
end)
-- If you release shift, you walk:
uis.InputEnded:Connect(function(input, gameProcessed)
if gameProcessed then return end
if input.KeyCode ~= runKey then return end
startWalking()
end)
--------------------------------------------
Video: