I am making a horizontal obby game and I'm trying to make a moving platform that can reach more than 2 position points. However, as I tested and stand on the moving platform, I can't ride and I have to move manually.
I have added the BodyMovers and looked at the forums, and still... no luck.
Here's the footage: https://youtu.be/e4SSQVHDRz8
(Client:)
local map = script.obj.Value local mapController = require(game.ReplicatedStorage.MapController) local platformController = require(mapController.PlatformController) local platforms = map.platforms local routeData = platformController.newData(3, false, true, {platforms.p1, platforms.p2, platforms.p3, platforms.p4}) local newPlatform = platformController.takeEffect(map.platform) platformController.playData(routeData, newPlatform)
(Module:)
local module = {} function module.newData(duration, reverse, loop, route) local parsed = {} parsed = { Reversed = false; DurationEach = 1; Loop = false; Route = {}; } for i = 1, #route do local v = route[i] if v then parsed.Route[i] = {Orientation = v.Orientation; Position = v.Position} v.CanCollide = false end end if duration then parsed.DurationEach = duration end if reverse then parsed.Reversed = reverse end if loop then parsed.Loop = loop end return parsed end function module.takeEffect(oldObject) local new = oldObject:Clone() new.Anchored = false new.Parent = oldObject.Parent oldObject:Destroy() local bodyPosition = Instance.new("BodyPosition") bodyPosition.Name = "bp" bodyPosition.MaxForce = Vector3.new(4000, 500000000, 4000) bodyPosition.P = 10000 bodyPosition.Position = new.Position bodyPosition.Parent = new local bodyGyro = Instance.new("BodyGyro") bodyGyro.Name = "bg" bodyGyro.MaxTorque = Vector3.new(3999999947964416, 399999991808, 400000001507328) bodyGyro.MaxTorque = Vector3.new(4000, 500000000, 4000) bodyGyro.P = 3000 bodyGyro.D = 500 bodyGyro.CFrame = CFrame.new() bodyGyro.Parent = new return new end function module.playData(data, object) if object and typeof(data) == "table" then local motionDuration, boolReversed, tableRoute = data.DurationEach, data.Reversed, data.Route local tweenings = {} for i, v in ipairs(tableRoute) do local tweenInfo = TweenInfo.new(motionDuration, Enum.EasingStyle.Quint, Enum.EasingDirection.InOut, 0, false, 0) tweenings[i] = { OrientationTween = game:GetService("TweenService"):Create(object, tweenInfo, {Orientation = v.Orientation;}); PositionTween = game:GetService("TweenService"):Create(object.bp, tweenInfo, {Position = v.Position;}); } end coroutine.resume(coroutine.create(function() while wait() do for _, v in ipairs(tweenings) do v.PositionTween:Play() v.OrientationTween:Play() v.PositionTween.Completed:Wait() end end end)) end end return module