Untitled
local RunService = game:GetService("RunService") local PlayersService = game:GetService("Players") local driverSeat = script.Parent.Parent.DriverSeat local SequenceTime = 10 local distance = 1000 local currentSequenceTime = 0 local sequenceCompleted = true local forceEndSequence = false local goingBackwardS = false local function getSequencePoint(t: number) return 1 - ((math.cos(t * math.pi * 2) / 2) + 0.5) end local modelOriginalCFrame: CFrame = nil local previousSequenceTime = 0 local goodValues = false local hitboxObject = script.Parent.Parent.HitboxObject local function runServiceTask(deltaTime: number) if not sequenceCompleted then local sequenceValue = getSequencePoint(currentSequenceTime / SequenceTime) driverSeat.idleSound.PlaybackSpeed = 1 + (sequenceValue * 1.25) --driverSeat.idleSound.Volume = if currentSequenceTime == SequenceTime then sequenceCompleted = true return end local character = PlayersService.LocalPlayer.Character if character ~= nil and character.HumanoidRootPart ~= nil and goodValues then local performCharacterMove = false for _,v in workspace:GetPartsInPart(hitboxObject) do if (v == character.HumanoidRootPart) then performCharacterMove = true break end end if performCharacterMove and not (character.Humanoid :: Humanoid).Sit then local zOffset = distance * (getSequencePoint((currentSequenceTime / SequenceTime) / 2) - getSequencePoint((previousSequenceTime / SequenceTime) / 2)) * (goingBackwardS and -1 or 1) --print(xOffset) local characterPivot = character:GetPivot() --local pivotOffset = characterPivot:ToWorldSpace(CFrame.new(xOffset, 0, 0)) --print(pivotOffset.Position) --local pivotOffseted = characterPivot * pivotOffset --print(pivotOffseted) character:PivotTo(characterPivot + Vector3.new(0, 0, zOffset)) end end previousSequenceTime = currentSequenceTime currentSequenceTime += deltaTime currentSequenceTime = math.clamp(currentSequenceTime, 0, SequenceTime) script.Parent.Parent:PivotTo(modelOriginalCFrame * CFrame.new(distance * getSequencePoint((currentSequenceTime / SequenceTime) / 2) * (goingBackwardS and -1 or 1), 0, 0)) --for i,v in partsToMove do -- v.CFrame = partsToMoveOriginalPositions[i] * CFrame.new(distance * getSequencePoint((currentSequenceTime / SequenceTime) / 2), 0, 0) --end --print(sequenceValue) --print(currentSequenceTime) goodValues = true end end RunService.PreSimulation:Connect(runServiceTask) script.Parent.AnimateTrain.OnClientEvent:Connect(function(goingBackward: boolean) modelOriginalCFrame = script.Parent.Parent:GetPivot() goingBackwardS = goingBackward currentSequenceTime = 0 sequenceCompleted = false goodValues = false end)
Leave a Comment