Untitled

 avatar
unknown
lua
a month ago
2.8 kB
6
Indexable
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